Skip to content

AI 编程助手

AI 编程助手(AI Coding Assistant)是 LLM 最成功的商业落地场景之一——它通过代码补全、智能调试、自然语言编程等方式,将开发效率提升数倍。它是 LLM 应用生态概览中最高频的生产力应用。本页梳理从 Tab 补全到 Agent 自主编程的完整技术谱系。前置阅读:提示工程。

AI 编程助手 = 一个 7x24 小时在线、秒级响应的结对编程伙伴。

不同形态的 AI 编程助手,就像不同段位的帮手:

  • 代码补全(Tab 补全):像一个打字飞快的实习生——你写开头,它猜后面。GitHub Copilot 的核心体验,基于光标前后的代码上下文预测接下来的几行。快,但只会做”填空题”。
  • 智能问答(Chat 模式):像一个随叫随到的技术顾问——你在侧边栏问问题、贴报错、请求重构,它给出答案。Cursor、GitHub Copilot Chat 的核心功能。
  • 行内编辑(Inline Edit):像一个精准的局部修改工——选中一块代码,用自然语言描述修改意图,它只改这一块。Cursor 的 Cmd+K、Copilot 的 Inline Chat。
  • Agent 编程(Agentic Coding):像一个能独立干活的初级工程师——给它一个任务描述,它自己读文件、写代码、跑测试、改 Bug、提交。Claude Code、Cursor Agent、GitHub Copilot Workspace 代表了这一方向。

2025 年趋势:Agentic Coding(Agent 编程)成为主流。Claude Code(Anthropic 的命令行 Agent)、Cursor Agent、OpenAI Codex CLI、GitHub Copilot Workspace 等工具让”用自然语言描述需求 → Agent 自主完成多文件修改和测试”成为日常开发流程。SWE-bench(真实 GitHub Issue 修复基准)的排行榜上,顶级 Agent 的通过率已从 2024 年初的不到 20% 提升到 2025 年的 50%+。

核心技术挑战:

  • 代码理解:理解项目结构、函数依赖关系、类型系统——这比理解自然语言难得多。代码有严格的语法约束和复杂的跨文件依赖。
  • 上下文组装:把正确的代码文件、类型定义、项目约定塞进有限的上下文窗口。详见上下文工程。
  • 工具调用:Agent 模式需要读写文件、执行命令、运行测试——核心依赖工具调用。详见 MCP 协议与工具调用。

Fill-in-the-Middle(FIM,中间填充)

Section titled “Fill-in-the-Middle(FIM,中间填充)”

传统语言模型(即从左到右逐词预测下一个 token 的因果语言模型,Causal Language Model)只能从左到右生成。但写代码时光标经常在代码中间——上面有代码,下面也有代码。FIM 技术解决了这个问题:

  1. 把光标前的代码标记为前缀(prefix),光标后的代码标记为后缀(suffix)。
  2. 通过特殊重排(如 <PRE> 前缀 <SUF> 后缀 <MID>),让模型学会在已知前后文的情况下填充中间部分。
  3. 训练时对大量代码数据做 FIM 格式的微调——把原始代码拆成 prefix 和 suffix,让模型预测中间部分,与下一个 token 预测任务联合训练。

为什么 FIM 有效? 关键在于它让模型利用了”未来信息”。在写代码时,光标后的代码(如函数签名、return 语句、闭合括号)对中间应该填什么提供了强烈的约束。没有 FIM 的模型只能看到光标前的代码,会生成与后面代码不兼容的内容。

FIM 是代码补全功能的核心技术——没有它,模型只能续写光标后面的内容,无法利用光标之后的代码信息。Codex(Copilot 的初代模型)最先大规模验证了 FIM 的有效性。

