DeepSeek + ReAct 实战:手把手教你打造一个智能生活小助手(附完整代码)
·
DeepSeek + ReAct 实战:手把手教你打造一个智能生活小助手(附完整代码)
在当今AI技术飞速发展的时代,大模型如DeepSeek已经展现出惊人的推理和生成能力。然而,即使是这些强大的模型,在面对某些垂直领域或实时性要求较高的任务时,仍然存在局限性。这时,结合ReAct框架构建的Agent系统就显得尤为重要。本文将带你从零开始,一步步实现一个基于DeepSeek和ReAct的智能生活助手,解决实际生活中的常见问题。
1. 为什么需要Agent?
大模型虽然强大,但存在几个明显的局限性:
- 知识时效性:未联网状态下无法获取最新信息
- 领域专业性:对特定领域(如医疗、法律)缺乏深度知识
- 操作执行:无法直接调用外部API或执行具体操作
Agent系统的核心价值在于它能够:
- 自主规划任务分解
- 动态调用外部工具
- 持续学习和优化决策
提示:一个优秀的Agent系统不是要替代大模型,而是通过框架设计弥补其不足,实现1+1>2的效果。
2. ReAct框架解析
ReAct(Reasoning+Acting)是一种将推理与行动结合的思维框架,其核心工作流程如下:
Thought → Action → Observation → Thought → ... → Final Answer
2.1 关键组件详解
| 组件 | 功能描述 | 实现要点 |
|---|---|---|
| Thought | 任务分析和规划 | 引导模型进行逻辑推理 |
| Action | 工具调用决策 | 明确可用的工具集 |
| Observation | 结果评估 | 验证工具执行效果 |
2.2 典型执行流程
-
初始化阶段
- 加载大模型(DeepSeek)
- 定义可用工具集
- 构建ReAct提示模板
-
执行循环
while not task_completed: # 生成Thought thought = generate_thought(prompt) # 决定是否需要Action if needs_action(thought): action = select_action(thought) result = execute_action(action) update_prompt_with_observation(result) else: final_answer = extract_answer(thought) break
3. 实战开发:智能生活助手
3.1 环境准备
首先确保安装必要的Python包:
pip install openai python-dotenv
3.2 工具定义
我们创建一个tools.py文件,定义查询水果价格的工具:
def query_fruit_price(fruit: str) -> float:
"""查询水果单价(模拟数据)"""
price_map = {
"苹果": 5.8,
"香蕉": 3.2,
"橙子": 4.5
}
return price_map.get(fruit, 0.0)
TOOLS = [{
"name": "query_fruit_price",
"description": "查询指定水果的单价",
"parameters": {
"type": "object",
"properties": {
"fruit": {"type": "string"}
},
"required": ["fruit"]
}
}]
3.3 ReAct提示工程
构建提示模板是核心环节,这里我们优化后的模板:
REACT_TEMPLATE = """你是一个智能生活助手,请遵循以下规则:
1. 先思考是否需要使用工具
2. 如需工具,严格按格式执行:
Thought: 需要使用的工具及原因 Action: 工具名称 Action Input: {"参数名":"参数值"}
3. 获得Observation后继续思考
4. 最终答案格式:
Final Answer: 完整回答
当前可用工具:{tools}
问题:{query}
"""
3.4 主逻辑实现
创建agent.py实现核心逻辑:
import re
import json
from openai import OpenAI
class LifeAssistant:
def __init__(self, api_key):
self.client = OpenAI(api_key=api_key)
self.memory = []
def run(self, query):
prompt = self._build_prompt(query)
while True:
response = self._get_llm_response(prompt)
if "Final Answer" in response:
return self._extract_final_answer(response)
action = self._parse_action(response)
result = self._execute_action(action)
prompt += f"\nObservation: {result}"
def _execute_action(self, action):
if action["name"] == "query_fruit_price":
return query_fruit_price(action["input"]["fruit"])
4. 高级优化技巧
4.1 错误处理机制
def safe_execute(action):
try:
return execute_action(action)
except Exception as e:
return f"Error: {str(e)}"
4.2 记忆增强
实现简单的对话记忆:
class Memory:
def __init__(self, max_length=5):
self.history = []
self.max_length = max_length
def add(self, role, content):
self.history.append({"role": role, "content": content})
if len(self.history) > self.max_length:
self.history.pop(0)
4.3 性能监控
添加执行计时装饰器:
import time
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f"{func.__name__} executed in {time.time()-start:.2f}s")
return result
return wrapper
5. 完整代码示例
以下是整合后的核心代码结构:
smart_assistant/
├── __init__.py
├── agent.py # 主逻辑
├── tools.py # 工具定义
├── memory.py # 记忆模块
└── utils.py # 辅助函数
关键执行示例:
assistant = LifeAssistant(api_key="your_key")
response = assistant.run("3个苹果和2把香蕉总共多少钱?")
print(response)
在实际项目中,这种架构已经成功应用于:
- 智能家居控制
- 个人健康管理
- 家庭财务规划
开发过程中发现几个关键点:
- 工具描述的准确性直接影响模型调用效果
- 适度的记忆长度能显著提升对话连贯性
- 错误处理不可或缺,特别是API调用场景
更多推荐




所有评论(0)