AI在线 AI在线

让 Gemini CLI 跑在你的私有大模型上

前不久,Google 开源了 Gemini CLI 工具,它允许用户通过命令行与 Gemini AI 模型进行高效交互。 然而,在实际应用中,出于安全性和成本控制的考虑,很多场景更适合使用本地部署的大语言模型(LLM)。 因此,让 Gemini CLI 支持连接本地 LLM 就显得尤为重要。

前不久,Google 开源了 Gemini CLI 工具,它允许用户通过命令行与 Gemini AI 模型进行高效交互。

然而,在实际应用中,出于安全性和成本控制的考虑,很多场景更适合使用本地部署的大语言模型(LLM)。因此,让 Gemini CLI 支持连接本地 LLM 就显得尤为重要。

我们的核心目标是:无需身份验证,并支持接入 兼容 OpenAI 接口规范 的本地模型服务。

本文将介绍如何对 Gemini CLI 进行二次开发,使其能够作为本地 LLM(如 Ollama、vLLM)的轻量私有客户端使用。

让 Gemini CLI 跑在你的私有大模型上

1. 明确改造目标

  • 删除身份验证功能,使用于本地LLM
  • 使用OpenAI Compatible API(Ollama、Vllm都支持)
  • 将启动标志从GEMINI更改为ZONE(可以忽略)

2. 修改代码和文件结构

(1) 了解ContentGenerator接口

/packages/core/src/core/contentGenerator.ts

这个文件是AI提供者抽象的核心代码。通过实现这个接口,您可以支持不同的AI提供商。

(2) 实现兼容OpenAI协议的ContentGenerator

/packages/core/src/core/openAICompatibleContentGenerator.ts

(3) 修改创建者

/packages/core/src/core/contentGenerator.ts

(4) 添加身份验证类型

/packages/core/src/core/contentGenerator.ts

(5) 更新身份验证对话框

/packages/cli/src/ui/components/AuthDialog.tsx

(6) 更新认证验证代码

/packages/cli/src/config/auth.ts

(7) 更改徽标(可有可无)

/packages/cli/src/ui/components/AsciiArt.ts

将ASCII艺术从Gemini更改为Gemma:

3. 注意事项

(1) TypeScript的类型兼容性

Gemini响应格式和OpenAI格式不同,需要进行转换处理

(2) 配置文件优先级

如果~/.gemini/settings.json存在,它可以优先于环境变量。如果要完全专用于本地LLM,则必须删除该文件或对其进行适当配置。

4. 总结

通过对Gemini cli 的改造,可以了解到gemini非常优秀的架构设计。

优势主要体现在:

  • 开放、封闭原则:对扩展开放,对修改关闭
  • 单一责任原则:每个模块都有明确的责任
  • 依赖反转原则:依赖于接口而不是具体类

有赖于Gemini CLI优秀的架构设计以及采用了Apache-2.0开源许可,使其成为开源项目二次开发、扩展的理想选择。

相关资讯