57 lines
1.7 KiB
Python
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())
|