跳转到内容

Agent

4 篇包含标签 "Agent" 的文章

Hermes Agent 集成实践:从协议到生产

Hermes Agent 集成实践:从协议到生产

Section titled “Hermes Agent 集成实践:从协议到生产”

分享 HagiCode 集成 Hermes Agent 的完整实践,包括 ACP 协议适配、会话池管理、前后端契约同步等核心经验。

在构建 AI 辅助编码平台 HagiCode 的过程中,团队需要集成一个既能在本地运行又能扩展到云端的 Agent 框架。经过调研,Nous Research 的 Hermes Agent 被选为综合 Agent 的底层引擎。

其实选型这事儿,说难也不难,说简单也不简单。毕竟市面上能打的 Agent 框架也不少,只是 Hermes 那个 ACP 协议和工具系统确实有点东西,刚好契合 HagiCode “既要又要”的需求场景——本地开发、团队协作和云端扩展。但要把 Hermes 真正融入生产系统,还需要解决一系列工程问题,这可不是闹着玩的。

HagiCode 的技术栈基于 Orleans 构建分布式系统,前端使用 React + TypeScript。集成 Hermes 需要在保持现有架构统一性的前提下,让 Hermes 成为与 ClaudeCode、OpenCode 等并行的”一等公民”执行器。说起来容易,做起来嘛,也就那样吧。

本文分享我们在 HagiCode 项目中集成 Hermes Agent 的实践经验,希望能给面临类似需求的团队提供参考。毕竟,踩过的坑,没必要让别人再踩一遍。

本文分享的方案来自我们在 HagiCode 项目中的实践经验。HagiCode 是一个 AI 驱动的编码辅助平台,支持多种 AI Provider 的统一接入和管理。在集成 Hermes Agent 的过程中,我们设计了一套通用的 Provider 抽象层,使得新的 Agent 类型可以无缝接入现有系统。

如果你对 HagiCode 感兴趣,欢迎访问 GitHub 了解更多。多个人看,多份力量罢了。

HagiCode 的 Hermes 集成采用了清晰的分层架构,每层各司其职:

后端核心层

  • HermesCliProvider: 实现 IAIProvider 接口,作为统一的 AI Provider 入口
  • HermesPlatformConfiguration: 管理 Hermes 可执行文件路径、参数、认证等配置
  • ICliProvider<HermesOptions>: HagiCode.Libs 提供的底层 CLI 抽象,处理子进程生命周期

传输层

  • StdioAcpTransport: 通过标准输入输出与 Hermes ACP 子进程通信
  • ACP 协议方法:initializeauthenticatesession/newsession/prompt

运行时层

  • HermesGrain: Orleans Grain 实现,处理分布式会话执行
  • CliAcpSessionPool: 会话池,复用 ACP 子进程,避免频繁启动开销

前端层

  • ExecutorAvatar: Hermes 视觉标识和图标
  • executorTypeAdapter: Provider 类型映射逻辑
  • SignalR 实时消息传递:保持 Hermes 身份在消息流中的一致性

这种分层设计使得各层可以独立演进,比如未来要添加新的传输方式(如 WebSocket),只需修改传输层即可。毕竟,谁愿意因为改一个传输方式就把整个系统都翻一遍呢?多累啊。

所有 AI Provider 都实现 IAIProvider 接口,这是 HagiCode 架构的核心设计:

public interface IAIProvider
{
string Name { get; }
ProviderCapabilities Capabilities { get; }
IAsyncEnumerable<AIStreamingChunk> StreamAsync(
AIRequest request,
CancellationToken cancellationToken = default);
Task<AIResponse> ExecuteAsync(
AIRequest request,
CancellationToken cancellationToken = default);
}

HermesCliProvider 实现了这个接口,与 ClaudeCodeProviderOpenCodeProvider 等处于平等地位。这种设计带来的好处:

  1. 可替换性: 切换 Provider 不影响上层业务逻辑
  2. 可测试性: 可以轻松 Mock Provider 进行单元测试
  3. 可扩展性: 新增 Provider 只需实现接口即可

说到底,接口这东西,就像规矩一样。有了规矩,大家才能和谐共处,各自发挥所长,互不干扰。这难道不是一种美吗?

HermesCliProvider 是整个集成的核心,它负责协调各个组件完成一次 AI 调用:

public sealed class HermesCliProvider : IAIProvider, IVersionedAIProvider
{
private readonly ICliProvider<LibsHermesOptions> _provider;
private readonly ConcurrentDictionary<string, string> _sessionBindings;
public ProviderCapabilities Capabilities { get; } = new()
{
SupportsStreaming = true,
SupportsTools = true,
SupportsSystemMessages = true,
SupportsArtifacts = false
};
public async IAsyncEnumerable<AIStreamingChunk> StreamAsync(
AIRequest request,
[EnumeratorCancellation] CancellationToken cancellationToken = default)
{
// 1. 解析会话绑定 key
var bindingKey = ResolveBindingKey(request.CessionId);
// 2. 通过会话池获取或创建 Hermes 会话
var options = new HermesOptions
{
ExecutablePath = _platformConfiguration.ExecutablePath,
Arguments = _platformConfiguration.Arguments,
SessionId = _sessionBindings.TryGetValue(bindingKey, out var sessionId) ? sessionId : null,
WorkingDirectory = request.WorkingDirectory,
Model = request.Model
};
// 3. 执行并收集流式响应
await foreach (var message in _provider.ExecuteAsync(options, request.Prompt, cancellationToken))
{
// 4. 映射 ACP 消息到 AIStreamingChunk
if (_responseMapper.TryConvertToStreamingChunk(message, out var chunk))
{
yield return chunk;
}
}
}
}

这里有几个关键设计点:

  1. 会话绑定: 通过 CessionId 将多个请求绑定到同一个 Hermes 子进程,实现多轮对话的上下文连续性
  2. 响应映射: 将 Hermes ACP 消息格式转换为统一的 AIStreamingChunk 格式
  3. 流式处理: 使用 IAsyncEnumerable 支持真正的流式响应

其实会话绑定这事儿,就像人和人之间的关系一样。一旦建立了联系,后续的交流就有了上下文,不用每次都从头开始。只是这关系要维护好,不然断了就断了。

Hermes 使用 ACP(Agent Communication Protocol)协议,与传统的 HTTP API 不同。ACP 是基于标准输入输出的协议,有几个特点:

  1. 启动标记: Hermes 进程启动后会输出 //ready 标记
  2. 动态认证: 认证方法不是固定的,需要通过协议协商
  3. 会话复用: 通过 SessionId 复用已建立的会话
  4. 响应分散: 完整响应可能分散在多个 session/update 通知中

