【有意思】当你在Claude code敲一句hi,他和模型交互了什么?
文章目录
1. 背景
最近想在本地使用 AI 编程助手,想更好的用好他。于是研究了一下Claude Code和大模型LLM交互过程。
本文简单记录交互过程,不做详细分析。仅供参考。因为claude code和模型是通过云端访问,并且使用http请求,所以理论分析可行性是可行的。只要抓包就行。无外乎HTTP的POST GET等。我们详细进去看看claude code这个工具是如何实现的交互的。
- Claude Code:Anthropic 推出的命令行 AI 编程工具
- Ollama:本地大模型运行框架
- 目标:Mac 本地运行 Claude Code,连接远程服务器的 Ollama
本文通过实际抓包,把交互流程讲清楚。
2. 用法
- 用户在一个窗口启动claude code,然后输入hi
- 同时另一个窗口通过抓包查看交互过程
3. 概要说明
3.1 架构

3.2 完整交互流程


3.3 架构层次
| 层次 | 组件 | 职责 |
|---|---|---|
| 用户界面 | 终端 UI | 输入输出、命令提示 |
| Agent 核心 | 意图识别、任务规划、执行引擎 | 理解用户意图、规划任务、执行操作 |
| 工具层 | Bash, Edit, Read, Glob… | 与系统交互的具体实现 |
| LLM 层 | 上下文管理、提示词构建 | 与 AI 模型通信 |
| 协议层 | Anthropic API / Ollama API | 网络通信协议 |
3.4 杂项
下面内容超越了hi之外的包括执行的动作:
可以看到本质是claude code定义了上下文,让模型知道要干什么。然后定义了格式个规则,让大模型正确的干事情。然后告诉大模型claude code支持哪些工具执行,并且告诉大模型如果要让claude code执行命令或者做其他事情,应该用json什么格式处理。然后大模型处理后,用json方式告诉claude code,cc就根据json进行相关动作。于是cc作为LLM大模型的手,做事情,然后把执行结果返回给大模型。大模型基于这些分析,然后大模型生成反馈信息给用户。大概就是这么一个交互过程。
4. 详细过程分析
4.1 用户在claude code输入hi

注意下面只是一个例子CC发起的请求,实际的有1.4w非常长。
POST /v1/messages?beta=true HTTP/1.1
Host: localhost:11435
Content-Type: application/json
Authorization: Bearer ollama
Anthropic-Version: 2023-06-01
User-Agent: claude-cli/1.0.108 (external, cli)
X-Stainless-Runtime: node
X-Stainless-Runtime-Version: v23.9.0
X-Stainless-Os: MacOS
X-Stainless-Arch: x64
Anthropic-Beta: claude-code-20250219,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14
Content-Length: 938
{
"model": "qwen3.5:9b",
"max_tokens": 512,
"temperature": 0,
"stream": true,
"system": [{"type": "text", "text": "Summarize this coding conversation..."}],
"messages": [{"role": "user", "content": [{"type": "text", "text": "hi"}]}]
}
4.2 claude code输入后后台详细信息
首先发起了一个post请求,携带了system prompt 2个(告诉模型他是claude code)、message有3条(告诉模型几个system-reminder,这个reminder告诉模型要有todolist,要回答用户问题,不要创建文件…一些约束),tools有15个(有任务、有bash、有grep、有glob的正则匹配,有退出planmode、有编辑、有多文件编辑、有写、有NotebookEdit、有WebFetch、有TodoWrite、有WebSearch、有BashOutput、有KillBash)
这里是15个工具的部分截图:
比如这里以bash工具为例子:
claude code是在告诉大模型他的工具机制,我支持工具是bash命令行,这个工具有3个属性,第一个是命令并且是字符串,第二个=有超时机制,第三个是描述告诉他以ls命令为例子,输出就是当前结果,git status是干嘛的等等。总之是在告诉大模型,如果要执行命令,它支持的能力有哪些。然后大模型感知外接有这些能力。就会思考做规划。然后cc执行给反馈。
| 工具名 | 功能 | 示例 |
|---|---|---|
Bash |
执行 shell 命令 | ls -la |
Edit |
编辑文件内容 | 修改代码 |
Read |
读取文件内容 | 查看文件 |
Glob |
文件模式匹配 | *.py |
Grep |
文本搜索 | 查找字符串 |
LS |
列出目录 | 查看文件列表 |
View |
查看文件(带行号) | 代码审查 |
Web |
网页搜索 | 查资料 |
Fetch |
获取 URL 内容 | 下载文件 |
Sleep |
等待指定时间 | 延迟执行 |
最终所有这些信息作为prompt给模型,一句hi发送过去,累计有1.4w的字符。有效率 2/1.4w ,稍微大于万分之1,不到万分之2的有效信息。
4.3 转义模块(忽略)
因为我用ollama模拟claude code的远端服务,有一个把http请求转化为ollama请求的格式:
4.4 ollama模型响应

这里放一个模型的简单监控行为:
GPU硬件监控直接用nvidia-smi查看gpu的使用量内存等watch -n 0.5 'nvidia-smi --query-gpu=utilization.gpu,memory.used,power.draw --format=csv'
ollama大模型编排工具用:ollama ps直接查看
(下面并未实时截图)
可以看到模型用了5.92s响应,并且把字符输出。然后中转器修改后把大模型输出转化为http的响应格式:
4.5 CC收到返回信息并展示给用户
然后claude code收到消息后回复收到消息 200:
5. 其他
5.1 关于上下文
因为本文只操作一次,但是有很多prompt,但是如果是多次,会带上很多上下文交互,类似:
主要是cc和LLM的交互定义方式
5.2 关于多轮压缩
主要是cc采取的策略,减少某些上下文给模型。(所以这里可以看到,上下文不是存在大模型中的,而是送过去的,模型中没有存储请求人的信息,没做工程,只做PD运算)prefill和decode。只是这里的prefill除了用户的需求,还有作为工具的能力告知等)
5.3 工具调用机制
这里重点是大模型根据思考,把让CC需要做的事情封装成json格式的语言,并且说角色是assistant,然后需要做的事情是tool_use。
这里可以看到发送hi的信息CC封装的role写的是user,然后这里用例assistant。所以CC还定义了告诉大模型他的行为。

6. 综述
由此,我们看到claude code作为一个工具,和大模型交互完成用户功能。claude code有很多能力比如agent、skill、subagent、hook等等功能。这些功能都是claude code假设有一个顾问很聪明,然后他也知道怎么管理顾问的表达语言让他能够懂,然后然顾问做解决方案,用cc的规则表达要做的事情,然后作为执行agent,执行数据后给LLM。然后在机制层面通过http请求和交互。由此完成了一个完美的交互。
另外后面有机会探究一下cc是如何实现agent,如何与大模型一起合作干事情的!很有意思。
最后为什么笔者要分析,纯为了好玩探究一下how,另外就是希望通过这个探究,能够理解cc的能力,理解LLM是如何长出手的。以及cc为什么做得好。
参考链接:
- Anthropic API: https://docs.anthropic.com/
- Ollama API: https://github.com/ollama/ollama
- Claude Code: https://docs.anthropic.com/en/docs/claude-code/overview
更多推荐




所有评论(0)