框架选择

预计学习时间:40分钟

选择合适的Agent开发框架能够大幅提高开发效率。不同框架在设计理念、功能特性和技术栈方面各有特长。

主流Agent开发框架对比

LangChain

LangChain是目前最流行的Agent开发框架,提供完整的工具链用于构建基于大语言模型的应用。

核心特性

  • 模块化组件:将Agent系统拆分为可组合的功能块
  • 工具集成:丰富的内置工具和自定义工具接口
  • 记忆管理:多种记忆类型支持(对话历史、向量存储等)
  • 多LLM支持:兼容OpenAI、Anthropic、Hugging Face等模型

架构组件

  1. Chains:将多个组件连接为处理流水线
  2. Agents:实现决策逻辑,如ReAct推理
  3. Tools:外部功能调用接口
  4. Memory:对话状态和历史记录管理
  5. Retrievers:知识库检索组件
# LangChain Agent示例
from langchain.agents import initialize_agent, Tool
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory
from langchain.llms import OpenAI

# 定义工具
tools = [
    Tool(
        name="ProductSearch",
        func=lambda query: search_product_database(query),
        description="搜索产品信息,输入为产品名称或关键词"
    ),
    Tool(
        name="OrderLookup",
        func=lambda order_id: get_order_status(order_id),
        description="查询订单状态,输入为订单ID"
    )
]

# 初始化记忆组件
memory = ConversationBufferMemory(memory_key="chat_history")

# 创建Agent
agent = initialize_agent(
    tools,
    OpenAI(temperature=0),
    agent="chat-conversational-react-description",
    memory=memory,
    verbose=True
)

# 运行Agent
response = agent.run("我想查询我的AirPods Pro订单状态")

优缺点分析

优势:

  • 完善的生态系统与活跃社区
  • 丰富的文档和示例
  • 灵活的组件定制能力

局限性:

  • 学习曲线相对陡峭
  • 某些高级功能需自行实现
  • 框架更新较快,API稳定性有限

AutoGPT

核心特性

  • 自主性导向:强调Agent自主完成复杂任务的能力
  • 目标分解:自动将高级目标拆解为子任务
  • 长期记忆:结合向量存储实现持久化记忆
  • 自我反思:能够评估和调整自身的执行计划
# AutoGPT风格的Agent架构
class AutoGPTAgent:
    def __init__(self, llm, tools, memory_system):
        self.llm = llm
        self.tools = {tool.name: tool for tool in tools}
        self.memory = memory_system
        self.current_goal = None
        self.subtasks = []
        
    def set_goal(self, goal):
        self.current_goal = goal
        # 使用LLM分解目标到子任务
        planning_prompt = f"目标: {goal}\n请将此目标分解为有序的子任务列表:"
        plan_result = self.llm.generate(planning_prompt)
        self.subtasks = parse_subtasks(plan_result)
        
    def execute(self):
        results = []
        for subtask in self.subtasks:
            # 思考阶段 - 选择工具
            tool_selection_prompt = f"子任务: {subtask}\n可用工具: {list(self.tools.keys())}\n应该使用哪个工具?"
            selected_tool_name = self.llm.generate(tool_selection_prompt).strip()
            
            # 执行阶段
            if selected_tool_name in self.tools:
                tool = self.tools[selected_tool_name]
                result = tool.execute(subtask)
                
                # 结果评估
                self.memory.add(f"执行: {subtask} 使用 {selected_tool_name}, 结果: {result}")
                results.append(result)
                
                # 自我反思
                reflection_prompt = f"子任务: {subtask}\n执行结果: {result}\n这个结果是否满足要求?是否需要调整计划?"
                reflection = self.llm.generate(reflection_prompt)
                if "调整计划" in reflection:
                    # 重新规划剩余子任务
                    self._replan_remaining_tasks()
        
        return synthesize_results(results)

优缺点分析

优势:

  • 在复杂任务上表现优秀
  • 自主性强,干预需求少
  • 记忆管理系统设计合理

局限性:

  • 资源消耗较高
  • 行为可预测性较低
  • 需要高质量的LLM才能发挥最佳效果

Hugging Face Agent

核心特性

  • 轻量级设计:专注于NLP任务的Agent构建
  • 开源模型友好:深度集成Transformers生态
  • 低资源支持:优化小型开源模型的Agent能力
  • 工具连接API:标准化的工具调用接口

