Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IDL RAG Panel

语言版本:中文 | English

IDL RAG Panel 是一个面向 ENVI/IDL 文档、代码和课程资料的本地优先 RAG 工作台。它把分散在本地的 PDF、Markdown、文本和 .pro / .idl 代码整理成可检索的知识库,并提供带引用的问答、检索调试、Agent 工具调用、.pro 文件生成、本地 IDL 运行和检索效果评测。

这个项目的重点不是做一个通用聊天界面,而是解决 ENVI/IDL 学习、实验和项目开发中常见的三个问题:资料难找、代码上下文难追踪、回答缺少可验证来源。

项目特色

特色 说明
ENVI/IDL 垂直场景 面向遥感、ENVI/IDL 学习资料、实验文档和 .pro / .idl 代码,而不是通用文档聊天。
本地优先 RAG 使用 SQLite、SQLite FTS5 和 LanceDB 构建本地知识库,不依赖外部数据库服务。
IDL 符号级分块 �� IDL 代码按 procedure/function 等符号边界分块,尽量保留代码语义上下文。
可追溯回答 回答中展示引用来源、检索策略、分数、行号范围和元数据,便于检查依据。
检索调试工作台 RetrievalLab 可对比不同检索策略,查看候选 chunk、score、metadata 和 raw JSON。
效果评测 支持本地 golden QA、策略对比、命中率、MRR、延迟和 LangSmith 相关评测配置。
代码辅助 Agent 模式支持符号搜索、上下文读取、调用关系分析和 .pro 文件生成。
GEE 数据获取 Chat 中可通过结构化表单从 Google Earth Engine 获取小范围数据,并保存为当前会话的本地 artifact。
本地 IDL 运行 对话中生成或保存的 .pro artifact 可由用户主动点击运行,后端通过 idlde.exe -batch 调用本机 IDL,并返回运行摘要、日志和输出图预览。

页面预览

对话与引用

对话页

��索测试

检索测试页

知识库与文档管理

知识库页

更多页面截图:

完整展示说明见 docs/project-showcase.md

核心能力

模块 能力
认证与用户 注册、登录、管理员用户管理、知识库和会话按用户隔离。
知识库 创建知识库,配置默认检索策略、top_k 和重排开关。
文档入库 上传文件、路径导入、SHA256 去重、失败重试、重建索引和状态跟踪。
IDL 分块 普通文本按段落分块,IDL 代码按 procedure/function 等符号边界分块。
混合检索 SQLite FTS5 关键词检索、LanceDB 向量检索、RRF 融合和可选重排。
对话问答 流式回答、引用展示、检索策略展示、Agent 模式、GEE 数据获取、.pro 文件生成、本地 IDL 运行和图片结果展示。
检索测试 对比策略,查看候选 chunk、分数、元数据、匹配���息和原始 JSON。
评测 本地 golden QA、策略对比、命中率、精确率、召回率、MRR 和延迟统计。
设置 模型服务、API Key、对话模型、向量模型、重排模型和 LangSmith 配置。

Agent 能力

Chat 中的 Agent 模式不是单纯把问题交给大模型生成回答,而是围绕当前知识库、IDL 代码结构和本地运行环境组织一个可验证的代码工作流。

能力 说明
知识库检索 根据用户问题检索当前选中的知识库,并把引用来源、chunk 分数和行号范围带回回答。
IDL 代码工具 支持符号搜索、上下文读取、调用方/被调用方分析、代码片段检查等工具调用,用于追踪 .pro / .idl 文件结构。
GEE 数据 artifact 用户可通过结构化参数从 GEE 获取小范围遥感数据,后端保存为当前会话 artifact,并可作为 IDL 输入数据。
.pro artifact 生成 Agent 可以基于检索资料、代码上下文和已选 GEE 数据生成 .pro 文件,并以 Chat artifact 形式保存、下载和继续运行。
本地 IDL 执行 用户点击“运行 IDL”后,后端为当前 artifact 生成独立 run 目录,暂存输入数据,并通过 idlde.exe -batch 执行完整 .pro 文件。
结果回传 执行完成后,Chat 会追加运行摘要、退出码、耗时、stdout/stderr 日志和 PNG/JPEG 等输出图预览。
安全边界 Agent 不会自主执行任意 shell 命令,也不能运行任意本地路径;v1 只运行当前登录用户拥有的 Chat .pro artifact。
flowchart LR
  Ask[用户问题 / 代码需求] --> Agent[Chat Agent]
  Agent --> Search[知识库检索]
  Agent --> Tools[IDL 代码工具]
  Ask --> GEE[GEE 数据获取]
  GEE --> Data[数据 artifact]
  Tools --> Symbol[符号搜索]
  Tools --> Context[上下文读取]
  Tools --> Calls[调用关系分析]
  Search --> Pro[生成 .pro artifact]
  Context --> Pro
  Calls --> Pro
  Data --> Pro
  Pro --> Click[用户点击运行 IDL]
  Click --> Stage[暂存输入数据]
  Stage --> Batch[idlde.exe -batch]
  Batch --> Result[运行摘要 / 日志 / 输出图预览]