HagiCode 通过 StdioAcpTransport 处理这些特性:

public class StdioAcpTransport
{
public async Task InitializeAsync(CancellationToken cancellationToken)
{
// 等待 //ready 标记
var readyLine = await _outputReader.ReadLineAsync(cancellationToken);
if (readyLine != "//ready")
{
throw new InvalidOperationException("Hermes did not send ready signal");
}
// 发送 initialize 请求
await SendRequestAsync(new
{
jsonrpc = "2.0",
id = 1,
method = "initialize",
@params = new
{
protocolVersion = "2024-11-05",
capabilities = new { },
clientInfo = new { name = "HagiCode", version = "1.0.0" }
}
}, cancellationToken);
}
}

协议这东西,就像人与人之间的默契。有了默契,交流就会顺畅很多。只是建立默契需要时间,磨合嘛,谁都免不了。

频繁启动 Hermes 子进程的开销很大,因此我们实现了会话池机制:

services.AddSingleton(static _ =>
{
var registry = new CliProviderPoolConfigurationRegistry();
registry.Register("hermes", new CliPoolSettings
{
MaxActiveSessions = 50,
IdleTimeout = TimeSpan.FromMinutes(10)
});
return registry;
});

会话池的关键参数:

  • MaxActiveSessions: 控制并发上限,避免资源耗尽
  • IdleTimeout: 空闲超时,平衡启动成本和内存占用

实践中我们发现:

  1. 空闲超时设置太短会导致频繁重启,设置太长会占用内存
  2. 并发上限需要根据实际负载调整,过大可能导致系统卡顿
  3. 需要监控会话池的使用情况,以便及时调整参数

这就好比人生中的许多选择,太激进容易出问题,太保守又错失机会。找个平衡点罢了。

前端需要正确识别 Hermes Provider 并显示对应的视觉元素:

executorTypeAdapter.ts
export const resolveExecutorVisualTypeFromProviderType = (
providerType: PCode_Models_AIProviderType | null | undefined
): ExecutorVisualType => {
switch (providerType) {
case PCode_Models_AIProviderType.HERMES_CLI:
return 'Hermes';
default:
return 'Unknown';
}
};

Hermes 有专属的图标和颜色标识:

ExecutorAvatar.tsx
const renderExecutorGlyph = (executorType: ExecutorVisualType, iconSize: number) => {
switch (executorType) {
case 'Hermes':
return (
<svg viewBox="0 0 24 24" fill="none" className="h-4 w-4">
<rect x="4" y="4" width="16" height="16" rx="4" fill="currentColor" opacity="0.16" />
<path d="M8 7v10M16 7v10M8 12h8" stroke="currentColor" strokeWidth="2" strokeLinecap="round" />
</svg>
);
default:
return <DefaultAvatar />;
}
};

毕竟,美的东西也要有美的呈现。只是这美要被人看见,还得靠前端同学的努力。

前后端通过 OpenAPI 生成保持契约一致。后端定义了 AIProviderType 枚举:

public enum AIProviderType
{
Unknown,
ClaudeCode,
OpenCode,
HermesCli // 新增
}

前端通过 OpenAPI 生成对应的 TypeScript 类型,确保枚举值一致。这是避免前端显示 “Unknown” 的关键。

契约这东西,就像承诺一样。说好了就要做到,不然就会出现”Unknown”这种尴尬的局面。

Hermes 的配置通过 appsettings.json 管理:

{
"Providers": {
"HermesCli": {
"ExecutablePath": "hermes",
"Arguments": "acp",
"StartupTimeoutMs": 10000,
"ClientName": "HagiCode",
"Authentication": {
"PreferredMethodId": "api-key",
"MethodInfo": {
"api-key": "your-api-key-here"
}
},
"SessionDefaults": {
"Model": "claude-sonnet-4-20250514",
"ModeId": "default"
}
}
}
}

这种配置驱动的设计带来了灵活性:

  • 可以覆盖可执行文件路径,方便开发测试
  • 可以自定义启动参数,适配不同版本的 Hermes
  • 可以配置认证信息,支持多种认证方式

配置这东西,就像人生的选择题。给足了选项,总能找到适合自己的那一个。只是有时候选项太多,也会让人犯选择困难症。

实现一个可靠的 Provider 需要完善的健康检查:

public async Task<ProviderTestResult> PingAsync(CancellationToken cancellationToken = default)
{
var response = await ExecuteAsync(new AIRequest
{
Prompt = "Reply with exactly PONG.",
CessionId = null,
AllowedTools = Array.Empty<string>(),
WorkingDirectory = ResolveWorkingDirectory(null)
}, cancellationToken);
var success = string.Equals(response.Content.Trim(), "PONG", StringComparison.OrdinalIgnoreCase);
return new ProviderTestResult
{
ProviderName = Name,
Success = success,
ResponseTimeMs = stopwatch.ElapsedMilliseconds,
ErrorMessage = success ? null : $"Unexpected Hermes ping response: '{response.Content}'."
};
}

健康检查需要注意:

  1. 使用简单的测试用例,避免复杂场景
  2. 设置合理的超时时间
  3. 记录响应时间,便于性能分析

就像人需要体检一样,系统也需要健康检查。早发现早治疗,省得到时候出大问题。

HagiCode 提供专用控制台用于验证 Hermes 集成:

Terminal window
# 基础验证
HagiCode.Libs.Hermes.Console --test-provider
# 完整套件(含仓库分析)
HagiCode.Libs.Hermes.Console --test-provider-full --repo .
# 自定义可执行文件
HagiCode.Libs.Hermes.Console --test-provider-full --executable /path/to/hermes

这个工具在开发过程中非常有用,可以快速验证集成是否正确。毕竟,谁愿意在发现问题的时候才想起来去测试呢?

认证失败

  • 检查 Authentication.PreferredMethodId 与 Hermes 实际支持的认证方法是否匹配
  • 确认认证信息格式正确(API Key、Bearer Token 等)

会话超时

  • 增加 StartupTimeoutMs
  • 检查 MCP 服务器可达性
  • 查看系统资源使用情况

响应不完整

  • 确保正确聚合 session/update 通知和最终结果
  • 检查流式处理的取消逻辑
  • 验证错误处理是否完整

前端显示 Unknown

  • 确认 OpenAPI 生成已包含 HermesCli 枚举值
  • 检查类型映射是否正确
  • 清除浏览器缓存重新生成类型