AI 编程助手如何知道该把哪些代码塞进上下文?这是一个典型的上下文工程问题。常见策略从简单到复杂:

  • 光标窗口:当前打开的文件 + 光标位置前后若干行。最简单也最常用,但只适合局部补全。
  • 相关文件检索:基于文件名、import 关系、语义相似度(用 Code Embedding(代码嵌入,即将代码转换为向量表示)检索语义上相关的文件)。
  • LSP 集成:通过 LSP(Language Server Protocol,语言服务器协议——编辑器与语言分析服务之间的标准通信协议)获取符号定义、类型信息、引用关系——比纯文本检索精准得多。例如,LSP 能精确告诉 AI”这个函数调用的定义在哪个文件的哪一行”,而不需要猜测。
  • 全项目索引:预先对整个项目做 Embedding 索引(把每个代码文件/函数编码成向量存入向量数据库),按需检索。Cursor 的 Codebase Indexing 功能,让 AI 能”看到”整个项目的结构。
  • Agent 自主探索:Agent 模式下,LLM 自己决定读哪些文件、grep 什么关键词、查什么符号。这最灵活但也最消耗 token。详见 AI Agent。

Agent 编程是最高阶的形态,核心是 ReAct 循环(详见提示工程)在代码场景的特化:

  1. 理解任务:解析用户的自然语言需求——“修复登录页的 Bug”或”把这个函数从回调风格改成 async/await”。
  2. 探索代码库:读文件、搜索符号、理解现有实现——Agent 用 grep、glob、文件读取等工具建立上下文。
  3. 规划方案:列出要改哪些文件、怎么改——好的 Agent 会先”想”再”做”。
  4. 执行修改:写代码、改代码——多文件协调修改。
  5. 验证结果:跑测试、跑 lint、查看编译输出——自动验证修改是否正确。
  6. 修复问题:如果测试失败或报错,分析原因再修——这就是 Reflexion(反思)模式在编程中的应用。

关键区别:普通 Chat 模式是”你问一段,我答一段”——你来执行修改。Agent 模式是”你说目标,我自己搞定”——它自己读写文件、跑命令。

2025 年的 Agentic Coding 最佳实践:Spec-Driven Development(规格驱动开发)—— 先让 Agent 或人类写一份明确的修改规格(spec),包括要改哪些文件、预期行为是什么,然后 Agent 照规格执行。这比”自由发挥”式的 Agent 编程可靠得多。

代码质量比自然语言更难评估,因为不仅要”看起来对”,还要能运行、可测试:

  • HumanEval / MBPP:经典基准——给函数签名和文档字符串(docstring),要求生成正确的实现,通过单元测试判断正误。适合衡量”函数级”代码生成能力。
  • SWE-bench:更真实的基准——使用真实 GitHub 仓库的 Issue + 对应 PR(Pull Request),要求 Agent 自己定位 Bug 并修复,用仓库的测试套件验证。2025 年 SWE-bench 成为衡量 Agent 编程能力的金标准,排行榜上顶级系统(如 Cursor、Devin、开源的 SWE-agent)通过率已突破 50%。
  • LiveCodeBench:使用 LeetCode 等竞赛平台的最新题目,避免数据泄漏(即测试题目已经出现在训练数据中导致虚高)问题。
  • Aider Code Editing Benchmark:专门评估代码编辑能力——给一个真实的代码文件和修改要求,检查修改后的代码是否通过测试。

使用 OpenAI API 实现代码补全(FIM 模式)

Section titled “使用 OpenAI API 实现代码补全(FIM 模式)”
import openai
client = openai.OpenAI()
# 模拟 Fill-in-the-Middle:光标前后都有代码
prefix = """def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:"""
suffix = """ return -1"""
# 组装 FIM 格式的提示
prompt = f"""请补全以下 Python 函数的中间部分。
函数开头:
{prefix}
函数结尾:
{suffix}
请只输出中间缺失的代码(while 循环体),不要重复已有代码:"""
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
max_tokens=200,
temperature=0.2, # 代码生成用低温度,减少随机性
)
print(response.choices[0].message.content)
import openai
import json
client = openai.OpenAI()
# 定义 Agent 可用的工具
tools = [
{
"type": "function",
"function": {
"name": "read_file",
"description": "读取指定路径的文件内容",
"parameters": {
"type": "object",
"properties": {"path": {"type": "string"}},
"required": ["path"],
},
},
},
{
"type": "function",
"function": {
"name": "write_file",
"description": "将内容写入指定路径的文件",
"parameters": {
"type": "object",
"properties": {
"path": {"type": "string"},
"content": {"type": "string"},
},
"required": ["path", "content"],
},
},
},
{
"type": "function",
"function": {
"name": "run_command",
"description": "执行 shell 命令并返回输出",
"parameters": {
"type": "object",
"properties": {"command": {"type": "string"}},
"required": ["command"],
},
},
},
]
# Agent 循环:任务 -> 思考 -> 行动 -> 观察 -> 再思考
messages = [
{"role": "system", "content": "你是一个代码修复 Agent。可以读写文件、运行命令来修复 Bug。每次只执行一步操作。"},
{"role": "user", "content": "请阅读 main.py,找到导致除零错误的 Bug 并修复它。"},
]
for _ in range(10): # 最多循环 10 轮
resp = client.chat.completions.create(
model="gpt-4o", messages=messages, tools=tools
)
msg = resp.choices[0].message
messages.append(msg)
if not msg.tool_calls:
print(msg.content) # Agent 给出最终回答
break
for tc in msg.tool_calls:
args = json.loads(tc.function.arguments)
print(f"调用工具: {tc.function.name}({args})")
# 这里执行实际工具调用(读/写文件、运行命令)
# 生产环境需要安全沙箱!
messages.append({
"role": "tool",
"tool_call_id": tc.id,
"content": "操作成功",
})

