claude code 配置 glm 模型,在执行任务时, 他是如何 和大模型交互的
👉GLM 会被当成“支持 function calling 的模型”
慢慢来、按“真实执行路径”拆解,重点放在 Claude Code 配置 GLM 之后,在一次任务执行过程中,它是如何一步步和「大模型接口」交互的,而不是停留在“概念层”。
⚠️ 默认理解
- Claude Code 指的是 CLI / IDE 插件那套 Agent Runtime
- GLM 指 智谱 GLM-4 / 4.5 / 4.7 等兼容 OpenAI-style API 的模型
- 场景是:执行一个真实任务(如改代码 / 分析项目 / 多步操作)
一、先给你一张“全景结构图”(脑内模型)
在 Claude Code + GLM 的情况下,真实结构是这样的:
你(用户)
↓
Claude Code UI(CLI / IDE)
↓
Agent Runtime(调度器 + 状态机)
↓
Model Adapter(OpenAI-compatible / GLM Adapter)
↓
HTTP(S) API 调用
↓
GLM 大模型
关键点:
👉 Claude Code 并不知道自己在用 GLM
👉 它只认一种东西:“可对话的大模型接口”
二、Claude Code 执行一次「任务」的完整生命周期
下面我用 “执行一个真实任务” 为主线,而不是 API 文档式解释。
阶段 0:配置阶段(只发生一次)
你配置 GLM 时,实际上做了 3 件事(无论你意识到没有):
1️⃣ 告诉 Claude Code「模型是谁」
{
"provider": "openai-compatible",
"model": "glm-4.7"
}
👉 Claude Code 内部没有 glm 这个分支
👉 统一走 OpenAI-compatible adapter
2️⃣ 告诉它「去哪请求」
{
"base_url": "https://open.bigmodel.cn/api/paas/v4"
}
👉 这会被拼成:
POST /chat/completions
或(新协议)
POST /responses
3️⃣ 告诉它「怎么鉴权」
{
"api_key": "xxxx"
}
👉 最终变成:
Authorization: Bearer xxxxx
⚠️ 到这里为止,还没有任何任务执行
只是把 Model Adapter 准备好了。
三、任务真正开始:从「你按下 Enter」那一刻说起
阶段 1:User Input → Agent State 初始化
你输入:
“帮我重构这个 PHP Service”
Claude Code 内部不会直接发给模型,而是先做 结构化封装。
内部状态大概是这样(伪结构):
AgentState {
goal: "重构 PHP Service",
history: [],
workspace_snapshot: {...},
rules: [...],
tools: [...]
}
👉 注意:
这一步 完全没有调用大模型
阶段 2:构造「第一次 Prompt」(极其关键)
这是第一个真正发给 GLM 的请求。
Claude Code 会拼一个非常长的 Prompt
它由 6 个部分组成(顺序很重要):
① System Prompt(Agent 灵魂)
包含:
- 你是一个 coding agent
- 可以调用哪些工具
- 必须遵守哪些规则
- 输出必须是 JSON / action
👉 这部分几乎每轮都在
② Developer Prompt(Claude Code 内置)
例如:
- 如何一步步拆任务
- 如何在不确定时继续思考
- 何时调用工具
👉 这就是 Claude Code 的“秘诀”
③ Workspace Context(项目上下文)
- 当前目录结构
- 已读取的文件内容
- Git 状态
- IDE 提供的 symbol 信息
👉 这是 Claude Code 比普通 Chat 强的根本原因
④ Tool Schema(函数调用定义)
类似:
{
"name": "read_file",
"parameters": {...}
}
👉 GLM 会被当成“支持 function calling 的模型”
⑤ Conversation History
到目前为止的历史(第一次通常为空)
⑥ User Message
就是你刚才输入的那句话。
阶段 3:真正的「模型 API 调用」
现在,Claude Code 才会发出 HTTP 请求。
真实请求形态(抽象)
POST /chat/completions
Host: open.bigmodel.cn
Authorization: Bearer xxx
Content-Type: application/json
{
"model": "glm-4.7",
"messages": [
{ "role": "system", "content": "..." },
{ "role": "user", "content": "..." }
],
"temperature": 0.2,
"tools": [...],
"tool_choice": "auto"
}
👉 Claude Code 不关心这是 GLM
👉 它只关心:返回结构是不是 OpenAI 风格
阶段 4:GLM 返回的不是“答案”,而是「意图」
这是很多人误解的地方。
GLM 返回的通常是三种之一:
情况 A:纯文本思考 + 计划
{
"role": "assistant",
"content": "我需要先读取 Service 文件..."
}
情况 B:工具调用(最常见)
{
"tool_calls": [
{
"name": "read_file",
"arguments": { "path": "app/Service/UserService.php" }
}
]
}
👉 Claude Code 不会显示这一步
👉 它会立刻执行工具
情况 C:多工具 + Chain-of-Thought(隐式)
GLM 实际在“多步思考”,
但 Claude Code 只吃结果,不吃思考过程。
阶段 5:Claude Code 执行工具(关键分水岭)
一旦收到 tool_call:
executeTool("read_file", args)
- 读取文件
- 结果写回 AgentState
- 追加一条 tool_result message
例如:
{
"role": "tool",
"name": "read_file",
"content": "class UserService {...}"
}
⚠️ 这里还没结束
阶段 6:进入「循环式模型交互」(while-loop)
从现在开始,进入你非常关心的阶段 👇
真实逻辑几乎一定是:
while (!taskDone) {
response = callModel(state)
if (response.tool_call) {
runTool()
updateState()
} else {
applyChangesOrAskUser()
}
}
👉 一次任务 ≠ 一次模型调用
👉 常见是 5~30 次模型 API 调用
阶段 7:GLM 在这个循环里的“真实角色”
GLM 在 Claude Code 里并不是:
❌「一次性写完代码的 ChatGPT」
而是:
✅ 决策器 + 推理器 + 工具调度脑
它每一轮只负责回答一个问题:
“下一步我该干嘛?”
阶段 8:任务收敛与结束
当 GLM 返回:
- 不再调用工具
- 给出明确的 final answer
- 或 Claude Code 判断目标已完成
Agent Runtime 才会:
- 输出给用户
- 结束 loop
- 持久化状态
四、一个关键但少有人讲清的点(很重要)
❗ Claude Code 不会信任模型
它对 GLM:
- 不信它“说任务完成了”
- 不信它“说代码已写好”
- 只信 文件系统 / diff / tool result
👉 这也是为什么:
- 模型换成 GLM 后
- 成功率主要取决于 tool-calling 稳定性
五、后面可以追问的 3 个“高级点”
我先帮你把路铺好:
1️⃣ GLM 的 function calling 和 Claude Code 的 tool schema 是否 100% 对齐?
2️⃣ 多模型时,Claude Code 如何做 model routing?
3️⃣ Claude Code 如何做上下文压缩,对 GLM 有什么坑?
更多推荐



所有评论(0)