优缺点分析

优势:

  • 易于与Hugging Face生态集成
  • 支持本地部署开源模型
  • 轻量级实现低延迟

局限性:

  • 功能相对基础
  • 较少的高级组件
  • 社区规模小于LangChain

微软 Power Virtual Agents

核心特性

  • 低代码/无代码:可视化构建流程
  • 企业级集成:与Microsoft生态无缝连接
  • 多渠道部署:支持Teams、网站等多平台
  • 治理与分析:内置监控和分析工具

优缺点分析

优势:

  • 企业级支持和安全性
  • 对非技术人员友好
  • 与Azure服务深度集成

局限性:

  • 定制灵活性有限
  • 商业服务,有使用成本
  • 开源扩展能力有限

框架选择决策矩阵

框架开发灵活性入门门槛社区活跃度工具生态LLM支持范围部署复杂度
LangChain★★★★★★★★☆☆★★★★★★★★★★全面中等
AutoGPT★★★☆☆★★★★☆★★★★☆★★★☆☆侧重OpenAI较高
HF Agent★★★★☆★★☆☆☆★★★☆☆★★★☆☆开源友好较低
MS Power Virtual Agents★★☆☆☆★☆☆☆☆★★☆☆☆★★★★☆封闭生态最低

框架选择考虑因素

1. 项目需求

  • 任务复杂度:简单FAQ vs 多步骤任务
  • 自主性要求:需要人工监督 vs 完全自动化
  • 定制化程度:通用对话 vs 特定领域专家

2. 技术约束

  • 模型选择:仅OpenAI API vs 开源模型
  • 部署环境:云端 vs 本地 vs 混合
  • 资源限制:计算能力、内存、延迟要求

3. 开发团队因素

  • 技术栈熟悉度:Python经验 vs JavaScript经验
  • 开发时间限制:快速原型 vs 长期项目
  • 维护考虑:团队规模、长期支持需求

实战案例:电商客服Agent框架选择

场景描述

  • 需求:构建电商平台的客服Agent
  • 功能:商品查询、订单追踪、退换货处理
  • 约束:需集成现有ERP系统,对响应时间敏感

技术需求分析

  • 多轮对话管理
  • 结构化知识库集成
  • 外部API调用(订单系统、库存系统)
  • 上下文依赖的意图识别

框架选择决策

最佳选择:LangChain

决策理由:

  1. 模块化架构便于分步实现和测试
  2. 丰富的工具接口支持各类API集成
  3. 灵活的记忆管理系统支持复杂上下文
  4. 活跃社区提供支持和最佳实践
# LangChain实现电商客服Agent - 完整架构示例
from langchain.agents import Tool, AgentExecutor, ZeroShotAgent
from langchain.memory import ConversationBufferMemory
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

# 1. 定义工具函数
def search_products(query):
    """搜索产品数据库"""
    # 实际实现会连接到产品数据库
    return f"找到以下产品: {query}相关产品列表..."

def check_order_status(order_id):
    """查询订单状态"""
    # 实际实现会连接到订单系统
    return f"订单 {order_id} 状态: 运输中, 预计3天后送达"

def process_return(order_id):
    """处理退货请求"""
    # 实际实现会调用退货处理API
    return f"已为订单 {order_id} 创建退货申请, 请等待审核"

# 2. 封装为工具
tools = [
    Tool(
        name="ProductSearch",
        func=search_products,
        description="当用户询问产品信息、价格、库存或产品推荐时使用"
    ),
    Tool(
        name="OrderStatus",
        func=check_order_status,
        description="当用户询问订单状态、发货情况或配送时间时使用"
    ),
    Tool(
        name="ReturnProcess",
        func=process_return,
        description="当用户要求退货、换货或取消订单时使用"
    )
]

# 3. 创建Agent提示模板
prefix = """你是一个专业的电商客服助手。你的目标是帮助用户解决产品查询、订单跟踪和退换货等问题。
你有以下工具可以使用:"""

suffix = """开始与用户的对话。记住专业、友好且简洁地回答。

历史对话:
{chat_history}

用户: {input}
思考过程:"""

prompt = ZeroShotAgent.create_prompt(
    tools,
    prefix=prefix,
    suffix=suffix,
    input_variables=["input", "chat_history"]
)

