从零开始的Agent之旅(一)

开始
在 AI 浪潮的大时代,如果你依旧只会传统开发,那必然会落后于别人的,如果你仅仅局限于 chat 或者一些简单的 agent 调用,那也显然远远不够。最近也正在准备面试,Android/Java 这种传统八股掌握的七七八八了,但是对于 Agent 实际上确实半知半解,故打算开始一段 Agent 的学习,当然在这过程中需要继续准备面试的一些其他东西(算法,计网以及一些更细的八股),故更新不一定及时。如果有其他人能看到这篇文章,或许能有一定勉励?
本文所参考的文章内容源于
概览
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 总量。如果接近上下文窗口上限,触发压缩:
微压缩:清理旧的工具输出结果,它们的时效性最差
Session Memory:把关键信息沉淀到记忆文件,释放上下文空间
Full Compact:fork 一个独立 Agent 做全量摘要,把整个对话历史浓缩成一段总结
第六步:继续或结束
看 API 返回的 stop_reason:
tool_use:模型还想调工具,回到第三步继续循环end_turn:模型认为任务完成,结束max_tokens:输出达到上限,可能需要继续
一个复杂任务可能循环几十次。比如你让 Claude Code 重构一个模块,它可能先读几个文件了解现状,然后修改代码,然后跑测试,发现测试失败,再修改,再跑测试;每一次工具调用都是一次循环。
