You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
相关:#424(LLM provider catalog —— scripting 已经在做发现层),#400(NyxID 边界)
背景
aevatar 已经有三块独立但互不知道彼此存在的能力:
/api/chat接受 inline YAML,WorkflowGAgent第一次用时编译,每次 run 是独立 actor(src/workflow/Aevatar.Workflow.Core/Primitives/WorkflowParser.cs)。30 个 step kind 覆盖编排层(llm_call / tool_call / connector_call / conditional / switch / while / foreach / parallel / race / map_reduce / vote / workflow_call / dynamic_workflow / human_input / assign / transform / cache / checkpoint / wait_signal / emit / delay等)。ScriptDefinitionGAgent持久化、ScriptBehaviorGAgent沙箱执行、ScriptCatalogGAgent管 revision,支持 promote / rollback。关键:编译走 Roslyn,不要发版。IAgentTool+ToolManager+ToolCallLoop+IAgentToolSource+ approval / hooks / middleware;MCP 已接通;Aevatar.AI.ToolProviders.Scripting已经把 7 个meta-tool(script_compile / script_execute / script_promote / script_rollback / script_list / script_source / script_status)暴露给 LLM。把三块连起来,逻辑上 AI 已经能:列出脚本 → 写一个新脚本 → 编译 → 沙箱执行 → 看结果 → promote → 在 workflow 里
tool_call调用。但实际不行,缝隙就一处:每个 script 还没作为独立 tool 出现在 LLM 面前。LLM 看到的只有统一的script_execute(scriptId, payloadJson),不知道 catalog 里有calculate_discount(order_id, customer_tier)这种语义化 tool 可调。目标
把现有三块缝合到位,让"AI 写一个 script 当工具用 + 写一份 YAML 把它编排进新功能 → 立即上线"成为最短闭环。不引入第二条系统,所有补丁都是在已有抽象内部加 adapter。
提议:补 5 块小东西
1.
ScriptToolSource : IAgentToolSource(最具杠杆)新建 source(住在
Aevatar.AI.ToolProviders.Scripting),在 agent 激活时(或定时)扫ScriptCatalogGAgent里 promoted 状态的 script,把每条映射成独立IAgentTool,注册进ToolManager。LLM 选 tool 时看到的是calculate_discount,背后路由到ScriptExecuteTool。2. Script Definition 加 tool 元数据
ScriptDefinitionproto 增加:tool_nametool_descriptionwhen_to_useexamples没有这些字段时,script 默认不进入
ScriptToolSource,依然只对 meta-tool 可见。这样不破坏现有脚本。3. Proto → JSON Schema 自动转换
IAgentTool.ParametersSchema要 JSON Schema,但 script 输入是 protobuf。需要从 proto descriptor 自动生成 JSON Schema(住在Aevatar.AI.Abstractions/ToolProviders的 helper 里)。否则每个脚本作者得手维护两份 schema,AI 自己玩不起来。4. Tool 输出契约 + await readmodel
Script 产出是 events + readmodel,tool result 是字符串。需要明确:
tool_response强类型 message,runtime 等到对应 readmodelStateVersion≥ 写入版本后,序列化这个字段返回;这块有 CLAUDE.md 强约束:禁止 query-time replay/priming。所以正确做法是 await committed + projection observed,不是同步从 actor state 读。倾向 A,强类型契约更清晰。
5. Per-script approval policy
ScriptExecuteTool现在统一AlwaysRequire,AI 自迭代场景里太重。Script Definition 加tool_approval_mode字段,沙箱阶段 / promoted 阶段可以分别策略。配合现有ToolApprovalMiddleware。这 5 块加上去,链路全通。1+2+3 是必须,4 是正确性,5 是体验。
AI 自迭代的真正边界(硬约束,不是工程缺口)
写之前要把范围讲清楚,避免 "AI 能做任何 feature" 误区:
IWorkflowModulePack是静态 pack,加新 module 要 DI 注册。但实际不是问题——tool_call + connector_call + script三件套覆盖业务编排层;真正需要新 step kind 的场景(新传输协议、新存储后端)本来不该让 AI 改。IScriptBehaviorRuntimeCapabilities暴露的(AskAI / Publish / SendTo / CreateAgent / UpsertScriptDefinition / ScheduleSelfDurableSignal / ProposeScriptEvolution)就是上限。AI 想要新能力(GPU、原生代码、新存储)依然要在内核加。这是对的,沙箱不该由 AI 自己撑开。ScriptCatalogGAgent没看到资源配额维度。待决问题
ScriptToolSource的发现时机:agent 激活时一次性拉?订阅ScriptCatalogGAgent的 promoted 事件流增量更新?还是定时拉?倾向后两者组合(事件流为主,定时兜底)。tool_response)还是 option B(readmodel snapshot subset)?ReadModelCatalogGAgent?还是 workflow 已有的actor_inspect / event_query扩展为 readmodel browser?grpc-gatewaystyle)?aevatar 自己生成的 proto types 用 protobuf-net,需要确认能不能拿到 descriptor。ScriptBehaviorGAgent已有 ephemeral execute mode,是否复用作为 dry-run?workflow 这边要不要也加一个 plan-only 模式?ScriptCatalogGAgent/WorkflowGAgent作为 promote 前置门禁?落地顺序(建议,从最具杠杆开始)
tool_name / description / when_to_use / examples / tool_approval_mode+ 默认隐藏行为ScriptToolSource : IAgentToolSource,事件流订阅 + 启动时全量await stable readmodel version的等待 helperaevatar script tool list / preview {tool_name},方便人工审阅 AI 写的脚本tool_call步骤验证脚本 tool 可被引用(理论上现成的)1-6 是 MVP,做完 "AI 写 script + 写 YAML + 上线" 闭环就成立。7-9 是把"能跑"变成"敢跑"。
评论区想听:
All reactions