3.Agent开发基础

基础概念

定义

AI Agent 是一个能自主感知环境、做出决策并执行行动的智能程序。

与"输入→输出"式程序不同,Agent 的核心特征是自主性。

  传统程序 AI Agent
行为模式 像自动售货机:投币→出货 像私人助理:理解需求→自主规划→执行
决策方式 预设规则,固定流程 根据目标动态调整策略
适应能力 遇到意外就报错 遇到障碍会尝试替代方案
例子 计算器 Siri / AutoGPT

核心组件

一个完整的 AI Agent 由 5 个核心模块组成:

┌─────────────────────────────────────────┐
│              AI Agent 架构               │
│                                         │
│  ┌───────────┐    ┌───────────────────┐ │
│  │  感知模块  │───→│   大脑(LLM)     │ │
│  │ (Perception)│   │  推理 + 决策中心  │ │
│  └───────────┘    └────────┬──────────┘ │
│                            │            │
│  ┌───────────┐    ┌───────▼──────────┐  │
│  │  记忆模块  │◄──→│   规划模块       │  │
│  │ (Memory)   │    │  (Planning)      │  │
│  └───────────┘    └───────┬──────────┘  │
│                            │            │
│                   ┌────────▼──────────┐  │
│                   │   工具模块        │  │
│                   │  (Tools/Actions)  │  │
│                   └──────────────────┘  │
└─────────────────────────────────────────┘
  1. 感知模块(Perception)— Agent 的"眼睛和耳朵"。接收用户输入、环境变化、外部信号。例:接收一条用户消息、读取一个文件、监听 API 回调。
  2. 大脑(LLM)— Agent 的"思考中枢"。理解意图、推理分析、生成方案。例:GPT-4、Claude、通义千问。
  3. 记忆模块(Memory)— Agent 的"笔记本"。
    • 短期记忆:当前对话上下文(工作记忆)。
    • 长期记忆:持久化存储的知识和经验(长期知识库)。例:向量数据库存储的历史交互记录。
  4. 规划模块(Planning)— Agent 的"策略师"。将复杂目标拆解为可执行步骤。常见策略:ReAct(推理+行动交替)、Chain-of-Thought(思维链)。例:"帮我部署网站" → 选服务器→写代码→配置域名→上线。
  5. 工具模块(Tools/Actions)— Agent 的"手脚"。搜索引擎、代码执行器、文件读写、API 调用。例:调用天气 API 查询、执行 Python 代码、操作数据库。

应用场景

行业 应用场景 Agent 做了什么
🛒 电商 智能客服 自主查询订单、处理退款、推荐商品
💻 软件开发 编程助手 读取代码→分析Bug→编写修复→运行测试
📊 金融 投研分析 自动抓取财报→数据分析→生成研报
🏥 医疗 辅助诊断 读取病历→检索文献→给出建议方案
📚 教育 个性化辅导 评估学生水平→定制学习路径→互动答疑
🏠 智能家居 场景联动 感知温度/光线→自主调节空调/灯光

工作模式

模式 核心机制 适用场景 优点 缺点 成本/延迟
ReAct ⭐最主流 Thought→Action→Observation 循环。模型边思考边执行,根据上一步结果决定下一步 探索性强、动态变化、步骤无法提前确定的任务(客服排查、信息搜索、代码调试) 灵活性高、适应性强、推理过程可解释 多轮调用导致延迟高、成本增加;长任务易丢失目标;对工具报错缺乏免疫力 成本中高/延迟中高
CoT 思维链 一步步推理不动手。问题→推理1→推理2→答案 数学推理、逻辑分析、多步推导 推理过程清晰 不调用工具,无法与外部环境交互 成本低/延迟低
ToT 思维树 生成多方案→评估→选最佳。多条路径并行探索 创意生成、复杂决策、博弈问题 能跳出局部最优 生成成本高,评估难度大 成本高/延迟高
Reflection 反思 生成→批评→改进→再批评循环。Reflector 批评输出,Generator 据此修订,至质量达标 质量敏感型任务(内容创作、代码生成、报告撰写) 显著降低幻觉、自我纠错提升质量、适合从失败中学习 每轮多一次 LLM 调用,Token 成本翻倍;延迟高 成本高/延迟高
Plan-and-Execute 先全局规划后分步执行。Planner 生成步骤清单,Executor 逐步执行,Replanner 根据结果动态调整 流程长、步骤稳定、子任务依赖性高、需审计的任务(标准化巡检、常规故障排查、高风险操作) 稳定性强、不易遗漏步骤、计划可审查、执行成本可控 初始计划可能失准;应对突发变化灵活性差,依赖 Replanner 纠偏 成本中/延迟中低
Function Calling 模型直接输出结构化参数调用 API,无显式推理链 单步或简单顺序任务(翻译、摘要、分类、单次检索) 实现简单、延迟极低、成本最省 无法处理多步推理复杂任务 成本低/延迟低