问题嘛,总会有的。只是遇到问题的时候,别慌,慢慢找原因,总能解决的。毕竟,办法总比困难多。

  1. 使用会话池: 复用 ACP 子进程,减少启动开销
  2. 合理设置超时: 平衡内存和启动成本
  3. 复用会话 ID: 批量任务使用同一个 CessionId
  4. 按需配置 MCP: 避免不必要的工具调用

性能这东西,就像生活中的效率。做对了,事半功倍;做错了,事倍功半。只是找到那个”对”的点,需要经验和运气。

集成 Hermes Agent 到生产系统需要考虑多个层面的问题:

  1. 架构层面: 设计统一的 Provider 接口,实现可替换的组件架构
  2. 协议层面: 正确处理 ACP 协议的特殊性,如启动标记、动态认证等
  3. 性能层面: 通过会话池复用资源,平衡启动成本和内存占用
  4. 前端层面: 确保契约同步,提供一致的视觉体验

HagiCode 的实践表明,通过良好的分层设计和配置驱动,可以将复杂的 Agent 系统无缝集成到现有架构中。

其实这些道理说起来都挺简单的,只是真正做起来的时候,总会遇到各种各样的问题。不过没关系,问题解决了就是经验,解决不了就是教训,都是有价值的东西。

美的事物或人,不一定要占有,只要她还是美的,自己好好看着她的美就好了。技术也是如此,只要能让系统变得更好,用什么框架、什么协议,其实都没那么重要…

感谢您的阅读,如果您觉得本文有用,欢迎点赞、收藏和分享支持。 本内容采用人工智能辅助协作,最终内容由作者审核并确认。

我好像会被 Agent 淘汰,我用数据算了一算

我好像会被 Agent 淘汰,我用数据算了一算

Section titled “我好像会被 Agent 淘汰,我用数据算了一算”

用数据量化 AI 替代风险:深入解析 HagiCode 团队如何用 6 个核心公式,重新定义知识工作者的竞争力评估标准。

在 AI 技术飞速发展的今天,每一个知识工作者都面临一个紧迫的问题:在 AI 时代,我是否会被淘汰?

这个问题听起来有点危言耸听,但其实很多人心里都在打鼓。前脚刚学会一个框架,后脚 AI 就说你这个岗位要被替代了;好不容易精通了一门语言,结果发现用 AI 的人产出是你的三倍——这种焦虑感,我相信屏幕前的你多少都能体会。

其实吧,这种焦虑也不是没有道理。毕竟谁也不愿意承认,自己奋斗多年的技能,可能被一个 ChatGPT 就给超越了。只是焦虑归焦虑,日子还得过不是?

传统观点往往从”AI 能做什么”出发讨论替代风险,但这种方法忽略了两个关键维度:

  1. 企业视角:企业是否愿意为一个员工配备 AI 工具,取决于 AI 成本相对于人力成本的性价比。不是说 AI 能取代这个岗位,企业就会立刻换人,还要算算经济账。毕竟资本家也不是慈善家,每一分钱都要花在刀刃上。

  2. 效率视角:AI 带来的效率提升需要被量化,而不是简单地认为”用了 AI 就更强”。你用 AI 效率提升了 2 倍,但他用 AI 提升了 5 倍,这里面的差距可不小。就像学生时代,都在听课,有的考 90 分,有的才及格——差距就是这么拉开的。

所以关键问题是:怎么把这种模糊的焦虑,变成可以量化的指标?

毕竟知道自己的位置在哪,总比在黑暗中摸索要好一些。这就是我们今天要聊的——HagiCode 团队开发的 AI 人效计算器背后的设计逻辑。

于是我做了一个 https://cost.hagicode.com 的网站。

HagiCode 是一个开源的 AI 代码助手项目,旨在帮助开发者更高效地完成编码工作。

有意思的是,HagiCode 团队在开发自己的产品过程中,积累了大量关于 AI 使用效率的实践经验。他们发现:AI 工具本身的价值,不能脱离企业的用工成本来单独评估。基于这个洞察,团队决定开发一个人效计算器,帮助知识工作者科学地评估自己在 AI 时代的竞争力。

其实这种东西,很多人都能做,只是很少有人愿意认真去做了。HagiCode 团队花时间做这个,也算是给开发者社区的一点回馈吧。

本文分享的设计方案,正是 HagiCode 在 AI 应用实践中的经验总结。如果你觉得这套评估体系有价值,说明 HagiCode 在工程实践上还是有点东西的——那么 HagiCode 项目本身 也值得关注一下。

企业为员工付出的真实成本远不止工资。这一点很多人跳槽的时候才发现——明明谈的是 2 万月薪,到手怎么就 1 万 4?公司那边可不止出 2 万,社保、公积金、培训、招聘成本都要算进去。

根据 calculate-ai-risk.ts 中的实现:

年度全用工成本 = 年薪 × (1 + 城市系数) + 年薪 / 12

城市系数反映的是不同城市的人才招募和保留成本:

城市层级代表城市系数
一线北京/上海/深圳/广州0.4
新一线杭州/成都/苏州/南京0.3
二线武汉/西安/天津/郑州0.2
其他宜昌/洛阳等0.1

一线城市系数是 0.4,意思是企业需要额外支付约 40% 的招募、培训、社保等附加成本。在北京招一个人的综合成本,确实比在二线城市高不少。

毕竟在大城市生存,生活成本也高,这算是另一种形式的”漂泊者税”了吧。

不同 AI 模型有 Input 和 Output 两种价格,而且差异巨大。代码场景下输入输出比例大约是 3:1——你给 AI 一段代码让它 review,输出的分析文字通常比输入的代码短很多。

综合单价计算公式:

综合单价 = (输入输出比例 × 输入单价 + 输出单价) / (输入输出比例 + 1)

拿 GPT-5 举个例子:

  • 输入:$2.5/1M tokens
  • 输出:$15/1M tokens
  • 综合 = (3 × 2.5 + 15) / 4 = $5.625/1M tokens

对于 USD 定价的模型,还需要按汇率转换。这个汇率 HagiCode 团队设定为 7.25,会随市场波动更新。

汇率这东西,就像股市一样,谁也猜不准。只能跟着走,罢了。

日均 AI 成本 = 日均 Token 需求 (M) × 综合单价 (CNY/1M)
年 AI 成本 = 日均 AI 成本 × 264 个工作日

264 = 22 天/月 × 12 月,这是标准工作制下的年度工作日数量。为什么不用 365 天?因为你要考虑周末、节假日、病假等因素。

毕竟咱们也不是机器人,该休息的时候还是要休息的。虽说 AI 可能不需要休息,但咱们还是要给自己留点喘息的空间。

这是整个评估体系的核心,也是 HagiCode 团队最有洞察力的地方。

