AI编程新范式:大模型架构师+小模型码农的混合智能工作流

📅 发布时间:2026/8/8 13:58:50
AI编程新范式:大模型架构师+小模型码农的混合智能工作流
1. 项目概述当“架构师”与“码农”在AI开发中分工协作最近在AI编程工具圈里一个名为“shadcn/improve”的项目思路引起了我的注意。它的核心想法非常精妙直指当前AI辅助开发中的一个核心痛点成本与质量的平衡。简单来说它提出了一种“混合智能”的工作流——让能力最强、但可能也更昂贵的大模型如Claude 3.5 Sonnet、GPT-4扮演“架构师”的角色负责高层次的方案设计、代码结构规划和复杂逻辑拆解然后让那些成本低廉、响应迅速的轻量级模型如DeepSeek Coder、CodeLlama充当“码农”去忠实地执行“架构师”产出的详细任务说明完成具体的代码填充和实现。这个思路之所以吸引人是因为它完美契合了我们实际开发中的经济账。用过Claude Code或Cursor内置高级模型的朋友都知道它们生成的代码质量、对复杂需求的理解深度确实令人惊艳但每一次对话的token消耗也着实让人肉疼尤其是在进行频繁的、探索性的迭代时。另一方面许多优秀的开源模型在代码补全、根据清晰指令编写函数这类“执行层”任务上已经表现不俗且成本极低甚至免费。shadcn/improve正是试图将两者的优势结合起来构建一个既保证最终代码设计质量又显著降低整体交互成本的可持续工作流。它不仅仅是一个工具更是一种关于如何高效“使用”AI的范式转变。接下来我将结合自己近期的实践深入拆解这套工作流的各个环节包括如何设置“架构师”与“码农”如何设计有效的任务传递格式以及在实际操作中会遇到哪些坑、如何避开。无论你是正在寻找降本增效方法的独立开发者还是对AI编程工作流感兴趣的技术探索者相信这些来自一线的经验都能给你带来直接的参考价值。2. 核心思路拆解为什么是“架构师”与“码农”的分工要理解shadcn/improve的精髓我们不能只停留在“用大模型设计用小模型写代码”的表面描述上而需要深入其背后的逻辑。这种分工模式本质上是将软件工程中经典的“设计-实现”分离思想应用到了与AI协作的层面。2.1 大模型作为“架构师”的不可替代性为什么必须用最强模型当架构师因为高层次的设计任务对模型的“思考”能力要求极高。这包括需求理解与抽象能力当用户提出一个模糊的需求比如“帮我做一个带拖拽排序的看板组件”优秀的“架构师”模型能迅速理解这个功能的应用场景项目管理内容编排并抽象出核心实体Board, Column, Card、状态顺序、状态和交互dragstart, drag over, drop。系统设计与拆解能力它需要规划出清晰的模块边界。是做一个独立的React组件库还是集成到现有状态管理如Zustand, Redux中数据流如何设计是否需要考虑服务端同步这些决策决定了项目的骨架是否健壮。技术选型与权衡能力对于表单校验是用Zod还是VeeValidate状态管理用Context还是更专业的库一个优秀的“架构师”能基于项目规模、团队熟悉度和生态活跃度给出有理有据的建议而不是随意堆砌技术栈。生成高质量“设计文档”的能力这是最关键的一环。它产出的不是最终代码而是一份极其详细、无歧义的“施工蓝图”。这份蓝图需要包含清晰的模块/文件结构、每个文件/函数/组件的精确职责描述、关键的数据结构和API接口定义、以及具体的实现步骤说明。这份文档的质量直接决定了“码农”模型能否正确执行。在我的实测中Claude 3.5 Sonnet和GPT-4 Turbo在这类任务上表现突出。它们能生成结构清晰、考虑周全的Markdown格式设计文档甚至能预见到一些边界情况。虽然单次对话成本高但一次好的设计可以指导无数次低成本的实现这个投资是值得的。2.2 轻量模型作为“码农”的经济性与可行性为什么便宜模型可以当好“码农”因为一旦任务被足够细化、明确化它就从一个“创造性问题”转变为了一个“模式匹配与生成”问题。任务明确性当“架构师”给出指令“在src/components/Kanban/Card.tsx中创建一个函数组件KanbanCard它接收{id, title, content}作为props并实现基于useDragfromreact-dnd的拖拽逻辑”这个任务对模型来说是非常具体的。它不需要思考为什么用react-dnd不需要设计组件整体结构只需要按照React Hooks和react-dnd的语法规范填充代码即可。开源模型的成熟度当前像DeepSeek Coder、CodeLlama特别是Instruct版本这类模型在代码补全和单文件生成任务上已经达到了很高的实用水平。它们对主流框架和库的语法非常熟悉能够根据清晰的上下文生成准确、符合惯例的代码。成本与速度优势调用这些模型的API成本可能只有顶尖模型的十分之一甚至百分之一并且响应速度更快。这意味着你可以进行大量快速的迭代比如让“码农”模型根据设计文档生成10个组件然后你快速浏览对不满意的部分提出修改指令它也能迅速重写整个过程成本极低。这种分工的核心在于“降级”了轻量模型所需承担的责任。它不再需要做困难的架构决策只需要成为一个高效、准确的“代码转录员”。shadcn/improve的价值就是提供了将“架构决策”与“代码转录”这两个环节标准化、流水线化的方法论和潜在的工具链。2.3 与现有AI编程模式如Cursor、Claude Code的对比你可能会问Cursor和Claude Code本身不就已经很智能了吗为什么还需要这套“改善”方案Cursor/Claude Code的默认模式它们通常使用一个统一的、能力强大的模型如Claude 3系列来处理所有事情从聊天、设计到代码生成。这是一个“全能高手”模式。优点是一致性好缺点是成本集中且在一些简单的、重复性的代码生成任务上有点“杀鸡用牛刀”。shadcn/improve的混合模式它更像是组建了一个“团队”。你有一个身价高但眼光独到的“技术总监”大模型和一群干活麻利、成本低的“工程师”小模型。技术总监画好详细的图纸工程师们分头施工。这种模式在完成中型项目、需要大量重复代码结构时成本优势会非常明显。简而言之shadcn/improve不是要替代Cursor或Claude Code而是提供了一种在它们之上或与之并行的、更经济的协作策略。你依然可以在Cursor里用Claude 3.5做核心设计然后将生成的设计说明批量发送给本地运行的DeepSeek Coder来产出代码。3. 实操搭建构建你的“架构师-码农”工作流理论说再多不如动手搭一个。下面我将分享一个基于现有工具链实现shadcn/improve思路的实操方案。这个方案不依赖某个特定的未公开工具而是用你可以立即上手的组件拼装而成。3.1 角色定义与工具选型首先我们需要为两个角色选定具体的“演员”。“架构师”角色选型首选Claude 3.5 Sonnet (通过Claude Code或API)。它在代码设计、逻辑推理和生成结构化文档方面目前综合体验最佳。Claude Code插件在VSCode中集成度高交互方便。备选GPT-4 Turbo (通过Cursor或API)。同样是顶级选择尤其在需要结合最新知识或进行复杂网络搜索时可能略有优势。Cursor将其深度集成聊天与代码生成无缝切换。关键配置无论用哪个在与“架构师”对话时第一提示词System Prompt至关重要。你必须明确告诉它“你现在是一名资深软件架构师。你的任务不是直接写最终代码而是根据我的需求输出一份详尽、可执行的技术方案设计文档。文档需用Markdown格式包含项目结构、模块分解、每个文件/组件的精确规格说明包括props、state、方法名、关键逻辑描述以及实现步骤。你的输出将用于指导另一个代码生成模型进行具体实现。”“码农”角色选型首选DeepSeek Coder (通过Ollama本地运行或兼容API)。它对多种编程语言支持良好代码生成质量高且完全免费本地部署。通过Ollama你可以在本地命令行或兼容的客户端中调用它。备选CodeLlama (Instruct版本通过Ollama)。Meta出品在代码任务上经过专门训练也是一个非常可靠的免费选择。工具连接你需要一个能与这些模型交互的客户端。推荐使用OpenAI兼容的API客户端因为Ollama提供的API接口与OpenAI兼容。这意味着你可以使用像curl、insomnia、postman或者一些支持自定义OpenAI API Base的桌面应用如某些开源Chat UI来发送请求。3.2 核心桥梁设计“任务规格说明书”格式这是整个工作流成功的关键。“架构师”输出的不能是模糊的想法而必须是机器可读、精确无歧义的“任务单”。我经过多次试验总结出一个高效的模板# 项目 [项目名称] ## 设计概述 [简要说明项目的目标和核心功能] ## 文件结构project-root/ ├── src/ │ ├── components/ # React组件 │ │ ├── Kanban/ │ │ │ ├── Board.tsx # 看板容器 │ │ │ ├── Column.tsx # 列组件 │ │ │ └── Card.tsx # 卡片组件 │ │ └── common/ │ │ └── Button.tsx # 通用按钮 │ ├── hooks/ # 自定义Hooks │ │ └── useKanban.ts │ ├── types/ # TypeScript类型定义 │ │ └── index.ts │ └── utils/ # 工具函数 │ └── helpers.ts ├── public/ └── package.json## 任务清单 请按顺序执行以下任务每个任务对应生成一个完整的文件。 ### 任务 1: 创建类型定义文件 **文件路径**: src/types/index.ts **职责**: 定义看板功能所需的核心TypeScript接口。 **具体要求**: 1. 定义 IKanbanCard 接口包含 id: string, title: string, content: string, columnId: string。 2. 定义 IKanbanColumn 接口包含 id: string, title: string, cardIds: string[]。 3. 定义 IKanbanBoard 类型为 Recordstring, IKanbanColumn。 4. 导出这三个类型。 ### 任务 2: 实现看板卡片组件 **文件路径**: src/components/Kanban/Card.tsx **组件名称**: KanbanCard **技术栈**: React TypeScript, 使用 react-dnd 实现拖拽。 **Props**: card: IKanbanCard, onDragStart: (cardId: string) void **实现要求**: 1. 使用 useDrag hook 使该组件可拖拽。 2. 拖拽类型为 CARD。 3. 组件UI包含标题和内容区域样式使用Tailwind CSS类border rounded-lg p-4 shadow bg-white。 4. 在拖拽开始时调用 onDragStart。 ...(后续任务)注意给“码农”模型的提示词同样需要精心设计。例如“你是一个专业的代码生成助手。请严格根据下方‘任务规格说明书’中的描述生成完整、可运行、符合最佳实践的代码。只输出代码本身不要有任何解释性文字。确保导入路径、类型定义与说明书完全一致。”3.3 工作流串联从设计到生成的自动化脚本手动复制粘贴设计文档和调用API太低效。我们可以用简单的Shell脚本或Python脚本将这个过程自动化。以下是一个概念性的Python脚本示例展示如何衔接import openai # 这里openai库可以配置为指向Ollama的本地端点 import json # 1. 从文件读取“架构师”生成的设计文档 with open(design_spec.md, r) as f: design_spec f.read() # 2. (可选) 解析设计文档提取出结构化的任务列表。 # 这里简化处理假设我们手动将任务拆分成了多个部分 tasks [ {path: src/types/index.ts, spec: 任务1的详细描述...}, {path: src/components/Kanban/Card.tsx, spec: 任务2的详细描述...}, # ... 更多任务 ] # 3. 配置“码农”模型客户端 (以Ollama运行DeepSeek Coder为例) client openai.OpenAI( base_urlhttp://localhost:11434/v1, # Ollama的API地址 api_keyollama, # 可任意填写Ollama本地通常不需要验证 ) # 4. 遍历任务逐个生成代码 for task in tasks: prompt f 你是一个专业的代码生成助手。请严格根据以下任务描述生成完整、可运行、符合最佳实践的代码。 只输出代码本身不要有任何解释性文字。 文件路径{task[path]} 任务描述 {task[spec]} response client.chat.completions.create( modeldeepseek-coder, # Ollama中拉取的模型名 messages[{role: user, content: prompt}], streamFalse, temperature0.1, # 低温度保证生成确定性高符合规范 ) generated_code response.choices[0].message.content # 5. 将生成的代码写入对应文件 # 注意需要确保目录存在 import os os.makedirs(os.path.dirname(task[path]), exist_okTrue) with open(task[path], w) as code_file: code_file.write(generated_code) print(fGenerated: {task[path]})这个脚本只是一个起点。在实际应用中你需要加入错误处理、日志记录以及更复杂的文档解析逻辑例如用正则表达式或LLM本身从设计文档中自动提取任务列表。4. 实战经验与避坑指南在实际运行这套工作流几周后我积累了一些宝贵的经验教训也踩过不少坑。这里分享出来希望能帮你节省大量时间。4.1 如何让“架构师”产出高质量的设计文档这是决定成败的第一步。模糊的指令只能得到模糊的设计。技巧一提供充足的上下文。不要只说“做一个看板”。要说明技术栈React TS Tailwind、项目背景是内部工具还是面向用户、已有的依赖比如已经安装了react-dnd。你可以把package.json的一部分内容贴给它。技巧二强制结构化输出。在提示词中明确要求使用上面提到的“任务规格说明书”模板。你可以说“请严格按照以下Markdown模板输出你的设计包含‘文件结构’和‘任务清单’两部分。”技巧三进行多轮细化。第一版设计往往比较粗糙。你可以针对不满意的地方进行追问。例如“这个useKanbanhook的设计能否更详细地说明它的返回值和方法请列出具体的函数签名和用途。”踩过的坑初期我让“架构师”一次性设计一个大型模块结果它输出的任务清单过于庞大导致“码农”模型在生成后面任务时可能因为上下文长度限制而遗忘前面的关键定义如类型。解决方案将大项目拆分成多个相对独立、上下文自包含的“子设计文档”分批次执行。4.2 “码农”模型执行不佳的常见原因与调试当你发现生成的代码跑不起来或者不符合预期时可以按以下顺序排查任务描述不够精确这是最常见的问题。“实现一个拖拽功能”是模糊的。“使用react-dnd的useDraghook拖拽类型为‘CARD‘在dragStart时调用props.onDragStart(card.id)”是精确的。检查你的设计文档确保每个任务都像后者一样具体。上下文缺失“码农”模型在生成Card.tsx时需要知道IKanbanCard类型是什么。如果这个类型定义在另一个文件src/types/index.ts里你需要在当前任务的描述中以注释或假设的形式明确告知它。例如在任务描述开头加上“假设已存在类型定义interface IKanbanCard { id: string; title: string; ... }”。模型本身的能力局限某些轻量模型可能对非常新的库或非常小众的语法支持不好。如果发现它总是用错某个API尝试在提示词中提供该API的一小段官方示例代码作为参考。温度Temperature参数设置对于代码生成通常需要较低的temperature如0.1-0.3以确保输出的确定性和一致性。过高的温度会导致随机性太强生成奇怪的代码。4.3 成本监控与迭代优化采用这种混合模式核心目的之一是降低成本。因此建立简单的成本监控很有必要。“架构师”侧如果使用Claude或GPT的API关注每次设计对话的input_tokens和output_tokens。一次好的、详尽的设计可能消耗数万tokens但它指导了数十个文件的生成均摊下来单文件成本极低。“码农”侧如果使用本地Ollama成本主要是电费和算力几乎可忽略。如果使用云上便宜的API同样记录token消耗。优化点你会发现大部分成本花在了与“架构师”的交互和迭代上。因此提升你给出初始提示词的质量以及学会在几轮内锁定一个高质量设计是降低总成本的关键。不要无休止地和“架构师”讨论在获得一个80分的设计后就可以交给“码农”去实现细微的调整可以在“码农”生成代码后再由“架构师”或你自己微调。5. 进阶应用Skill/Agent理念与工作流扩展shadcn/improve的思想与当前AI领域火热的Agent智能体和Skill技能概念不谋而合。你可以将这套工作流封装成更自动化的Agent。设计Agent这是一个专门负责与Claude 3.5等大模型交互接收用户原始需求并输出标准化设计文档的模块。它可以内置多种项目类型的模板如“Chrome插件”、“React全栈应用”、“Node.js CLI工具”。实现Agent这是一个专门负责与DeepSeek Coder等模型交互接收设计文档解析任务列表并调用模型API生成代码的模块。它还可以集成简单的代码检查如格式校验、基础语法检查。编排器一个总控程序负责将用户需求传递给设计Agent接收设计文档再分发给实现Agent并最终将生成的代码组织到项目文件夹中。更进一步你可以为不同的“码农”模型开发特定的Skill。例如一个React Component Skill它知道如何根据特定的Props描述生成高质量的React组件一个Utility Function Skill专门生成纯函数工具代码。这样编排器可以根据任务类型动态选择最合适的Skill和背后的模型来执行。这种架构将shadcn/improve从一个手动流程升级为一个可扩展、可复用的自动化系统。虽然初期搭建需要一些工作量但对于需要频繁启动新项目或维护固定技术栈的团队来说长期收益巨大。6. 常见问题与解决方案速查表在实际操作中你可能会遇到以下典型问题这里提供一个快速排查指南问题现象可能原因解决方案“码农”生成的代码无法编译提示类型错误。1. 设计文档中类型定义不完整或未传递。2. 生成代码时模型未正确引用类型。1. 检查设计文档确保所有用到的类型都在“任务清单”前明确定义或导入假设。2. 在给“码农”的提示词中强制要求导入类型如import { IKanbanCard } from ‘/types‘。生成的多个文件之间接口对不上如函数名不一致。设计文档中不同任务的描述存在细微矛盾。让“架构师”在设计阶段统一关键的函数名、参数和返回值并在设计文档中集中声明。使用更精确的描述避免自然语言的二义性。“码农”模型完全理解错了任务生成了无关代码。任务描述过于简短或使用了歧义词。重写任务描述使用更标准的技术术语并提供一个最简单的输入输出示例。例如对于排序函数直接给出function sortUsers(users: User[]): User[]的函数签名。工作流脚本在生成大量文件时中断。网络问题、模型响应超时或脚本错误处理不完善。在脚本中为每个文件的生成添加重试机制如最多3次。记录日志方便定位是哪个任务失败。考虑将大任务拆分成更小的批次执行。觉得让“架构师”写设计文档本身就很耗时。不熟悉如何高效与大模型沟通以获取结构化输出。准备一些设计文档的“模板”或“范例”在给“架构师”的提示词中直接提供。例如“请参考以下格式为我的需求设计一个React组件库的结构...”。多练习形成自己的提示词套路。这套“最强模型当架构师便宜模型当码农”的工作流其魅力在于它用一种巧妙的方式放大了现有AI工具的价值。它不要求我们等待一个“全能”的超级模型出现而是利用现有模型的差异化优势通过流程设计来达成“112”的效果。对于独立开发者和中小团队而言这可能是当前阶段性价比最高的AI辅助开发模式。开始尝试时可能会觉得有些繁琐但一旦跑通你会发现它在快速原型构建、项目脚手架生成、以及标准化模块开发等场景下能带来惊人的效率提升。最关键的是它让你从重复的、低层次的代码编写中解放出来更能专注于真正需要创造力和架构思维的核心部分。