一个在线聊天应用。通过 RAG + LLM 技术,像孟子那样用白话文和你讨论人生哲学。
- 孟子对话 - 用现代白话文,而不是古文。像个微信里的长辈那样聊天
- 辩论启蒙 - 用反问、类比引导你思考,而不是直接命令
- 知识检索 - 从孟子译注中自动检索相关内容,不会瞎编
- 智能回退 - GLM API 不可用时,直接返回相关孟子段落(不会卡住)
- 简洁架构 - 内存向量库 (FAISS),无需额外数据库服务
克隆项目
git clone https://github.com/yourusername/Mencius-agent.git
cd Mencius-agent配置 GLM API Key
cp backend/.env.example backend/.env
# 编辑 backend/.env,填入你的 GLM_API_KEY从 智谱 AI 开放平台 获取 API Key(支持免费试用额度)
后端 (终端 1)
conda activate men
cd backend
pip install -r requirements.txt
python -m uvicorn app.main:app --reload --port 8000前端 (终端 2)
cd frontend
npm install
npm run dev访问 http://localhost:5173 开始与孟子对话
┌─────────────────────────────────────────┐
│ Vue 3 前端 (localhost:5173) │
│ ┌───────────────────────────────────┐ │
│ │ ChatInterface 组件 │ │
│ │ (消息展示 + 输入框) │ │
│ └───┬───────────────────────────────┘ │
└──────┼──────────────────────────────────┘
│ POST /api/ask
▼
┌─────────────────────────────────────────┐
│ FastAPI 后端 (localhost:8000) │
│ ┌───────────────────────────────────┐ │
│ │ 1️⃣ RAG 检索 (FAISS) │ │
│ │ ↓ 从孟子译注中查找相关段落 │ │
│ │ 2️⃣ Prompt 组装 │ │
│ │ ↓ 系统提示 + 用户问题 + 上下文 │ │
│ │ 3️⃣ LLM 调用 (GLM-4-Flash) │ │
│ │ ↓ 生成孟子风格回答 │ │
│ │ 4️⃣ 回退机制 │ │
│ │ ↓ API失败时返回原文 │ │
│ └───┬─────────────────────────────┘ │
└──────┼──────────────────────────────────┘
│ 返回 JSON 响应
▼
前端展示回答
Mencius-agent/
├── backend/
│ ├── app/
│ │ ├── api/routes.py # API 端点 (/api/ask, /api/status, etc)
│ │ ├── llm/client.py # GLM-4-Flash API 集成
│ │ ├── rag/retriever.py # FAISS 向量检索
│ │ ├── data/
│ │ │ ├── loader.py # 加载孟子译注.txt
│ │ │ ├── chunker.py # 文本分段
│ │ │ └── embedder.py # 文本向量化
│ │ ├── config/settings.py # 环境变量配置
│ │ └── main.py # FastAPI 应用入口
│ ├── requirements.txt # Python 依赖
│ └── .env.example # 环境变量示例
├── frontend/
│ ├── src/
│ │ ├── components/ChatInterface.vue
│ │ ├── services/api.ts
│ │ ├── App.vue
│ │ └── main.ts
│ ├── package.json
│ └── vite.config.ts
├── data/raw/孟子译注.txt # 孟子数据源
└── README.md
请求
{
"question": "什么是仁义?",
"top_k": 3
}| 字段 | 类型 | 说明 |
|---|---|---|
| question | string | 用户问题(必需) |
| top_k | integer | 检索相关段落数(默认3) |
响应 - 成功
{
"answer": "仁义啊,这是...",
"sources": [
{
"text": "孟子说:君之视臣...",
"score": 0.85,
"metadata": { "section": "尽心下" }
}
],
"status": "success"
}响应 - 回退模式(GLM API 不可用)
{
"answer": "孟子曰:\n其一:...\n其二:...",
"sources": [...],
"status": "fallback_rag_only"
}| 状态 | 说明 |
|---|---|
success |
正常,使用 LLM 生成 |
fallback_rag_only |
LLM 不可用,返回原文 |
curl http://localhost:8000/api/status{
"status": "ready",
"initialized": true,
"collection": {
"vectors_count": 148,
"backend": "FAISS (In-Memory)"
}
}系统 Prompt 设计参考了"微信孟子"风格:
✅ 言简意赅:不长篇大论,单刀直入
✅ 辩论思维:用反问和类比启发,不直接说教
✅ 现代白话:像个学会用微信的长辈,不用"孟子曰"
✅ 性善论:引导用户发现内心本有的"良知"
示例对话
用户: 人生的意义是什么?
孟子: 你问人生的意义,这问题问得好!
人生啊,就像是一棵树,不是为了长得高大,
而是为了根深叶茂,给世界带来阴凉。
所以意义不在于你得到了多少,
而在于你贡献了多少。
编辑 /backend/app/llm/client.py 中的 MENCIUS_SYSTEM_PROMPT:
MENCIUS_SYSTEM_PROMPT = """【Role】
你是战国时期的思想家孟子。你现在通过微信与现代人交流。
...
"""在 /backend/app/api/routes.py 中添加新的路由:
@router.post("/api/custom")
async def custom_endpoint(request: CustomRequest):
# 你的逻辑
pass修改 /frontend/src/components/ChatInterface.vue 自定义 UI
-
初始化阶段
- 加载
/data/raw/孟子译注.txt - 分段后向量化
- 导入 FAISS 内存索引 (148 个节点)
- 加载
-
用户提问阶段
- 用户问题向量化
- FAISS 检索 Top-3 相关段落
- 组装 Prompt:系统提示 + 上下文 + 问题
-
LLM 生成阶段
- 调用 GLM-4-Flash API
- 返回孟子风格回答
-
应急回退阶段
- 如果 LLM 失败,直接返回原文段落
创建 backend/.env:
# 必需(从 https://open.bigmodel.cn/ 获取)
GLM_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
# 可选
DEBUG=True
BACKEND_PORT=8000
EMBEDDING_MODEL=sentence-transformers/paraphrase-multilingual-mpnet-base-v2| 组件 | 技术 |
|---|---|
| 前端框架 | Vue 3 + TypeScript + Vite |
| 后端框架 | FastAPI + Uvicorn |
| LLM | 智谱 GLM-4-Flash API |
| 向量库 | FAISS (内存) |
| 向量模型 | sentence-transformers |
| 数据源 | 孟子译注 (txt) |
✅ FastAPI 后端框架
✅ Vue 3 前端界面
✅ RAG 检索系统 (FAISS)
✅ LLM 集成 (GLM-4-Flash)
✅ 孟子风格提示词
✅ API 错误回退机制
✅ 孟子数据加载与向量化
- 用户对话历史记录
- 孟子观点引用功能
- 多轮对话上下文保留
- 用户反馈收集
- Docker 容器化部署
MIT License
欢迎提交 Issue 和 Pull Request!
最后更新: 2026年3月7日
状态: 核心功能可用 ✅
- 日志系统完善
- 性能优化(缓存、批处理)
- 单元测试编写
- Docker 容器化
- 云部署配置
- 用户认证系统(如需)
# 确保虚拟环境激活并安装了依赖
conda activate men
pip install -r backend/requirements.txt- 检查后端是否运行在 8000 端口:
http://localhost:8000 - 访问
http://localhost:8000/health测试连接 - 检查浏览器控制台 (F12) 的 Network 选项卡查看 API 调用
- 验证
.env中的GLM_API_KEY是否正确 - 检查 API Key 是否已激活(在 智谱平台 查看)
- 查看后端日志获取详细错误信息
# 确保 Docker 正在运行
docker ps | grep qdrant
# 如果未运行,启动 Qdrant
docker-compose up -d
# 测试连接
curl http://localhost:6333/health# 1. 构建前端
npm run build --prefix frontend
# 2. 启动后端(后端会提供前端静态文件)
python -m uvicorn app.main:app --port 8000
# 访问:http://localhost:8000# 打包 Docker 镜像
docker build -t mencius-agent .
# 推送到云平台
docker tag mencius-agent your-registry/mencius-agent
docker push your-registry/mencius-agent编辑 frontend/src/components/ChatInterface.vue 的 <style> 部分。
- 创建功能分支:
git checkout -b feature/your-feature - 提交更改:
git commit -m "Add your feature" - 推送分支:
git push origin feature/your-feature - 创建 Pull Request
本项目仅供学习使用。孟子译注的版权属于原作者。