一次解决多智能体“看不见也管不住“的难题:AgentScope 2.0 从本地脚本到上线服务的完整实战
2026/9/17 10:51:02 网站建设 项目流程

一次解决多智能体"看不见也管不住"的难题:AgentScope 2.0 从本地脚本到上线服务的完整实战

【免费下载链接】agentscopeBuild and run agents you can see, understand and trust.项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope

你让智能体帮你清理工作区,它顺手把构建产物也删了——而你当时根本没注意到。多智能体开发常见的坑不在模型推理,而在你既看不见它的过程,也拦不住它的动作。AgentScope 2.0 把推理、工具调用、协作全程变成可流式消费的事件流,再配上权限引擎和沙箱工作区,让你拿到的是一套看得见的、管得住的多智能体框架。

它是智能体运行环境,不是编排引擎

先说结论:AgentScope 2.0 不拿固化的流程模板去框模型,而是信任大模型自身的推理和工具调用能力——它更像一套行车环境(路、仪表盘、护栏),而不是帮你画好的路线图。

框架分两层,按需取用:

模块你拿到什么适合场景
SDK 层(Agent/Toolkit/ModelReAct 智能体、内置 Bash/Read/Write/Grep 工具、OpenAI、Anthropic、Gemini、DashScope、DeepSeek、Moonshot、xAI、Ollama 等统一模型接口代码里组装任意智能体
事件系统reply_stream全程事件流前端渲染、日志落盘、过程回放
权限引擎PermissionEngine对每次工具调用做ALLOW/DENY/ASK三档判定人在环、生产风控
WorkspaceLocal / Docker / E2B / K8s / Daytona 等沙箱后端代码执行安全
中间件回复、推理、行动、模型调用、权限等环节的钩子接 Tracing、长期记忆、RAG
Agent ServiceFastAPI 后端 + 现成 Web UI,多租户多会话直接上线

先跑起来:官方 GoalPipeline 示例的最短路径

不先讲原理,先让你看到第一个真实结果:一个"执行者"写代码、一个"审查者"验收,不过就打回,直到通过。完整可跑的官方示例在 examples/pipeline/goal/goal_pipeline.py,下面按它的最小形态拆。

1. 装环境。要求 Python 3.11+。

git clone https://gitcode.com/GitHub_Trending/ag/agentscope cd agentscope && uv pip install -e .

装源码而不是 PyPI 包,方便你边读 src/agentscope/ 边跑。

2. 建一个单智能体,开终端控制台。为什么这么做:launch_console会替你把输入、工具调用确认、Ctrl+C 中断全处理掉,先确认单智能体能正常跑通再谈协作。

from agentscope.agent import Agent from agentscope.model import DashScopeChatModel from agentscope.credential import DashScopeCredential from agentscope.tool import Toolkit, Bash, Grep, Read, Write from agentscope.console import launch_console agent = Agent( name="Friday", system_prompt="You are a helpful assistant.", model=DashScopeChatModel( credential=DashScopeCredential(api_key="sk-..."), model="qwen3.7-max", ), toolkit=Toolkit(tools=[Bash(), Grep(), Read(), Write()]), ) await launch_console(agent)

3. 让两个智能体共用一个工作区。为什么:审查者必须判断磁盘上真实写下的东西,而不是执行者"声称"写了什么——共用LocalWorkspace是这条协作链成立的前提。

from agentscope.state import AgentState from agentscope.permission import PermissionContext, PermissionMode from agentscope.workspace import LocalWorkspace async with LocalWorkspace(workdir="workspace") as ws: tools = await ws.list_tools() executor = Agent( name="Executor", system_prompt="You're a programmer named 'Executor'.", model=model, # 第 2 步的模型实例 toolkit=Toolkit(tools=tools), offloader=ws, state=AgentState(permission_context=PermissionContext( mode=PermissionMode.BYPASS)), ) verifier = Agent(...) # 同样构造,换成 Verifier

注意verifier就是普通Agent,不是特殊类,它和执行者用的是同一套工具。

4. 套上 GoalPipeline 并启动。为什么:审查不过时驳回意见会原样回传给执行者,循环上限由max_iters控制,目标则是"这条流水线第一次被要求做什么",换个任务审查标准自动跟着换。

from agentscope.pipeline import GoalPipeline pipe = GoalPipeline(executor=executor, verifier=verifier, max_iters=10) await launch_console(agent=pipe)

🎬 两个智能体的事件流会在终端里交替滚动,谁在推理、调了哪个工具、结果是什么,全程可见:

让智能体自己决定下一步:批量工具调用、结构化输出与中断恢复

结论:你只给它一个 ReAct 循环加一套工具,规划由它自己做。

  • 批量行动:模型一轮里发出多个工具调用时,框架会分组后顺序或并发执行,而不是傻等一个个跑完(实现在 src/agentscope/agent/_agent.py)。
  • 结构化输出reply接受structured_schema参数,直接拿回符合 Pydantic 模型的结构,省去解析自由文本。
class Plan(BaseModel): steps: list[str] msg = await agent.reply(user_msg, structured_schema=Plan)
  • 可中断可恢复reply_stream是事件生成器,UserConfirmResultEventUserInterruptEvent这类事件可以直接作为输入喂回去,智能体从断点继续,而不是从头重跑。

⚠️容易踩错:别用 if-else + for 循环自己复刻 ReAct。你想控制的是"流程的骨架",那就用GoalPipeline这类 pipeline 表达;每一步的开放决策留给模型。

给每次工具调用装一道权限闸:ALLOW、DENY、ASK 三档判定

结论:权限不是事后补丁,而是引擎内置的一环——每次工具执行请求都要过一道判定。

🔐PermissionEngine基于PermissionContext(模式 + 规则集)工作,规则行为分三档:ALLOW放行、DENY拦截、ASK暂停等人确认。模式从松到紧有DEFAULTACCEPT_EDITSEXPLOREBYPASS几档,比如ACCEPT_EDITS自动放行工作目录内的文件读写。

from agentscope.permission import ( PermissionEngine, PermissionContext, PermissionMode, PermissionRule, PermissionBehavior, ) context = PermissionContext(mode=PermissionMode.ACCEPT_EDITS) engine = PermissionEngine(context) engine.add_rule(PermissionRule( tool_name="Bash", rule_content="git:*", behavior=PermissionBehavior.ALLOW, ))

一个容易忽略的点:规则匹配的语义是按工具类型分的——Bash 对命令做子串/前缀通配(所以写git:*),文件类工具(Read/Write)对路径做 glob 匹配(如src/**)。另外别被BYPASS完全吓到:Bash对敏感文件/目录即使命中 BYPASS 也会强制询问,见 src/agentscope/tool/_builtin/_bash.py。

⚠️容易踩错:模式语法写错了规则会静默失效,护栏形同虚设。上线前用一条你确定会触发的规则做冒烟测试。

智能体全程可回放:reply_stream 事件流与中间件钩子

结论:在这里"过程不可见"基本不成立,因为一切皆是事件。

智能体不是一口气吐给你最终答案,reply_stream持续产出细粒度事件:模型调用开始/结束、文本增量、思考块、工具调用块、工具结果增量、多模态内容……完整的类型清单见 src/agentscope/event/_event.py(ModelCallStartEventToolCallDeltaEventRequireUserConfirmEvent等)。你自己的前端或日志系统直接消费这条流:

from agentscope.event import RequireUserConfirmEvent async for event in agent.reply_stream(inputs=user_msg): if isinstance(event, RequireUserConfirmEvent): # 事件流在此暂停;确认后把 # UserConfirmResultEvent 喂回 reply_stream 即可 pass

生产级观测还有两层:仓库内置 OpenTelemetry 兼容的 Tracing 模块(src/agentscope/middleware/_tracing/),挂上后每个智能体操作都能进 Jaeger/Zipkin;src/agentscope/middleware/ 下的可组合中间件则在回复、推理、行动、权限检查等环节提供钩子,想在哪一步埋点就在哪一步挂,不用改核心逻辑。

⚠️容易踩错:只把最终msg落盘、不落事件流。真出故障时你会重新变回"只有答案没有过程"的状态——事件流才是可回放的现场。

从本地脚本到多租户线上服务:启动 Agent Service 的最短路径

结论:个人脚本到此为止;要上线,改一个文件就行。

要起的组件只有三个:Redis(存储后端)、FastAPI 后端(examples/agent_service/main.py,python main.py起在 8000 端口)、Web UI(examples/web_ui/,pnpm install && pnpm dev,前端指到http://localhost:8000)。完整示例装的是agentscope[full]全家桶。

定制入口就是main.py里的create_app(...)——存储、工作区管理器、MCP、IM 渠道、子智能体模板全是参数:

app = create_app( storage=RedisStorage(host="localhost", port=6379), workspace_manager=LocalWorkspaceManager(basedir="workspaces"), channels=[DingTalkChannel, DiscordChannel, FeishuChannel], ) uvicorn.run("main:app", host="0.0.0.0", port=8000)

开箱能力包括多租户多会话隔离、智能体团队(leader 派活给 worker)、飞书/Discord/钉钉渠道、RAG 知识库、MCP 与技能市场、SQL/NoSQL 持久化和后台任务卸载。

上线前,逐项核对这 6 个位置

  • BYPASS 开在沙箱外。错因:把 BYPASS 当成"少点几次确认"的便利开关,在本地开发环境也打开了。正确做法:BYPASS 只给受控 workspace 里的智能体用;本地机器上用DEFAULTACCEPT_EDITS加显式规则。
  • 规则模式语法配错。错因:用 glob 习惯去写 Bash 规则。正确做法:记住分工具语义——Bash 是git:*这种前缀/子串通配,Write/Read 是路径 glob;上线前做一条会触发的冒烟规则。
  • 用 if-else 复刻编排。错因:把流程每一步都写死在代码里,模型沦为念稿的。正确做法:固定逻辑交给GoalPipeline,开放部分交给模型推理。
  • 长任务阻塞事件流。错因:一个跑 20 分钟的工具调用把前端卡死。正确做法:给Agentoffloader(如LocalWorkspace),耗时调用卸载到后台,结果回来再唤醒智能体继续。
  • 恢复执行时自己记账。错因:在外部代码里维护"现在轮到哪个智能体"。正确做法:恢复事件(UserConfirmResultEvent等)自带挂起现场的标识,直接照用喂回reply_stream即可。
  • Python 版本不达标。错因:3.9 环境里安装失败却去怀疑网络或依赖。正确做法:requires-python>=3.11,先升环境再排查。

两条路径的下一步地图

新手(半天能走完):

  1. 跑通 examples/pipeline/goal/goal_pipeline.py,把终端里的事件流看完整;
  2. 改 examples/console/main.py 玩控制台(它演示了工作区技能与AgenticMemoryMiddleware长期记忆);
  3. 换一家模型厂商,确认统一接口——DashScopeChatModel换成AnthropicChatModelOllamaChatModel等只是换导入。

进阶(按需要深入):

  1. 权限规则 + Tracing 中间件,源码在 src/agentscope/middleware/_tracing/ 与 src/agentscope/permission/;
  2. 把工作区从 Local 切到 Docker / E2B / K8s / Daytona 沙箱,全部实现集中在 src/agentscope/app/workspace_manager/;
  3. 用 examples/agent_service/ 起多租户服务;
  4. 需要记忆与知识库时再看 examples/long_term_memory/ 和 examples/rag/。

方向盘始终在模型手里,AgentScope 递给你的是一条不丢帧的行车记录仪和一道可以逐条拧紧的护栏——这两样装好了,这车才敢真正上路。

【免费下载链接】agentscopeBuild and run agents you can see, understand and trust.项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询