别再只盯着ChatGPT了!用DeepSeek和Manus手把手教你搭建你的第一个AI智能体(保姆级教程)
·
从零构建AI智能体:DeepSeek+Manus实战指南
当大语言模型的能力边界不断拓展,一个更激动人心的领域正在崛起——AI智能体。想象一下,你的代码不再只是被动响应指令,而是能自主规划任务、调用工具、甚至从错误中学习的数字助手。本文将用最直白的代码和最小可行案例,带你完成从"调用API"到"创造智能体"的跃迁。
1. 环境准备:搭建智能体的基础工坊
智能体开发需要两类核心组件:大脑(大语言模型)和肢体(智能体框架)。我们选择DeepSeek作为认知引擎,搭配Manus框架构建行动系统。先准备开发环境:
# 创建虚拟环境(推荐Python 3.10+)
python -m venv agent_env
source agent_env/bin/activate # Linux/Mac
# agent_env\Scripts\activate # Windows
# 安装核心库
pip install manus-agent deepseek-sdk python-dotenv
接下来配置API密钥。在项目根目录创建.env文件:
DEEPSEEK_API_KEY=your_api_key_here
MANUS_API_KEY=your_manus_key
验证环境是否正常工作:
import os
from dotenv import load_dotenv
from deepseek_sdk import DeepSeek
load_dotenv()
ds = DeepSeek(api_key=os.getenv("DEEPSEEK_API_KEY"))
response = ds.chat("Hello, world!")
print(response.content) # 应看到模型回复
注意:免费版API可能有速率限制,生产环境建议购买适合的套餐
2. 智能体架构设计:从单细胞到有机体
一个基础智能体需要三大功能模块:
| 模块 | 职责 | 实现方案 |
|---|---|---|
| 认知中枢 | 任务理解与决策 | DeepSeek模型 |
| 工具库 | 扩展能力边界(如网络搜索、代码执行) | Manus插件系统 |
| 记忆系统 | 维护会话状态和知识 | SQLite数据库+向量检索 |
让我们用代码实现这个架构:
from manus_agent import Agent, Tool
import sqlite3
from typing import Dict, Any
class MyAgent(Agent):
def __init__(self):
self.memory = sqlite3.connect(':memory:')
self._setup_memory()
tools = [
WebSearchTool(),
PythonREPLTool()
]
super().__init__(
llm=ds,
tools=tools,
system_prompt="你是一个专业助理,能熟练使用工具解决问题"
)
def _setup_memory(self):
cursor = self.memory.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS memories
(id INTEGER PRIMARY KEY, content TEXT)''')
self.memory.commit()
class WebSearchTool(Tool):
name = "web_search"
description = "执行互联网搜索获取最新信息"
def run(self, query: str) -> str:
# 实际项目应接入SerpAPI等搜索API
return f"模拟搜索结果: {query}"
class PythonREPLTool(Tool):
name = "python"
description = "执行Python代码并返回结果"
def run(self, code: str) -> str:
try:
exec(code, globals())
return str(locals().get('result', '执行成功'))
except Exception as e:
return f"错误: {str(e)}"
3. 任务编排:教会智能体"思考链"
智能体的核心能力在于将复杂任务拆解为可执行步骤。以下是一个自动生成周报的案例:
def generate_weekly_report(agent: MyAgent, keywords: list) -> str:
# 定义任务流程
workflow = [
{
"step": "收集信息",
"action": "web_search",
"args": f"过去一周关于{','.join(keywords)}的重要进展"
},
{
"step": "分析趋势",
"action": "llm",
"args": "总结搜索结果的共同点和关键发现"
},
{
"step": "生成报告",
"action": "llm",
"args": "用Markdown格式编写包含章节和关键数据的周报"
}
]
context = {}
for task in workflow:
if task["action"] == "llm":
response = agent.llm.chat(
f"基于以下上下文:{context}\n执行任务:{task['args']}"
)
context[task["step"]] = response.content
else:
tool = agent.get_tool(task["action"])
result = tool.run(task["args"])
context[task["step"]] = result
return context["生成报告"]
# 使用示例
agent = MyAgent()
report = generate_weekly_report(agent, ["AI", "大模型"])
print(report)
典型输出可能包含:
## 人工智能周报(2024年1月第3周)
### 技术进展
- DeepSeek发布新的代码模型版本,在HumanEval基准上达到92.3%准确率
- Manus框架推出插件市场,支持快速集成50+常用工具
### 行业动态
- 某科技巨头宣布投资10亿美元建设AI数据中心
- 研究表明75%的企业将在明年增加AI预算
4. 调试与优化:智能体的"成长手册"
新生的智能体常会遇到三类典型问题:
-
工具选择错误:错误调用不合适的工具
- 解决方案:在系统提示中明确工具适用场景
system_prompt = """ 可用工具: - web_search: 当需要最新信息或未知知识时使用 - python: 适合数学计算、数据处理等任务 请严格根据任务类型选择工具""" -
无限循环:任务拆解陷入死循环
- 防护措施:添加最大迭代次数限制
max_steps = 5 while not task_finished and steps < max_steps: steps += 1 # 执行任务... -
幻觉输出:编造不存在的信息
- 应对策略:强制引用来源
output_template = """ 请按以下格式响应: === {content} 来源:{sources} ==="""
性能优化可关注以下指标:
| 指标 | 优化方向 | 工具/方法 |
|---|---|---|
| 响应延迟 | 减少LLM调用次数 | 任务批处理 |
| 准确率 | 改进工具选择逻辑 | 少量示例微调(few-shot) |
| 成本效率 | 控制token消耗 | 输出长度限制 |
一个实用的调试技巧是记录完整交互历史:
class DebugAgent(MyAgent):
def __init__(self, log_file: str):
super().__init__()
self.log_file = log_file
def log_interaction(self, role: str, content: str):
with open(self.log_file, 'a') as f:
f.write(f"[{role}]: {content}\n\n")
def chat(self, message: str) -> str:
self.log_interaction("USER", message)
response = super().chat(message)
self.log_interaction("AGENT", response)
return response
5. 进阶路线:从玩具到生产级智能体
当基础功能跑通后,可以考虑以下升级路径:
能力扩展
- 集成多模态处理(图片/音频)
- 添加长期记忆存储(如Chromadb向量数据库)
- 实现多智能体协作架构
稳定性增强
- 错误自动恢复机制
- 敏感内容过滤层
- 限流和熔断保护
效率优化
- 工具调用并行化
- 结果缓存策略
- 自适应任务拆解
示例:为智能体添加自动学习能力
class SelfImprovingAgent(MyAgent):
def __init__(self):
super().__init__()
self.feedback_db = FeedbackDatabase()
def process_feedback(self, user_feedback: str):
# 分析反馈并更新系统提示
analysis = self.llm.chat(
f"用户反馈:{user_feedback}\n"
"请指出需要改进的具体方面"
)
self.system_prompt += (
"\n改进说明:" + analysis.content
)
self.feedback_db.store_feedback(user_feedback)
实际部署时,建议采用容器化方案:
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "agent_server.py"]
配合基础监控配置(prometheus.yml示例):
scrape_configs:
- job_name: 'agent'
metrics_path: '/metrics'
static_configs:
- targets: ['localhost:8000']
在开发过程中,我发现智能体对工具描述的准确性极其敏感。曾有一个案例:将"文件读写工具"描述为"处理文档",导致智能体试图用这个工具解析PDF内容。精确的工具定义可以节省大量调试时间。另一个实用技巧是为常用操作创建快捷指令模板,比如将"分析上周销售数据并生成可视化"预存为可复用的工作流。
更多推荐

所有评论(0)