Loading

这条链路适合做 ENVI/IDL 学习资料问答、代码上下文追踪、脚本生成、运行验证和效果图展示。运行产物保存在 data/generated/chat/**/runs/,属于本地运行数据,不应提交到 Git。

核心页面

页面 用途
概览页 查看知识库数量、文档状态、索引任务、worker 状态和 fallback embedding 提示。
知识库页 创建和管理知识库,配置默认策略、top_k 和重排设置。
文档页 上传或导入文档,查看入库状态、chunk 数量、解析器信息,执行重试和重建。
对话页 选择知识库提问,查看引用、检索策略、Agent 执行结果和生成文件。
检索测试页 对同一问题运行不同检索策略,检查候选 chunk、分数和元数据。
设置页 配置模型服务,测试连接,运行本地评测,查看评测报告。

工作流程

flowchart LR
  Source[本地文档与 IDL 代码] --> Ingest[解析与分块]
  Ingest --> FTS[SQLite FTS5]
  Ingest --> Vector[LanceDB 向量索引]
  User[用户问题] --> Retrieve[混合检索]
  FTS --> Retrieve
  Vector --> Retrieve
  Retrieve --> Ground[引用与上下文]
  Ground --> Answer[回答 / Agent / .pro 生成]
  Answer --> Run[用户触发本地 IDL 运行]
  Run --> UI[日志、图片预览与评测]
  Answer --> UI
Loading

技术架构

flowchart LR
  UI[React + Ant Design 前端] --> API[FastAPI 后端]
  API --> DB[(SQLite + SQLAlchemy)]
  API --> FTS[(SQLite FTS5)]
  API --> VEC[(LanceDB 向量索引)]
  API --> FS[本地运行文件]
  API --> IDL[idlde.exe -batch 本机 IDL]
  API --> LLM[OpenAI 兼容模型服务 / 向量模型]
Loading

完整架构说明见 ARCHITECTURE.mddocs/architecture.md

技术栈

层级 技术
后端 Python 3.12, FastAPI, Uvicorn, SQLAlchemy, Pydantic
存储 SQLite, SQLite FTS5, LanceDB, PyArrow
RAG 混合 RRF、可选重排、多查询、父子块检索、代码工具检索
模型接口 OpenAI 兼容对话模型 / 向量模型服务
前端 React 18, TypeScript, Vite, Ant Design 5, TanStack React Query
测试 pytest, ruff, 前端构建

适合与不适合

适合:

  • 本地 ENVI/IDL 资料整理和检索。
  • 实验室或小团队内部知识库验证。
  • 个人作品集和 RAG 工程能力展示。
  • 需要引用来源、检索调试和效果评测的 RAG 场景。
  • 希望保留本地数据控制权的私有知识库应用。

不适合直接作为:

  • 面向公网的大规模多租户 SaaS。
  • 海量文档集群检索系统。
  • 无需人工审查即可公开上传私有资料的托管平台。
  • 完全离线模型系统;当前仍依赖外部或本地 OpenAI 兼容模型服务提供生成和向量能力。

当前边界

  • 默认使用 SQLite,本地部署和小团队验证更方便;大规模并发需要进一步改造存储和任务队列。
  • 向量检索质量依赖实际配置的 embedding provider。
  • data/app.db 中的敏感字段会加密存储,但数据库文件本身仍属于本地运行数据。
  • GEE 对接第一版只支持结构化参数的小范围数据获取,不接受任意 Earth Engine Python/JavaScript 代码;下载数据保存为 data/generated/chat/**/gee/ 下的本地 artifact,不应提交到 Git。
  • 本地 IDL 运行只针对当前用户拥有的 Chat .pro artifact,由用户主动触发;后端生成 __idlrag_runner.pro 并通过 idlde.exe -batch 执行,运行日志和输出图保存在 data/generated/chat/**/runs/,不应提交到 Git。
  • 截图和展示材料使用公开合成数据,不包含私人学习文件、真实 API Key、GEE 凭据或本地数据库。

