代理编码

编码代理是具有访问工具能力的对话式 AI 模型,这些工具包括读/写文件、网络搜索和调用 shell 命令。它们存在于 IDE 中或独立的命令行或 GUI 工具中。编码代理是高度自主和强大的工具,支持各种用例。

本讲座建立在开发环境与工具讲座中 AI 驱动的开发材料基础上。作为快速演示,让我们继续AI 驱动的开发部分的示例:

from urllib.request import urlopen

def download_contents(url: str) -> str:
    with urlopen(url) as response:
        return response.read().decode('utf-8')

def extract(content: str) -> list[str]:
    import re
    pattern = r'\[.*?\]\((.*?)\)'
    return re.findall(pattern, content)

print(extract(download_contents("https://raw.githubusercontent.com/missing-semester/missing-semester/refs/heads/master/_2026/development-environment.md")))

我们可以尝试用以下任务提示编码代理:

Turn this into a proper command-line program, with argparse for argument parsing. Add type annotations, and make sure the program passes type checking.

代理将读取文件以理解它,然后进行一些编辑,最后调用类型检查器以确保类型注解正确。如果它犯了一个导致类型检查失败的错误,它可能会迭代,尽管这是一个简单的任务,所以这不太可能发生。因为编码代理可以访问可能有危害的工具,默认情况下,代理框架会提示用户确认工具调用。

如果编码代理犯了错误——例如,如果你直接在 $PATH 上有 mypy 二进制文件,但代理尝试调用 python -m mypy——你可以给它文本反馈来帮助它纠正方向。

编码代理支持多轮交互,因此你可以通过与代理的来回对话迭代工作。如果代理走错了方向,你甚至可以打断它。一个有用的心智模型可能是实习生的经理:实习生会做具体的工作,但需要指导,偶尔会做错事并需要被纠正。

对于更说明性的演示,尝试作为后续要求代理运行结果脚本。观察输出,并尝试要求它进行更改(例如,要求它只包含绝对 URL)。

AI 模型和代理如何工作

完全解释现代大型语言模型 (LLMs)和代理框架等基础设施的内部工作原理超出了本课程的范围。然而,对一些关键思想有高层次的理解有助于有效地_使用_这一前沿技术并理解其局限性。

LLMs 可以被视为对给定提示字符串(输入)的完成字符串(输出)的概率分布进行建模。LLM 推理(当你例如向对话式聊天应用提供查询时发生的事情)从这个概率分布中_采样_。LLM 有一个固定的_上下文窗口_,即输入和输出字符串的最大长度。

AI 工具如对话式聊天和编码代理建立在这个原语之上。对于多轮交互,聊天应用和代理使用轮次标记,每次有新的用户提示时提供整个对话历史作为提示字符串,每个用户提示调用一次 LLM 推理。对于工具调用代理,框架将某些 LLM 输出解释为调用工具的请求,框架将工具调用的结果作为提示字符串的一部分反馈给模型(因此每次有工具调用/响应时 LLM 推理都会再次运行)。工具调用代理的核心概念可以在 200 行代码中实现

隐私

大多数 AI 编码工具在其标准配置中会向云端发送大量数据。有时框架在本地运行,而 LLM 推理在云端运行,其他时候更多的软件在云端运行(例如,服务提供商可能有效地获得你整个仓库的副本以及你与 AI 工具的所有交互)。

有开源 AI 编码工具和开源 LLM,它们相当不错(虽然不如专有模型),但目前,对于大多数用户来说,由于硬件限制,在本地运行最前沿的开源 LLM 将是不可行的。

用例

编码代理可以帮助完成各种任务。一些例子:

高级代理

在这里,我们简要概述编码代理的一些更高级的使用模式和功能。

对于许多需要编写提示的高级功能(例如,技能或子代理),你可以使用 LLM 来开始。一些编码代理甚至有内置支持来做到这一点。例如,Claude Code 可以从简短提示生成子代理(调用 /agents 并创建新代理)。尝试用此提示创建子代理:

A Python code checking agent that uses `mypy` and `ruff` to type-check, lint, and format *check* any files that have been modified from the last git commit.

然后,你可以使用顶级代理通过像 “use the code checker subagent” 这样的消息显式调用子代理。你可能还能让顶级代理在适当的时候自动调用子代理,例如,在修改任何 Python 文件后。

需要注意什么

AI 工具可能会犯错。它们建立在 LLM 之上,而 LLM 只是概率性的下一个 token 预测模型。它们不像人类那样”智能”。审查 AI 输出的正确性和安全漏洞。有时验证代码可能比你自己编写代码更难;对于关键代码,考虑手动编写。AI 可能会陷入死胡同并试图对你进行煤气灯效应;注意调试螺旋。不要把 AI 当作拐杖,要警惕过度依赖或理解肤浅。仍然有一大类编程任务是 AI 仍然无法完成的。计算思维仍然有价值。

推荐软件

许多 IDE / AI 编码扩展包括编码代理(参见开发环境讲座中的推荐)。其他流行的编码代理包括 Anthropic 的 Claude Code、OpenAI 的 Codex,以及开源代理如 opencode

练习

  1. 通过完成相同的编程任务四次,比较手动编码、使用 AI 自动完成、内联聊天和代理的体验。最佳候选是你已经进行的项目中的中小型功能。如果你在寻找其他想法,可以考虑在 GitHub 上的开源项目中完成”good first issue”风格的任务,或 Advent of CodeLeetCode 问题。

  2. 使用 AI 编码代理导航不熟悉的代码库。这最好在你实际关心的项目中调试或添加新功能的背景下进行。如果你没有想到的,尝试使用 AI 代理理解 opencode 代理中与安全相关的功能是如何工作的。

  3. Vibe code 一个从头开始的小应用。不要手动编写一行代码。

  4. 对于你选择的编码代理,创建并测试 AGENTS.md(或你选择的代理的类似文件,如 CLAUDE.md)、一个技能(例如,Claude Code 中的技能Codex 中的技能),以及一个子代理(例如,Claude Code 中的子代理)。思考何时想使用其中一个而不是另一个。注意,你选择的编码代理可能不支持某些功能;你可以跳过它们,或尝试支持的其他编码代理。

  5. 使用编码代理完成与代码质量讲座中的 Markdown 项目符号正则表达式练习相同的目标。它是否通过直接文件编辑完成任务?代理直接编辑文件来完成此类任务的缺点和局限性是什么?弄清楚如何提示代理使其不通过直接文件编辑完成任务。提示:要求代理使用第一讲中提到的命令行工具之一。

  6. 大多数编码代理支持一种”yolo mode”形式(例如,在 Claude Code 中,--dangerously-skip-permissions)。直接使用此模式是不安全的,但在虚拟机或容器等隔离环境中运行编码代理然后启用自主操作可能是可接受的。在你的机器上运行此设置。Claude Code devcontainersDocker Sandboxes / Claude Code 等文档可能会有帮助。有不止一种方法可以设置这个。


Edit this page.

Licensed under CC BY-NC-SA.