真实面经题目 · 原创解析
AI Coding Agent 从用户输入到完成任务的完整链路是什么,如何经过上下文构建、计划、工具调用、代码修改和验证?
这题考的是 AI Coding Agent 的端到端运行时理解:候选人要能把自然语言需求如何变成可验证代码改动讲清楚,包括上下文、计划、工具、修改、测试和回滚闭环。
真实面经题目 · 原创解析
这题考的是 AI Coding Agent 的端到端运行时理解:候选人要能把自然语言需求如何变成可验证代码改动讲清楚,包括上下文、计划、工具、修改、测试和回滚闭环。
我会把 AI Coding Agent 的链路拆成七步。第一步是理解用户输入,把需求、约束、目标文件、禁止事项和完成标准结构化,而不是直接开始改代码。第二步是构建上下文:读取仓库结构、相关文件、接口定义、测试、历史错误、依赖版本和已有约定,同时控制 token 预算,避免把无关文件塞进上下文。第三步是制定计划,把任务拆成可执行步骤,例如定位入口、修改核心逻辑、补测试、跑验证,并在高风险点明确需要人工确认。第四步是工具调用,Agent 通过搜索、读文件、运行测试、查看日志、执行构建等工具逐步获得事实;工具结果要被摘要、校验和写入任务状态。第五步是代码修改,通常生成 patch 或受控编辑,尽量小步提交,遵循项目风格,不直接大范围重写。第六步是验证,先跑局部单测和类型检查,再根据影响面跑集成测试、构建或冒烟测试;失败时回到定位和修复,而不是强行结束。第七步是交付,总结改了什么、验证了什么、还有什么风险,并保留 diff、日志和可回滚信息。核心不是模型一次性写对,而是一个带状态、工具、权限和验证闭环的工程执行系统。
用户的一句话通常是不完整的,Agent 首先要解析出任务目标、业务边界、技术约束、期望产物、验收标准和不能做的事情。例如用户说修一个报错,Agent 需要区分是要定位根因、改代码、补测试,还是只解释现象。这个阶段还要保留原始需求,避免后续摘要或计划把关键约束丢掉。
Coding Agent 不应该只依赖模型记忆,而要主动从仓库和运行环境拿事实。常见上下文包括目录结构、相关源码、调用链、类型定义、配置、测试用例、错误日志、文档和项目约定。构建时要兼顾召回和噪声:先搜索和读关键文件,再按需要扩展;对长文件保留相关片段、符号关系和版本信息,避免上下文过载导致模型忽略真正约束。
计划不是装饰,而是让 Agent 明确下一步为什么做、做到什么程度、如何知道完成。一个好的计划会拆出定位、设计、实现、测试、验证和总结,并标记风险点,例如数据库迁移、权限修改、删除文件、外部 API 变更等。计划也应可更新:工具结果证明原假设不对时,Agent 要重新规划,而不是沿着错误路线继续写。
Agent 通过工具和环境交互,例如搜索符号、读文件、运行测试、执行 lint、查看日志、安装依赖或调用本地服务。每次工具调用都应有目的、输入范围和预期结果,返回后要抽取结论并判断是否可信。工具结果不能被简单拼进提示词就结束,还要进入任务状态,支持后续引用、决策和错误恢复。
实现阶段通常以最小 diff 为原则:先改最相关的代码路径,复用现有抽象、命名、错误处理和测试结构,避免顺手重构无关模块。高质量 Agent 会生成可审查 patch,并在多文件修改时保持接口契约一致。它还要处理格式化、导入、类型、边界条件和兼容性,而不是只让主逻辑看起来可运行。
完成代码改动后,Agent 应按影响面选择验证:局部单测、类型检查、lint、构建、集成测试、冒烟测试或手动复现。验证失败时要读取错误、定位差异、修改计划并继续迭代。交付前还要说明验证命令、结果、未覆盖风险和回滚思路。没有验证的 Agent 只是代码生成器,不是可靠的工程执行者。
先从用户输入中的关键词、错误栈、路由、组件名、接口名和测试名做检索,再读取入口文件、调用方、被调用方和相邻测试。读完后根据符号引用和失败日志继续扩展,而不是一开始扫描全仓库。
应该动态更新。初始计划来自需求理解,但工具结果可能推翻假设,例如真正入口不在预期文件、测试失败原因不同、接口契约更复杂。高质量 Agent 会在关键发现后重排步骤。
涉及删除数据、修改权限、执行破坏性命令、提交或推送代码、调用外部付费服务、改生产配置、迁移数据库、绕过测试等高风险动作时需要确认。低风险读文件、搜索、局部测试通常可以自动执行。
先区分失败来自当前改动、环境问题还是已有失败;再缩小复现范围、读取错误栈、检查最近 diff,并尝试最小修复。连续失败时要重新评估假设,必要时回滚部分改动,而不是继续叠加补丁。
看任务完成率、一次通过率、测试覆盖、回归率、平均迭代次数、误改率、权限违规率、可审查 diff 质量和失败恢复能力。只看生成代码速度是不够的。