Files
catonline_ai/vw-agentic-rag/docs/topics/AUTONOMOUS_AGENT_UPGRADE.md

125 lines
3.6 KiB
Markdown
Raw Normal View History

2025-09-26 17:15:54 +08:00
# 自主Agent改进总结
## 概述
成功将原来的固定RAG管道改造为基于Function Call的自主Agent系统。
## 主要改进
### 1. 架构变更
**原来的实现:**
- 固定的两阶段RAG流程工具调用 → 答案生成
- 硬编码的工具调用序列
- 无法根据上下文动态调整策略
**新的实现:**
- 基于Function Call的自主Agent
- LLM自主决策使用哪些工具
- 支持多轮工具调用和迭代推理
- 根据前面的输出动态调用后续工具
### 2. 技术实现
#### 配置更新 (`config.yaml`)
```yaml
llm:
rag:
# 新增自主Agent prompts
agent_system_prompt: |
You are an AI assistant with access to tools...
synthesis_system_prompt: |
You synthesize information from retrieved documents...
synthesis_user_prompt: |
User Query: {{user_query}}...
```
#### LLM客户端增强 (`service/llm_client.py`)
- 添加了 `bind_tools()` 方法支持function calling
- 新增 `ainvoke_with_tools()` 方法处理工具调用
- 支持流式响应和工具调用
#### 工具Schema定义 (`service/tools/schemas.py`)
```python
TOOL_SCHEMAS = [
{
"type": "function",
"function": {
"name": "retrieve_standard_regulation",
"description": "Search for standard/regulation metadata...",
"parameters": {...}
}
},
...
]
```
#### 自主Agent节点 (`service/graph/graph.py`)
- **自主决策**LLM分析问题并决定使用哪些工具
- **迭代执行**支持最多3轮工具调用迭代
- **动态调整**:根据工具返回结果决定下一步行动
- **错误处理**:完善的异常处理和降级机制
### 3. 工作流程
```mermaid
graph TD
A[用户查询] --> B[Agent分析]
B --> C{需要工具吗?}
C -->|是| D[选择并调用工具]
D --> E[处理工具结果]
E --> F{需要更多工具?}
F -->|是| D
F -->|否| G[最终合成答案]
C -->|否| G
G --> H[返回答案]
```
### 4. 验证结果
通过API测试验证了以下功能
**自主工具选择**Agent根据问题"电动汽车充电标准有哪些?"自动选择了两个工具
- `retrieve_standard_regulation` - 获取标准元数据
- `retrieve_doc_chunk_standard_regulation` - 获取详细文档内容
**智能调用序列**Agent按逻辑顺序执行工具调用先获取概览信息再获取详细内容
**完整的响应流程**
1. 工具调用阶段tool_start, tool_result事件
2. 答案合成阶段agent_done事件
3. 后处理阶段post_append事件
## 与传统模式的对比
| 特性 | 原来的RAG管道 | 新的自主Agent |
|------|--------------|-------------|
| 工具选择 | 硬编码固定 | LLM自主决策 |
| 执行策略 | 预定义序列 | 动态调整 |
| 多轮推理 | 不支持 | 支持最多3轮 |
| 上下文感知 | 有限 | 完整对话上下文 |
| 错误恢复 | 基本 | 智能降级 |
| Token效率 | 中等 | 优化避免ReAct冗余 |
## 优势
1. **智能化**:根据问题复杂度和上下文自动调整策略
2. **灵活性**:支持各种问题类型,不限于预定义场景
3. **效率**避免不必要的工具调用减少Token消耗
4. **可扩展**易于添加新工具Agent会自动学会使用
5. **鲁棒性**:完善的错误处理和降级机制
## 使用方法
```bash
# 启动服务
./scripts/start_service.sh
# 测试自主Agent
uv run python scripts/test_autonomous_api.py
```
## 结论
成功实现了基于Function Call的自主Agent相比原来的固定RAG管道新系统具有更强的智能化、灵活性和扩展性同时保持了高效的Token使用和可靠的错误处理能力。