常见用例
代码生成与辅助
利用 LangGraph 构建支持多步骤规划、生成和评审的编码助手
📚 学习目标
学完这篇文章后,你将能够:
- 实现“规划 -> 生成 -> 评审”的代码生成流水线
- 使用 LangGraph 协调多个“专家 Agent”(如前端专家、后端专家)
- 构建自动化的代码重构工作流
前置知识
在开始学习之前,建议先阅读:
1️⃣ 为什么代码生成需要 Graph?
简单的 "Write me a game" Prompt 往往只能生成简单的 Demo。要生成高质量的复杂项目,需要模仿人类工程师的工作流:
- Tech Spec: 编写技术方案。
- Structure: 设计文件结构。
- Implementation: 逐步实现每个模块。
- Review: 代码审查和测试。
这天然适合用 LangGraph 建模。
2️⃣ 架构设计:Co-Coding Graph
3️⃣ 状态管理
在代码生成场景中,我们需要维护一个“虚拟文件系统”的状态。
import { Annotation } from '@langchain/langgraph';
const CodingState = Annotation.Root({
requirements: Annotation<string>(),
plan: Annotation<string>(),
files: Annotation<Record<string, string>>({
// Reducer: 合并文件更新
reducer: (state, update) => ({ ...state, ...update }),
default: () => ({}),
}),
reviewComments: Annotation<string[]>(),
});关键节点:文件写入
程序员 Agent 的输出应该包含结构化的文件内容,而不是散乱的文本。可以使用 LLM 的 with_structured_output 功能。
import { z } from 'zod';
const fileSchema = z.object({
filename: z.string(),
content: z.string(),
});
const coderNode = async (state) => {
const result = await coderModel.withStructuredOutput(fileSchema).invoke(state.messages);
// 更新虚拟文件系统
return { files: { [result.filename]: result.content } };
};4️⃣ 反思与修正 (Reflexion)
Reviewer 节点至关重要。它不仅检查语法错误,还可以检查是否符合 Planner 制定的规范。如果发现问题,将错误信息写回 messages,并路由回 Coder 节点,形成闭环。
💡 练习题
- 设计题:设计一个“单元测试生成器” Graph。输入一个源文件代码,它应该:
- 生成测试用例。
- 尝试运行测试(使用执行工具)。
- 如果测试失败,根据错误信息修改测试代码或源代码,直到通过。
📚 参考资源
官方文档
本项目相关内容
✅ 总结
本章要点:
- 复杂代码生成任务需要分解为多个明确的步骤。
- 维护结构化的
files状态比纯文本对话更有效。 - 引入
Reviewer循环是提升代码质量的关键。
下一步:如果你准备把“编码助手”做成可长期运行的工程,请继续阅读:
登录以继续阅读
解锁完整文档、代码示例及更多高级功能。