一个面向面试展示的农业领域 RAG 问答 Demo。项目使用 Flask 搭建 Web 应用,结合轻量文本检索、知识图谱实体关联和 Ollama 本地大模型,实现农业病害、缺素和土壤管理问题的问答演示。
- RAG 问答流程:先检索农业知识库,再把召回证据作为上下文交给本地模型生成答案。
- 混合检索:使用轻量 TF-IDF 风格文本检索 + 知识图谱实体关系扩展召回。
- 本地大模型:默认接入 Ollama 的
qwen2.5:3b,不依赖云端 API。 - 知识图谱可视化:前端展示相关实体、关系边和检索证据,增强可解释性。
- 多轮上下文:使用 Flask session 保存最近对话,支持连续追问。
- 可选 Neo4j:内置
/api/neo4j/sync,配置后可将三元组同步到 Neo4j。
- Python 3.10+
- Flask
- Ollama / Qwen2.5
- Neo4j Python Driver(可选)
- HTML / CSS / 原生 JavaScript / Canvas
Windows 可以直接双击:
start_demo.bat
或手动运行:
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python app.py浏览器打开:
http://127.0.0.1:5000
项目会优先调用本机 Ollama:
http://localhost:11434/api/generate
推荐模型:
ollama pull qwen2.5:3b也可以通过 .env 或环境变量指定:
OLLAMA_HOST=http://localhost:11434
OLLAMA_MODEL=qwen2.5:3b
模型选择逻辑:
- 如果设置了
OLLAMA_MODEL,优先使用指定模型。 - 否则自动读取本机 Ollama 模型列表,优先选择 Qwen 系列。
- 如果没有 Qwen,则使用
llama3.2。 - 如果 Ollama 不可用,自动退回规则摘要模型,保证 Demo 可演示。
.
├── app.py
├── data/
│ └── agri_knowledge.json
├── scripts/
│ └── evaluate_demo.py
├── static/
│ ├── app.js
│ └── styles.css
├── templates/
│ └── index.html
├── .env.example
├── .gitignore
├── requirements.txt
├── start_demo.bat
└── README.md
- 用户在页面输入农业问题。
- 前端调用
/api/ask。 - 后端执行混合检索:
- 文本检索召回相关知识文档。
- 图谱检索根据作物、病害、症状等实体扩展关联知识。
- 合并召回结果并生成知识上下文。
- 调用 Ollama 本地模型生成答案。
- 前端展示答案、检索证据、响应耗时和知识图谱。
| 接口 | 方法 | 说明 |
|---|---|---|
/ |
GET | Web 页面 |
/api/ask |
POST | 问答接口 |
/api/examples |
GET | 示例问题 |
/api/health |
GET | 健康检查 |
/api/reset |
POST | 清空多轮对话 |
/api/neo4j/sync |
POST | 同步三元组到 Neo4j |
python scripts/evaluate_demo.py脚本会验证典型问题是否能召回正确知识点,例如稻瘟病、玉米缺氮、番茄晚疫病和黄瓜霜霉病。
配置环境变量:
set NEO4J_URI=bolt://localhost:7687
set NEO4J_USER=neo4j
set NEO4J_PASSWORD=your_password启动服务后调用:
curl -X POST http://127.0.0.1:5000/api/neo4j/sync- 将轻量检索替换为 FAISS 或 Chroma 向量库。
- 使用
nomic-embed-text或中文 embedding 模型生成真实向量。 - 将内存图谱查询替换为 Neo4j Cypher 查询。
- 增加更多农业知识来源、测试集和指标统计。
- 加入用户反馈,记录低质量回答并迭代知识库。