选型建议:

  • 简单任务优先用 Function Calling。
  • 长流程需稳定首选 Plan-and-Execute,配 Replanner 动态纠偏。
  • 探索性任务用 ReAct,设最大步数防死循环。
  • 高质量要求在上述基础上叠加 Reflection,需接受成本翻倍。
  • 生产实践多为混合模式:Plan-and-Execute 全局统筹,子任务内部用 ReAct 执行,关键节点加 Reflection 质检。

实际开发中模式经常组合,比如 ReAct 决策 + 多 Agent 协作 + Ecomode 执行。选择取决于任务复杂度、成本和精度要求。

按决策方式(Agent 怎么"想")

以下是 LangChain 中实现这 6 种决策方式的代码案例:

from langchain.agents import create_agent
from langchain_core.tools import tool

# ---------- 1. ReAct(create_agent 默认就是 ReAct)----------
# Agent 边推理边调工具,根据工具结果决定下一步

@tool
def search_weather(city: str) -> str:
    """查询城市天气"""
    return f"{city}:晴,25°C"

react_agent = create_agent(
    model=model_openai,
    tools=[search_weather],
    system_prompt="你是天气助手,根据需要调用工具查询天气。",
    max_iterations=5,  # 防死循环
)
result = react_agent.invoke({
    "messages": [{"role": "user", "content": "北京天气怎么样?"}]
})


# ---------- 2. CoT 思维链(不调工具,靠模型推理)----------
# 用带推理能力的模型 + Prompt 引导,不走 Agent 循环

from langchain_core.prompts import ChatPromptTemplate

cot_prompt = ChatPromptTemplate.from_messages([
    ("system", "一步步推理后再给答案。"),
    ("user", "{question}"),
])
cot_chain = cot_prompt | model_openai
result = cot_chain.invoke({"question": "一个水池有两个进水管..."})  # 数学推理


# ---------- 3. ToT 思维树(无内置,需自己组装)----------
# 生成多个候选方案 → 评分 → 选最优

@tool
def generate_options(problem: str) -> list[str]:
    """生成多个候选方案"""
    # 实际是多次调用模型
    return ["方案A", "方案B", "方案C"]

@tool
def evaluate_option(option: str) -> float:
    """对方案评分"""
    return 0.85

# 自行循环:generate → evaluate → 取最高分
# LangChain 无内置 ToT Agent


# ---------- 4. Reflection 反思(用中间件在 after 钩子批评-修订)----------
# 自定义中间件,agent 执行后让 Reflector 批评,Generator 修订

from langchain.agents.middleware import AgentMiddleware

class ReflectionMiddleware(AgentMiddleware):
    async def after_agent(self, state, runtime):
        output = state["messages"][-1].content
        # 让模型批评自己的输出
        critique = await model_openai.ainvoke(
            f"批评这段回答的不足:{output}"
        )
        # 根据批评修订
        revised = await model_openai.ainvoke(
            f"根据批评修订:{output}\n批评:{critique.content}"
        )
        state["messages"][-1].content = revised.content
        return state

reflect_agent = create_agent(
    model=model_openai,
    tools=[],
    system_prompt="你是写作助手。",
    middleware=[ReflectionMiddleware()],
)


# ---------- 5. Plan-and-Execute(无内置完整版,自己组装三部分)----------
# Planner 规划 → Executor 逐步执行 → Replanner 动态纠偏

@tool
def make_plan(task: str) -> list[str]:
    """生成步骤清单"""
    return ["步骤1: 收集资料", "步骤2: 分析", "步骤3: 生成报告"]

@tool
def execute_step(step: str) -> str:
    """执行单步(内部可跑一个 ReAct agent)"""
    return f"{step} 已完成"

plan = make_plan.invoke({"task": "写市场分析报告"})
for step in plan:
    result = execute_step.invoke({"step": step})
    # Replanner:根据 result 决定继续、跳过或改 plan
    # 实际用一次 LLM 调用判断


# ---------- 6. Function Calling(绑工具直接调,不走 Agent 循环)----------
# 模型原生 function calling,单步任务

bound_model = model_openai.bind_tools([search_weather])
response = bound_model.invoke("北京天气怎么样?")
# response.tool_calls 直接拿到结构化参数,单次调用

