1. 背景

最近想在本地使用 AI 编程助手,想更好的用好他。于是研究了一下Claude Code和大模型LLM交互过程。
本文简单记录交互过程,不做详细分析。仅供参考。因为claude code和模型是通过云端访问,并且使用http请求,所以理论分析可行性是可行的。只要抓包就行。无外乎HTTP的POST GET等。我们详细进去看看claude code这个工具是如何实现的交互的。

  • Claude Code:Anthropic 推出的命令行 AI 编程工具
  • Ollama:本地大模型运行框架
  • 目标:Mac 本地运行 Claude Code,连接远程服务器的 Ollama
    本文通过实际抓包,把交互流程讲清楚。

2. 用法

  1. 用户在一个窗口启动claude code,然后输入hi
  2. 同时另一个窗口通过抓包查看交互过程

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
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