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
132 lines
4.1 KiB
Python
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,
|
|
)
|