-
Notifications
You must be signed in to change notification settings - Fork 30
Open
Description
下面是使用langchain_mcp的一个例子,agent可以和浏览器进行多轮交互,比如打开百度 -> 搜索北京的天气,这种多次调用mcp也不会中断。而将其替换成mcpstore后,浏览器只能执行一个动作后就关闭了,应该是一次调用就是一个session吗?
import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_mcp_adapters.tools import load_mcp_tools
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
client = MultiServerMCPClient(
{
"browser_server": {
"url": "http://127.0.0.1:8931/sse",
"transport": "sse",
}
}
)
llm = ChatOpenAI(
model="qwen-plus-2025-09-11",
temperature=0.6,
max_tokens=None,
timeout=None,
max_retries=2,
api_key="sk-xxxxxxxxxxxxxxxxx",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
async def main():
# 为了整个交互都在一个会话中,这里手动创建一个会话
async with client.session("browser_server") as session:
# 获得全部工具
tools = await load_mcp_tools(session)
# 创建agent
agent = create_react_agent(llm, tools,prompt="""你是一位工作在浏览器中的个人助手,帮助用户完成各种任务。 """)
messages = [
{"role": "user", "content": "北京的天气怎么样"}
]
response_stream = agent.astream({"messages": messages},stream_mode="values")
# 打印结果
async for step in response_stream:
step["messages"][-1].pretty_print()
if __name__ == '__main__':
asyncio.run(main())
比如下面的测试中,浏览器不会打开两个百度页面,而是打开一次,关闭一次浏览器
from mcpstore import MCPStore
# 创建 Store 实例
store = MCPStore.setup_store()
# 注册服务
store.for_store().add_service({"name":"browser","url":"http://127.0.0.1:8931/sse"})
# 自动将 MCP 工具转换为 LangChain Tool 对象
tools = store.for_store().for_langchain().list_tools()
s1 = store.for_store().use_tool("browser_navigate", {"url":"https://www.baidu.com"})
s2 = store.for_store().use_tool("browser_navigate", {"url":"https://www.baidu.com"})
while True:
print(1)
有考虑过这个问题吗,可以默认成运行后是在同一个会话中,或者有更好的实现
Metadata
Metadata
Assignees
Labels
No labels