游乐游手机版
首页/AI教程/文章详情

一人用Claude从零构建AI自动化全栈开发系统

时间:2026-06-05 16:40
独立开发者 + Claude = 全栈开发团队:从零构建AI自动化开发系统的核心技术实现 项目背景 作为一名独立开发者,我仅用三周业余时间便成功搭建了一套名为 AutoDev 的 AI 驱动自动化开发系统。听起来或许有些疯狂,但确实实现了从零到一的落地。该系统只需接收一句需求描述,即可自动完成需求分

独立开发者 + Claude = 全栈开发团队:从零构建AI自动化开发系统的核心技术实现

项目背景

作为一名独立开发者,我仅用三周业余时间便成功搭建了一套名为 AutoDev 的 AI 驱动自动化开发系统。听起来或许有些疯狂,但确实实现了从零到一的落地。该系统只需接收一句需求描述,即可自动完成需求分析、架构设计、编码实现、测试验证、代码审查以及部署上线的完整流程。

一个人 + Claude = 全栈开发团队:从零构建 AI 自动化开发系统的技术实现

本文聚焦于该系统的核心技术实现,主要内容包括:

  • 14 阶段 Pipeline 状态机设计
  • 基于 Agentic Loop 模式的 AI Agent 实现
  • 测试失败自动回退的迭代循环机制
  • 三种人机协作运行模式

系统整体架构设计

先来看架构概览:整个系统以 FastAPI 作为服务主干,底层对接 Claude API、Docker Sandbox 以及 Git 服务;中间层由 Pipeline 引擎驱动的状态机负责流程调度;再往上则是一套按职责拆分的 Agent 集群——分析、设计、编码、测试、审查各司其职,协同工作。

┌─────────────────────────────────────────────────────┐
│                      FastAPI Server                  │
├─────────────────────────────────────────────────────┤
│              API Layer (REST + SSE)                  │
├─────────────────────────────────────────────────────┤
│              Pipeline Engine (状态机)                │
├──────────┬──────────┬──────────┬────────────────────┤
│ Analysis │  Design  │  Coding  │ Testing / Review   │
│  Agent   │  Agent   │  Agent   │      Agent         │
├──────────┴──────────┴──────────┴────────────────────┤
│            BaseAgent (Agentic Loop)                  │
├─────────────────────────────────────────────────────┤
│  Claude API  │  Docker Sandbox  │  Git Service      │
└─────────────────────────────────────────────────────┘

技术栈选用 Python 3.11 + FastAPI + Anthropic Claude API + SQLAlchemy 2.0 + Docker SDK + GitPython,虽不算奢华,但完全够用。

核心实现 1:Pipeline 状态机设计

Pipeline 的核心本质是一个有限状态机。每个阶段都具备明确的合法转换路径,不允许随意跳转。例如,从 TESTING 阶段可以走向 CODE_REVIEW(测试通过),也可以回退到 CODING(测试失败),甚至直接进入 FAILED(彻底崩溃)。

class PipelineStage(str, Enum):
    PENDING = "pending"
    ANALYSIS = "analysis"
    ANALYSIS_REVIEW = "analysis_review"  # 人工审核
    DESIGN = "design"
    DESIGN_REVIEW = "design_review"      # 人工审核
    CODING = "coding"
    TESTING = "testing"
    CODE_REVIEW = "code_review"
    DEPLOY_STAGING = "deploy_staging"
    STAGING_REVIEW = "staging_review"    # 人工审核
    DEPLOY_PRODUCTION = "deploy_production"
    COMPLETED = "completed"
    FAILED = "failed"
    CANCELLED = "cancelled"

    # 状态转换规则
    TRANSITIONS: dict[PipelineStage, list[PipelineStage]] = {
        PipelineStage.TESTING: [
            PipelineStage.CODE_REVIEW,   # 测试通过
            PipelineStage.CODING,        # 测试失败,回退重新编码
            PipelineStage.FAILED,
        ],
        PipelineStage.CODE_REVIEW: [
            PipelineStage.DEPLOY_STAGING,  # 审查通过
            PipelineStage.CODING,          # 发现严重问题,回退
            PipelineStage.FAILED,
        ],
        # ... 其他阶段
    }

