|
6 | 6 |
|
7 | 7 | 仓库预置了若干可直接运行的智能体:`chatbot` 聚焦对话与动态工具调度,`mini_agent` 提供精简模板,`reporter` 演示报告类链路。这些目录展示了上下文类、Graph 构造方式、子智能体引用以及中间件组合的范例,新增功能时可以直接复用。 |
8 | 8 |
|
9 | | -### 智能体元数据配置 |
10 | | - |
11 | | -每个智能体可以通过在智能体目录下创建 `metadata.toml` 文件来配置元数据信息。这个文件使用 TOML 格式,包含以下字段: |
12 | | - |
13 | | -- `name`: 智能体显示名称 |
14 | | -- `description`: 智能体功能描述 |
15 | | -- `examples`: 示例问题列表(数组格式) |
16 | | - |
17 | | -例如,`src/agents/chatbot/metadata.toml`: |
18 | | - |
19 | | -<<< @/../src/agents/chatbot/metadata.toml |
20 | | - |
21 | | -**注意**:`metadata.toml` 文件是可选的,如果没有提供,系统将使用智能体类的基本属性。 |
22 | | - |
23 | 9 | ### 创建新的智能体 |
24 | 10 |
|
25 | 11 | 在 `src/agents` 下新建一个包,保持与现有目录一致的结构:放置 Graph 构造逻辑(通常命名为 `graph.py`),并在包内的 `__init__.py` 中暴露主类。 |
|
52 | 38 |
|
53 | 39 | 子智能体集中放在 `src/agents/common/subagents` 目录,典型例子是 `calc_agent`,它通过 LangChain 的 `create_agent` 构建计算器能力并以工具暴露给主图。新增子智能体时沿用这一结构:在目录内编写封装函数与 `@tool` 装饰器,导出后即可被任意智能体调用。 |
54 | 40 |
|
55 | | -中间件位于 `src/agents/common/middlewares`,包含上下文感知提示词、模型选择、动态工具加载以及附件注入等实现。如果需要编写新的中间件,请遵循 LangChain 官方文档中对 `AgentMiddleware`、`ModelRequest`、`ModelResponse` 等接口的定义,完成后在该目录的 `__init__.py` 暴露入口,主智能体即可在 `middleware` 列表中引用。 |
56 | | - |
57 | | -#### 文件上传中间件 |
58 | | - |
59 | | -文件上传功能通过 `inject_attachment_context` 中间件实现(位于 `src/agents/common/middlewares/attachment_middleware.py`)。该中间件基于 LangChain 1.0 的 `AgentMiddleware` 标准实现,具有以下特点: |
60 | | - |
61 | | -1. **状态扩展**:定义 `AttachmentState` 扩展 `AgentState`,添加可选的 `attachments` 字段 |
62 | | -2. **自动注入**:在模型调用前,从 `request.state` 中读取附件并转换为 `SystemMessage` |
63 | | -3. **向后兼容**:不使用文件上传的智能体不受影响 |
64 | | - |
65 | | -##### 为智能体启用文件上传 |
66 | | - |
67 | | -只需两步: |
68 | | - |
69 | | -**步骤 1:声明能力**(让前端显示上传按钮) |
70 | | - |
71 | | -```python |
72 | | -class MyAgent(BaseAgent): |
73 | | - capabilities = ["file_upload"] |
74 | | -``` |
75 | | - |
76 | | -**步骤 2:添加中间件**(让智能体能够处理附件内容) |
77 | | - |
78 | | -```python |
79 | | -from src.agents.common.middlewares import inject_attachment_context |
80 | | - |
81 | | -async def get_graph(self): |
82 | | - graph = create_agent( |
83 | | - model=load_chat_model("..."), |
84 | | - tools=get_tools(), |
85 | | - middleware=[ |
86 | | - inject_attachment_context, # 添加附件中间件 |
87 | | - context_aware_prompt, # 其他中间件... |
88 | | - # ... |
89 | | - ], |
90 | | - checkpointer=await self._get_checkpointer(), |
91 | | - ) |
92 | | - return graph |
93 | | -``` |
94 | | - |
95 | | -##### 工作流程 |
96 | | - |
97 | | -1. **前端上传**:用户在聊天界面上传文档(txt、md、docx、html) |
98 | | -2. **API 解析**:后端将文档转换为 Markdown 格式并存储到数据库(超过 32k 会被截断) |
99 | | -3. **自动加载**:API 层在调用 agent 前从数据库加载附件数据 |
100 | | -4. **中间件注入**:`inject_attachment_context` 自动将附件内容注入为系统消息 |
101 | | -5. **模型处理**:LLM 接收到附件内容和用户问题,进行综合回答 |
102 | | - |
103 | | -这种设计确保了附件功能的可选性和可扩展性,任何智能体都可以通过添加中间件快速启用文件上传能力。 |
| 41 | +中间件位于 `src/agents/common/middlewares`,包含上下文感知提示词、模型选择以及动态工具加载等实现。如果需要编写新的中间件,请遵循 LangChain 官方文档中对 `AgentMiddleware`、`ModelRequest`、`ModelResponse` 等接口的定义,完成后在该目录的 `__init__.py` 暴露入口,主智能体即可在 `middleware` 列表中引用。 |
104 | 42 |
|
105 | 43 | ## 内置工具与 MCP 集成 |
106 | 44 |
|
|
0 commit comments