技术分享LangChainAgentReAct智能体
我做出了第一个AI智能体:它会自己思考和工具调用
2026/1/249 min73 次观看
从纯LLM到Agent,我理解了AI为什么能思考
01 什么是Agent?
学Agent之前我一直有个疑问:AI回答问题不挺好吗?为什么要搞个Agent?
直到我让它查天气、订机票、读文件... 它说"对不起,我做不到"。
Agent = LLM + 工具 + 自主决策能力
纯LLM:你问什么,我答什么 LLM+工具:你能调用工具,但我得告诉你用什么 Agent:你自己判断需要什么工具,我来执行
02 ReAct框架
ReAct = Reasoning(推理) + Acting(行动)
举个例子:用户问"北京天气怎么样?"
传统LLM:
- 直接回答:我不知道实时天气
ReAct Agent:
- 推理:用户问天气,我需要调用天气工具
- 行动:调用get_weather("北京")
- 观察:返回"晴,25度"
- 推理:拿到天气信息了
- 行动:回答用户"北京今天晴,25度"
03 创建我的第一个Agent
from langchain.agents import create_agent
from langchain.tools import tool
@tool
def get_weather(city: str) -> str:
"""获取指定城市的天气
Args:
city: 城市名称,如"北京"
"""
weather_map = {
"北京": "晴,25°C",
"上海": "多云,28°C",
"广州": "雨,24°C",
}
return weather_map.get(city, "未知")
# 创建Agent
agent = create_agent(
model=llm,
tools=[get_weather],
system_prompt="你是一个天气助手,回答用户关于天气的问题"
)
# 调用
result = agent.invoke({"messages": [{"role": "user", "content": "北京天气怎么样"}]})
print(result["messages"][-1].content)
# 输出:北京今天晴,25°C
04 流式输出
打字机效果,更酷炫:
for chunk in agent.stream({"messages": [{"role": "user", "content": "上海天气如何"}]}):
for step, data in chunk.items():
if step == "model":
print(data["messages"][-1].content, end="")
05 context_schema
传递上下文信息:
from typing import TypedDict
class UserContext(TypedDict):
user_id: str
vip_level: str # 普通/黄金/钻石
agent = create_agent(
model=llm,
tools=[get_weather],
context_schema=UserContext
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "天气如何"}]},
context={"user_id": "user_001", "vip_level": "gold"}
)
06 我的理解
Agent的本质是循环:
- 接收用户输入
- LLM决定要做什么(推理)
- 执行工具(行动)
- 获取工具结果(观察)
- 把结果给LLM,继续推理
- 直到任务完成,返回结果
这就是为什么AI看起来像在"思考"——它确实在不断推理和行动!
07 总结
- Agent = LLM + 工具 + 决策循环
- ReAct让AI能自主使用工具
- create_agent一行代码创建Agent
- context传递用户信息