Files
wehub-resource-sync c3bf08ac8d
K8s Workspace Integration Tests / k8s-workspace-tests (push) Has been cancelled
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.11) (push) Has been cancelled
Web UI / check (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:39:27 +08:00

132 lines
4.1 KiB
Python

# -*- coding: utf-8 -*-
"""The example script to start the agent service."""
import os
import uvicorn
from fastapi.middleware import Middleware
from fastapi.middleware.cors import CORSMiddleware
from agentscope.app import create_app, SubAgentTemplate
from agentscope.app.message_bus import InMemoryMessageBus
from agentscope.app.rag.knowledge_base_manager import CollectionPerKbManager
from agentscope.app.storage import RedisStorage
from agentscope.app.workspace_manager import LocalWorkspaceManager
from agentscope.mcp import MCPClient, StdioMCPConfig, HttpMCPConfig
from agentscope.permission import PermissionContext, PermissionMode
from agentscope.rag import QdrantStore
default_mcps = [
MCPClient(
name="browser-use",
mcp_config=StdioMCPConfig(
command="npx",
args=["@playwright/mcp@latest"],
),
is_stateful=True,
),
]
if os.getenv("AMAP_API_KEY"):
default_mcps.append(
MCPClient(
name="amap",
mcp_config=HttpMCPConfig(
url=f"https://mcp.amap.com/mcp?key="
f"{os.environ['AMAP_API_KEY']}",
),
is_stateful=False,
),
)
storage = RedisStorage(
host="localhost",
port=6379,
)
vector_store = QdrantStore(location=":memory:")
app = create_app(
storage=storage,
message_bus=InMemoryMessageBus(),
# -- To use a Redis-backed message bus instead (recommended for
# -- multi-process / production deployments), uncomment the lines
# -- below and replace the InMemoryMessageBus() above:
#
# from agentscope.app.message_bus import RedisMessageBus
# message_bus=RedisMessageBus(
# host="localhost",
# port=6379,
# ),
workspace_manager=LocalWorkspaceManager(
basedir=os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"workspaces",
),
# The default MCP servers that will be added into the workspace
default_mcps=default_mcps,
),
# Knowledge base feature — backed by an in-memory Qdrant store. The
# CollectionPerKbManager allocates one collection per knowledge base,
# so any embedding dimension is allowed.
knowledge_base_manager=CollectionPerKbManager(
storage=storage,
vector_store=vector_store,
),
# Customize your own subagent templates
custom_subagent_templates=[
SubAgentTemplate(
type="explorer",
description=(
"Read-only agents specialized in exploration tasks. It can "
"read files but cannot modify, create, or delete them. Use "
"this agent type when you need to investigate the codebase, "
"understand its structure, or gather information from files "
"to support planning—without making any changes."
),
system_prompt_template="""You are {member_name}, an explorer \
agent in team '{team_name}' led by {leader_name}.
Team purpose: {team_description}
Your role: {member_description}
## Responsibilities
- Complete the exploration tasks assigned by the team leader.
- You are read-only: you may inspect files and the codebase, but you must \
never modify, create, or delete anything.
## Reporting
- Always report the task result back to {leader_name} using the TeamSay \
tool, whether the task succeeds or fails.
- Keep your private reasoning private; only share conclusions and findings \
that the leader needs.
Note: `TeamSay` is your ONLY channel to communicate with {leader_name} and \
the other team members. Any other output you produce is invisible to them, \
so anything you want them to see MUST be sent through `TeamSay`.""",
permission_context=PermissionContext(
# Read-only
mode=PermissionMode.EXPLORE,
),
),
],
extra_middlewares=[
Middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
),
],
)
if __name__ == "__main__":
# Start the service
uvicorn.run(
"main:app",
host="0.0.0.0",
port=8000,
reload=True,
)