可负担工作流份数 = 年度全用工成本 / AI 年成本
可负担比例 = min(可负担工作流份数, 1)
等效人力 = 1 + (效率倍数 - 1) × 可负担比例

等等,这个公式有点绕,让我解释一下:

传统观点会直接说”你的效率提升了 2 倍”,但这个公式考虑了一个关键约束:企业的 AI 预算是否可持续?

举个例子:小明效率提升了 3 倍,但他的 AI 消耗成本每年要 30 万;而公司给他的年薪才 20 万。这种情况下,虽然小明个人效率很高,但他实际上是不可持续的——公司不可能为了让他维持高效率而亏本。

可负担比例就是这个意思:如果企业只能负担 0.5 份 AI 工作流,那小明的等效人力 = 1 + (3-1) × 0.5 = 2 人,而不是 3 人。

核心洞察:不是你的效率倍数有多高,而是企业能否负担得起你维持这个效率所需的 AI 投入。

其实这个道理也挺简单的,只是很多人没往这方面想罢了。毕竟咱们习惯了从自己的角度看问题,很少站在老板的角度考虑一下——他们的钱也不是大风刮来的。

AI 成本占比 = AI 年成本 / 年度全用工成本
效率增幅 = 效率倍数 - 1
成本效益比 = 效率增幅 / AI 成本占比
  • 成本效益比 < 1:AI 投入不划算,效率提升抵不上成本
  • 成本效益比 1-2:刚好划算
  • 成本效益比 > 2:高收益,强烈推荐

这个指标对于企业管理者特别有用,可以快速评估某个岗位是否值得投入 AI 工具。

毕竟 ROI 才是王道,你说自己效率提升再多,成本爆炸也没人买账。

根据等效人力划分风险:

等效人力风险等级结论
>= 2.0高危同事一旦具备同等条件,对你威胁很高
1.5 - 2.0警示同事已开始形成明显效率优势
< 1.5安全暂时还能保持差距

看到这个表格,你心里大概也有个数了吧。只是别太焦虑,毕竟焦虑也解决不了问题——不如想想怎么提升自己的效率倍数。

为了让评估结果更有趣味性,计算器引入了 7 种特殊称号系统。称号通过 localStorage 持久化,用户可以解锁并展示自己的”成就”。

称号 ID名称获取条件
craftsman-spirit匠人精神日均 Token = 0
prompt-alchemist提示炼金术师日 Token <= 20M 且效率倍数 >= 6
all-in-operator全押操盘手日 Token >= 150M 且效率倍数 >= 3
minimalist-runner极简跑者日 Token <= 5M 且效率倍数 >= 2
cost-tamer成本驯兽师成本效益比 >= 2.5 且 AI 占比 <= 15%
danger-oracle危险预言家等效人力 >= 2.5 或进入高危区
budget-coordinator预算协调官可负担工作流份数 >= 8

每个称号背后都有隐藏含义:

称号隐藏含义
匠人精神不用 AI 也能活得很好,但需要独特竞争力
提示炼金术师用少量 Token 达到高产出,极客型用户
全押操盘手高投入高产出,适合高频场景
极简跑者轻量级 AI 使用,适合轻度辅助场景
成本驯兽师ROI 极高,企业最喜欢的员工类型
危险预言家你已经是或即将是高危群体
预算协调官你能同时运营多个 AI 工作流

其实游戏化这东西,说白了就是给枯燥的数据加点趣味性罢了。毕竟谁不喜欢收集成就呢?就像游戏里的徽章,虽然没啥实际用处,但看着心里就是舒服。

计算器的定价数据来自多个官方 API 定价页面,确保计算结果的权威性和时效性:

这些数据会定期更新,最近更新于 2026-03-19。

毕竟数据这东西,过时了就没意义了。HagiCode 团队还是挺负责的,会及时更新。

假设你是一个北京的开发者,年薪 40 万,使用 Claude Sonnet 4.6,日均 Token 消耗 50M,自评效率提升 3 倍。模拟输入:

const input = {
annualIncomeCny: 400000,
cityTier: "tier1", // 北京
modelId: "claude-sonnet-4-6",
performanceMultiplier: 3.0,
dailyTokenUsageM: 50,
}
// 计算过程
// 年度全用工成本 = 40万 × (1 + 0.4) + 40万/12 ≈ 60.33万
// AI 年成本 ≈ 50 × 7.125 × 264 ≈ 9.4万
// 可负担工作流份数 ≈ 60.33 / 9.4 ≈ 6.4 份
// 等效人力 = 1 + (3 - 1) × 1 = 3 人

结论:你的同事如果具备相同条件,能相当于 3 个人的产能,你已经处于高危区。

如果你发现自己的 AI 用法”不划算”(成本效益比 < 1),可以考虑:

  1. 降低 Token 消耗:使用更高效的 prompt,减少无效请求
  2. 选择性价比模型:如 DeepSeek-V3(人民币计价,更便宜)
  3. 提升效率倍数:学习高级 Agent 使用技巧,真正把 AI 变成生产力

其实这些问题,归根结底就是一个平衡的艺术罢了。用多了浪费钱,用少了没效果——找到那个刚刚好的点,才是关键。

HagiCode 团队在设计这个计算器时,有几个值得借鉴的工程决策:

  1. 纯前端计算:所有计算都在浏览器完成,不依赖后端 API,保护用户隐私
  2. 配置驱动:所有公式、定价、岗位数据都集中在配置文件中,未来更新无需修改核心代码逻辑
  3. 多语言支持:支持中文和英文
  4. 即时反馈:用户输入参数后,结果实时更新
  5. 详细公式展示:每个结果都附带完整的计算公式,帮助用户理解

这种设计让计算器易于维护和扩展,也为类似的数据驱动型应用提供了参考模板。

毕竟好的架构,就像好的代码一样,是需要时间沉淀的。HagiCode 团队在这方面还是挺用心的。

AI 人效计算器的核心价值,在于它把”AI 替代威胁”这个模糊的焦虑,转化为了可以量化、可以比较的指标。

等效人力公式 1 + (效率倍数 - 1) × 可负担比例 是整个评估体系的核心创新。它不仅考虑效率提升,还考虑企业能否负担 AI 成本,使评估结果更贴近现实。

这套评估体系告诉我们:在 AI 时代不知道自己处于什么位置,才是最危险的位置。

与其焦虑,不如用数据说话。

其实很多时候,恐惧源于未知。当你把一切量化之后,就会发现事情也没那么可怕。大不了就提升自己,或者换个赛道罢了。毕竟人生还长,没必要在一棵树上吊死。