按架构模式(Agent 怎么"组织")

模式 结构 案例
单 Agent 用户 ↔ 一个 Agent 简单问答、单一任务处理
Pipeline 流水线 A→B→C,任务按顺序在 Agent 间流转 Dify
Hierarchical 分层 调度者→执行者们。管理者 Agent 分配协调,其他 Agent 各司其职 AutoGen、CrewAI hierarchical 模式
Discussion 讨论 A↔B↔C 互相质疑。多 Agent 通过对话讨论解决问题 AutoGen 群聊模式
Swarm 群体 并行执行→合并。大量简单 Agent 并行工作,涌现集体智能 OpenAI Swarm
Multi-Agent 协作 多角色分工协作。多个 Agent 各司其职,通过通信协议交换信息协同完成任务 MetaGPT、CrewAI
Routing 路由分发 先分类后分发。对用户输入做意图识别,转交给最合适的专精模型或 Agent 客服系统按问题类型分发

按执行模式(Agent 怎么"跑")

模式 一句话 适用
Autopilot 全自动 给目标,自己搞定 确定性重复任务
Copilot 人机协作 人拍板,AI 干活 日常开发辅助
Ultrapilot 并行 3-5 个同时干 大规模任务
Ecomode 经济 简单用小模型,复杂用大模型 省成本

按记忆模式(Agent 怎么"记")

模式 特点
无状态 用完即忘,适合一次性任务
短期记忆 记住当前对话,关了就忘
长期记忆 向量库持久化,跨会话记住

Agent 框架生态(2026 全景)

主流 AI Agent 生态分六个梯队:代码优先框架、多智能体协作框架、低代码平台、国产自研框架、任务执行与垂直场景、终端 AI Coding Agent。技术底座上 LangChain 生态与 AutoGen 体系并立,MCP(Model Context Protocol)正成为跨框架工具调用标准。

代码优先型开发框架

通过 SDK / 库提供 Agent 编排能力,灵活性最高,适合自研能力强的工程团队。

框架 开发方 核心特点 适用场景 GitHub Stars 开源
LangChain LangChain 最通用的 LLM 应用开发底座,配套 LangSmith 观测 快速原型 + 长时任务 146.3k 开源,生态最大
LangGraph LangChain 图/状态机运行时,支持分支、重试、断点续跑、人机协同 需要精细控制的复杂生产级流水线 41.6k 开源
LlamaIndex Workflows LlamaIndex 事件驱动编排,深度绑定 RAG 文档/数据密集型管线 52.2k 开源
DSPy Stanford NLP "编程而非提示词",编译式优化 Prompt 学术研究、Prompt 自动优化 27.5k 开源
Agno(原 Phidata) Agno "AgentOS",实例化约 2μs,3.75KB 内存 高性能、多模态、低延迟 32.9k 开源
OpenAI Agents SDK OpenAI Swarm 继任者,轻量 handoffs + 内置沙箱 与 GPT 系列深度绑定 15.0k 开源
Claude Agent SDK Anthropic 面向 Claude 优化的 Agent 循环 Claude 生态长程任务 — 官方 SDK
Google ADK Google Code-first,双向音视频流,绑定 Gemini + Vertex AI Google 云生态、多模态 21.5k 开源
Microsoft Agent Framework Microsoft AutoGen + Semantic Kernel 的统一继任者 企业级 .NET/Python 栈 — 开源
Pydantic AI Pydantic 类型安全、结构化输出友好 可靠性要求高的 Python 项目 19.9k 开源
Mastra Mastra TypeScript 原生,XState 工作流,可视化编辑 Node.js 全栈团队 28.0k 开源
Vercel AI SDK Vercel 前端友好,多模型路由 Web 端 Agent 应用 — 开源
Smolagents HuggingFace 千行级代码的极简 Agent 轻量原型、教学 — 开源
Strands Agents AWS AWS 官方轻量框架 AWS 生态 — 开源

多智能体协作框架

解决多个 Agent 之间如何分工、对话、协同的问题。

