LangChain LangGraph
Module 1 Module 2 Module 3
Module 2 · 工具、状态与多 Agent
1 2.1 MCP
2 2.1 Travel Agent
3 2.2 Runtime Context
4 2.2 State
5 2.3 Multi Agent
6 2.4 Wedding Planners
7 Bonus: RAG
8 Bonus: SQL
SUM Module Summary
HomeLangChainModule 2 · 工具、状态与多 Agent2.1 Travel Agent
📓 Notebook 📖 Explained
LANGCHAIN MODULE 2 · LESSON 2.1b

旅行 Agent:使用远程 MCP
Kiwi Flight Tools · Memory · Async

本节把 Kiwi 的远程 MCP server 接入 LangChain Agent,让 Agent 可以调用航班搜索工具,并通过 thread_id 保持一次对话的记忆。

1 从本地 MCP 到远程 MCP

上一节使用 stdio 启动本地 MCP server。本节换成远程 MCP server:Kiwi 通过网络提供航班相关工具,Agent 不需要知道它内部如何实现。

对比本地 stdio MCP远程 MCP
连接方式command + args 启动子进程url 连接远程服务
适合场景本地脚本、内部工具、开发调试第三方平台、云服务、共享能力
本课示例resources/2.1_mcp_server.pyhttps://mcp.kiwi.com

2 连接 Kiwi MCP server

Notebook 使用 MultiServerMCPClient 连接 travel_server。拿到的 tools 就是后续旅行 Agent 的外部能力。

Python
client = MultiServerMCPClient(
    {
        "travel_server": {
            "transport": "sse",
            "url": "https://mcp.kiwi.com",
        }
    }
)

tools = await client.get_tools()
transport

sse 表示通过 Server-Sent Events 连接远程 MCP server。后续课程也会出现 streamable_http

3 先检查 server 暴露了哪些工具

把工具交给 Agent 前,先打印工具名称是一个很实用的调试步骤。它能确认连接是否成功,也能帮助你理解模型能调用哪些动作。

Python
for msg in tools:
    pprint(msg.name)
    print()
调试习惯

远程 MCP 工具集可能会更新。先看工具名称和描述,再写 system prompt,可以减少模型误用工具的概率。

4 创建旅行 Agent

旅行 Agent 的核心配置有三项:模型、MCP tools、checkpointer。InMemorySaver 让同一个 thread_id 的对话可以保留上下文。

Python
from langgraph.checkpoint.memory import InMemorySaver

agent = create_agent(
    deepseek_model(),
    tools=tools,
    checkpointer=InMemorySaver(),
    system_prompt="You are a travel agent. No follow up questions.",
)

tools

Kiwi MCP 提供的航班搜索能力。

checkpointer

保存同一线程中的消息历史和状态。

system_prompt

要求 Agent 扮演旅行代理,并避免追问。

5 用 thread_id 发起异步查询

实际调用时,Notebook 使用 ainvokeconfigurable.thread_id。这让一次旅行规划请求可以和后续对话关联起来。

Python
config = {"configurable": {"thread_id": "1"}}

response = await agent.ainvoke(
    {
        "messages": [
            HumanMessage(
                content="Get me a return flight from Melbourne to Changsha on Sep 1st 2026 and return on Sep 18st 2026."
            )
        ]
    },
    config,
)

print(response["messages"][-1].content)
日期和工具参数

航班工具通常对日期、机场、人数等参数很敏感。system prompt 中的“No follow up questions”会迫使模型基于已有信息搜索,但缺失参数时结果可能更不稳定。

6 本课 takeaway