DeepSeek Agent 开发教程
从零构建智能 Agent。掌握 ReAct 推理模式、Function Calling 工具调用、多 Agent 协作、记忆管理、规划与执行。完整 Python 代码,即学即用。
开始学习什么是 AI Agent?为什么需要它?
AI Agent(智能体)是能够自主感知环境、制定计划、调用工具并执行任务的 AI 系统。与传统的 Chatbot 不同,Agent 不只是回答问题,而是能够主动思考和行动,完成复杂的工作流程。
Agent 概述
理解 AI Agent 的核心概念、架构组件以及与传统 Chatbot 的本质区别,是构建智能 Agent 的理论基础。
Agent vs 传统 Chatbot
| 对比维度 | 传统 Chatbot | AI Agent |
|---|---|---|
| 交互方式 | 单轮问答,一问一答 | 多步推理,自主执行任务链 |
| 能力边界 | 仅基于训练数据生成文本 | 可调用外部工具、API、数据库 |
| 记忆能力 | 上下文窗口内临时记忆 | 短期记忆 + 长期记忆(向量存储) |
| 任务复杂度 | 简单对话,信息查询 | 多步骤任务,工作流自动化 |
| 典型场景 | 客服问答、闲聊、内容生成 | 数据分析、自动报告、代码执行、流程编排 |
Agent 四大核心组件
| 组件 | 英文 | 作用 | 技术实现 |
|---|---|---|---|
| 大语言模型 | LLM | Agent 的大脑,负责推理和决策 | DeepSeek-Chat / DeepSeek-Reasoner |
| 工具 | Tools | Agent 的手脚,执行具体操作 | Function Calling / API / 代码执行器 |
| 记忆 | Memory | 存储和检索历史信息 | 对话历史 / 向量数据库 / 知识图谱 |
| 规划 | Planning | 分解任务,制定执行策略 | ReAct / Plan-and-Execute / Tree-of-Thought |
Agent 工作流程
- 感知(Perception):接收用户输入,理解任务意图和目标
- 思考(Thinking):分析任务,制定执行计划,决定下一步行动
- 行动(Action):调用工具执行具体操作(搜索、计算、API 调用等)
- 观察(Observation):获取工具执行结果,评估是否达成目标
- 循环(Loop):根据观察结果决定继续执行还是输出最终答案
这个 "思考-行动-观察" 循环就是 Agent 的核心工作模式。更多关于 DeepSeek 模型的基础知识,请查看 DeepSeek 模型架构详解。
ReAct 模式
ReAct(Reasoning + Acting)是 Agent 最核心的推理模式。它将推理和行动交替进行,让模型在思考中调用工具,在行动中验证推理。
ReAct 循环:Thought - Action - Observation
| 步骤 | 说明 | 示例 |
|---|---|---|
| Thought | 分析当前状态,决定下一步做什么 | "我需要查询今天的天气,然后决定是否建议带伞" |
| Action | 执行具体的工具调用 | 调用 get_weather("北京") 函数 |
| Observation | 获取工具返回结果,评估是否完成任务 | "北京今天晴,气温 25 度,无需带伞" |
DeepSeek + ReAct 完整实现
以下代码展示了一个完整的 ReAct Agent,使用 DeepSeek 模型进行推理,并调用搜索和计算工具:
ReAct 模式的关键要点
- 每次只执行一个 Action,等待 Observation 后再继续
- Thought 和 Action 必须严格遵守格式,便于正则解析
- 设置 max_steps 防止无限循环,通常 5-10 步足够
- 工具函数需要做好错误处理,返回有意义的结果
- DeepSeek 的推理能力非常适合 ReAct 模式
Function Calling 工具调用
DeepSeek 支持原生的 Function Calling 能力,让模型能够自动识别何时需要调用工具,并生成结构化的函数调用参数。这比手动解析 ReAct 格式更可靠、更高效。
定义工具 Schema
使用 OpenAI 兼容的 Function Calling 格式定义工具:
Function Calling Agent 主循环
Function Calling 优势
- 模型自动判断何时需要调用工具,无需手动解析格式
- 参数以结构化 JSON 传递,避免正则解析错误
- 支持并行调用多个工具(tool_choice 设为 "auto")
- DeepSeek API 完全兼容 OpenAI Function Calling 格式
- 可以混合使用:模型可在一次回复中同时调用工具和生成文本
LangChain Agent 集成
LangChain 提供了高级的 Agent 抽象,封装了 ReAct 循环和工具管理。使用 LangChain 可以让 Agent 开发更加简洁、可维护,同时支持多种 Agent 类型和工具组合。
安装依赖
创建 LangChain Agent
AgentExecutor 参数说明
| 参数 | 说明 | 推荐值 |
|---|---|---|
| verbose | 是否打印详细执行过程 | 开发时 True,生产时 False |
| handle_parsing_errors | 自动处理模型输出格式错误 | True |
| max_iterations | 最大迭代次数,防止无限循环 | 5-10 |
| early_stopping_method | 达到最大迭代后的处理方式 | "generate"(生成最终答案) |
多 Agent 协作
单个 Agent 的能力有限,复杂任务需要多个 Agent 分工协作。CrewAI 是当前最流行的多 Agent 框架,支持定义不同角色的 Agent 并按流程协作完成任务。
CrewAI 多 Agent 架构
- Agent(智能体):定义角色、目标、背景故事和可用工具
- Task(任务):定义要完成的具体工作,包括描述、期望输出和分配的 Agent
- Crew(团队):组织多个 Agent 按顺序或层级协作完成一组任务
- Process(流程):控制任务执行顺序,支持 sequential(顺序)和 hierarchical(层级)
CrewAI 完整示例
多 Agent 协作最佳实践
- 每个 Agent 只负责一个明确的角色,避免职责交叉
- 任务描述要具体,包含明确的 expected_output 格式
- 研究类 Agent 可以配置搜索工具,执行类 Agent 可以配置代码工具
- 层级流程(hierarchical)适合复杂项目,但需要额外的管理者 Agent
- 设置 allow_delegation=False 防止 Agent 之间互相推卸任务
Agent 记忆管理
记忆是 Agent 区别于普通 Chatbot 的关键能力。合理的记忆管理让 Agent 能够记住历史对话、用户偏好和长期知识,从而提供更个性化、更连贯的交互体验。
三种记忆类型
| 记忆类型 | 存储方式 | 生命周期 | 适用场景 |
|---|---|---|---|
| 短期记忆 | 消息列表(上下文窗口) | 单次会话 | 当前对话上下文、多轮交互 |
| 长期记忆 | 向量数据库 / 知识图谱 | 跨会话持久化 | 用户偏好、历史知识、项目背景 |
| 工作记忆 | 结构化数据存储 | 单次任务 | 任务中间结果、执行状态 |
短期记忆:对话历史管理
长期记忆:向量存储实现
混合记忆架构
推荐的记忆架构组合:
- 短期记忆:使用 ConversationBufferWindowMemory(k=10),保留最近对话
- 长期记忆:使用 ChromaDB 向量存储,存储用户偏好和项目知识
- 工作记忆:使用 Python 字典,在单次任务中传递中间结果
- 记忆检索:每次对话前自动检索相关长期记忆,注入到 System Prompt 中
规划与执行
对于复杂任务,Agent 需要先将任务分解为可执行的子任务,再逐步执行。Plan-and-Execute 模式将规划和执行分离,让 Agent 能够处理更复杂的多步骤任务。
Plan-and-Execute 模式
- Plan(规划阶段):LLM 分析任务,生成详细的执行计划(步骤列表)
- Execute(执行阶段):Agent 按计划逐步执行,每步观察结果
- Replan(重新规划):如果某步失败或结果不符合预期,动态调整后续计划
- Finalize(完成):汇总所有步骤的结果,输出最终答案
Plan-and-Execute 完整实现
动态调整计划
当某步骤执行失败时,可以让 Agent 重新规划剩余步骤。在 execute_step 返回失败后,调用 create_plan 并传入已完成步骤的历史,让模型生成新的执行计划。这种自适应能力是高级 Agent 的标志。
RAG Agent
RAG Agent 将检索增强生成(RAG)与 Agent 的工具调用能力结合,让 Agent 既能从知识库检索信息,又能调用外部工具。这是企业级 Agent 最常用的架构模式。
RAG Agent 架构
RAG Agent 融合了两种能力:
- 知识检索:从向量数据库中检索相关文档,提供准确的上下文信息
- 工具调用:调用外部 API、执行代码、查询数据库等操作
- 混合决策:Agent 自主判断是需要检索知识库还是调用工具
RAG Agent 完整实现
RAG Agent 决策流程
| 用户问题类型 | Agent 决策 | 使用工具 |
|---|---|---|
| "API 怎么调用?" | 知识性问题,检索知识库 | 知识库检索 |
| "帮我算一下 100 万 token 的费用" | 先检索价格,再计算 | 知识库检索 + Python执行 |
| "对比 DeepSeek 和 GPT-4" | 知识性问题,检索两个模型信息 | 知识库检索(多次调用) |
更多关于 RAG 知识库搭建的内容,请查看 DeepSeek RAG 知识库搭建教程。
安全与护栏
Agent 拥有工具调用能力,意味着它可能执行危险操作。安全护栏(Guardrails)是 Agent 系统的必要组成部分,确保 Agent 在受控范围内运行。
Agent 安全四层防护
| 防护层 | 作用 | 实现方式 |
|---|---|---|
| 输入验证 | 过滤恶意输入,防止注入攻击 | 正则过滤 + 内容审核 API |
| 工具权限控制 | 限制 Agent 可调用的工具和参数范围 | 白名单 + 参数校验 + 速率限制 |
| 输出过滤 | 过滤敏感信息,防止数据泄露 | 正则脱敏 + 敏感词过滤 |
| 审计日志 | 记录所有 Agent 操作,便于追溯 | 结构化日志 + 数据库存储 |
安全护栏代码实现
安全最佳实践
- 永远不要给 Agent 直接访问文件系统或数据库的权限,使用受限的 API 替代
- 代码执行工具必须使用沙箱环境(Docker 容器或 restricted Python)
- 所有外部 API 调用必须经过代理,限制速率和访问范围
- 定期审计 Agent 日志,及时发现异常行为
- 使用 System Prompt 明确告知 Agent 的安全边界和禁止行为
生产部署
将 Agent 从开发环境推向生产环境需要完善的工程化方案。本章介绍如何使用 FastAPI 构建 Agent 服务、Docker 容器化部署、以及监控和日志体系。
FastAPI Agent 服务
Docker 容器化部署
监控与日志
生产环境检查清单
| 类别 | 检查项 | 工具/方案 |
|---|---|---|
| 安全 | 输入验证、输出过滤、工具权限 | SafeAgent 包装器 |
| 监控 | 请求量、延迟、错误率、工具调用 | Prometheus + Grafana |
| 日志 | 请求日志、工具调用日志、错误日志 | ELK / Loki / 结构化日志 |
| 限流 | API 限流、并发控制 | slowapi / Redis + 令牌桶 |
| 容错 | 重试机制、降级策略、健康检查 | tenacity + /health 端点 |
| 部署 | 容器化、滚动更新、自动扩缩 | Docker + K8s + HPA |
部署建议
对于小规模应用,单机 Docker Compose 部署即可满足需求。对于生产级应用,建议使用 K8s 集群部署,配合 Prometheus + Grafana 监控,ELK 日志收集。Agent 服务是无状态的,可以水平扩展,但需要注意 LLM API 的并发限制。
DeepSeek Agent 开发常见问题
DeepSeek 相关教程
深入学习 DeepSeek 模型的使用、部署和生态工具。