需完成Platform层协议适配、认证桥接与会话路由配置:一、扩展HermesPlatformConfiguration支持众包平台;二、实现ICliProvider众包适配器;三、重载StdioAcpTransport协议方法;四、配置众包专用CliAcpSessionPool;五、启用SignalR透传同步状态。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您希望将 HermesAgent 接入外部数据众包平台以扩展其任务执行能力与知识采集渠道,则需完成 Platform 层的协议适配、认证桥接与会话路由配置。以下是实现 HermesAgent 与数据众包平台集成的具体操作路径:
一、配置 PlatformConfiguration 扩展支持
HermesPlatformConfiguration 是 HermesAgent 中管理所有外部平台接入参数的核心配置类,需为其注入众包平台特有的 endpoint、API 密钥格式、任务 schema 映射规则及回调地址。该步骤确保 HermesCliProvider 能识别并构造合法的平台请求。
1、在项目根目录下定位 HermesPlatformConfiguration.cs 文件。
2、向 SupportedPlatforms 集合中添加新平台标识符,例如 "crowdsource-v1"。
3、为该标识符注册独立配置块,包含 BaseUrl、ApiKeyHeaderName、TaskSchemaPath 三项必填字段。
4、保存文件后,重新编译 HermesCliProvider 程序集以使配置生效。
二、实现 ICliProvider 的众包适配器
ICliProvider
1、新建类 CrowdSourceCliProvider.cs,继承 ICliProvider
2、在 ExecuteAsync 方法中,调用 HttpClient.PostAsJsonAsync 向众包平台 API 提交结构化任务请求。
3、使用 JsonSerializer.Deserialize
4、将该实现类注册进 DI 容器,替换默认的 StdioAcpTransport 实例。
三、重载 StdioAcpTransport 协议方法
StdioAcpTransport 负责将 ACP 协议方法(如 session/prompt)序列化为标准输入流并监听子进程输出。为支持众包平台异步响应模式,需扩展其对 session/prompt 的处理逻辑,引入轮询机制或 webhook 回调监听。
1、在 StdioAcpTransport.ProcessPromptAsync 方法内,判断当前 platformId 是否为众包类型。
2、若匹配,则不等待子进程 stdout 直接返回 { "status": "accepted", "task_id": "cs-xxxx" }。
3、启动后台任务,按固定间隔调用 GET /tasks/{task_id}/status 直至状态变为 completed。
4、获取最终结果后,通过 SendResponseAsync 将其注入当前 ACP 会话上下文。
四、配置 CliAcpSessionPool 的众包专用会话池
CliAcpSessionPool 用于复用 Hermes ACP 子进程实例,降低冷启动开销。当接入众包平台时,需隔离其会话资源,避免与本地模型推理会话发生竞争或超时干扰。
1、在 Startup.cs 中新增命名会话池: services.AddSingleton
2、修改 HermesGrain.OnActivateAsync,根据 incoming request platform 字段动态选择会话池实例。
3、为众包会话池设置独立超时策略:MaxIdleTime = TimeSpan.FromMinutes(10),MaxConcurrentSessions = 3。
4、确保每个众包会话绑定唯一 crowd_task_id,用于后续结果归因与重试追踪。
五、启用 SignalR 消息透传以同步众包状态
SignalR 实时消息通道用于维持 Hermes 身份在跨平台交互中的一致性。当众包平台完成标注并触发 webhook 回调时,需通过 SignalR 将结果广播至原始发起客户端,保证用户界面状态实时更新。
1、在众包回调 Endpoint 中注入 IHubContext
2、解析回调 body 中的 session_id 与 result 字段。
3、调用 hubContext.Clients.Group(session_id).SendAsync("OnCrowdResult", result)。
4、前端 JavaScript 监听 OnCrowdResult 事件,更新 UI 中对应任务卡片的状态徽标与响应内容。











