STLC × CI/CD · 多智能体系统

会写测试、会自愈、也懂得等你拍板的发版智能体。

智能自动化测试与自愈发版智能体,是一套面向软件测试生命周期(STLC)与 CI/CD 自愈流水线的多智能体系统。它自动分析目标模块、生成 Pytest 测试,捕获异常后检索本地研发规范并自动重写代码,直到测试全部通过,最后在严格的人机协同关卡等待你的确认。

STLC
全流程覆盖
RAG
本地规范检索
[Y/N]
人工审批关卡
可恢复检查点
01 · Overview

项目简介

这是一套先进的多智能体系统,把测试工程师的日常拆解为可编排的节点:分析需求、设计用例、执行测试、定位失败、修补代码、再回到测试。

它围绕软件测试生命周期(STLC)构建,并把自愈能力嵌入 CI/CD 流水线。当一段代码无法通过测试时,系统不会止步于报错,而是检索本地的架构与研发规范,推断正确契约,自动重写实现,循环往复直到测试转绿,最后才把改动交给人类把关。

STLC 全流程CI/CD 自愈多智能体编排本地 RAG 规范
自愈状态机 · LangGraph 循环
02 · Capabilities

核心功能

Automated Test Suite Generation

自动化测试生成

智能体自动分析目标模块的接口与边界,按 STLC 设计用例,并写出结构清晰的 Pytest 测试套件,覆盖空输入、边界值与异常路径。

  • 分析目标模块
  • 设计边界用例
  • 生成 Pytest 套件
Autonomous Self-Healing Loop

自主异常自愈

捕获测试抛出的异常后,触发本地 RAG 检索架构与研发规范,据此推断修复方案并自动重写代码,循环重跑,直到测试全部通过。

  • 捕获异常堆栈
  • 检索研发规范
  • 自动重写代码
Human-in-the-Loop Approval

人机协同审批

实现严格的审批关卡:在推送代码或提交 PR 之前,必须由人工确认 [Y/N]。拒绝则带着上下文退回自愈循环,批准才放行。

  • 严格 [Y/N] 关卡
  • 推送前必须确认
  • 拒绝退回重做
03 · Stack

技术栈

  • LangGraph状态机编排

    管理循环式状态机,把「运行测试 ↔ 自愈修复」建模为带条件边的图,并通过检查点实现可中断、可恢复的执行。

  • FastMCP标准化工具接口

    以标准协议暴露安全的沙箱工具(run_command、read_file、write_file),智能体经由类型化调用与系统交互,不直接触碰宿主机。

  • LangChain & FAISS本地向量检索

    用本地向量数据库存储并检索编码规范与架构标准(STLC、边界分析、PEP 8、除零检查),为自愈提供明确依据。

  • Pytest & Python核心开发与运行时

    Python 3.10+ 作为运行环境,Pytest 作为测试框架,测试结果与堆栈是驱动整个自愈循环的信号源。

04 · Advanced RAG

高级 RAG 架构

检索质量决定自愈质量。这里把简单的向量检索升级为一条可评估的流水线:混合检索保证召回,重排保证精度,三元评估在喂给 LLM 之前把关,确保上下文既相关又可信。

RAG Pipeline
查询失败堆栈
混合检索FAISS + BM25
重排Cross-Encoder
评估RAG 三元
上下文高置信度
Hybrid Search

混合检索

把向量相似度(FAISS)与关键词匹配(BM25)按权重融合:向量召回语义近邻,BM25 兜住精确术语,两者互补以保证零样本(zero-shot)准确率。

Reranking

混合重排

用交叉编码器(Cross-Encoder)对混合检索的候选做精排。它同时编码「查询 + 候选」,比双塔召回更精准,把最相关的上下文排到最前。

RAG Triad

RAG 三元评估

在注入 LLM 前度量上下文相关性、接地性与答案相关性三项分数,任一不达阈值就收紧上下文,从源头消除幻觉。

RAG 三元评估分数

评估通过
  • 上下文相关性Context Relevance · 检索到的内容是否切题0.92
  • 接地性Groundedness · 答案是否完全由上下文支撑0.88
  • 答案相关性Answer Relevance · 答案是否真正回答了问题0.90

三项分数均需达到 0.7 阈值,否则收紧上下文,只保留最可信的一条,从源头消除幻觉。