# 4. 设置记忆系统
memory = ConversationBufferMemory(memory_key="chat_history")

# 5. 构建LLM链和Agent
llm = OpenAI(temperature=0.7)
llm_chain = LLMChain(llm=llm, prompt=prompt)
agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
agent_executor = AgentExecutor.from_agent_and_tools(
    agent=agent,
    tools=tools,
    memory=memory,
    verbose=True
)

# 6. 运行Agent
response = agent_executor.run("我的订单#12345什么时候能到?")
print(response)

框架整合与自定义

在复杂项目中,可能需要结合不同框架的优势或自行扩展功能:

混合架构示例

# 结合LangChain和自定义组件的混合架构
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI

# 自定义记忆组件(扩展标准记忆)
class EnhancedMemory:
    def __init__(self, vector_db_client):
        self.short_term = []  # 近期对话历史
        self.vector_db = vector_db_client  # 长期记忆向量数据库
        
    def add_interaction(self, user_input, agent_response):
        # 更新短期记忆
        self.short_term.append({"user": user_input, "agent": agent_response})
        if len(self.short_term) > 10:
            self.short_term.pop(0)
            
        # 更新长期记忆
        self.vector_db.add_document({
            "interaction": f"用户: {user_input}\n助手: {agent_response}",
            "timestamp": time.time()
        })
    
    def get_relevant_history(self, query):
        # 合并短期记忆和相关长期记忆
        recent = "\n".join([f"用户: {i['user']}\n助手: {i['agent']}" for i in self.short_term])
        relevant = self.vector_db.semantic_search(query, limit=3)
        return f"近期对话:\n{recent}\n\n相关历史记忆:\n{relevant}"

# 将自定义组件与LangChain集成
custom_memory = EnhancedMemory(vector_db_client=my_vector_db)

def get_conversation_context(query):
    return custom_memory.get_relevant_history(query)

tools = [
    Tool(
        name="ConversationMemory",
        func=get_conversation_context,
        description="获取相关的对话历史记录"
    ),
    # 其他标准工具...
]

agent = initialize_agent(tools, OpenAI(temperature=0), agent="chat-conversational-react-description")

现代编码 Agent 框架

2025–2026 年,编码 Agent 从「带工具的 ChatGPT」演进为完整的客户端-服务端 Agent 系统。与 LangChain 等通用编排框架不同,编码 Agent 框架深度集成了文件系统、终端、LSP 和 IDE 协议。

主流编码 Agent 对比

框架架构会话持久化权限模型开源
OpenCodeClient/Server + SQLite断线重连,Server 常驻规则集 allow/deny/ask是
Claude CodeCLI + 会话文件--resume 从 transcript 恢复CLAUDE.md + Hooks否
CursorIDE 深度集成项目级索引 + 对话历史内置于 IDE否
Codex (OpenAI)云端 Agent + 沙箱GitHub 原生异步OS 级沙箱否

OpenCode 架构要点

OpenCode 是当前较有代表性的开源编码 Agent,其设计值得作为学习「生产级 Agent 系统」的参考:

1. 事件驱动 + 线程分离

TUI 主线程只负责渲染,Worker 线程处理 LLM 流式输出、文件 I/O、MCP 连接。两者通过 GlobalBus 事件总线通信,UI 无需轮询。

2. 权限优于 Prompt

不同 Agent(Build / Plan)的差异不在 Prompt 措辞,而在可用工具列表。Plan Agent 直接移除写文件工具,比「请在回复中说不要改文件」可靠得多。

3. 工具注册表 + 懒加载

20+ 内置工具(read/write/edit/bash/LSP/web search/MCP)通过 Registry 管理,init() 仅在首次调用时执行,不影响启动速度。

4. ACP 协议集成 IDE

通过 Agent Client Protocol(JSON-RPC 2.0),Zed、VS Code、Cursor 等 IDE 可作为 Client 驱动 Agent,统一管理会话生命周期和权限确认。

5. 项目记忆 AGENTS.md

将项目约定、代码风格、测试命令写入 AGENTS.md,每次会话自动注入——这是零训练成本的领域适配手段。

# AGENTS.md 示例
- 使用 pytest 运行测试,不用 unittest
- 所有 API 变更需同步更新 OpenAPI spec
- 提交前运行 `ruff check .`