现在就访问 cost.hagicode.com,完成你的 AI 人效评估。



数据来源:cost.hagicode.com | Powered by HagiCode

写到最后,想起一句诗:“此情可待成追忆,只是当时已惘然。” 其实 AI 时代也是一样,与其等到被淘汰时追悔莫及,不如现在就开始行动吧…

感谢您的阅读,如果您觉得本文有用,欢迎点赞、收藏和分享支持。 本内容采用人工智能辅助协作,最终内容由作者审核并确认。

打造 AI 冒险团:HagiCode 多 Agent 协作配置实战

打造 AI 冒险团:HagiCode 多 Agent 协作配置实战

Section titled “打造 AI 冒险团:HagiCode 多 Agent 协作配置实战”

在现代软件开发中,单一 AI Agent 已经难以满足复杂需求。如何让来自不同公司的多个 AI 助手在同一项目中协同工作?本文将分享 HagiCode 项目在实际开发中探索出的多 Agent 协作配置方案。

相信很多开发者都有过这样的经历:项目中引入了 AI 助手辅助编程,效率确实提高了。但随着需求越来越复杂,一个 AI Agent 开始不够用了——你想让它同时处理代码审查、文档生成、单元测试等多个任务,结果往往是顾此失彼,输出质量参差不齐。

更头疼的是,当你尝试引入多个 AI 助手时,问题就变得更复杂了。每个 Agent 有自己的配置方式、API 接口和执行逻辑,彼此之间甚至会产生冲突。这就像一支球队,每个球员都很厉害,但没有人知道该怎么配合,结果踢得乱七八糟。

HagiCode 项目在开发过程中也遇到了同样的困扰。作为一个涉及前端 VSCode 扩展、后端 AI 服务、跨平台桌面客户端的复杂项目,我们在 2026-03 的当时版本 里需要同时对接来自不同公司的多个 AI 助手:Claude Code、Codex、CodeBuddy、iFlow 等等。如何让它们在同一项目中和谐共处、发挥各自特长,成了必须解决的关键问题。

其实这也罢了,毕竟谁愿意每天跟一群打架的 AI 打交道呢。

本文分享的方案,正是我们在 HagiCode 项目中实际踩坑、实际优化出来的多 Agent 协作配置实践。如果你也在为多 AI 助手协作而头疼,相信这篇文章会给你一些启发。或许吧,毕竟每个人的情况都不一样。

HagiCode 是一个 AI 代码助手项目,采用多 AI 引擎协同工作的”冒险团”模式。项目地址:github.com/HagiCode-org/site

本文分享的多 Agent 配置方案,正是 HagiCode 能够在复杂项目中保持高效开发的核心技术之一。也没什么特别的,就是把一群 AI 变成一支能打配合的冒险团而已。

从”单打独斗”到”团队协作”

Section titled “从”单打独斗”到”团队协作””

在 HagiCode 项目早期,我们也尝试过只用一个 AI Agent 来处理所有任务。很快我们就发现,这种方式存在明显的瓶颈:不同的任务需要不同的能力侧重点,有的任务需要更强的上下文理解能力,有的则需要更精准的代码修改能力。一个 Agent 很难在所有方面都表现出色。

这让我们意识到,必须让多个 Agent 协同工作。但问题是,如何让不同公司的 AI 产品在同一个项目中和平共处?我们需要解决几个核心问题:

  1. 配置管理复杂性:每个 Agent 有不同的配置方式、API 接口和执行模式
  2. 通信协议统一:需要一种标准化的方式让不同 Agent 之间进行数据交换
  3. 任务分工协调:如何合理分配任务,让每个 Agent 发挥特长

带着这些问题,我们开始设计 HagiCode 的多 Agent 架构。其实也没那么复杂,只是想明白了而已。

经过多次迭代,我们最终确定的架构是这样的:

┌─────────────────────────────────────────────────────────────────┐
│ AIProviderFactory │
│ (工厂模式统一管理所有 AI Provider) │
├─────────────────────────────────────────────────────────────────┤
│ ClaudeCodeCli │ CodexCli │ CodebuddyCli │ IFlowCli │
│ (Anthropic) │ (OpenAI) │ (智谱 GLM) │ (智谱) │
└─────────────────────────────────────────────────────────────────┘

核心思路是:通过统一的 Provider 接口,让不同的 AI Agent 可以被同一套代码管理。同时使用工厂模式动态创建和配置这些 Provider,确保系统的扩展性和灵活性。

这就像生活中的分工,每个人都有自己的角色,只是这里把这种分工变成了代码架构而已。

根据 HagiCode 项目的实际使用经验,我们为每个 Agent 分配了不同的职责:

Agent提供商模型主要用途
ClaudeCodeCliAnthropicglm-5-turbo生成技术方案和Proposal
CodexCliOpenAI/Zedgpt-5.4执行精准的代码修改
CodebuddyCli智谱glm-4.7优化提案描述和文档
IFlowCli智谱glm-4.7归档提案和历史记录(当时配置;当前仅历史兼容)
OpenCodeCli--通用代码编辑
GitHubCopilotMicrosoft-辅助编程和代码补全

这种分工的背后逻辑是:每个 Agent 都有自己擅长的领域。Claude Code 在理解和分析复杂需求方面表现出色,所以让它负责前期的方案设计;Codex 在代码修改方面更精准,适合处理具体的实现任务;CodeBuddy 性价比高,用来优化文档再合适不过。

毕竟适合自己的才是最好的,条条大路通罗马,只是有的路好走一点,有的路稍微曲折一点罢了。

要让不同的 AI Agent 能够被统一管理,首先需要定义一套统一的接口。HagiCode 中定义了这个接口:

public interface IAIProvider
{
// 统一的 Provider 接口
Task<IAIProvider?> GetProviderAsync(AIProviderType providerType);
Task<IAIProvider?> GetProviderAsync(string providerName, CancellationToken cancellationToken);
}

这个接口看起来很简单,但它是整个多 Agent 系统的基石。通过统一的接口,我们可以无视底层是哪个公司的 AI 产品,都以相同的方式进行调用。

其实这就是把复杂的事情简单化了,毕竟简单才是美。

有了统一的接口,接下来就是如何创建这些 Provider 实例。HagiCode 使用了工厂模式:

