常见用例

代码生成与辅助

利用 LangGraph 构建支持多步骤规划、生成和评审的编码助手

📚 学习目标

学完这篇文章后,你将能够:

  • 实现“规划 -> 生成 -> 评审”的代码生成流水线
  • 使用 LangGraph 协调多个“专家 Agent”(如前端专家、后端专家)
  • 构建自动化的代码重构工作流

前置知识

在开始学习之前,建议先阅读:


1️⃣ 为什么代码生成需要 Graph?

简单的 "Write me a game" Prompt 往往只能生成简单的 Demo。要生成高质量的复杂项目,需要模仿人类工程师的工作流:

  1. Tech Spec: 编写技术方案。
  2. Structure: 设计文件结构。
  3. Implementation: 逐步实现每个模块。
  4. 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 节点,形成闭环。


💡 练习题

  1. 设计题:设计一个“单元测试生成器” Graph。输入一个源文件代码,它应该:
    • 生成测试用例。
    • 尝试运行测试(使用执行工具)。
    • 如果测试失败,根据错误信息修改测试代码或源代码,直到通过。

📚 参考资源

官方文档

本项目相关内容


✅ 总结

本章要点

  • 复杂代码生成任务需要分解为多个明确的步骤。
  • 维护结构化的 files 状态比纯文本对话更有效。
  • 引入 Reviewer 循环是提升代码质量的关键。

下一步:如果你准备把“编码助手”做成可长期运行的工程,请继续阅读:

登录以继续阅读

解锁完整文档、代码示例及更多高级功能。

立即登录

On this page