编码 Agent 选型建议

  • 需要开源、BYOK、长会话稳定:OpenCode
  • 需要最强单次推理、企业治理与 Hooks:Claude Code
  • 日常 IDE 内嵌、最低切换成本:Cursor
  • GitHub 原生异步 PR 工作流:Codex

更完整的 Agent 理论与 Tool Use 演进,见 4.4 Agent或Agentic Workflow。

不同模型的 Tool Use 调优方案

换模型不只是换 API Key——工具调用的稳定性、并行策略和 Prompt 结构都需要针对性调整。

按模型家族的调优要点

模型工具调用特点推荐调优手段
GPT-4o / o系列strict: true 保证 schema;o 系列内置推理开启 Structured Outputs;复杂任务用 Responses API
Claude 3.5/4tool_use 内容块;Computer Use 扩展工具描述简洁明确;高风险操作加 ask 确认
Gemini 2.x原生 Google Search grounding检索类任务优先用 grounding,减少自建 search 工具
Qwen3 / Qwen3.5需匹配 tool-call-parser(如 qwen3_coder)vLLM 部署时显式配置 parser;工具描述避免与内置指标冲突
开源小模型(<14B)多轮 tool call 易漂移、易死循环限制 max_turns;加格式惩罚;Workflow 约束强于裸 Prompt

通用调优策略

1. 工具描述(Schema)优化

# 差:描述模糊,模型难以选对
{"name": "search", "description": "搜索"}

# 好:说明何时用、输入输出、边界条件
{
    "name": "search_products",
    "description": "当用户询问产品信息、价格、库存或推荐时使用。输入为产品名称或关键词,返回匹配产品列表。",
    "parameters": {
        "type": "object",
        "properties": {
            "query": {"type": "string", "description": "搜索关键词"}
        },
        "required": ["query"]
    }
}

2. 并行 vs 串行

独立工具调用(如同时查两个城市天气)应允许并行;有依赖关系的调用(先 read_file 再 edit)应串行。框架层可用 depends_on 或分轮次约束。

3. 工具结果截断与摘要

Bash 输出、大文件内容会迅速撑爆上下文。生产 Agent 应对 tool_result 做智能截断(保留头尾 + 行数统计)或二次摘要后再回传模型。

4. 终止条件

除模型主动 stop 外,应设置:max_turns、max_tool_calls、重复调用检测(同一工具+参数连续失败 3 次则中断)。

5. 温度与采样

编码 Agent 在 tool selection 阶段宜用较低温度(0–0.3);用户-facing 的最终解释可用较高温度。Qwen 系列在 temperature=0 时易出现重复生成,回测场景常用 0.7 + 固定 seed。

按场景的 Prompt 结构建议

场景System Prompt 放什么User Prompt 放什么
编码 Agent角色、项目规则(AGENTS.md)、工具列表当前任务、相关文件路径、错误信息
交易 Agent角色、交易规则、工作流程当日行情、持仓、现金(动态变化)
客服 Agent品牌语气、政策边界、可用工具用户问题、订单上下文

Agentic-RL 实验中一个典型坑:在工具描述里写「不要用 RSI_15」反而让 Qwen3 更频繁调用该参数。负面约束不如正面 Workflow 有效——详见 Agent微调 的提示词设计章节。

不训练模型时的优化路径

若暂无算力做 Agentic RL,可通过工程手段持续提升 Agent 表现:

  1. 项目记忆文件(AGENTS.md / CLAUDE.md / SOUL.md)
  2. 失败/成功经验沉淀(OpenClaw MEMORY.md、Hermes Skills)
  3. Prompt 与工具 Schema 迭代(基于 benchmark 回归)
  4. RAG 注入领域知识

详见 6.4 Agent持续演进。

小结

选择适合的Agent框架应基于:

  1. 业务需求决定核心功能需求
  2. 技术约束影响框架兼容性
  3. 团队能力影响开发和维护效率

推荐策略:

  • 原型验证: 先使用最熟悉的框架快速验证概念
  • 渐进开发: 从简单功能开始,逐步扩展复杂度
  • 关注可扩展性: 预留自定义和集成的接口

下一章,我们将探讨 Agent持续演进,学习如何在不训练模型的前提下让 Agent 越用越好;也可通过 Agent微调 进行 Agentic RL 后训练。