langchain-learning/mcp/mcp_client_with_agent_simple.py
2026-04-15 20:49:50 +08:00

57 lines
1.7 KiB
Python

import asyncio
import logging
# from langchain.agents import create_react_agent
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
from langchain_mcp_adapters.client import MultiServerMCPClient
import os
import dotenv
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
dotenv.load_dotenv()
## 设置环境变量
os.environ['OPENAI_API_KEY'] = os.getenv("OLLAMA_API_KEY")
os.environ['OPENAI_BASE_URL'] = os.getenv("OLLAMA_BASE_URL")
# 默认的 'model_name': 'deepseek-ai/DeepSeek-V3.1',
llm = ChatOpenAI(model="gemma4:26b")
async def execute():
# 1. 创建langchain中的mcp客户端
# uv add langchain_mcp_adapters
client = MultiServerMCPClient(
{
# 这里是定义服务端信息的,可以有多个服务端
"weather": {
"url": "http://localhost:9000/mcp",
"transport": "streamable_http",
}
}
)
try:
# 2. 通过客户端获取工具列表
## 这里是通过服务端获取,所以可能会有异常(比如服务端没有启动,或者网络连接有问题
tools = await client.get_tools()
# 3. 创建一个智能代理,能够完成 思考--> 行动 --> 观察 --> 思考 --> 行动 --> ... --> 最终答案
agent = create_react_agent(model=llm, tools=tools)
agent_response = await agent.ainvoke({"messages":"北京的天气怎么样?适合出门吗?"})
print(agent_response)
finally:
# 资源回收
if hasattr(client, 'close'):
client.close()
if __name__ == '__main__':
asyncio.run(execute())