← 返回目录
b4.2动手⏱ 约 12 分钟

完整项目:手把手做「旅行助手」

多工具、多步的典型形态——让 LangGraph 自动编排查天气、查票价、算预算

🔎 最后验证 2026-06📚 来源:🧰 Python、LangGraph
为什么学这个

资料管家偏"问答"。这个项目换个味道:多工具、多步骤——做一个「旅行助手」。

你说一句:"我俩下周末从上海去杭州玩两天,看看天气、估下往返高铁总价、给点建议",它就自己:查天气 → 查票价 → 算总价 → 综合成建议。这次我们用 LangGraph(b1.2)把多个工具自动编排起来——这是真实世界 agent 最常见的形态之一。

设计:一个大脑,三只手

🗣️你说需求
目的地、人数、天数
🧠规划+调用
自己决定先查啥、再算啥
🧰三只手
查天气 / 查票价 / 算预算
📋综合建议
天气+花费+提醒
旅行助手:大脑规划,按需调用三只手(天气/票价/计算器),最后综合成建议

🔧 手把手:完整可运行的「旅行助手」

下面整段 复制即可运行。给它三个工具,LangGraph 让它自动编排:

# pip install "langgraph>=0.2" "langchain-openai>=0.2"   # 钉版本,LangGraph 演进快
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="deepseek-chat",
                 base_url="https://api.deepseek.com", api_key="你的KEY")

def get_weather(city: str) -> str:
    """查询某城市未来几天的天气。"""           # 演示用假数据,真实项目换天气 API
    return f"{city}:周末晴转多云,18–26℃,适合出行。"

def train_price(route: str) -> str:
    """查询某条高铁线路的单程二等座票价。"""
    return "上海→杭州 高铁二等座约 73 元/人(单程)。"

def calculator(expression: str) -> str:
    """做精确数学计算,输入算式字符串。"""
    try:
        return str(eval(expression))              # 教学演示,生产别用 eval
    except Exception:
        return "算式无效"

agent = create_react_agent(llm, tools=[get_weather, train_price, calculator])

out = agent.invoke({"messages": [("user",
    "我和朋友 2 人下周末从上海去杭州玩两天,帮我看看天气、估算往返高铁总价、给点建议。")]})
print(out["messages"][-1].content)

运行后,它会自己排出顺序:查杭州天气 → 查上海到杭州单程票价(73) → 算往返两人的总价(单程 73 → 往返 ×2 → 两人 ×2,即 73*2*2 ≈ 292)→ 综合成一段建议(天气不错、往返高铁约 292 元、记得带件外套)。

📌 具体数字由模型当次计算得出,可能略有出入;重点看它会自己一步步规划、调用、综合,而不是这个确定的 292。

你只写了三个工具函数,"先查哪个、要不要算、怎么综合"全是它自己决定的——这就是多工具 agent 的威力,也是 LangGraph 替你省下的编排。

对比两个项目,你就懂了 agent 的两种典型形态

资料管家(b4.1)旅行助手(b4.2)
形态问答型:RAG + 记忆任务型:多工具 + 多步
核心检索你的资料、有据回答规划 + 调用多个工具
适合知识库、客服、私人助理行程、调研、自动化任务

掌握这两种,你就能套出绝大多数实用智能体了。

❓ 测验
旅行助手能自己「先查票价、再算总价」,这个编排是谁定的?
⚠️ 避坑多工具项目:工具描述写清楚 + 别塞太多

多工具 agent 最常见的毛病是选错工具该用不用。两个关键:

  1. 每个工具的 docstring/描述写清楚"什么时候用我"——模型靠它选工具(呼应 a1.3)。
  2. 别一股脑塞十几个工具——只装这个任务真用得到的,多了它会挑花眼。

另外:示例里是假数据,真实项目把工具换成真 API(真天气、真票价),逻辑不变。

🤖 设计你自己的多工具 agent
我想做一个多工具的任务型 agent:『___』(我来描述,如:帮我做菜谱+算食材采购清单)。请帮我:① 列出它需要哪 3-4 个工具(名字+docstring) ② 给出用 LangGraph create_react_agent 组装的完整代码 ③ 一个能体现多步编排的测试问题。
✅ 小结

🏆 两个完整项目到手:资料管家(问答型)+ 旅行助手(任务型)——你已经能独立套出绝大多数实用智能体了。进阶篇(框架/评估/协议/自进化/训练/项目)到这就通关了!

接下来是选修扩展篇——像一篇篇小科普,按兴趣取用:智能体简史、求职面试题、GUI/Web Agent、怎么写好 Skill、开发踩坑经验。第一篇,我们轻松一下,聊聊智能体是怎么一步步走到今天的

下一节 → 选修:智能体简史
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · e1
选修 · 智能体简史
继续读下一节 →