框架 开发方 核心特点 适用场景 GitHub Stars 开源
AutoGen Microsoft 对话式多 Agent + 事件驱动 GraphFlow 多 Agent 头脑风暴、需人工介入 61.0k 维护模式,官方推荐迁移至 Microsoft Agent Framework
CrewAI CrewAI 角色/任务/流程隐喻,支持低代码编辑器 内容生产、研究、营销流水线 58.6k 开源
MetaGPT DeepWisdom 模拟软件公司分工(产品/架构师/工程师) 自动化软件开发 — 开源
ChatDev 清华 OpenBMB "虚拟软件公司"范式 多 Agent 软件开发研究 33.8k 开源
AgentScope 阿里达摩院 强调"可见、可懂、可信"的可观测性 生产级多 Agent 应用 28.3k 开源
OpenAI Swarm OpenAI 极简 handoffs,无状态 教学与原型 — 已归档,被 Agents SDK 取代
AutoGen Studio Microsoft AutoGen 的可视化套件 低代码多 Agent 编排 — 开源

低代码 / 可视化开发平台

通过可视化画布、模板与插件生态让非纯工程师也能搭 Agent。

平台 开发方 核心特点 适用场景 开源
n8n n8n 400+ 集成节点 + 原生 AI Agent 节点 自动化 + Agent 混合编排 204.3k Stars,开源 + 企业版
Dify Dify.AI 可视化工作流 + RAG + LLMOps,插件生态最广 自有产品内嵌 Agent、内部工具 155.7k Stars,开源 + 企业版
Langflow Langflow 拖拽式 Builder,支持 MCP 服务端一键发布 可视化快速原型 154.8k Stars,开源
Coze(扣子)/ Coze Studio 字节跳动 字节生态、模板丰富、Bot 分发 C 端 Bot、字节系集成 专业版开源
FastGPT 环界云计算 知识库问答 + 工作流编排 中小企业知识库 开源
百度千帆 AppBuilder 百度 文心大模型 + RAG + 知识增强 政企、知识密集型行业 商业化
腾讯云 ADP 腾讯 打通微信/企微/会议分发 腾讯生态内企业 商业化
阿里云百炼 阿里 MaaS + Agent 一体,绑定通义系 + 钉钉 阿里云/钉钉用户 商业化
火山引擎 HiAgent 字节 企业级私有化 Agent 工作站 大型企业私有化部署 商业化
SuperAGI SuperAGI 可视化构建器 独立开发者、原型 开源

国产自研框架

框架 开发方 核心特点 适用场景 开源
DeepSeek Harness DeepSeek "Everything is a plugin" 架构,内置 Web UI 官方 Agent Harness 标杆 224.1k Stars,开源
Qwen-Agent 阿里通义 Function Calling + MCP + 代码解释器 + 长文本 基于 Qwen 的 Agent 16.8k Stars,开源
ModelScope-Agent 阿里魔搭 多模型接入、可视化 AgentFabric 多模型对比、原型 开源
XAgent 阿里 / OpenBMB 双循环(外循环规划 + 内循环执行) 复杂自主任务 开源
Langchain-Chatchat 社区 私有化 RAG 知识库问答 数据敏感场景的企业知识库 开源
Eino 字节跳动 CloudWeGo Go 语言 Agent 框架,微服务基因 字节系 Go 技术栈 开源
Lagent 上海 AI Lab(InternLM) 轻量 Agent 框架 InternLM 生态 开源
UI-TARS 字节跳动 GUI 自动化 Agent 移动端/桌面端界面操作 开源
Rich AIBox / Agentar / 清流 / 星辰 Agent 彩讯 / 蚂蚁 / 智谱 / 科大讯飞 行业中台型方案 金融、能源、政企 商业化

任务执行与垂直场景框架

聚焦让 Agent 把一件事做完,而非通用编排。

框架/产品 核心特点 适用场景 开源
Browser Use 让 LLM 操控浏览器,DOM 结构化 网页自动化、信息采集 114.6k Stars,开源
Manus 通用任务执行 Agent(自主规划 + 工具调度 + 交付) 端到端研究与任务 闭源
OpenManus Manus 的开源复刻 多步任务、自主工作流 开源
OpenHands(原 OpenDevin) AI 软件工程师,CLI 驱动 代码生成、Linux 自动化 开源
Devin / Replit Agent 自然语言生成完整应用 全栈应用搭建 商业化
Parlant 行为控制型 Agent,保证指令遵循 合规敏感的客服/对话 开源

终端 AI Coding Agent

2025-2026 年崛起的独立品类。区别于任务执行型(Manus、OpenHands 是云端自治 Agent),终端 Coding Agent 嵌入开发者工作流:跑在终端、直接读写文件系统与 Shell、以 Agent Loop(读→改→执行→反馈)为核心、人在回路中持续审查。与 LangGraph 这类编排框架是互补关系——编排框架构建系统,CLI Agent 把代码写完。

三大代表对比:

