《2026 LangChain零基础入门:用AI应用框架快速搭建智能助手》第5课:Agents 基础 —— 让AI自己决定下一步做什么,实现ReAct风格的智能代理
大家好,我是链上杯子(CSDN:链上杯子)。
失业一年了,天天想着怎么翻身。上节课让AI记住对话后,我开始好奇:能不能让AI不只是被动回答,而是自己“想一想”该干什么?比如用户问“今天北京天气怎么样,能穿短袖吗?”,它能自己去查天气,再结合温度给出建议。LangChain 的 Agent 就是干这个的——给AI加上“思考-行动-观察-再思考”的循环。第一次跑通 ReAct Agent,看到它自己调用工具解决问题,感觉像给AI装了个“小脑”。
本课目标:
学会使用 LangChain 的 Agent 系统(以 ReAct Agent 为例),让AI根据用户问题自动决定是否需要调用工具、怎么思考、最终给出答案。
学完这节课,你就能构建一个“能自己查资料、计算、读文件”的智能代理,交互更接近真实助手。
核心代码实战
1. 最基础 ReAct Agent —— 让AI自己决定用工具
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain_classic.prompts import PromptTemplate
from langchain.tools import tool
# 初始化模型
llm = ChatOpenAI(
openai_api_key="", # ←←← 这里替换成你的 DeepSeek API Key
openai_api_base="https://api.deepseek.com/v1",
model="deepseek-chat",
temperature=0
)
# 定义一个简单工具(@tool 装饰器是新版写法)
@tool
def multiply(a: float, b: float) -> float:
"""把两个数字相乘"""
return a * b
@tool
def get_weather(city: str) -> str:
"""获取指定城市的当前天气(模拟工具,实际可换真实API)"""
# 这里只是模拟,真实场景用 requests 调用天气API
if "北京" in city:
return "北京当前温度25°C,多云转晴,适合穿短袖。"
elif "上海" in city:
return "上海当前温度28°C,阴雨,建议带伞。"
else:
return f"{city}的天气数据暂不可用。"
tools = [multiply, get_weather]
# ReAct Prompt(经典模板,AI会自己思考“Thought → Action → Observation”)
# 修改为中文提示词
react_prompt = PromptTemplate.from_template(
"""尽可能好地回答以下问题。你可以使用以下工具:
{tools}
请严格按照以下格式回答:
问题:你必须回答的输入问题
思考:你应该始终思考该做什么
行动:要采取的行动,必须是 [{tool_names}] 中的一个
行动输入:行动的输入
观察:行动的结果
...(思考/行动/行动输入/观察 可以重复 N 次)
思考:我现在知道最终答案了
最终答案:对原始输入问题的最终答案
开始!
问题:{input}
思考:{agent_scratchpad}"""
)
# 创建 ReAct Agent
agent = create_react_agent(llm, tools, react_prompt)
# Agent 执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 测试1:调用计算工具
print("测试1:计算")
result1 = agent_executor.invoke({"input": "25乘以18等于多少?"})
print("结果:", result1["output"])
# 测试2:调用天气工具 + 推理
print("\n测试2:天气 + 推理")
result2 = agent_executor.invoke({"input": "今天北京天气怎么样,能穿短袖吗?"})
print("结果:", result2["output"])
运行后会看到 verbose 输出类似(思考过程全中文):
思考:我需要计算 25 * 18,所以用 multiply 工具。
行动:multiply
行动输入:25, 18
观察:450
思考:答案是450。
最终答案:450

天气问题会自动调用 get_weather 工具并推理。
小知识点:
@tool:定义工具的最简单方式(新版推荐)。create_react_agent:创建 ReAct Agent(Reason + Act)。- AgentExecutor:执行器,负责循环“思考-行动-观察”,直到得出最终答案。
- verbose=True:打印思考过程,便于调试。
2. 更复杂的例子 —— 加读文件工具
@tool
def read_file(filename: str) -> str:
"""读取指定文件的全部内容"""
try:
with open(filename, "r", encoding="utf-8") as f:
return f.read()
except Exception as e:
return f"读取失败:{str(e)}"
tools.append(read_file)
# 更新 agent_executor(工具列表变了,需要重新创建)
agent = create_react_agent(llm, tools, react_prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 测试:让AI读本地文件
result_file = agent_executor.invoke({"input": "读取当前目录下 conversation_memory.json 文件的内容,并告诉我里面保存了多少条消息。"})
print("结果:", result_file["output"])
如果目录里有 conversation_memory.json,AI 会自己读文件并分析。
3. 互动版 —— 命令行 Agent 聊天
print("=== ReAct Agent 开始(输入 'quit' 退出) ===")
while True:
user_input = input("你:").strip()
if user_input.lower() == "quit":
break
result = agent_executor.invoke({"input": user_input})
print("AI:", result["output"])
试试问:“帮我算 123 * 456,然后告诉我结果是多少。” 或 “北京天气适合穿什么衣服?”
小练习(2 道)
练习1(基础)
复制第1段代码,加一个新工具 @tool def add(a: float, b: float) -> float: return a + b。
测试问:“先加 100 和 200,再乘以 3,结果是多少?”
观察 AI 是否自己决定先调用 add 再 multiply。
练习2(进阶)
加一个自定义工具:@tool def search_note(keyword: str) -> str: return f"模拟搜索 '{keyword}' 的笔记内容..."
问:“我上次笔记里写了什么关于失恋的?”
让 AI 自己决定是否调用工具,并给出答案。
本课小结
本课学习了 Agent 基础:用 create_react_agent 创建 ReAct 代理、@tool 定义工具、AgentExecutor 执行思考-行动循环。
Agent 让 AI 从“被动回答”升级到“主动决策 + 调用工具”,是构建智能助手的里程碑。后续可加更多工具、记忆、RAG。
下节预告
下一课:Tools 与自定义工具 —— 给 AI 加上搜索、计算、读文件、调用外部API等能力,让代理更强大。
欢迎在评论区贴出你的 Agent 运行截图、思考过程、或有趣的工具调用记录~
如果觉得这篇有用,欢迎点赞或关注,一起玩转 LangChain!
更多推荐


所有评论(0)