rag_engine.py · AdvancedRAGEngine
class AdvancedRAGEngine:
    """查询 -> 混合检索 -> 重排 -> RAG 三元评估 -> 上下文"""

    def retrieve(self, query: str, k: int = 2) -> list[str]:
        # 1. 混合检索:FAISS 向量召回 + BM25 关键词兜底
        candidates = self.hybrid_search(query, k=4)
        # 2. 交叉编码器对候选精排,最大化相关性
        reranked = self.rerank(query, candidates, top_n=k)
        # 3. RAG 三元评估:注入前度量质量,消除幻觉
        triad = self.evaluate(query, reranked)
        if not triad.passed:          # 任一分数 < 0.7 则收紧上下文
            reranked = reranked[:1]
        return [c.text for c in reranked]
05 · Setup

部署指南

环境准备

需要 Python 3.10 及以上版本。建议先创建虚拟环境,再通过 requirements.txt 安装依赖,并配置模型 API 密钥。

  • Python 3.10+ 运行环境
  • 虚拟环境隔离依赖
  • pip 安装 requirements.txt
  • 配置 OPENAI_API_KEY
下载源码压缩包
bash · 环境准备
$ python -m venv .venv$ source .venv/bin/activate# 安装全部依赖$ pip install -r requirements.txt# 配置模型密钥$ export OPENAI_API_KEY="sk-..."
06 · Run

运行指南

STEP 1

启动 MCP 服务

运行 mcp_server.py,启动 FastMCP 沙箱工具集(run_command、read_file、write_file),所有命令都在隔离环境中执行。

$ python mcp_server.py
STEP 2

运行主演示程序

运行 main.py,连接沙箱工具、构建 RAG 检索库、编译 LangGraph 状态图,并启动 LangGraph + RAG 的自动化修复循环。

$ python main.py

演示流程:从一个缺陷到一次审批

  1. 01

    模拟缺陷

    演示从带边界缺陷的 process_data 开始:对空列表会触发 ZeroDivisionError。

  2. 02

    检索规范

    捕获异常后,系统检索边界值分析与除零检查规范,作为修复依据。

  3. 03

    自动自愈

    把空列表的平均值定义为 0.0,写回修复后的代码并重跑,直到测试转绿。

  4. 04

    等待 HIL 确认

    测试通过后,控制台提示 [Y/N],等待人工确认是否提交 PR。

测试已通过。是否批准并提交该 PR? [Y/N]
07 · Logs

ReAct 推理日志

每一步推理都以「思考 / 行动 / 观察」三段式打印到控制台,让智能体的决策过程一眼可见。

这种 ReAct(Reasoning + Acting)风格的结构化日志,把「为什么这么做、调用了什么工具、看到了什么结果」清晰地分层呈现。你不再只看到最终结果,而是能跟随智能体一起推理,快速定位它在哪一步做出了关键判断。

  • 思考智能体当前的推理与意图
  • 行动调用的 MCP 工具及参数
  • 观察工具返回的结果与状态
python main.py · ReAct 日志
[步骤 01]节点:编写测试与代码
思考分析任务需求,先写出表达需求的测试,再写出预期能通过的实现。
行动write_file(process.py)
行动write_file(test_process.py)
观察已写入源码与测试,准备运行。
[步骤 02]节点:运行测试
思考在隔离沙箱中运行 pytest,根据退出码判断成败。
行动run_command(pytest test_process.py -q)
观察测试失败,process_data([]) 触发 ZeroDivisionError。
[步骤 03]节点:检索 RAG 指南
思考根据失败堆栈检索最相关的研发规范,作为修复依据。
行动rag.retrieve(last_error)
观察检索到 2 条指南:边界值分析 / 除零检查。
[步骤 04]节点:自愈修复
思考空列表没有平均值,把结果定义为 0.0 而不是崩溃,重写实现。
行动write_file(process.py)
观察已写回加了边界保护的版本,回到运行测试。
[步骤 05]节点:运行测试
行动run_command(pytest test_process.py -q)
观察测试全部通过,空列表返回 0.0。
[步骤 06]节点:人机协同审批
思考测试已通过,进入严格的人工关卡,等待用户确认 [Y/N]。
$测试已通过。是否批准并提交该 PR? [Y/N]