这里包含几个关键设计思路:

  1. 回退路径作为一等公民存在。TESTING 和 CODE_REVIEW 均可回退到 CODING,这并非异常处理,而是正常流程的组成部分。
  2. 转换合法性校验。任何状态变更都必须通过 is_valid_transition() 检查,防止非法跳转。
  3. 重试配置独立定义。不同阶段可以配置不同的重试策略和回退路径:
RETRY_CONFIG: dict[PipelineStage, int] = {
    PipelineStage.CODING: 3,         # 编码最多重试 3 次
    PipelineStage.TESTING: 2,        # 测试最多重试 2 次
    PipelineStage.CODE_REVIEW: 1,    # 代码审查最多重试 1 次
}

ROLLBACK_MAP: dict[PipelineStage, PipelineStage] = {
    PipelineStage.TESTING: PipelineStage.CODING,
    PipelineStage.CODE_REVIEW: PipelineStage.CODING,
}

核心实现 2:Agentic Loop 模式

系统中的每个 AI Agent 均基于同一个 BaseAgent 抽象类,实现了经典的 Agentic Loop 模式。该模式的核心思想是:Agent 自主决定何时完成任务。它可以调用多种工具(读文件、写文件、执行命令),根据工具返回的结果决定下一步行动,直到它认为任务已完成(不再继续调用工具)。

class BaseAgent(ABC):
    def __init__(self, name, client, model, max_turns=20, sandbox=None):
        self.name = name
        self.client = client          # anthropic.AsyncAnthropic
        self.model = model
        self.max_turns = max_turns
        self.sandbox = sandbox

    @abstractmethod
    def system_prompt(self) -> str: ...

    @abstractmethod
    def define_tools(self) -> list[AgentTool]: ...

    async def run(self, task: str, context: dict | None = None) -> dict:
        messages = []
        if context:
            messages.append({"role": "user", "content": self._format_context(context)})
            messages.append({"role": "assistant", "content": "已收到上下文信息,请继续。"})
        messages.append({"role": "user", "content": task})

        tools_param = self._build_tools_param()
        tool_calls_count = 0

        for turn in range(self.max_turns):
            response = await self.client.messages.create(
                model=self.model,
                max_tokens=8096,
                system=self.system_prompt(),
                tools=tools_param,
                messages=messages,
            )
            # 不可变:构建新列表而非 append
            messages = [*messages, {"role": "assistant", "content": response.content}]

            tool_use_blocks = [b for b in response.content if b.type == "tool_use"]
            if not tool_use_blocks:
                # 没有工具调用 = 任务完成
                return {
                    "result": self._extract_text_result(response),
                    "tool_calls_count": tool_calls_count
                }

            # 执行工具调用
            tool_results = []
            for block in tool_use_blocks:
                tool_calls_count += 1
                output = await self.execute_tool(block.name, block.input)
                tool_results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": output,
                })
            messages = [*messages, {"role": "user", "content": tool_results}]

        return {"result": last_text, "warning": f"已达到最大循环次数 {self.max_turns}"}

每个具体的 Agent 只需实现两个方法:

  • system_prompt():定义角色和行为规范
  • define_tools():定义可用工具集

例如,Coding Agent 拥有 write_fileread_filerun_commandsearch_code 等工具;Testing Agent 则具备 run_testsread_test_output 等工具。职责划分非常清晰。

核心实现 3:迭代循环(自动回退机制)

这是让系统从“能跑”升级到“能用”的关键机制。Pipeline Engine 在 TESTING 和 CODE_REVIEW 阶段完成后,会检查结果中是否包含失败信号,一旦发现问题便自动回退到编码阶段。

async def run_stage(self, pipeline_id: str) -> None:
    # ... 执行 Agent ...
    result = await agent.run(task=..., context=...)

    # 编码完成后自动 git commit
    if stage == PipelineStage.CODING:
        await self._auto_commit(pipeline_id)

    # 迭代循环:检查结果,发现问题自动回退
    if stage in (PipelineStage.TESTING, PipelineStage.CODE_REVIEW):
        feedback = self._check_stage_result_for_issues(stage, result)
        if feedback:
            await self._retry_with_feedback(pipeline_id, stage, feedback)
            return