维度 Claude Code OpenCode Pi Agent
开发方 Anthropic(官方) SST / 社区 Earendil Inc.(Mario Zechner / badlogic 主导)
形态 终端 CLI + VS Code / JetBrains / Desktop / Web 全端 终端 CLI + 桌面 App + 编辑器扩展,共享同一引擎 纯终端 TUI,无 IDE 集成
模型绑定 默认绑定 Claude(Sonnet 4.5 / Opus) 完全模型无关,支持 75+ Provider + 本地模型 15+ Provider,支持会话中切换
核心机制 Agent Loop + 五层扩展(Skills / Hooks / Subagents / MCP / Plugins) Agent 框架 + LSP 集成,Provider 可插拔 极简主义:约 1000 token 系统提示 + 4 个核心工具
项目记忆 CLAUDE.md + 自动记忆 项目配置文件 AGENTS.md(分级加载)+ 可替换 SYSTEM.md
MCP 支持 一等公民 支持 刻意不支持,主张用 CLI 工具 + README 按需读取替代
安全/权限 Plan Mode、Hooks 拦截、权限弹窗齐全 标准 hooks 与权限机制 默认 YOLO(无权限弹窗、无沙箱)
哲学 小 Agent 循环 + 大扩展面,工程化最完整 开源、可换模型、可自托管 原语而非功能——不内置 Sub-agents / Plan Mode / Todos,鼓励自用 TypeScript 扩展
适用人群 Claude 订阅用户、企业团队、开箱即用 想自由切换模型、注重隐私/成本、开源派 极客、终端重度用户、想完全掌控上下文

同类产品全景:

官方绑定派(与自家模型深度耦合):

  • Claude Code(Anthropic)
  • Codex CLI(OpenAI,GPT 系列)
  • Gemini CLI(Google,Gemini 系列,1M 上下文免费额度)
  • Cursor CLI(Cursor,多模型但有自家产品感)
  • Qwen Code(阿里,基于 Qwen 系列)
  • Kimi CLI(月之暗面)
  • Grok Build(xAI)

开源 / 模型无关派:

工具 开发方 核心特点 GitHub Stars
OpenCode SST / 社区 75+ Provider 可插拔,LSP 集成,桌面+CLI 同引擎 ~207k(2026)
Pi Agent Earendil 4 个工具的极简主义,YOLO 默认 ~84k(2026)
Aider Paul Gauthier 最早的开源 pair programmer,以 git commit 集成著称 49.0k
DeepSeek Harness DeepSeek "Everything is a plugin" 架构,内置 Web UI 224.1k
Amp Sourcegraph 自由模式(Free Mode),强代码理解 开源
Crush Charm TUI 颜值高,多 Provider 开源
OpenClaw 社区 基于 Pi 生态的大型集成项目 开源
Windsurf CLI Codeium 与 Windsurf IDE 同源 闭源

原文数据:Pi Agent 在 4 个月内从 17.5k 飙升到 84k Stars;OpenCode 同期从几万跃至 20 万+。

选型速查

  • 精细控制的生产级单 Agent 流水线 → LangGraph 或 Microsoft Agent Framework
  • 基于角色的多 Agent 团队 → CrewAI 或 AgentScope
  • 与 GPT/Claude/Gemini 深度绑定 → 对应官方 Agents SDK
  • 文档/RAG 密集型应用 → LlamaIndex 或 Langchain-Chatchat
  • 业务/产品人员搭建,不写代码 → Dify、Coze、FastGPT、n8n
  • 使用通义千问模型栈 → Qwen-Agent + 百炼
  • 端到端"替我完成任务" → Manus、OpenManus、OpenHands
  • 浏览器/桌面自动化 → Browser Use、UI-TARS
  • 企业级中台 → 彩讯 Rich AIBox、迈富时 AI-Agentforce、用友 BIP 智能体
  • Claude 订阅用户/企业团队标准化工作流 → Claude Code
  • 自由切换 75+ 模型、开源可控 → OpenCode 或 Aider
  • 终端党、上下文预算敏感、自己造轮子 → Pi Agent
  • DeepSeek 生态 → DeepSeek Harness
  • OpenAI 生态/后台异步任务 → Codex CLI
  • 重度使用 Gemini → Gemini CLI

