多 CLI 架构设计

HagiCode 的核心优势之一,就是通过统一的抽象层支持多种不同的 AI 编程 CLI 工具。这种设计的好处,说穿了也就那么回事:新东西能进来,旧东西能留下,代码还不乱。毕竟,谁都希望生活能这样吧?

AIProviderType 枚举

平台通过 AIProviderType 枚举定义了支持的 CLI 提供商类型:


public enum AIProviderType
{
ClaudeCodeCli = 0, // Claude Code CLI
CodexCli = 1, // GitHub Copilot Codex
GitHubCopilot = 2, // GitHub Copilot
CodebuddyCli = 3, // Codebuddy CLI
OpenCodeCli = 4, // OpenCode CLI
IFlowCli = 5, // IFlow CLI
HermesCli = 6, // Hermes CLI
QoderCli = 7, // Qoder CLI
KiroCli = 8, // Kiro CLI
KimiCli = 9, // Kimi CLI
GeminiCli = 10, // Gemini CLI (新增)
}

可以看到,Gemini CLI 作为第十个成员加入了这个大家庭。每个 CLI 都有独特的特点和适用场景,用户可以根据自己的需求灵活选择。毕竟,条条大路通罗马,只是有的路好走一点,有的路稍微曲折一点罢了。

Provider 架构

HagiCode.Libs.Providers 提供了统一的 Provider 接口,让每个 CLI 的集成变得规范而简洁。以 Gemini CLI 为例:


public class GeminiProvider : ICliProvider<GeminiOptions>
{
private static readonly string[] DefaultExecutableCandidates = ["gemini", "gemini-cli"];
private const string ManagedBootstrapArgument = "--acp";
public string Name => "gemini";
public bool IsAvailable => _executableResolver.ResolveFirstAvailablePath(DefaultExecutableCandidates) is not null;
}

这种设计的好处是:

  • 新 CLI 的集成只需要实现一个 Provider 类
  • 统一的生命周期管理和会话池化
  • 自动化的别名解析和可执行文件查找

说穿了,这种设计其实就是把复杂的事情简单化,让生活更轻松一点罢了。

Provider Registry

Provider Registry 自动处理别名映射和注册:


if (provider is GeminiProvider)
{
registry.Register(provider.Name, provider, ["gemini-cli"]);
continue;
}

这意味着用户可以使用 gemini 或 gemini-cli 两种方式来调用 Gemini CLI,系统会自动识别。这就像你朋友多,有的叫大名,有的叫小名,反正都是他,怎么叫都行。

GLM-5.1 模型支持

GLM-5.1 是智谱 AI 的最新旗舰模型,HagiCode 已完成对其的全面支持。

Secondary Professions Catalog

HagiCode 通过 Secondary Professions Catalog 管理所有支持的模型。以下是 GLM 系列的配置:

Model ID Name SupportsImage Compatible CLI Families
glm-4.7 GLM 4.7 - claude, codebuddy, hermes, qoder, kiro
glm-5 GLM 5 - claude, codebuddy, hermes, qoder, kiro
glm-5-turbo GLM 5 Turbo - claude, codebuddy, hermes, qoder, kiro
glm-5.0 GLM 5.0 (Legacy) - claude, codebuddy, hermes, qoder, kiro
glm-5.1 GLM 5.1 true claude, codebuddy, hermes, qoder, kiro

GLM-5.1 的关键特性可以总结为:

  • 独立的版本标识,没有 legacy 包袱
  • 首个支持图片输入的 GLM 模型
  • 更强的推理能力和代码理解
  • 广泛的多 CLI 兼容性

GLM-5.1 vs GLM-5.0

从代码层面来看,GLM-5.1 与 GLM-5.0 的关键区别:


// GLM-5.0 (Legacy) - 有特殊保留逻辑
private const string Glm50CodebuddySecondaryProfessionId = "secondary-glm-5-codebuddy";
private const string Glm50CodebuddyModelValue = "glm-5.0";
// GLM-5.1 - 独立的新模型标识
private const string Glm51SecondaryProfessionId = "secondary-glm-5-1";
private const string Glm51ModelValue = "glm-5.1";

GLM-5.0 带有 "Legacy" 标记,是为了向后兼容而保留的旧版本标识。而 GLM-5.1 是一个全新的独立版本,没有任何历史包袱。这就像有些人,总是活在过去;而有些人,轻装上阵,走得更快罢了。

配置 GLM-5.1

在 HagiCode 中使用 GLM-5.1 的配置示例:


{
"primaryProfessionId": "profession-claude-code",
"secondaryProfessionId": "secondary-glm-5-1",
"model": "glm-5.1",
"reasoning": "high"
}

图片上传功能

HagiCode 的图片支持是通过 SecondaryProfession 的 SupportsImage 属性实现的:


public class HeroSecondaryProfessionSettingDto
{
public bool SupportsImage { get; set; }
}

在 Secondary Professions Catalog 中,GLM-5.1 的配置如下:


{
"id": "secondary-glm-5-1",
"supportsImage": true
}

这意味着用户可以直接上传截图让 AI 分析,比如:

  • 错误信息的截图
  • UI 界面的问题
  • 数据可视化图表
  • 代码运行结果

不用再手动描述问题了,直接截图就行——这个功能的便利性用过就知道了。毕竟,有些事情,说再多不如看一眼。

Gemini CLI 集成

Gemini CLI 作为第十个 Agent CLI,通过标准的 Provider 架构集成到 HagiCode 中。

配置选项

Gemini CLI 支持丰富的配置选项:


public class GeminiOptions
{
public string? ExecutablePath { get; set; }
public string? WorkingDirectory { get; set; }
public string? SessionId { get; set; }
public string? Model { get; set; }
public string? AuthenticationMethod { get; set; }
public string? AuthenticationToken { get; set; }
public Dictionary<string, string?> AuthenticationInfo { get; set; }
public Dictionary<string, string?> EnvironmentVariables { get; set; }
public string[] ExtraArguments { get; set; }
public TimeSpan? StartupTimeout { get; set; }
public CliPoolSettings? PoolSettings { get; set; }
}

这些选项覆盖了从基本配置到高级特性的方方面面,用户可以根据自己的需求进行灵活配置。毕竟,每个人的需求都不一样,能灵活一点总是好的。

ACP 通信协议

Gemini CLI 支持 ACP (Agent Communication Protocol) 通信协议,这是 HagiCode 统一的 CLI 通信标准。通过 ACP,不同的 CLI 可以以一致的方式与平台交互,大大简化了集成工作。说穿了,就是把复杂的事情统一化,让大家都能轻松一点罢了。

环境配置

使用智谱 AI 的模型,需要配置相应的环境变量。

智谱 AI ZAI 平台


export ANTHROPIC_AUTH_TOKEN="your-zai-api-key"
export ANTHROPIC_BASE_URL="https://open.bigmodel.cn/api/anthropic"

阿里云 DashScope


export ANTHROPIC_AUTH_TOKEN="your-aliyun-api-key"
export ANTHROPIC_BASE_URL="https://coding.dashscope.aliyuncs.com/apps/anthropic"

配置完成后,HagiCode 就可以正常调用 GLM-5.1 模型了。这事儿说难也不难,说简单也不简单,反正照着做就是了。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