检测策略针对不同阶段有所区分:

  • TESTING:检测 failederrortraceback 等测试失败信号
  • CODE_REVIEW:检测 严重critical安全漏洞must fix 等严重问题关键词

回退时会将失败信息作为上下文传递给 Coding Agent,使其明确“上次哪里出了问题”:

async def _retry_with_feedback(self, pipeline_id, stage, feedback):
    retry_count = await self._get_retry_count(pipeline_id, stage)
    max_retries = RETRY_CONFIG.get(stage, 0)

    if retry_count >= max_retries:
        # 超过重试上限,继续推进(不阻塞流程)
        await self._auto_advance(pipeline_id, stage)
        return

    # 保存反馈到上下文,回退到 CODING
    rollback_target = ROLLBACK_MAP[stage]
    await self.context.sa ve_context(pipeline_id, f"{stage.value}_feedback", feedback)
    await self.advance(pipeline_id, rollback_target)
    await self.run_stage(pipeline_id)  # 立即执行回退后的阶段

实际验证中,一个典型的迭代过程如下:

  1. Coding Agent 写完代码,自动 commit
  2. Testing Agent 跑测试,发现一个断言失败
  3. 引擎检测到失败信号,回退到 CODING
  4. Coding Agent 收到“测试失败:assert response.status_code == 200, got 404”的反馈
  5. 重新修改代码,再次 commit
  6. Testing Agent 再跑,通过

这个过程其实很像人类开发者调试时的流程,只是机器替我们完成了大部分繁琐工作。

核心实现 4:三种人机协作模式

async def create_pipeline(self, project_id, requirement_text, *,
                          run_mode="manual", **kwargs) -> str:
    """
    run_mode:
    - "manual":        所有审核阶段暂停等人确认
    - "trust":         跳过所有审核阶段,全自动
    - "collaborative": AI 自主编码测试,设计方案暂停确认
    """

_auto_advance() 中通过 skip_stages 集合控制:

async def _auto_advance(self, pipeline_id, current_stage):
    run_mode = await self.context.get_context(pipeline_id, "run_mode")

    if run_mode == "trust":
        skip_stages = HUMAN_REVIEW_STAGES  # 跳过所有审核
    elif run_mode == "collaborative":
        skip_stages = {PipelineStage.ANALYSIS_REVIEW, PipelineStage.STAGING_REVIEW}
    else:
        skip_stages = set()  # manual 模式不跳过

    next_stage = self._determine_next_stage(current_stage)
    if next_stage in HUMAN_REVIEW_STAGES and next_stage in skip_stages:
        # 跳过审核,直接推进到下一个执行阶段
        next_stage = self._determine_next_stage(next_stage)
    await self.advance(pipeline_id, next_stage)
    await self.run_stage(pipeline_id)

设计思路其实很直白:信任是逐步建立的。新项目先使用 manual 模式,观察 AI 的输出质量;验证过的场景切换为 collaborative;当完全信任后再用 trust 全自动模式。话说回来,目前大部分人还是倾向于 collaborative 模式,毕竟 AI 写的代码,看一眼心里才踏实。

部署与 Git 分支策略

部署阶段不需要 AI Agent,而是直接执行 Git 操作:

  • deploy_staging:将 feature 分支合并到 test 分支,部署测试环境
  • deploy_production:将 feature 分支合并到 dev 分支,部署生产环境

这里有一个踩坑点:合并前必须清理工作区。Pipeline 运行过程中可能产生未提交的文件(如测试产物等),导致 git checkout 失败。解决方案是合并前自动执行 git stash,这一步千万别遗漏。可以肯定的是,这个坑迟早会踩到,早发现早解决。

事件系统

基于 asyncio.Queue 的轻量级事件总线,支持 SSE 推送到前端:

class EventBus:
    def publish(self, event: Event): ...
    async def subscribe(self, pipeline_id: str) -> AsyncGenerator[Event]: ...

前端通过 GET /api/pipelines/{id}/events 订阅 SSE,实时显示 Pipeline 进度。没有 Redis 依赖,单进程内足够使用,架构足够轻量。

项目数据