private IAIProvider? CreateProvider(AIProviderType providerType, ProviderConfiguration config)
{
return providerType switch
{
AIProviderType.ClaudeCodeCli =>
ActivatorUtilities.CreateInstance<ClaudeCodeCliProvider>(_serviceProvider, Options.Create(config)),
AIProviderType.CodebuddyCli =>
ActivatorUtilities.CreateInstance<CodebuddyCliProvider>(_serviceProvider, Options.Create(config)),
AIProviderType.CodexCli =>
ActivatorUtilities.CreateInstance<CodexCliProvider>(_serviceProvider, Options.Create(config)),
AIProviderType.IFlowCli =>
ActivatorUtilities.CreateInstance<IFlowCliProvider>(_serviceProvider, Options.Create(config)),
_ => null
};
}

这里用到了依赖注入的 ActivatorUtilities.CreateInstance,它可以在运行时动态创建 Provider 实例,并且自动注入依赖项。这种设计的好处是:新增一个 Agent 类型时,只需要添加对应的 Provider 类,然后在工厂方法中加一个 case 分支即可,完全不需要修改现有代码。

这也罢了,毕竟谁愿意每次加新功能都要改一堆旧代码呢。

为了让配置更灵活,我们还实现了类型映射机制:

public static AIProviderTypeExtensions
{
private static readonly Dictionary<string, AIProviderType> _typeMap = new(
StringComparer.OrdinalIgnoreCase)
{
["ClaudeCodeCli"] = AIProviderType.ClaudeCodeCli,
["CodebuddyCli"] = AIProviderType.CodebuddyCli,
["CodexCli"] = AIProviderType.CodexCli,
["IFlowCli"] = AIProviderType.IFlowCli,
// ...更多类型映射
};
}

这个映射表的作用是将字符串形式的 Provider 名称转换为枚举类型。这样一来,配置文件就可以使用直观的字符串名称,而代码内部则使用类型安全的枚举进行处理。

毕竟配置这东西,越直观越好,谁愿意记一堆复杂的代码呢。

实际使用时,只需要在 appsettings.json 中配置即可:

AI:
Providers:
Providers:
ClaudeCodeCli:
Enabled: true
Model: glm-5-turbo
WorkingDirectory: /path/to/project
CodebuddyCli:
Enabled: true
Model: glm-4.7
CodexCli:
Enabled: true
Model: gpt-5.4
IFlowCli:
Enabled: true
Model: glm-4.7

每个 Provider 都可以独立配置开关、模型版本、工作目录等参数。这种设计既保证了灵活性,又便于管理和维护。

其实配置文件就像人生的选项,你可以选择开启或关闭某些功能,只是代码里的选择更容易后悔罢了。

有了统一的技术架构,接下来就是如何让多个 Agent 协同工作了。HagiCode 设计了一套任务流转机制,让不同的 Agent 处理不同阶段的任务:

提案创建 (用户)
[Claude Code] ──生成提案──▶ 提案文档
│ │
│ ▼
│ [Codebuddy] ──优化描述──▶ 优化后提案
│ │
│ ▼
│ [Codex] ──执行修改──▶ 代码变更
│ │
│ ▼
└───────────────▶ [iFlow] ──归档──▶ 历史记录

这种分工的好处是:每个 Agent 只需要专注于自己擅长的任务,不需要”什么都会”。Claude Code 负责从无到有生成提案,Codebuddy 负责把提案描述得更清晰,Codex 负责把提案变成实际的代码变更,iFlow 则负责把这些变更归档保存。

其实这就像生活中的团队合作,每个人都有自己的角色,合起来才能完成一件大事。只是这里的团队成员是 AI 而已。

在实际运行中,我们总结了以下几点经验:

1. Agent 选择策略很重要

不是随便分配任务,而是要根据每个 Agent 的特长来分配:

  • 提案生成:使用 Claude Code,因为它有更强的上下文理解能力
  • 代码执行:使用 Codex,因为它在代码修改方面更精准
  • 提案优化:使用 Codebuddy,因为它的性价比高
  • 归档存储:使用 iFlow,因为它稳定可靠

毕竟让合适的人做合适的事,这是千古不变的道理。

2. 配置隔离确保稳定性

每个 Agent 的配置独立管理,支持环境变量覆盖,工作目录也相互独立。这样一来,一个 Agent 的配置出错不会影响到其他 Agent。

这就像生活中的界限,每个人都有自己的空间,互不干扰才能和谐共处。

3. 错误处理机制

单个 Agent 失败不应该影响整体流程。我们实现了降级策略:当某个 Agent 执行失败时,系统可以自动切换到备用方案,或者直接跳过该步骤继续执行后续任务。同时,完整的日志记录也便于事后排查问题。

毕竟谁也不能保证永远不会出错,关键是怎么处理错误。这就像人生,总会遇到挫折,重要的是怎么走出来。

4. 监控与可观测性

通过 ACP 协议(我们自定义的通信协议,基于 JSON-RPC 2.0),可以追踪每个 Agent 的执行状态。会话隔离确保了并发安全,动态缓存则优化了性能表现。

毕竟看不见的东西最容易出问题,有点监控总好过两眼一抹黑。

采用这套多 Agent 协作配置后,HagiCode 项目的开发效率有了明显提升。具体表现在:

  1. 任务处理能力翻倍:以前一个 Agent 需要同时处理多种任务,现在可以并行处理,吞吐量翻倍不止
  2. 输出质量更稳定:每个 Agent 只专注于自己擅长的任务,输出结果的一致性和质量都更高
  3. 维护成本降低:统一的接口和配置管理,让整个系统更容易维护和扩展
  4. 新增 Agent 简单:如果要接入新的 AI 产品,只需要实现接口、添加配置,不需要修改核心逻辑

这套方案不仅解决了 HagiCode 自身的问题,也证明了多 Agent 协作确实是一种可行的架构选择。

其实效果还挺明显的,只是过程有点折腾罢了。

本文分享了 HagiCode 项目在多 Agent 协作配置方面的实践经验。核心要点包括:

  1. 标准化接口:通过 IAIProvider 统一不同 Agent 的行为,让代码可以无视底层是哪个公司的产品
  2. 工厂模式:使用 ActivatorUtilities.CreateInstance 动态创建 Provider 实例,支持运行时配置和依赖注入
  3. 协议统一:ACP 协议实现 Agent 间的标准化通信,基于 JSON-RPC 2.0 的双向通信机制
  4. 任务分流:合理分配任务给不同的 Agent,让它们各展所长,而不是试图让一个 Agent 做所有事情

这种设计不仅解决了”多 Agent 打架”的问题,还通过冒险团的任务流转机制,实现了开发流程的自动化和专业化。

如果你也在考虑引入多个 AI 助手,希望本文能给你一些参考。当然,每个项目的情况不同,具体方案还需要根据实际情况调整。毕竟没有放之四海而皆准的方案,适合自己的才是最好的。