用 AGENTS.md / .cursorrules 定义项目约定

Section titled “用 AGENTS.md / .cursorrules 定义项目约定”

在项目根目录放一个约定文件,AI 会遵循这些约定:

AGENTS.md
## 技术栈
- 后端: Python 3.12 + FastAPI + SQLAlchemy
- 前端: React 19 + TypeScript + Tailwind CSS
- 数据库: PostgreSQL
- 测试: pytest (后端) / vitest (前端)
## 代码规范
- 使用 Google style docstring
- 所有 API endpoint 必须有类型注解和 Pydantic 模型
- 禁止使用 any 类型(TypeScript)
- 测试覆盖率不低于 80%
## 文件结构
- src/api/ — API 路由
- src/models/ — 数据模型
- src/services/ — 业务逻辑
- tests/ — 测试文件,与 src/ 结构对应
## 重要约定
- 数据库迁移用 Alembic,不要手写 SQL
- API 响应统一用 ResponseModel 包装
- 日志用 structlog,不要用 print
  • 低温度生成代码:Temperature(温度,控制生成随机性的参数)设为 0.1-0.3。代码需要精确性而非创造性,高温度会产生”看起来合理但实际不运行”的幻觉代码。
  • 给够上下文:不要只贴一个函数让 AI 改——把相关的类型定义、接口声明、import 语句也一起给。上下文不足是 AI 生成错误代码的第一大原因。详见上下文工程。
  • 小步迭代:Agent 模式下不要一次给太大任务(“帮我重构整个项目”)。拆成小任务(“把这个函数从回调风格改成 async/await”),一步一步来,每步验证。这是 2025 年 Agentic Coding 的核心最佳实践。
  • 始终运行测试:AI 生成的代码经常”看起来对但跑不通”。修改后必须运行测试套件或至少手动验证核心功能。Agent 编程工具(Cursor、Claude Code)已内置了”改完自动跑测试”的工作流。
  • Code Review 不能省:AI 生成的代码需要和人类代码一样经过 Review。AI 擅长快速产出代码骨架和重复逻辑,但安全性、边界条件、架构决策仍需人类把关。
  • 善用项目约定文件:在项目根目录放 AGENTS.md 或 .cursorrules,写明项目的技术栈、代码规范、文件结构——AI 会遵循这些约定,大幅减少不必要的纠正。
  • 选择合适的模型:代码任务推荐使用专门优化过的模型。2025 年代码能力最强的模型包括 Claude 3.5/4 Sonnet、GPT-4o、DeepSeek-Coder-V2、Qwen2.5-Coder 等。开源模型在本地部署场景下进步显著。
  • 利用 Codebase Indexing:如果你用 Cursor 等支持项目索引的 IDE,务必启用 Codebase Indexing。它让 AI 能看到整个项目结构,而不是只依赖当前文件。
  • IDE 内代码补全:GitHub Copilot、Cursor Tab、Codeium 在 VS Code / JetBrains 中提供实时补全,输入时自动提示。2025 年 Cursor Tab 2.0 引入了基于项目全貌的预测性补全,能预测多行修改而非只补全当前位置。
  • Agent 编程工具:Claude Code(命令行)、Cursor Agent、GitHub Copilot Workspace、Aider 等,能自主完成多文件修改和测试。这是 2025 年增长最快的 AI 编程形态。
  • 代码审查:AI 自动审查 PR 中的代码质量、安全漏洞、风格问题——GitHub Copilot 的 Code Review 功能、CodeRabbit 等。
  • 自然语言建站:v0.dev(Vercel)、bolt.new、Lovable 等,用自然语言描述需求直接生成完整前端项目。
  • 测试生成:自动根据函数实现生成单元测试用例,覆盖各种边界条件。Cursor、Copilot 都支持选中函数自动生成测试。
  • 代码库问答:对大型代码库提问——“这个 API 在哪里实现的""这个函数被哪些地方调用”。基于 Codebase Indexing + RAG 技术实现。
