Files
catonline_ai/vw-agentic-rag/docs/topics/AUTONOMOUS_AGENT_UPGRADE.md
2025-09-26 17:15:54 +08:00

3.6 KiB
Raw Blame History

自主Agent改进总结

概述

成功将原来的固定RAG管道改造为基于Function Call的自主Agent系统。

主要改进

1. 架构变更

原来的实现:

  • 固定的两阶段RAG流程工具调用 → 答案生成
  • 硬编码的工具调用序列
  • 无法根据上下文动态调整策略

新的实现:

  • 基于Function Call的自主Agent
  • LLM自主决策使用哪些工具
  • 支持多轮工具调用和迭代推理
  • 根据前面的输出动态调用后续工具

2. 技术实现

配置更新 (config.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)

TOOL_SCHEMAS = [
    {
        "type": "function",
        "function": {
            "name": "retrieve_standard_regulation",
            "description": "Search for standard/regulation metadata...",
            "parameters": {...}
        }
    },
    ...
]

自主Agent节点 (service/graph/graph.py)

  • 自主决策LLM分析问题并决定使用哪些工具
  • 迭代执行支持最多3轮工具调用迭代
  • 动态调整:根据工具返回结果决定下一步行动
  • 错误处理:完善的异常处理和降级机制

3. 工作流程

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. 鲁棒性:完善的错误处理和降级机制

使用方法

# 启动服务
./scripts/start_service.sh

# 测试自主Agent
uv run python scripts/test_autonomous_api.py

结论

成功实现了基于Function Call的自主Agent相比原来的固定RAG管道新系统具有更强的智能化、灵活性和扩展性同时保持了高效的Token使用和可靠的错误处理能力。