项目结构

idl-rag/
  backend/
    app/
      api/              # FastAPI 路由与依赖
      core/             # 配置、认证 token、密码与密钥工具
      db/               # SQLAlchemy 模型与 SQLite/FTS 初始化
      services/         # 入库、检索、向量、模型、Agent、评测服务
      main.py           # FastAPI 应用与索引 worker 生命周期
    tests/              # 后端测试与 golden eval 数据
    pyproject.toml

  frontend/
    src/
      api/              # API 客户端与类型
      pages/            # 概览、知识库、文档、对话、检索测试、设置
      styles/           # 应用级样式
      App.tsx
      main.tsx
    package.json

  docs/
    architecture.md
    configuration.md
    demo.md
    project-showcase.md
    security-and-data-control.md

  .env.example          # 公开配置模板,不包含真实密钥
  .gitignore            # 排除本地数据、密钥、缓存和构建产物

默认运行数据生成在 data/ 目录下。data/app.dbdata/indexes/data/logs/data/generated/data/parsed/ 和源文档都属于本地运行产物。

快速开始

1. 准备环境变量

Copy-Item .env.example .env

本地开发最重要的配置如下:

IDLRAG_AUTH_SECRET=replace-with-a-long-random-secret
IDLRAG_CORS_ORIGINS=http://127.0.0.1:5173,http://localhost:5173
IDLRAG_IDL_EXECUTABLE=idlde
VITE_API_BASE_URL=http://127.0.0.1:8000/api

Windows IDL 8.8 建议把 IDLRAG_IDL_EXECUTABLE 设置为 Workbench 启动器,例如 D:\envi5.6\ENVI56\IDL88\bin\bin.x86_64\idlde.exe。后端会使用 idlde.exe -batch <runner.pro> 执行,不使用 idl.exe -e

如果需要使用 GEE 数据获取,需要先在 Google Cloud 项目中启用 Earth Engine API,并配置项目 ID 与认证方式。本地开发推荐 ADC 浏览器授权:

uv run --project backend python -c "import ee; ee.Authenticate(auth_mode='localhost')"

然后在 .env 中启用:

IDLRAG_GEE_ENABLED=true
IDLRAG_GEE_AUTH_MODE=adc
IDLRAG_GEE_PROJECT=your-google-cloud-project-id

如果未启用 Earth Engine API,初始化会提示该项目尚未使用或未启用 earthengine.googleapis.com。完整配置和 smoke test 见 docs/configuration.md

2. 安装后端依赖

uv sync --project backend

3. 启动后端

uv run --project backend uvicorn app.main:app --app-dir backend --reload

默认后端地址:

http://127.0.0.1:8000

4. 安装前端依赖

npm install --prefix frontend

5. 启动前端

npm run dev --prefix frontend

默认前端地址:

http://127.0.0.1:5173

本地演示路径

  1. 打开前端页面并注册或登录。
  2. 进入设置页面,配置 OpenAI 兼容模型服务、对话模型和向量模型。
  3. 创建知识库。
  4. 上传或导入公开、脱敏的 ENVI/IDL 文档。
  5. 等待文档状态变为 ready
  6. 进入对话页面,选择知识库并提问。
  7. 可选:配置 GEE 后,点击“获取 GEE 数据”,下载小范围遥感数据并作为 IDL 输入 artifact。
  8. 开启 .pro 文件生成,让 Agent 基于检索资料和已选输入数据生成 IDL 脚本。
  9. 点击“运行 IDL”查看执行摘要、stdout/stderr 日志和输出图片预览。
  10. 查看回答中的引用来源、检索策略和行号范围。
  11. 进入检索测试页面,对比不同检索策略的候选结果。
  12. 在设置页面查看本地评测报告。

更完整的演示步骤见 docs/demo.md

配置与安全说明

后端通过 backend/app/core/config.py 读取环境变量默认值。运行时模型设置和服务密钥由 backend/app/services/settings_service.py 管理;敏感值通过 backend/app/core/security.py 加密后写入本地数据库。

加密可以保护本地运行存储中的敏感字段,但 data/app.db 仍然属于本地应用数据。配置细节见 docs/configuration.md,数据控制规则见 docs/security-and-data-control.md

验证命令

运行后端重点测试:

uv run --project backend pytest backend/tests/test_retrieval_strategies.py backend/tests/test_agent_service.py
uv run --project backend pytest backend/tests/test_eval_golden_qa.py backend/tests/test_eval_metrics.py backend/tests/test_evaluation_api.py

构建前端:

npm run build --prefix frontend

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages