Files
codex-bot a64378956a
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
chore: initialize sandbox and overwrite remote content
2026-03-02 22:32:27 +08:00

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())