美的事物或人,不一定要占有,只要她还是美的,自己好好看着她的美就好了。技术方案也是如此,适合自己的,就是最好的…

打造 AI 冒险团:HagiCode 多 Agent 协作配置实战

打造 AI 冒险团:HagiCode 多 Agent 协作配置实战

Section titled “打造 AI 冒险团:HagiCode 多 Agent 协作配置实战”

在现代软件开发中,单一 AI Agent 已经难以满足复杂需求。如何让来自不同公司的多个 AI 助手在同一项目中协同工作?本文将分享 HagiCode 项目在实际开发中探索出的多 Agent 协作配置方案。

相信很多开发者都有过这样的经历:项目中引入了 AI 助手辅助编程,效率确实提高了。但随着需求越来越复杂,一个 AI Agent 开始不够用了——你想让它同时处理代码审查、文档生成、单元测试等多个任务,结果往往是顾此失彼,输出质量参差不齐。

更头疼的是,当你尝试引入多个 AI 助手时,问题就变得更复杂了。每个 Agent 有自己的配置方式、API 接口和执行逻辑,彼此之间甚至会产生冲突。这就像一支球队,每个球员都很厉害,但没有人知道该怎么配合,结果踢得乱七八糟。

HagiCode 项目在开发过程中也遇到了同样的困扰。作为一个涉及前端 VSCode 扩展、后端 AI 服务、跨平台桌面客户端的复杂项目,我们需要同时对接来自不同公司的多个 AI 助手:Claude Code、Codex、CodeBuddy、iFlow 等等。如何让它们在同一项目中和谐共处、发挥各自特长,成了必须解决的关键问题。

其实这也罢了,毕竟谁愿意每天跟一群打架的 AI 打交道呢。

本文分享的方案,正是我们在 HagiCode 项目中实际踩坑、实际优化出来的多 Agent 协作配置实践。如果你也在为多 AI 助手协作而头疼,相信这篇文章会给你一些启发。或许吧,毕竟每个人的情况都不一样。

HagiCode 是一个 AI 代码助手项目,采用多 AI 引擎协同工作的”冒险团”模式。项目地址:github.com/HagiCode-org/site

本文分享的多 Agent 配置方案,正是 HagiCode 能够在复杂项目中保持高效开发的核心技术之一。也没什么特别的,就是把一群 AI 变成一支能打配合的冒险团而已。

从”单打独斗”到”团队协作”

Section titled “从”单打独斗”到”团队协作””

在 HagiCode 项目早期,我们也尝试过只用一个 AI Agent 来处理所有任务。很快我们就发现,这种方式存在明显的瓶颈:不同的任务需要不同的能力侧重点,有的任务需要更强的上下文理解能力,有的则需要更精准的代码修改能力。一个 Agent 很难在所有方面都表现出色。

这让我们意识到,必须让多个 Agent 协同工作。但问题是,如何让不同公司的 AI 产品在同一个项目中和平共处?我们需要解决几个核心问题:

  1. 配置管理复杂性:每个 Agent 有不同的配置方式、API 接口和执行模式
  2. 通信协议统一:需要一种标准化的方式让不同 Agent 之间进行数据交换
  3. 任务分工协调:如何合理分配任务,让每个 Agent 发挥特长

带着这些问题,我们开始设计 HagiCode 的多 Agent 架构。其实也没那么复杂,只是想明白了而已。

经过多次迭代,我们最终确定的架构是这样的:

┌─────────────────────────────────────────────────────────────────┐
│ AIProviderFactory │
│ (工厂模式统一管理所有 AI Provider) │
├─────────────────────────────────────────────────────────────────┤
│ ClaudeCodeCli │ CodexCli │ CodebuddyCli │ IFlowCli │
│ (Anthropic) │ (OpenAI) │ (智谱 GLM) │ (智谱) │
└─────────────────────────────────────────────────────────────────┘

核心思路是:通过统一的 Provider 接口,让不同的 AI Agent 可以被同一套代码管理。同时使用工厂模式动态创建和配置这些 Provider,确保系统的扩展性和灵活性。

这就像生活中的分工,每个人都有自己的角色,只是这里把这种分工变成了代码架构而已。

根据 HagiCode 项目的实际使用经验,我们为每个 Agent 分配了不同的职责:

Agent提供商模型主要用途
ClaudeCodeCliAnthropicglm-5-turbo生成技术方案和Proposal
CodexCliOpenAI/Zedgpt-5.4执行精准的代码修改
CodebuddyCli智谱glm-4.7优化提案描述和文档
IFlowCli智谱glm-4.7归档提案和历史记录
OpenCodeCli--通用代码编辑
GitHubCopilotMicrosoft-辅助编程和代码补全

这种分工的背后逻辑是:每个 Agent 都有自己擅长的领域。Claude Code 在理解和分析复杂需求方面表现出色,所以让它负责前期的方案设计;Codex 在代码修改方面更精准,适合处理具体的实现任务;CodeBuddy 性价比高,用来优化文档再合适不过。

毕竟适合自己的才是最好的,条条大路通罗马,只是有的路好走一点,有的路稍微曲折一点罢了。

要让不同的 AI Agent 能够被统一管理,首先需要定义一套统一的接口。HagiCode 中定义了这个接口:

public interface IAIProvider
{
// 统一的 Provider 接口
Task<IAIProvider?> GetProviderAsync(AIProviderType providerType);
Task<IAIProvider?> GetProviderAsync(string providerName, CancellationToken cancellationToken);
}

这个接口看起来很简单,但它是整个多 Agent 系统的基石。通过统一的接口,我们可以无视底层是哪个公司的 AI 产品,都以相同的方式进行调用。

其实这就是把复杂的事情简单化了,毕竟简单才是美。

有了统一的接口,接下来就是如何创建这些 Provider 实例。HagiCode 使用了工厂模式:

private IAIProvider? CreateProvider(AIProviderType providerType, ProviderConfiguration config)
{
return providerType switch
{
AIProviderType.ClaudeCodeCli =>
ActivatorUtilities.CreateInstance<ClaudeCodeCliProvider>(_serviceProvider, Options.Create(config)),
AIProviderType.CodebuddyCli =>
ActivatorUtilities.CreateInstance<CodebuddyCliProvider>(_serviceProvider, Options.Create(config)),
AIProviderType.CodexCli =>
ActivatorUtilities.CreateInstance<CodexCliProvider>(_serviceProvider, Options.Create(config)),
AIProviderType.IFlowCli =>
ActivatorUtilities.CreateInstance<IFlowCliProvider>(_serviceProvider, Options.Create(config)),
_ => null
};
}