类库 / 工具类型说明
GitHub CopilotIDE 插件 / 服务全球最早大规模商用的 AI 编程助手,支持 VS Code/JetBrains,含补全/Chat/Agent
CursorIDE基于 VS Code fork 的 AI 原生 IDE,深度集成 Chat/Inline Edit/Agent 和 Codebase Indexing
Claude CodeCLI AgentAnthropic 的命令行 AI 编程 Agent,支持自主读写文件、跑命令、Git 操作
OpenAI Codex CLICLI AgentOpenAI 2025 年发布的命令行编程 Agent
Aider开源 CLI开源的命令行 AI 编程助手,支持多模型,自动管理 Git 提交
Continue开源插件开源的 VS Code/JetBrains AI 编程插件,可自选模型,支持本地部署
v0 / bolt.newWeb 服务自然语言生成完整前端项目的 Web 平台
tree-sitter解析库代码语法解析库(增量解析),被广泛用于构建代码索引和结构化上下文
SWE-agent开源Princeton 大学开源的自主软件工程 Agent,SWE-bench 上的强基线
术语英文解释
中间填充FIM, Fill-in-the-Middle让模型在已知前后代码的情况下填充中间部分的技术,代码补全的核心
代码补全Code Completion根据已有代码上下文自动预测和生成后续代码
代码库索引Codebase Indexing对整个项目代码做 Embedding 索引,支持语义检索相关文件
Agent 编程Agentic CodingLLM 自主规划、读写文件、运行测试的端到端编程模式
语言服务器协议LSP, Language Server Protocol编辑器与语言分析服务之间的标准协议,提供符号定义/引用/类型信息
代码审查Code Review对 AI 生成的代码进行人工检查,确保质量和安全
代码嵌入Code Embedding将代码转换为向量表示,用于语义搜索和相关性检索
上下文组装Context Assembly将正确的代码文件、类型信息、项目约定组合进 LLM 上下文的过程
规格驱动开发Spec-Driven Development先编写明确的修改规格,再让 Agent 照规格执行的编程方法论
Pull RequestPR代码仓库的合并请求,SWE-bench 使用真实 PR 作为评测基准
  • Bavarian et al.,「Efficient Training of Language Models to Fill in the Middle」(OpenAI 2022):FIM 技术的核心论文,验证了对因果语言模型做 FIM 微调的有效性。
  • Chen et al.,「Evaluating Large Language Models Trained on Code」(2021):Codex 论文,GitHub Copilot 的技术基础,同时提出了 HumanEval 基准。
  • Jimenez et al.,「SWE-bench: Can Language Models Resolve Real Issues in GitHub Repositories?」(2023):SWE-bench 论文,当前衡量 Agent 编程能力的金标准基准。
  • GitHub Copilot 官方文档:Copilot 的产品文档和最佳实践指南,包含 Prompt 技巧和功能说明。
  • Cursor 官方文档:Cursor IDE 的文档,详细说明了 Codebase Indexing、Agent 模式等功能的原理。
  • Anthropic, “SWE-bench: Claude 3.5 Sonnet” 技术博客 (2024):Anthropic 展示 Claude 在 SWE-bench 上取得 SOTA 表现的技术分析,展示了 Agentic Coding 的工程细节。