AI测试用例检查

1. 入口与路由

  • HTTP:POST /api/v1/test-case/check/consistency(在 api.py 里挂到 prefix="/test-case/check")。
  • 实现文件:backend/app/api/v1/endpoints/check.py。
  • 前端:frontend/src/views/test-case/check/index.vue 优先带 ?stream=true 走 SSE 式流式;失败时再 request.upload 到同一路径(不传 stream,相当于非流式)。

2. 三条执行路径(由查询参数决定)

条件 实际做的事
stream=true(页面主路径) StreamingResponse → _check_with_stream:AutoGen 的 AssistantAgent + DeepSeek 客户端,model_client_stream=True,把 chunk 打成 data: {...}\n\n 推给前端。
use_agent=true(前端默认不传,一般为 false) _check_with_agent:试图用 agent_factory.create_agent(AgentTypes.TEST_CASE_CHECKER) 创建 TestCaseCheckerAgent,并往 SingleThreadedAgentRuntime 上 register_agent。当前代码里 若运行时不存在 register_agent会直接降级 到下面的「旧方法」。
默认(stream=false 且 use_agent=false) _check_with_legacy_method:同样是 AssistantAgent + DeepSeek,on_messages 一次性拿完整回复再解析 JSON。

因此:日常从页面点「检查」时,主要是流式路径;兜底是非流式的「直接 LLM」路径。
TestCaseCheckerAgent 只有在显式 use_agent=true 且运行时支持 register_agent 时才会真正跑通;否则会在 check.py 里降级到 _check_with_legacy_method。


3. 用了哪个「智能体」

  • 名义上的业务智能体:TestCaseCheckerAgent(backend/app/agents/test_case/test_case_checker_agent.py),在工厂里注册为 AgentTypes.TEST_CASE_CHECKER(app/agents/factory.py)。
  • 实际承担推理的组件(流式 / 非流式主路径):都是 AutoGen AssistantAgent,名字在代码里写死为 "consistency_checker",并不是多智能体编排,而是 单助手 + 一次大模型调用。
  • TestCaseCheckerAgent 内部:若被调用,会通过 BaseAgent 发进度/流式片段,核心对比仍是对 get_deepseek_model_client() 做 create_stream,再本地拼 JSON 解析。

4. 调用了哪些模块(按数据流)

  1. 上传与解析(CPU 密集丢线程池):app.utils.file_parser --- parse_docx、parse_pdf、parse_xmind、extract_text_from_xmind。
  2. 消息模型(仅智能体路径):TestCaseCheckRequest / TestCaseCheckResponse 等 --- app.core.messages.test_case。
  3. 工厂(仅 use_agent 路径):agent_factory --- app.agents.factory;create_agent 对非图类智能体默认会注入 get_deepseek_model_client()。
  4. 流收集(仅 use_agent 路径):StreamResponseCollector --- app.core.agents.collector。
  5. 大模型:get_deepseek_model_client --- app.core.llms(基于 autogen_ext.models.openai.OpenAIChatCompletionClient)。
  6. AutoGen:AssistantAgent、TextMessage、CancellationToken;流式路径还用 ModelClientStreamingChunkEvent;智能体路径用 SingleThreadedAgentRuntime、TopicId、TopicTypes 等。

5. 用的是什么大模型

  • 提供商 / 协议:DeepSeek 的 OpenAI 兼容接口(DEEPSEEK_BASE_URL,默认 https://api.deepseek.com/v1)。
  • 模型名:配置为 deepseek-chat(见 get_deepseek_model_client)。
  • 密钥:仅 DEEPSEEK_API_KEY(与你在项目里「只用 DeepSeek」的设定一致)。
  • 超时:用例检查里常量 CHECK_LLM_TIMEOUT = 420秒(7 分钟) 传给 get_deepseek_model_client;智能体路径若走通,还有 asyncio.wait_for(..., 60) 等待最终回调的上限(与 LLM 7 分钟是不同层)。

6. 内容截断

  • 流式 / legacy:CHECK_CONTENT_LIMIT = 35000 字符,PRD 与用例各截断后再拼进 prompt。
  • TestCaseCheckerAgent:内部 max_content_length 为 50000(若智能体路径生效,截断策略与上面两条略有不同)。

架构图

"真实生效"的主链路是 前端 stream=true → 后端 _check_with_stream → AssistantAgent → DeepSeek(deepseek-chat) → SSE 回前端。

相关推荐
十铭忘2 分钟前
Orin新系统常用软件安装教程
人工智能
云和恩墨16 分钟前
Mopheus Runtime深度剖析:如何将Provider CLI变成企业级智能体运行时
人工智能
X54先生(人文科技)18 分钟前
百度智能对 X54 先生学科底色评估
人工智能·深度学习·百度·架构
LaughingZhu19 分钟前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion
西瓜拿铁好喝25 分钟前
AI 办公和 RPA 不是一回事:自动化与智能化的分工
人工智能·自动化·rpa
Margrop25 分钟前
下载错一个包,服务器直接崩了?别再让 x64 与 ARM64 搞崩你的环境!小学生都能懂的 CPU 架构大比方与跨三大系统(Linux/macOS/Win)一键秒级识别指南(附全自动检测脚本与避坑秘籍)
人工智能
_冷眸_26 分钟前
Python 调用大模型 API:最小请求、Base URL 和 401/404 排查
开发语言·人工智能·python
Raas10028 分钟前
AI网关怎么部署?MAI Gateway部署实操教程
人工智能·开源·gateway·mai gateway·企业级ai产品
alonglong33 分钟前
本地把 Chrome 会话复用跑通:cookie 解密 + Playwright 注入的工程实录
人工智能
摩羯123034 分钟前
AI署名论文场景下,引用存在性校验如何支撑学术科研诚信
人工智能·aigc