一个基于 LangChain 和 LangGraph 构建的智能问答助手,专为做题辅导场景设计。它能够从题库和教材中检索相关信息,并结合对话历史,为用户提供专业、准确的解答。
- 智能检索: 结合题库和对话历史,提供最相关的参考资料。
- 专业解答: 基于检索到的内容,生成通俗易懂的专业解答。
- 对话记忆: 维护对话历史,支持上下文相关的问答。
- 多模型支持: 支持多种大语言模型和文本嵌入模型。
- 用户友好: 提供基于 Gradio 的直观用户界面。
- LangChain: 用于构建大语言模型应用的核心框架。
- LangGraph: 用于构建复杂的多步骤工作流程。
- Gradio: 提供用户界面。
- Faiss: 用于高效的向量存储和检索。
- 支持的大语言模型: Google Gemini, DeepSeek
- 支持的嵌入模型: HuggingFace, Ollama, vLLM
QA-Knowledge_Agent/
├── src/
│ ├── agent.py # 核心问答代理类
│ ├── app.py # Gradio 应用入口
│ ├── embedding_factory.py # 文本嵌入模型工厂
│ ├── graph.py # LangGraph 工作流定义
│ ├── llm.py # 大语言模型初始化
│ ├── state.py # 状态定义
│ └── mineru_analysis.py # 文档分析工具
├── data/
│ ├── inputs/ # 输入文档
│ └── outputs/ # 输出文档
├── pyproject.toml # 项目配置
└── README.md
-
克隆项目:
git clone <repository-url> cd QA-Knowledge_Agent
-
安装依赖:
uv sync
-
配置环境变量: 在项目根目录创建
.env文件,并添加以下内容之一:# 使用 Google Gemini GOOGLE_API_KEY=your_google_api_key # 或使用 DeepSeek DEEPSEEK_API_KEY=your_deepseek_api_key
-
准备数据: 将题库和教材文档放置在
data/inputs/目录下。 -
运行应用:
python src/app.py
应用将在
http://127.0.0.1:7860启动。
在 src/app.py 中,你可以通过 EMBEDDING_CONFIG 字典来配置嵌入模型:
EMBEDDING_CONFIG = {
"type": "ollama",
"model": "qwen3-embedding:0.6b",
"base_url": "http://localhost:11434"
}支持的嵌入模型类型:
ollama: 使用 Ollama 本地模型hf: 使用 HuggingFace 模型vllm: 使用 vLLM 服务
在 src/app.py 中,通过 DOC_PATHS 列表来指定要加载的文档:
DOC_PATHS = [
"data/outputs/第十届复赛样卷试题解析.md",
# "data/textbook.md" # 教材(可选)
]-
启动应用: 运行
python src/app.py后,在浏览器中打开http://127.0.0.1:7860。 -
提问: 在输入框中输入你的问题,例如:
- "为什么这个题目的答案是CD?"
- "什么是边际违约率?"
- "看跌期权的执行价格怎么理解?"
-
查看回答: 系统会基于题库和对话历史,为你提供专业的解答。
-
清空历史: 点击"清空历史"按钮可以清除对话记录。
- QuestionAgent: 核心问答代理类,负责初始化模型、管理状态和处理用户问题。
- LangGraph 工作流: 定义了从检索到生成回答的完整流程。
- 状态管理: 通过
QuestionState类型来管理对话状态和历史。
- 用户画像: 系统支持记录用户的错题和薄弱知识点(见
state.py中的mistake_log和weak_topics)。 - 多模型支持: 可以轻松添加新的大语言模型或嵌入模型。
欢迎提交 Issue 和 Pull Request 来改进这个项目。