Some checks failed
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_en (ubuntu-latest, 3.10) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_zh (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.12) (push) Has been cancelled
102 lines
2.7 KiB
Python
102 lines
2.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""The main entry point of the ReAct agent example."""
|
|
|
|
import asyncio
|
|
import os
|
|
|
|
from dotenv import load_dotenv
|
|
from mcp.client.auth import (
|
|
OAuthClientProvider,
|
|
)
|
|
from mcp.shared.auth import (
|
|
OAuthClientMetadata,
|
|
)
|
|
from pydantic import AnyUrl
|
|
|
|
from oauth_handler import (
|
|
InMemoryTokenStorage,
|
|
handle_callback,
|
|
handle_redirect,
|
|
)
|
|
|
|
from agentscope.agent import ReActAgent, UserAgent
|
|
from agentscope.formatter import DashScopeChatFormatter
|
|
from agentscope.mcp import HttpStatelessClient
|
|
from agentscope.memory import InMemoryMemory
|
|
from agentscope.model import DashScopeChatModel
|
|
from agentscope.tool import Toolkit
|
|
|
|
load_dotenv()
|
|
|
|
# Fetch the MCP endpoint from https://api.aliyun.com/mcp after provisioning.
|
|
server_url = (
|
|
"https://openapi-mcp.cn-hangzhou.aliyuncs.com/accounts/14******/custom/"
|
|
"****/id/KXy******/mcp"
|
|
)
|
|
|
|
memory_token_storage = InMemoryTokenStorage()
|
|
|
|
oauth_provider = OAuthClientProvider(
|
|
server_url=server_url,
|
|
client_metadata=OAuthClientMetadata(
|
|
client_name="AgentScopeExampleClient",
|
|
redirect_uris=[AnyUrl("http://localhost:3000/callback")],
|
|
grant_types=["authorization_code", "refresh_token"],
|
|
response_types=["code"],
|
|
scope=None,
|
|
),
|
|
storage=memory_token_storage,
|
|
redirect_handler=handle_redirect,
|
|
callback_handler=handle_callback,
|
|
)
|
|
|
|
stateless_client = HttpStatelessClient(
|
|
# Name used to identify the MCP
|
|
name="mcp_services_stateless",
|
|
transport="streamable_http",
|
|
url=server_url,
|
|
auth=oauth_provider,
|
|
)
|
|
|
|
|
|
def require_env_var(name: str) -> str:
|
|
"""Return the value of *name* or raise a helpful error."""
|
|
value = os.environ.get(name)
|
|
if value is None:
|
|
raise RuntimeError(f"Environment variable '{name}' must be set.")
|
|
return value
|
|
|
|
|
|
async def main() -> None:
|
|
"""The main entry point for the ReAct agent example."""
|
|
toolkit = Toolkit()
|
|
await toolkit.register_mcp_client(stateless_client)
|
|
|
|
agent = ReActAgent(
|
|
name="AlibabaCloudOpsAgent",
|
|
sys_prompt=(
|
|
"You are an Alibaba Cloud operations assistant. "
|
|
"Use ECS, RDS, VPC, and other services to satisfy requests."
|
|
),
|
|
model=DashScopeChatModel(
|
|
api_key=require_env_var("DASHSCOPE_API_KEY"),
|
|
model_name="qwen3-max-preview",
|
|
enable_thinking=False,
|
|
stream=True,
|
|
),
|
|
formatter=DashScopeChatFormatter(),
|
|
toolkit=toolkit,
|
|
memory=InMemoryMemory(),
|
|
)
|
|
user = UserAgent("User")
|
|
|
|
msg = None
|
|
while True:
|
|
msg = await user(msg)
|
|
if msg.get_text_content() == "exit":
|
|
break
|
|
msg = await agent(msg)
|
|
|
|
|
|
asyncio.run(main())
|