趋势观察

  1. 从单 Agent 到多 Agent 协同:行业基线从"一个 Agent 调一个模型"演进为"多 Agent 协同 + 多模型智能路由"。竞争焦点从开发工具属性转向全生命周期的生产级治理能力(权限、审计、可观测、成本管控)。
  2. MCP 拉平生态:Anthropic 推出的 Model Context Protocol 正成为跨框架工具调用的事实标准,让 LangGraph、CrewAI、Claude Code、OpenCode 等异构框架共享同一套工具服务。
  3. "Agent Loop + 扩展层"成为新基础设施:终端 Coding Agent 的爆发说明行业正在把 Agent Loop + 扩展层(Skills / Hooks / Plugins / MCP)当作新的开发者基础设施形态。
  4. 极简与重扩展两种哲学并存:Pi Agent 用 4 个工具砍掉一切"聪明"的设计反而拿到高 benchmark,Claude Code 用五层扩展体系占据企业级心智。两条路线短期不会收敛。
  5. 国产框架进入全球第一梯队:DeepSeek Harness 224k、Dify 155k 等项目的 Star 数已超过多数硅谷同类产品。

零基础入门

技术准备

必备编程基础:Python 基础即可开始。

学习优先级:

  • ★★★ 变量、数据类型、条件判断、循环
  • ★★★ 函数定义与调用
  • ★★ 字典、列表操作
  • ★★ 文件读写
  • ★ 类与对象(面向对象基础)
  • ★ 异步编程(async/await,进阶再学)

推荐学习路径(4 周速成):

周次 学习内容 资源推荐 目标
第1周 Python 基础语法 Python 官方教程 / 廖雪峰 Python 教程 能写简单脚本
第2周 函数 + 数据结构 LeetCode 简单题(每天1-2题) 熟练操作数据
第3周 API 调用 + JSON requests 库实战 能调用外部 API
第4周 面向对象 + 类 理解 class 基本用法 能组织代码结构

必备工具清单:

工具 用途 安装方式
Python 3.10+ 编程语言 python.org 下载
VS Code 代码编辑器 code.visualstudio.com
Git 版本管理 git-scm.com
pip / uv 包管理器 Python 自带 / pip install uv
OpenAI API Key LLM 访问 platform.openai.com 注册

调用大模型

案例1:直接使用 OpenAI SDK 调用大模型。

from openai import OpenAI
client = OpenAI(api_key="你的key",
                base_url="https://platform.aitools.cfd/api/v1")

response = client.chat.completions.create(
    model="zhipu/glm-4-flash",
    messages=[
      {"role": "system", "content": "你是张三的AI助手"},
      {"role": "user", "content": "你好,你是谁?"},
    ],
    stream=False
)
print(response.choices[0].message.content)

案例2:最简 Agent。理解 Agent 的基本循环——感知→思考→行动。这个 Agent 已包含感知(接收输入)和思考(LLM 推理),还没有记忆和工具。

from openai import OpenAI

client = OpenAI(api_key="你的API密钥")

def simple_agent(user_input: str) -> str:
    """最简单的 Agent:接收输入 → LLM 思考 → 返回输出"""

    system_prompt = """你是一个有帮助的AI助手。
    回答问题时,先分析用户需求,再给出清晰的结构化回答。"""

    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_input}
        ]
    )

    return response.choices[0].message.content

# 测试
result = simple_agent("我想学习Python,应该从哪里开始?")
print(result)

案例3:带记忆的 Agent。self.messages 是 Agent 的短期记忆。每次对话带上完整历史,LLM 就能"记住"之前的内容。

from openai import OpenAI
client = OpenAI(api_key="你的API密钥")

class MemoryAgent:
  def __init__(self):
    # 系统内存保存上下文
    self.messages = [
      {"role": "system", "content": "你是一个有帮助的AI助手,能记住之前的对话内容。"}
    ]

  def chat(self, user_input: str) -> str:
    # 感知:记录用户输入
    self.messages.append({"role": "user", "content": user_input})

    # 思考:LLM 推理(自动包含历史记忆)
    response = client.chat.completions.create(
        model="zhipu/glm-4-flash",
        messages=self.messages
    )

    assistant_message = response.choices[0].message.content

    # 记忆:保存助手回复
    self.messages.append({"role": "assistant", "content": assistant_message})

    return assistant_message

  def show_memory(self):
    """查看 Agent 的记忆"""
    print(f"记忆中有 {len(self.messages)} 条消息")
    for msg in self.messages[1:]:  # 跳过 system prompt
      role = "👤用户" if msg["role"] == "user" else "🤖助手"
      print(f"{role}: {msg['content'][:50]}...")

# 测试
agent = MemoryAgent()
print(agent.chat("我叫小明,我在学Python"))
print(agent.chat("我叫什么名字?"))  # Agent 能记住
agent.show_memory()

