1.MCP工具
MCP工具当前那里只是用两个,一个 高德地图开发者平台中的注册,一个是modelscope(魔塔)网站中的12306工具。

2.创建Python项目的目录结构

需要安装的依赖
bash
pip install python-dotenv
pip install langchain-openai (时间比较长)
pip install langchain-mcp-adapters
pip install langgraph
pip install langchain
2.1 .env 的内容
主要设置:调用千问大模型的内容,例如:
python
QWEN_API_KEY=自己的API
QWEN_MODEL_NAME=qwen3.7-max
QWEN_BASE_URL=https://ws-se8vlyczx5091m2j.cn-beijing.maas.aliyuncs.com/compatible-mode/v1
2.2 env_utils.py
python
import os
from dotenv import load_dotenv
# override=True 表示覆盖已存在的环境变量
load_dotenv(override=True)
QWEN_API_KEY = os.getenv('QWEN_API_KEY')
QWEN_MODEL_NAME = os.getenv('QWEN_MODEL_NAME')
QWEN_BASE_URL = os.getenv('QWEN_BASE_URL')
2.3 my_llm.py
python
from llm_agent.env_utils import QWEN_API_KEY,QWEN_MODEL_NAME,QWEN_BASE_URL
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model = QWEN_MODEL_NAME,
api_key = QWEN_API_KEY,
base_url = QWEN_BASE_URL
)
2.4 my_agent.py
python
import asyncio
import uuid
from langchain_core.messages import HumanMessage
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.checkpoint.memory import InMemorySaver
from langchain.agents import create_agent
from llm_agent.my_llm import llm
gaode_mcp_server_config = {
"url": "https://mcp.amap.com/mcp?key=73c657a1573b27d2dac3ff3a3e570083",
"transport": "streamable_http"
}
m12306_mcp_server_config = {
"url": "https://mcp.api-inference.modelscope.net/fb102a0f900b41/mcp",
"transport": "streamable_http"
}
#创建MCP客户端
mcp_client = MultiServerMCPClient({
"gaode_mcp_server_config": gaode_mcp_server_config,
"m12306_mcp_server_config": m12306_mcp_server_config
})
# 开发智能体
async def my_create_agent():
mcp_tools = await mcp_client.get_tools()
# print(len(mcp_tools))
# print(mcp_tools[-2:])
return create_agent(
llm,
tools=mcp_tools,
system_prompt="你是一个智能助手,尽可能调用工具回答问题",
checkpointer=InMemorySaver())
agent = asyncio.run(my_create_agent())
config = {
"configurable": {
"thread_id": str(uuid.uuid4()),
}
}
async def main():
#res = await agent.ainvoke(input={"messages":[HumanMessage(content="石家庄到天津高铁")]},config = config)
res = await agent.ainvoke(input={"messages": [HumanMessage(content="石家庄今天天气")]}, config=config)
#print(res)
# 拿到所有消息
msg_list = res["messages"]
# 过滤出AI输出,取最后一条
final_answer = None
for msg in msg_list:
if hasattr(msg, "content") and type(msg).__name__ == "AIMessage" and msg.content.strip():
final_answer = msg.content
print(final_answer)
if __name__ == '__main__':
asyncio.run(main())
测试:
