从 LLM API 调用到 Agent Loop,构建一个能读代码、改文件、跑命令的终端 AI 编程助手。涵盖 Tool Use 协议、流式响应、上下文管理、CLI 交互等核心主题。
从 AI Agent 的核心概念出发——感知、推理、行动循环,理解 Coding Agent 在 Agent 谱系中的位置。搭建项目,实现 LLMProvider 抽象接口,配置 Anthropic 和 OpenAI 兼容层,发送第一条消息。支持 TypeScript 和 Python 双语言。
实现 Server-Sent Events 流式输出,逐 token 打印响应,处理 stream 事件类型,支持 Anthropic 和 OpenAI 两种流式协议。
实现 MessageHistory 类管理对话状态,维护 user/assistant 角色交替的消息历史,支持获取、清空、截断等操作。
理解并实现 LLM 工具调用协议。定义工具的 JSON Schema,解析 tool_use 响应块,构造 tool_result 返回给 LLM,打通工具调用的完整消息流转。
实现文件读取工具,支持行号显示、二进制文件检测、路径安全校验,将文件内容格式化返回给 LLM。
实现文件写入工具,支持创建和覆盖文件、自动创建目录、写入前 diff 预览。
实现命令执行工具,基于 child_process 管理子进程,捕获 stdout/stderr,支持超时控制和工作目录设置。
实现代码搜索工具,Glob 匹配文件路径 + Grep 搜索文件内容,支持正则表达式,格式化搜索结果。
实现 Agent 的核心循环:发送消息给 LLM → 解析 tool_use → 执行工具 → 返回 tool_result → 继续调用 LLM,直到任务完成。
处理 LLM 单次响应中包含多个 tool_use 的场景,并行执行工具,聚合结果后统一返回,提升复杂任务的执行效率。
让 Agent 具备规划能力:接到复杂任务时先制定执行计划再行动,而不是盲目调用工具。实现计划的结构化表示、动态调整(发现文件不存在→修改计划)、以及多步推理的自主决策。
实现工具执行失败时的优雅反馈,API 限流的指数退避重试,以及异常场景下的恢复策略。
掌握 System Prompt 的分层设计方法论:Meta Prompt → 角色定义 → 行为规则 → 工具使用指南 → 输出约束。分析真实 Coding Agent 的 System Prompt 案例,理解 prompt 迭代优化的实践方法。
实现消息的 token 估算,管理上下文窗口预算分配,设计触发压缩的阈值策略。
识别上下文工程的常见陷阱:上下文污染(幻觉循环)、上下文干扰(信息过载)、工具过多导致选择困难。引入 Agent Scratchpad 模式让 Agent 维护工作笔记,跨轮次保持推理连贯性。
实现基于 LLM 的对话摘要压缩,保留最近 N 轮完整对话,用摘要替换早期消息,实现滑动窗口策略。
实现交互式 REPL 循环,支持 /help /clear /exit 等内置命令,处理多行输入和优雅退出。
实现终端 Markdown 渲染,代码块语法高亮、标题/列表/粗体格式化,使用 ANSI 转义码输出颜色。
实现工具调用的 Spinner 动画、工具名称和参数展示、执行耗时统计、长输出折叠。
实现 Prompt Injection 防护(用户输入与系统指令的边界隔离)、文件系统沙箱(阻止读写敏感路径)、危险操作识别与用户确认。自动读取项目配置(CLAUDE.md),注入 git 仓库信息到上下文。