案例4:带工具的 Agent。让 Agent 从"只会说话"变成"能做事"。这是 ReAct 模式的核心——LLM 自主决定何时调用工具、调用哪个工具、如何使用工具结果。

import json
from openai import OpenAI

client = OpenAI(api_key="你的key",
                base_url="https://platform.aitools.cfd/api/v1")

# 定义工具函数
def get_weather(city: str) -> str:
  """模拟天气查询(实际项目中调用真实API)"""
  weather_data = {
    "北京": "晴天,25°C",
    "上海": "多云,22°C",
    "深圳": "小雨,28°C"
  }
  return weather_data.get(city, f"{city}:暂无天气数据")

def calculate(expression: str) -> str:
  """安全计算数学表达式"""
  try:
    allowed = set("0123456789+-*/.() ")
    if all(c in allowed for c in expression):
      return str(eval(expression))
    return "不安全的表达式"
  except:
    return "计算错误"

# 工具注册表
tools = [
  {
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "查询指定城市的天气",
      "parameters": {
        "type": "object",
        "properties": {
          "city": {"type": "string", "description": "城市名称"}
        },
        "required": ["city"]
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "calculate",
      "description": "计算数学表达式",
      "parameters": {
        "type": "object",
        "properties": {
          "expression": {"type": "string", "description": "数学表达式"}
        },
        "required": ["expression"]
      }
    }
  }
]

# 工具执行映射
tool_map = {
  "get_weather": get_weather,
  "calculate": calculate
}

class ToolAgent:
  def __init__(self):
    self.messages = [
      {"role": "system", "content": "你是一个能查询天气和做计算的AI助手。根据用户需求选择合适的工具。"}
    ]

  def chat(self, user_input: str) -> str:
    self.messages.append({"role": "user", "content": user_input})

    # 第一步:LLM 决定是否需要调用工具
    response = client.chat.completions.create(
        model="openai/gpt-oss-20b",
        messages=self.messages,
        tools=tools
    )

    message = response.choices[0].message

    # 第二步:如果 LLM 决定调用工具
    if message.tool_calls:
      for tool_call in message.tool_calls:
        func_name = tool_call.function.name
        func_args = json.loads(tool_call.function.arguments)

        print(f"  🔧 调用工具: {func_name}({func_args})")

        # 执行工具:展开字典为关键字参数
        result = tool_map[func_name](**func_args)
        print(f"  📋 工具结果: {result}")

        # 把工具结果告诉 LLM
        self.messages.append(message)
        self.messages.append({
          "role": "tool",
          "tool_call_id": tool_call.id,
          "content": result
        })

      # 第三步:LLM 基于工具结果生成最终回答
      final_response = client.chat.completions.create(
          model="openai/gpt-oss-20b",
          messages=self.messages
      )
      final_message = final_response.choices[0].message.content
      self.messages.append({"role": "assistant", "content": final_message})
      return final_message

    # 不需要工具,直接回答
    self.messages.append({"role": "assistant", "content": message.content})
    return message.content

# 测试
agent = ToolAgent()
print(agent.chat("北京今天天气怎么样?"))
print("---")
print(agent.chat("帮我算一下 (123 + 456) * 2"))

案例5:多步骤规划 Agent。本质是提示词工程——Agent 自主拆解复杂任务分步执行。

from openai import OpenAI

client = OpenAI(api_key="你的key",
                base_url="https://platform.aitools.cfd/api/v1")

class PlanningAgent:
  """能自主规划多步骤任务的 Agent"""

  def __init__(self):
    self.messages = [
      {"role": "system", "content": """你是一个智能规划助手。
当收到复杂任务时,你会:
1. 先制定执行计划(列出步骤)
2. 逐步执行每个步骤
3. 每步完成后评估结果
4. 如有偏差,调整计划

请用以下格式输出计划:
📋 计划:
1. [步骤1]
2. [步骤2]
...

然后逐步执行。"""}
    ]
    self.max_iterations = 5  # 防止无限循环

  def run(self, task: str) -> str:
    self.messages.append({"role": "user", "content": task})

    for i in range(self.max_iterations):
      response = client.chat.completions.create(
          model="openai/gpt-oss-20b",
          messages=self.messages
      )

      reply = response.choices[0].message.content
      self.messages.append({"role": "assistant", "content": reply})

      print(f"\n--- 迭代 {i+1} ---")
      print(reply)

      # 检查是否完成
      check = client.chat.completions.create(
          model="openai/gpt-oss-20b",
          messages=self.messages + [
            {"role": "user", "content": "任务是否已完成?只回答'是'或'否'"}
          ]
      )

      if check.choices[0].message.content.strip().startswith("是"):
        print("\n✅ 任务完成!")
        return reply

      # 继续执行
      self.messages.append({"role": "user", "content": "请继续执行下一步。"})

    return "⚠️ 达到最大迭代次数"