这里用到了依赖注入的 ActivatorUtilities.CreateInstance,它可以在运行时动态创建 Provider 实例,并且自动注入依赖项。这种设计的好处是:新增一个 Agent 类型时,只需要添加对应的 Provider 类,然后在工厂方法中加一个 case 分支即可,完全不需要修改现有代码。

这也罢了,毕竟谁愿意每次加新功能都要改一堆旧代码呢。

为了让配置更灵活,我们还实现了类型映射机制:

public static AIProviderTypeExtensions
{
private static readonly Dictionary<string, AIProviderType> _typeMap = new(
StringComparer.OrdinalIgnoreCase)
{
["ClaudeCodeCli"] = AIProviderType.ClaudeCodeCli,
["CodebuddyCli"] = AIProviderType.CodebuddyCli,
["CodexCli"] = AIProviderType.CodexCli,
["IFlowCli"] = AIProviderType.IFlowCli,
// ...更多类型映射
};
}

这个映射表的作用是将字符串形式的 Provider 名称转换为枚举类型。这样一来,配置文件就可以使用直观的字符串名称,而代码内部则使用类型安全的枚举进行处理。

毕竟配置这东西,越直观越好,谁愿意记一堆复杂的代码呢。

实际使用时,只需要在 appsettings.json 中配置即可:

AI:
Providers:
Providers:
ClaudeCodeCli:
Enabled: true
Model: glm-5-turbo
WorkingDirectory: /path/to/project
CodebuddyCli:
Enabled: true
Model: glm-4.7
CodexCli:
Enabled: true
Model: gpt-5.4
IFlowCli:
Enabled: true
Model: glm-4.7

每个 Provider 都可以独立配置开关、模型版本、工作目录等参数。这种设计既保证了灵活性,又便于管理和维护。

其实配置文件就像人生的选项,你可以选择开启或关闭某些功能,只是代码里的选择更容易后悔罢了。

有了统一的技术架构,接下来就是如何让多个 Agent 协同工作了。HagiCode 设计了一套任务流转机制,让不同的 Agent 处理不同阶段的任务:

提案创建 (用户)
[Claude Code] ──生成提案──▶ 提案文档
│ │
│ ▼
│ [Codebuddy] ──优化描述──▶ 优化后提案
│ │
│ ▼
│ [Codex] ──执行修改──▶ 代码变更
│ │
│ ▼
└───────────────▶ [iFlow] ──归档──▶ 历史记录

这种分工的好处是:每个 Agent 只需要专注于自己擅长的任务,不需要”什么都会”。Claude Code 负责从无到有生成提案,Codebuddy 负责把提案描述得更清晰,Codex 负责把提案变成实际的代码变更,iFlow 则负责把这些变更归档保存。

其实这就像生活中的团队合作,每个人都有自己的角色,合起来才能完成一件大事。只是这里的团队成员是 AI 而已。

在实际运行中,我们总结了以下几点经验:

1. Agent 选择策略很重要

不是随便分配任务,而是要根据每个 Agent 的特长来分配:

  • 提案生成:使用 Claude Code,因为它有更强的上下文理解能力
  • 代码执行:使用 Codex,因为它在代码修改方面更精准
  • 提案优化:使用 Codebuddy,因为它的性价比高
  • 归档存储:使用 iFlow,因为它稳定可靠

毕竟让合适的人做合适的事,这是千古不变的道理。

2. 配置隔离确保稳定性

每个 Agent 的配置独立管理,支持环境变量覆盖,工作目录也相互独立。这样一来,一个 Agent 的配置出错不会影响到其他 Agent。

这就像生活中的界限,每个人都有自己的空间,互不干扰才能和谐共处。

3. 错误处理机制

单个 Agent 失败不应该影响整体流程。我们实现了降级策略:当某个 Agent 执行失败时,系统可以自动切换到备用方案,或者直接跳过该步骤继续执行后续任务。同时,完整的日志记录也便于事后排查问题。

毕竟谁也不能保证永远不会出错,关键是怎么处理错误。这就像人生,总会遇到挫折,重要的是怎么走出来。

4. 监控与可观测性

通过 ACP 协议(我们自定义的通信协议,基于 JSON-RPC 2.0),可以追踪每个 Agent 的执行状态。会话隔离确保了并发安全,动态缓存则优化了性能表现。

毕竟看不见的东西最容易出问题,有点监控总好过两眼一抹黑。

采用这套多 Agent 协作配置后,HagiCode 项目的开发效率有了明显提升。具体表现在:

  1. 任务处理能力翻倍:以前一个 Agent 需要同时处理多种任务,现在可以并行处理,吞吐量翻倍不止
  2. 输出质量更稳定:每个 Agent 只专注于自己擅长的任务,输出结果的一致性和质量都更高
  3. 维护成本降低:统一的接口和配置管理,让整个系统更容易维护和扩展
  4. 新增 Agent 简单:如果要接入新的 AI 产品,只需要实现接口、添加配置,不需要修改核心逻辑

这套方案不仅解决了 HagiCode 自身的问题,也证明了多 Agent 协作确实是一种可行的架构选择。

其实效果还挺明显的,只是过程有点折腾罢了。

本文分享了 HagiCode 项目在多 Agent 协作配置方面的实践经验。核心要点包括:

  1. 标准化接口:通过 IAIProvider 统一不同 Agent 的行为,让代码可以无视底层是哪个公司的产品
  2. 工厂模式:使用 ActivatorUtilities.CreateInstance 动态创建 Provider 实例,支持运行时配置和依赖注入
  3. 协议统一:ACP 协议实现 Agent 间的标准化通信,基于 JSON-RPC 2.0 的双向通信机制
  4. 任务分流:合理分配任务给不同的 Agent,让它们各展所长,而不是试图让一个 Agent 做所有事情

这种设计不仅解决了”多 Agent 打架”的问题,还通过冒险团的任务流转机制,实现了开发流程的自动化和专业化。

如果你也在考虑引入多个 AI 劏手,希望本文能给你一些参考。当然,每个项目的情况不同,具体方案还需要根据实际情况调整。毕竟没有放之四海而皆准的方案,适合自己的才是最好的。

美的事物或人,不一定要占有,只要她还是美的,自己好好看着她的美就好了。技术方案也是如此,适合自己的,就是最好的…


如果本文对你有帮助,欢迎来 GitHub 给个 Star,您的支持是我们继续分享的动力。公测已开始,欢迎安装体验。


感谢您的阅读,如果您觉得本文有用,快点击下方点赞按钮,让更多的人看到本文。

本内容采用人工智能辅助协作,经本人审核,符合本人观点与立场。