前不久,Google 开源了 Gemini CLI 工具,它允许用户通过命令行与 Gemini AI 模型进行高效交互。
然而,在实际应用中,出于安全性和成本控制的考虑,很多场景更适合使用本地部署的大语言模型(LLM)。因此,让 Gemini CLI 支持连接本地 LLM 就显得尤为重要。
我们的核心目标是:无需身份验证,并支持接入 兼容 OpenAI 接口规范 的本地模型服务。
本文将介绍如何对 Gemini CLI 进行二次开发,使其能够作为本地 LLM(如 Ollama、vLLM)的轻量私有客户端使用。
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开源许可,使其成为开源项目二次开发、扩展的理想选择。