# 测试
agent = PlanningAgent()
agent.run("帮我分析学习Python的完整路线图,包括每个阶段的学习重点和时间安排")

注:案例5 用单轮问答判断"任务是否完成"可靠性低。生产环境应改用结构化输出或独立校验器。

框架与平台

主流框架对比:

框架 适合人群 特点 学习难度
LangChain 最广泛的入门选择 生态丰富、组件多、文档全 ⭐⭐
CrewAI 团队协作场景 多Agent角色编排、简洁易用 ⭐⭐
AutoGen 微软出品 多Agent对话、研究导向 ⭐⭐⭐
Semantic Kernel .NET/企业开发 微软生态、企业级 ⭐⭐⭐
Dify 低代码/快速搭建 可视化编排、部署方便 ⭐
Coze 零代码入门 扣子平台、拖拽式 ⭐

LangChain 快速入门

# 安装:pip install langchain langchain-openai

from langchain.agents import create_agent
from langchain_core.tools import tool

from _5_机器学习._04_langchain.common import model_openai


# 第一步:定义工具
@tool
def search_movie(title: str) -> str:
  """搜索电影信息"""
  movies = {
    "星际穿越": "2014年,导演:克里斯托弗·诺兰,评分:9.4",
    "盗梦空间": "2010年,导演:克里斯托弗·诺兰,评分:9.3"
  }
  return movies.get(title, "未找到该电影")

@tool
def recommend_movie(genre: str) -> str:
  """根据类型推荐电影"""
  recs = {
    "科幻": "推荐:《星际穿越》《银翼杀手2049》《降临》",
    "喜剧": "推荐:《布达佩斯大饭店》《功夫》《让子弹飞》"
  }
  return recs.get(genre, "暂无该类型推荐")

# 第二步:创建 Agent
tools = [search_movie, recommend_movie]
agent = create_agent(
    model=model_openai,
    tools=tools,
    system_prompt="你是一个电影推荐助手,能搜索电影信息和根据类型推荐电影。"
)

# 第三步:运行
result = agent.invoke({
  "messages": [{"role": "user", "content": "我想看一部科幻电影,帮我搜索星际穿越的信息"}]
})

for msg in result["messages"]:
  if hasattr(msg, "content") and msg.content:
    print(f"[{msg.type}] {msg.content}")

简单的 Agent 调试技巧

# 技巧1:开启 verbose 模式查看 Agent 思考过程
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 技巧2:打印完整消息链
for msg in agent.messages:
    print(f"[{msg['role']}] {msg['content'][:100]}")

# 技巧3:限制迭代次数防止死循环
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    max_iterations=5,  # 最多5轮
    early_stopping_method="generate"  # 超限后生成最终回答
)

# 技巧4:添加重试机制
import time
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(3), wait=wait_exponential(min=1, max=10))
def call_llm_with_retry(messages):
    return client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages
    )

进阶

扩展能力

构建 AI Agent 建议按顺序配置的 5 个核心工具,系统性解决安全、成本与调试痛点:

  1. 隐私(密钥管理):用 direnv 配合密钥管理器(如 1Password CLI),基于项目自动加载/卸载环境变量,API 密钥等凭证永不明文存盘,防止密钥泄露。
  2. 成本与路由(模型代理):用 litellm 或 Portkey 代理所有模型供应商调用。实现响应缓存省账单、遇限流自动降级、设预算护栏防意外开销、智能路由到性价比最优的模型。
  3. 可复现性(依赖与上下文管理):用 uv 锁定精确依赖。每次评估套件(eval suite)通过后做一次 Git 提交,提交信息记录模型版本和通过率,确保任何历史运行可精确复现和追溯。
  4. 可见性与调试(流量监控):在 Agent 的所有 LLM 调用前部署 mitmproxy。实时窥探 Agent 与模型的完整对话、实际 token 成本,及时发现响应中的意外指令或 Prompt 注入攻击。
  5. 评估(标准化测试框架):用 inspect-ai 框架系统化评估 Agent。提供可重复、可比较的量化分数,包含对高风险行为的预设测试,评估结果比自写测试工具更具可信度和可复现性。

文章信息

张雪随笔
master
Homepage
Issues
Download

This Software is under the terms of The Unlicense.