renamed chinese version to README_xu.md not up to date
This commit is contained in:
278
README_xu.md
Normal file
278
README_xu.md
Normal file
@@ -0,0 +1,278 @@
|
||||
# langchain-agent
|
||||
|
||||
## 项目概述
|
||||
|
||||
这是一个基于LangChain和LangGraph构建的智能代理系统,集成了RAG(检索增强生成)、工具调用和WebSocket通信功能。项目主要用于茶饮场景的智能对话和订单处理,支持多种工具调用和远程MCP(Model Context Protocol)服务器集成。
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
langchain-agent/
|
||||
├── lang_agent/ # 核心模块目录
|
||||
│ ├── base.py # 基础抽象类定义
|
||||
│ ├── config.py # 配置管理系统
|
||||
│ ├── pipeline.py # 主流程控制模块
|
||||
│ ├── mcp_server.py # MCP服务器实现
|
||||
│ ├── tool_manager.py # 工具管理器
|
||||
│ ├── client_tool_manager.py # 客户端工具管理器
|
||||
│ ├── graphs/ # 图工作流模块
|
||||
│ │ ├── routing.py # 路由图实现
|
||||
│ │ └── react.py # ReAct图实现
|
||||
│ ├── rag/ # RAG模块
|
||||
│ │ ├── simple.py # 简单RAG实现
|
||||
│ │ └── emb.py # 文本嵌入模型
|
||||
│ ├── dummy/ # 示例工具
|
||||
│ │ └── calculator.py # 计算器工具
|
||||
│ └── eval/ # 评估模块
|
||||
│ ├── evaluator.py # 评估器
|
||||
│ └── validator.py # 验证器
|
||||
├── scripts/ # 可执行脚本目录
|
||||
│ ├── run_agent_server.py # 启动代理服务器
|
||||
│ ├── start_mcp_server.py # 启动MCP服务器
|
||||
│ ├── ws_start_register_tools.py # WebSocket工具注册
|
||||
│ ├── ws_start_all_mcps.py # 启动所有MCP服务
|
||||
│ ├── demo_chat.py # 聊天演示
|
||||
│ ├── make_rag_database.py # 创建RAG数据库
|
||||
│ ├── make_eval_dataset.py # 创建评估数据集
|
||||
│ └── eval.py # 评估脚本
|
||||
├── configs/ # 配置文件目录
|
||||
│ ├── mcp_config.json # MCP配置
|
||||
│ ├── ws_mcp_config.json # WebSocket MCP配置
|
||||
│ └── route_sys_prompts/ # 路由系统提示
|
||||
│ ├── chat_prompt.txt # 聊天提示
|
||||
│ ├── route_prompt.txt # 路由提示
|
||||
│ └── tool_prompt.txt # 工具提示
|
||||
└── fastapi_server/ # FastAPI服务器模块
|
||||
├── server.py # 服务器实现
|
||||
├── server_dashscope.py # DashScope服务器
|
||||
└── test_*.py # 测试客户端
|
||||
```
|
||||
|
||||
## 核心模块功能
|
||||
|
||||
### 1. 基础模块 (lang_agent/base.py)
|
||||
|
||||
定义了两个抽象基类:
|
||||
- `LangToolBase`: 所有工具的基类,要求实现`get_tool_fnc`方法返回工具函数列表
|
||||
- `GraphBase`: 所有图工作流的基类,要求实现`invoke`方法执行工作流
|
||||
|
||||
### 2. 配置管理 (lang_agent/config.py)
|
||||
|
||||
实现了灵活的配置系统:
|
||||
- `PrintableConfig`: 提供配置打印和敏感信息脱敏功能
|
||||
- `InstantiateConfig`: 支持通过`_target`属性动态实例化类
|
||||
- `KeyConfig`: 管理API密钥,从环境变量加载
|
||||
- `ToolConfig`: 控制工具使用开关
|
||||
- 提供配置加载、合并和MCP配置转换等工具函数
|
||||
|
||||
### 3. 图工作流模块 (lang_agent/graphs/)
|
||||
|
||||
#### 路由图 (routing.py)
|
||||
实现了基于决策的智能路由系统:
|
||||
- `RoutingConfig`: 配置LLM参数和路由选项
|
||||
- `RoutingGraph`: 构建状态图工作流,包含路由节点、聊天模型节点和工具模型节点
|
||||
- 工作流程:通过LLM决策将请求路由到"chat"或"order"路径,分别调用不同的工具集
|
||||
|
||||
#### ReAct图 (react.py)
|
||||
实现了ReAct(Reason-Act)模式的智能体:
|
||||
- `ReactGraphConfig`: 配置ReAct图的参数
|
||||
- `ReactGraph`: 使用LangChain的create_agent创建智能体,支持流式输出
|
||||
- 集成ToolManager管理工具调用
|
||||
|
||||
### 4. 工具管理系统
|
||||
|
||||
#### 工具管理器 (lang_agent/tool_manager.py)
|
||||
核心工具管理模块:
|
||||
- `ToolManagerConfig`: 配置各种工具(RAG、计算器等)
|
||||
- `ToolManager`: 统一管理工具实例化与调用
|
||||
- 支持本地工具和MCP客户端工具的整合
|
||||
- 将工具转换为LangChain的StructuredTool格式
|
||||
|
||||
#### 客户端工具管理器 (lang_agent/client_tool_manager.py)
|
||||
管理MCP客户端工具:
|
||||
- `ClientToolManagerConfig`: 管理MCP配置文件路径
|
||||
- `ClientToolManager`: 通过MultiServerMCPClient从MCP服务器获取工具
|
||||
|
||||
### 5. RAG模块 (lang_agent/rag/)
|
||||
|
||||
#### 简单RAG (simple.py)
|
||||
基础检索实现:
|
||||
- `SimpleRagConfig`: 配置嵌入模型和数据库路径
|
||||
- `SimpleRag`: 使用QwenEmbeddings和FAISS向量存储实现检索功能
|
||||
- 支持相似度搜索和结果序列化
|
||||
|
||||
#### 嵌入模型 (emb.py)
|
||||
文本嵌入实现:
|
||||
- `QwenEmbeddings`: 继承LangChain的Embeddings基类
|
||||
- 使用DashScope API实现文本嵌入
|
||||
- 支持批量和单文本嵌入、同步和异步处理
|
||||
- 包含速率限制、并发控制和错误处理机制
|
||||
|
||||
### 6. MCP服务器 (lang_agent/mcp_server.py)
|
||||
|
||||
实现MCP服务器功能:
|
||||
- `MCPServerConfig`: 配置服务器名称、主机、端口和传输方式
|
||||
- `MCPServer`: 使用FastMCP创建服务器,注册工具管理器中的工具
|
||||
- 支持CORS配置和多种传输方式(stdio, sse, streamable-http)
|
||||
|
||||
### 7. 主流程控制 (lang_agent/pipeline.py)
|
||||
|
||||
项目的核心流程控制:
|
||||
- `PipelineConfig`: 配置LLM参数、服务器设置和图配置
|
||||
- `Pipeline`: 实现模块初始化、图工作流调用、WebSocket服务器和聊天接口
|
||||
- 集成RoutingGraph或ReactGraph作为工作流引擎
|
||||
- 提供带角色设定的对话逻辑
|
||||
|
||||
## 系统工作流程
|
||||
|
||||
1. **初始化阶段**:
|
||||
- 加载配置和环境变量
|
||||
- 初始化LLM、嵌入模型和工具管理器
|
||||
- 构建图工作流(RoutingGraph或ReactGraph)
|
||||
|
||||
2. **请求处理阶段**:
|
||||
- 接收用户输入
|
||||
- 通过图工作流进行路由决策或ReAct推理
|
||||
- 调用相应工具(RAG检索、计算器、远程MCP工具等)
|
||||
- 生成响应并返回
|
||||
|
||||
3. **扩展功能**:
|
||||
- WebSocket服务器支持实时通信
|
||||
- MCP协议支持远程工具调用
|
||||
- 评估系统支持模型性能测试
|
||||
|
||||
## 安装与配置
|
||||
|
||||
### 1. 安装依赖
|
||||
|
||||
```bash
|
||||
# 安装xiaoliang-catering以支持购物车工具;否则,请在lang_agent/tool_manager.py中注释掉
|
||||
pip install xiaoliang-catering
|
||||
|
||||
# 开发模式安装
|
||||
python -m pip install -e .
|
||||
```
|
||||
|
||||
### 2. 环境变量配置
|
||||
|
||||
需要设置以下环境变量:
|
||||
|
||||
```bash
|
||||
export ALI_API_KEY=你的阿里云API密钥
|
||||
export ALI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
|
||||
export MCP_ENDPOINT=你的MCP端点
|
||||
export LANGSMITH_API_KEY=你的LangSmith API密钥
|
||||
```
|
||||
|
||||
## 运行指南
|
||||
|
||||
### 1. 启动MCP服务器
|
||||
|
||||
```bash
|
||||
# 1. 确保所有环境变量已设置
|
||||
# 2. 启动MCP服务器
|
||||
python scripts/start_mcp_server.py
|
||||
|
||||
# 3. 使用上述命令中的链接更新configs/ws_mcp_config.json
|
||||
# 4. 启动WebSocket工具注册
|
||||
python scripts/ws_start_register_tools.py
|
||||
```
|
||||
|
||||
# for production
|
||||
python -m pip install .
|
||||
```
|
||||
|
||||
# Runables
|
||||
all runnables are under scripts
|
||||
|
||||
|
||||
### 2. 运行代理服务器
|
||||
|
||||
```bash
|
||||
python scripts/run_agent_server.py
|
||||
```
|
||||
|
||||
### 3. 演示聊天
|
||||
|
||||
```bash
|
||||
python scripts/demo_chat.py
|
||||
```
|
||||
|
||||
### 4. 创建RAG数据库
|
||||
|
||||
```bash
|
||||
python scripts/make_rag_database.py
|
||||
```
|
||||
|
||||
### 5. 运行评估
|
||||
|
||||
```bash
|
||||
# 创建评估数据集
|
||||
python scripts/make_eval_dataset.py
|
||||
|
||||
# 运行评估
|
||||
python scripts/eval.py
|
||||
```
|
||||
|
||||
## 评估数据集格式
|
||||
|
||||
评估数据集格式如下,详见`scripts/make_eval_dataset.py`:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"inputs": {"text": "用retrieve查询光予尘然后介绍"}, // 模型输入;使用列表进行对话
|
||||
"outputs": {"answer": "光予尘茉莉绿茶为底", // 参考答案
|
||||
"tool_use": ["retrieve"]} // 工具使用;如果提供了多个工具,假设模型需要使用所有工具
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
# Configure for Xiaozhi
|
||||
0. Start the `fastapi_server/server_dashscope.py` file
|
||||
1. Make a new model entry in `xiaozhi` with AliBL as provider.
|
||||
2. Fill in the `base_url` entry. The other entries (`API_KEY`, `APP_ID`) can be garbage
|
||||
- for local computer `base_url=http://127.0.0.1:8588/api/`
|
||||
- if inside docker, it needs to be `base_url=http://{computer_ip}:8588/api/`
|
||||
|
||||
|
||||
```
|
||||
# Configure for Xiaozhi
|
||||
0. Start the `fastapi_server/server_dashscope.py` file
|
||||
1. Make a new model entry in `xiaozhi` with AliBL as provider.
|
||||
2. Fill in the `base_url` entry. The other entries (`API_KEY`, `APP_ID`) can be garbage
|
||||
- for local computer `base_url=http://127.0.0.1:8588/api/`
|
||||
- if inside docker, it needs to be `base_url=http://{computer_ip}:8588/api/
|
||||
```
|
||||
## 技术栈
|
||||
|
||||
- **核心框架**: LangChain, LangGraph
|
||||
- **嵌入模型**: QwenEmbeddings (DashScope API)
|
||||
- **向量存储**: FAISS
|
||||
- **Web框架**: FastAPI, WebSocket
|
||||
- **协议支持**: MCP (Model Context Protocol)
|
||||
- **配置管理**: Tyro, YAML
|
||||
- **日志系统**: Loguru
|
||||
|
||||
## 扩展指南
|
||||
|
||||
### 添加新工具
|
||||
|
||||
1. 在`lang_agent/dummy/`或其他适当目录创建新工具类,继承`LangToolBase`
|
||||
2. 实现`get_tool_fnc`方法返回工具函数列表
|
||||
3. 在`lang_agent/tool_manager.py`中注册新工具
|
||||
4. 更新相关配置文件
|
||||
|
||||
### 添加新图工作流
|
||||
|
||||
1. 在`lang_agent/graphs/`目录创建新图类,继承`GraphBase`
|
||||
2. 实现`invoke`方法执行工作流
|
||||
3. 在`lang_agent/pipeline.py`中添加新图类型支持
|
||||
4. 更新配置文件以支持新图类型
|
||||
|
||||
### 添加新评估指标
|
||||
|
||||
1. 在`lang_agent/eval/`目录扩展评估器或验证器
|
||||
2. 在`scripts/eval.py`中集成新指标
|
||||
3. 更新评估数据集格式以支持新指标
|
||||
Reference in New Issue
Block a user