乐于分享
好东西不私藏

AI原生开发:ClaudeCode与国产大模型协同实战 第2章:驯兽环境搭建——让ClaudeCode吃上国产算力

AI原生开发:ClaudeCode与国产大模型协同实战 第2章:驯兽环境搭建——让ClaudeCode吃上国产算力

老兵们,认知刷新完毕,现在我们要开始干硬活了。工欲善其事,必先利其器。很多兄弟在这个阶段就放弃了,为啥?因为配环境简直比写Bug还痛苦。ClaudeCode原生是给Anthropic自家的Claude模型用的,你直接把它拉过来,它是不认咱们国产大模型的API的。但别慌,程序员的核心能力就是“魔改”。今天我就教你怎么“偷天换日”,在ClaudeCode和国产双擎(GLM-5.1、Kimi-K2.6)之间搭起一座无形的桥。

2.1 ClaudeCode的五脏六腑:运行机制与权限边界拆解

在改代码之前,你得知道ClaudeCode是怎么工作的。它绝对不是你在网页上用的那种“你问我答”的聊天机器人。它是一个具备系统级执行权限的Agent(智能体)当你丢给ClaudeCode一个需求时,它内部经历了一个极其硬核的循环:

深挖时刻:为什么这很重要?注意流程图里红色的那个框 [执行 Bash Command]。这意味着ClaudeCode可以在你的终端里执行任何命令!它可以帮你 npm install,可以帮你 go run main.go,当然,如果没控制好,它也可能手滑执行 rm -rf /所以,ClaudeCode在设计上有一个底线逻辑:它必须极其精准地理解你的系统环境,并且你需要给它划定权限边界。 而这一切的起点,就是它发出的API请求。如果我们能让它把原本发给Claude的请求,乖乖发给我们指定的国内大模型,这野兽不就被我们套上缰绳了吗?

2.2 【实操】偷天换日:通过代理网关无缝桥接国产双擎

直接改ClaudeCode的源码太难,而且不利于升级。资深工程师的做法是:加一层中间件!目前国内大模型(如智谱GLM、Moonshot Kimi)都提供了兼容OpenAI格式的API,但这还不够,因为ClaudeCode底层走的是Anthropic特有的API格式(特别是Tool Calling的字段结构跟OpenAI完全不一样)。所以,我们需要一个“翻译官”——LiteLLM。它能将Anthropic的请求格式,实时翻译成OpenAI的格式,再转发给国内大模型。整个链路如下:

看着链路挺长,但搭建起来只需要5分钟。咱们一步一步来,保证你能跑通。

步骤 1:启动 LiteLLM 代理服务器

首先,确保你电脑上装了 Python 和 pip。我们安装 LiteLLM 并创建一个配置文件,把咱们的国产双擎注册进去。在终端执行安装:

pip install 'litellm[proxy]'

然后,在你的项目根目录(或者任意你喜欢的地方),创建一个名为 litellm_config.yaml 的文件。把下面这段代码原样拷贝进去,记得替换成你自己的真实API Key

# litellm_config.yamlmodel_list:  - model_name: glm-5.1  # 这是给ClaudeCode看的别名    litellm_params:      model: openai/glm-5.1  # 告诉LiteLLM用OpenAI格式去调用      api_key: "你的智谱API_KEY"      # 去 open.bigmodel.cn 获取      api_base: "https://open.bigmodel.cn/api/paas/v4/" # 智谱的OpenAI兼容地址  - model_name: kimi-k2.6 # 这是给ClaudeCode看的别名    litellm_params:      model: openai/moonshot-v1-128k # 目前kimi的最新模型,用OpenAI格式调用      api_key: "你的Moonshot API_KEY" # 去 platform.moonshot.cn 获取      api_base: "https://api.moonshot.cn/v1" # Kimi的OpenAI兼容地址

接着,在终端运行以下命令,启动这个本地翻译官:

litellm --config litellm_config.yaml --port4000

如果没有报错,你会看到类似 Uvicorn running on http://0.0.0.0:4000 的提示。你的本地代理网关就跑起来了!

步骤 2:配置 ClaudeCode 指向本地代理

现在代理跑起来了,我们要骗过ClaudeCode,让它把请求发到 localhost:4000ClaudeCode 是通过环境变量来配置 API 的。打开你的终端,设置以下环境变量:如果是 Mac/Linux:

export ANTHROPIC_BASE_URL="http://127.0.0.1:4000"export ANTHROPIC_API_KEY="随便写个字符串就行,因为验证在代理那边已经做了" # LiteLLM要求非空即可

如果是 Windows (PowerShell):

$env:ANTHROPIC_BASE_URL="http://127.0.0.1:4000"$env:ANTHROPIC_API_KEY="随便写个字符串就行"