指标数值
核心代码量~2000 行 Python
核心模块数18 个核心模块
Pipeline 阶段数量14 个
AI Agent 数量5 个(分析、设计、编码、测试、审查)
单次 Pipeline 耗时10-30 分钟
开发周期3 周(业余时间)
前端框架及页面数React 19,6 个页面

经验总结

有效实践

  1. 状态机是正确的抽象。Pipeline 流程天然适合状态机建模,比 if-else 链清晰得多。可以说,这是整个系统稳定性最重要的支柱。
  2. Agent 职责单一。每个 Agent 只做一件事,system prompt 短而精确,输出质量明显优于“一个 Agent 做所有事”。这一点在实验阶段对比了多个方案,差距非常显著。
  3. 回退是正常流程。将“失败重试”设计为状态机的合法路径,而非异常处理,代码更简洁,逻辑也更透明。
  4. 不可变数据。所有 Pydantic 模型设置 frozen=True,消息列表使用 spreading 而非 append,减少了大量隐蔽 bug。这个习惯值得所有人借鉴。

待改进之处

  1. 测试覆盖不足。核心模块目前零测试覆盖,靠端到端验证兜底,不够稳健。接下来必须补上。
  2. Agent 输出不稳定。同样的输入,不同次运行可能产生不同质量的输出。需要更好的 prompt engineering 或输出校验机制。
  3. 单进程瓶颈。当前无法并发执行多个 Pipeline,需要引入任务队列。Celery 可能是下一个要接入的组件。

下一步计划

  • 补充核心模块单元测试(目标 80% 覆盖率)
  • 优化 Agent prompt,提高输出稳定性
  • 引入 Celery 支持并发 Pipeline
  • 开源本项目
来源:https://juejin.cn/post/7638533972620460058
上一篇GraphQL实战避坑代码案例详解 下一篇AI时代人人必备需求描述工程师能力
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
AI如何从聊天能力进化到做事能力 Skill的实践之路
AI教程 · 2026-07-10

AI如何从聊天能力进化到做事能力 Skill的实践之路

让AI从“会聊天”转向“会做事”的关键在于Skill(技能包)。Skill由可执行代码、精确的说明书(如JSONSchema描述)及结果翻译器构成。通过精细定义参数与边界,AI能稳定调用接口完成重启服务、查询数据等操作,从而从空谈顾问变为可靠的数字员工。

零基础看懂Agent Skill MCP三层关系解读
AI教程 · 2026-07-10

零基础看懂Agent Skill MCP三层关系解读

智能体是自主执行任务的实体,技能是被封装的原子能力,MCP协议是智能体与技能间的标准化通信协议。智能体通过MCP协议发现并调用技能,灵活组合完成复杂任务。三者解耦,实现即插即用,降低了系统集成复杂度。

AI编码时代UI自动化测试智能化演进之路—中国平安人寿蔡雪
AI教程 · 2026-07-10

AI编码时代UI自动化测试智能化演进之路—中国平安人寿蔡雪

AI编码时代,UI自动化测试面临效率断层。平安人寿蔡雪基于自研“女娲”平台,分享从可视化录制到AI智能录制、基于EventDOM的智能感知与自愈机制的演进路径,实现用例创建降本、维护减负、执行提稳,推动测试工具从自动化向智能化升级。

一文讲清Agent、Skill、MCP到底什么关系:零基础小白三层拆解
AI教程 · 2026-07-10

一文讲清Agent、Skill、MCP到底什么关系:零基础小白三层拆解

Agent是自主执行任务的数字打工人,Skill为原子化能力函数,MCP是标准协议接口。Agent通过MCP发现并调用Skill,实现即插即用,解耦技能与智能体,让大模型能力安全、统一、可扩展地集成。

文生图同一提示词为何每次不同?随机性与可复现解析
AI教程 · 2026-07-10

文生图同一提示词为何每次不同?随机性与可复现解析

文生图每次结果不同源于从随机噪声开始去噪。固定种子(seed)可锁定初始噪声,但还需采样步数、引导强度、采样器、尺寸、提示词、模型等参数一致才能复现。通过控制变量法调参,先固定种子再逐一调整其他参数,可精确归因差异。