50
0
0

从零开始的Agent之旅(一)

2026-08-10
2026-08-14
从零开始的Agent之旅(一)
文章摘要
|

开始

在 AI 浪潮的大时代,如果你依旧只会传统开发,那必然会落后于别人的,如果你仅仅局限于 chat 或者一些简单的 agent 调用,那也显然远远不够。最近也正在准备面试,Android/Java 这种传统八股掌握的七七八八了,但是对于 Agent 实际上确实半知半解,故打算开始一段 Agent 的学习,当然在这过程中需要继续准备面试的一些其他东西(算法,计网以及一些更细的八股),故更新不一定及时。如果有其他人能看到这篇文章,或许能有一定勉励?

本文所参考的文章内容源于https://github.com/anneheartrecord/claude-code-docs,但本人能力有限,很多时候也只是阅读后的一些总结罢了,希望后续能有一些自己的认识(道阻且长啊)。

概览

claude code 中一次请求的完整流程是什么?

第一步:用户输入捕获

你在终端里输入一段文字按回车。REPL 层会判断这段输入属于哪种类型:

  • ! 开头 → 直接执行 shell 命令,不经过 Agent。比如 ! ls! git status。这是一个快捷方式,让你不用退出 Claude Code 就能跑命令,结果直接输出到终端

  • / 开头 → slash command,比如 /clear/compact/help。这些是内置的快捷操作,由客户端直接处理

  • 否则 → 自然语言,进入 Agent 循环,交给模型处理

第二步上下文组装

组装一份完整的上下文,决定了模型看到什么、知道什么、能做什么。

会由一下部分拼接而成:

  • 内置的 Agent 行为规则,告诉模型你是 Claude Code,你能读写文件、执行命令,你应该怎么和用户交互

  • 用户的 CLAUDE.md 记忆文件,五层优先级加载,从全局到项目到本地

  • 当前 Git 仓库的状态快照:分支、最近 commit、改动了哪些文件

  • 权限规则:哪些工具可以自动执行,哪些需要用户确认

  • skill 列表

所有这些信息拼在一起,就是模型的 system prompt。这个过程就是 Context Engineering。

第三步:API流式调用

组装好请求就会发起流式 API 调用。模型逐 token 返回响应,客户端每收到一个 token 就在终端进行渲染,用户可以实时看到模型在 "打字"。

如果模型决定调用工具,它会在响应里输出一个 tool_use block,包含工具名和参数。比如模型想读一个文件,它会输出:

{
  "type": "tool_use",
  "name": "Read",
  "input": { "file_path": "/src/main.ts", "limit": 100 }
}

第四步:权限检查+工具执行

收到 tool_use 后,系统先做权限检查:

  • 硬编码规则:42 条危险命令直接拒绝,不问用户

  • ML 分类器:判断这条命令是否安全

  • 用户规则:匹配用户配置的 allow/deny 列表

  • 弹窗确认:以上都不匹配时,弹窗让用户选择

通过权限检查后执行工具,多个工具调用可以并行执行。

执行完成后,工具结果作为 tool_result 追加到消息历史。

第五步:压缩判断

检查当前消息历史的 token 总量。如果接近上下文窗口上限,触发压缩:

  1. 微压缩:清理旧的工具输出结果,它们的时效性最差

  2. Session Memory:把关键信息沉淀到记忆文件,释放上下文空间

  3. Full Compact:fork 一个独立 Agent 做全量摘要,把整个对话历史浓缩成一段总结

第六步:继续或结束

看 API 返回的 stop_reason

  • tool_use:模型还想调工具,回到第三步继续循环

  • end_turn:模型认为任务完成,结束

  • max_tokens:输出达到上限,可能需要继续

一个复杂任务可能循环几十次。比如你让 Claude Code 重构一个模块,它可能先读几个文件了解现状,然后修改代码,然后跑测试,发现测试失败,再修改,再跑测试;每一次工具调用都是一次循环。

Agent循环

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

从零开始的Agent之旅(一)
/archives/AgentStudy1
作者
generals
发布于
2026-08-10
许可协议
CC BY-NC-SA 4.0