当简单的问答已经不能满足需求时,一个能够自主规划、调用工具(Skills)、执行多步骤任务的智能体才是真正的生产力核心。
这一个“能干活”的 React Agent:
它不仅会思考,还会根据任务动态调用不同技能完成复杂目标 🧠⚙️
🧩 目标能力设计
我们要实现的智能体具备以下能力:
🌤️ 查询天气
📈 查询股票
🔎 搜索信息
🧮 执行计算
📝 总结复杂文本
🧠 自动选择合适的 Skill 执行任务
一句话:像人一样思考,像工具箱一样执行任务
⚙️ 技术架构
核心组成:
用户输入 → React Agent → 推理(Thought)
↓
选择Skill(Action)
↓
执行工具
↓
观察结果(Observation)
↓
循环直到完成
这就是经典的 ReAct(Reason + Act)模式 🔁
📦 环境准备
pip install langchain openai requests sympy
🛠️ 定义 Skills(核心)
Skill 本质上就是“智能体可以调用的能力模块”。
1️⃣ 天气查询 Skill 🌤️
import requests
def get_weather(city: str) -> str:
return f"{city} 当前天气晴朗,温度 25°C"
2️⃣ 股票查询 Skill 📈
def get_stock(symbol: str) -> str:
return f"{symbol} 当前价格为 178.2 USD"
3️⃣ 搜索 Skill 🔎
def search_web(query: str) -> str:
return f"搜索结果:关于 {query} 的最新信息摘要"
4️⃣ 计算 Skill 🧮
from sympy import sympify
def calculator(expression: str) -> str:
try:
result = sympify(expression)
return f"计算结果是 {result}"
except:
return "计算失败"
5️⃣ 文本总结 Skill 📝
def summarize(text: str) -> str:
return text[:100] + "..."
🧠 构建 React Agent
from langchain.agents import Tool, initialize_agent
from langchain.chat_models import ChatOpenAI
tools = [
Tool(name="Weather", func=get_weather, description="查询城市天气……"),
Tool(name="Stock", func=get_stock, description="查询股票价格……"),
Tool(name="Search", func=search_web, description="搜索互联网信息……"),
Tool(name="Calculator", func=calculator, description="数学计算……"),
Tool(name="Summarizer", func=summarize, description="总结文本……"),
]
llm = ChatOpenAI(
model_name="gpt-4",
temperature=0.1
)
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description",
verbose=True
)
🔥 复杂任务演示
输入一个复杂指令:
query = """
帮我完成以下任务:
1. 查询北京天气
2. 查询AAPL股票价格
3. 计算 (AAPL价格 * 10) + 100
4. 总结一段关于人工智能的内容
"""
result = agent.run(query)
print(result)
🧠 Agent 内部行为(简化版)
Thought: 我需要先获取天气
Action: Weather("东京")
Observation: 晴天 25°C
Thought: 查询股票价格
Action: Stock("AAPL")
Observation: 178.2
Thought: 进行计算
Action: Calculator("(178.2 * 10) + 100")
Observation: 1882
Thought: 总结文本
Action: Summarizer("AI is transforming the world...")
Final Answer: ...
这一整套流程完全是模型自动决策的 🧠✨
🧬 加入 Memory
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key="chat_history")
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description",
memory=memory,
verbose=True
)
现在它可以:
记住你刚刚查过的股票 📈
延续对话上下文 🧠
做更复杂的推理
🚀 进阶:动态 Skills 调度
可以进一步升级为:
🔌 插件式技能加载(动态注册 tools)
🧠 多 Agent 协作(Planner + Executor)
⚡ 并行任务执行(async tools)
📊 结合数据库(SQL Agent)
示意:
def register_tool(name, func, desc):
return Tool(name=name, func=func, description=desc)
tools.append(register_tool("NewSkill", lambda x: x, "新技能"))
🎯 实战意义
这种架构可以直接用于:
🧑💻 AI 助手(自动完成复杂任务)
📊 数据分析 Agent
🏢 企业自动化流程
🧾 自动报告生成
🤖 智能客服系统
🧾
通过 LangChain + 大模型 API,我们构建了一个:
会思考(Reason)🧠
会行动(Act)⚙️
会调用 Skills 🛠️
能处理复杂任务 🔥
的 React Agent。
它不再只是“回答问题”,而是真正开始“做事情”。