步骤 3:启动 ClaudeCode 并测试

在你完成了上述环境变量设置的同一个终端窗口里,启动 ClaudeCode:

claude

进入交互界面后,你可以直接输入指令测试:

“请帮我写一个简单的Python函数,计算斐波那契数列,并说明当前使用的模型。”此时,ClaudeCode的请求就会流向你的本地LiteLLM,LiteLLM会根据你配置的默认模型(通常是列表里的第一个,即GLM-5.1),将请求转发给智谱。避坑指南:如果遇到ClaudeCode报错找不到模型,你可能需要在ClaudeCode的交互界面里使用 /model 命令,手动切换到 glm-5.1 或 kimi-k2.6

2.3 【深挖】模型路由策略:把大模型当数据库,查询优化器怎么选?

环境跑通了,这只是第一步。很多新手配好环境后,就不管了,什么任务都用一个模型。这在资深工程师眼里,就是典型的“拿着锤子找钉子”。GLM-5.1 和 Kimi-K2.6 是两个性格迥异的怪兽,你必须学会像数据库查询优化器一样,根据任务的“SQL特征”,选择走哪个“索引”。

深入解析:上下文窗口的“魔咒”

为什么长任务必须用Kimi?这就涉及到大模型底层的注意力机制。假设你有一个包含5个核心类的微服务,每个类大概1000行代码。你要让AI重构类D的方法,但类D强依赖类A和类C的定义。

  • 如果你用普通模型(假设8k/32k上下文):你把4个类的代码全塞进去,模型的注意力会在中间部位衰减。它经常“忘了”类A里定义的某个关键私有变量,然后在类D里瞎造一个。这就是俗称的“中间迷失”。你得反复提醒它,气死你。

  • 如果你用Kimi-K2.6(超长上下文):它就像一个拥有过目不忘本领的书呆子,4个类的代码它全记住了,你在类A第20行定义的变量,它在写类D的第800行时依然能准确引用。实战经验:

  1. 做架构设计、写核心状态机、排查隐蔽的并发Bug ➡️ 切 glm-5.1。它逻辑推演极强,很少出现逻辑断层。

  2. 做代码迁移、大范围依赖升级、阅读整个开源项目源码 ➡️ 切 kimi-k2.6。喂给它几十个文件,它照样能串联起上下文。在ClaudeCode里,你可以随时通过 /model glm-5.1 或 /model kimi-k2.6 来动态切换,这就像你在代码里动态切换数据源一样丝滑。

2.4 终端与IDE的融合仪式:打造顺手的神兵利器

最后聊一点干活时的体感。ClaudeCode是跑在终端里的,但咱们平时写代码都在IDE里(VS Code 或 JetBrains全家桶)。如果你只是把终端钉在屏幕旁边,每次要把代码从IDE拷贝到终端,再从终端拷贝回IDE,这就太Low了。极客配置方案:

  1. VS Code 用户:强烈建议安装 Continue 或 Cline 插件,但今天我们玩的是原生的ClaudeCode,你可以直接把VS Code的内置终端拖到右侧,占半屏。ClaudeCode生成的文件修改,你可以直接在VS Code的源代码管理里看到Diff,一秒Review,一秒撤销。

  2. JetBrains 用户(IntelliJ/GoLand等): JetBrains的终端工具窗口非常强大。你可以在底部打开终端运行ClaudeCode。最爽的是,当ClaudeCode执行 edit file 操作时,你可以开启IDE的 Local History(本地历史)功能,哪怕AI把代码改崩了,你也能一键回滚到AI修改前的任何一个微小的状态。记住:永远不要盲目信任AI的输出。保留版本控制,是你作为人类最后的尊严。


🏆 第2章代码角斗场:环境大考

理论听了一堆,现在该动手验货了。

  1. 按照上面的步骤,把 LiteLLM 跑起来,配置好你的 glm-5.1 或 kimi-k2.6

  2. 启动 ClaudeCode。

  3. 输入以下指令(这可是检验上下文能力的试金石):

“在当前目录下,创建一个名为 bank_account.py 的文件,实现一个银行账户类,要求:1. 初始化余额为0;2. 存款方法 deposit;3. 取款方法 withdraw,如果余额不足要抛出自定义异常 InsufficientFundsError;4. 生成5个测试用例验证上述逻辑,并在文件底部执行运行。”如果你看到ClaudeCode不仅生成了代码,还自己通过Bash执行了 python bank_account.py 并且输出了测试通过的结果——恭喜你,你的国产算力驯兽环境已经大功告成!下一章,我们就要带着这头吃上国产算力的野兽,去撕咬真正的需求了。准备好,我们要极速狂飙!