02 — CASE STUDY
油训智安——油气储运教学实训与岗位技能智能体系统
Oil Training Agent System
作为项目负责人主导设计的油气储运教学实训智能体系统,基于 FastAPI + Vue3 前后端分离架构与自研 FSM 工作流引擎,实现从意图识别、RAG 检索重排到引用核验的完整问答链路。
- 角色
- 项目负责人
- 时间
- 2026.07 – 2026.08
- 方向
- LLM Application / RAG Engineering / Backend Architecture
- 类型
- 研究生项目经历
7 环节问答链路
416 自动化测试
2核2G 离线部署上线
问题:教学实训需要一个”可管、可问、可信”的智能体
油气储运教学实训场景中,学员岗位技能训练需要一个能回答专业规程问题、引导补学、并严格按标准作答的智能体。它不是简单的”套壳问答”:答案必须可溯源(引用核验)、流程必须可编排(工作流引擎)、部署必须可在内网离线环境落地。
自研 FSM 工作流引擎:问答链路的骨架
不同于把 LLM 直接暴露给用户,系统用自研有限状态机工作流引擎编排整条问答链路:
- 1
意图识别
识别用户问题类型,路由到对应处理分支
- 2
输入守卫
拦截 Prompt 注入与危险输入
- 3
查询改写
对用户查询进行改写优化,提升检索质量
- 4
RAG 检索重排
向量检索 + 重排序,产出候选证据
- 5
LLM 生成
基于候选证据生成答案,支持 SSE 流式输出
- 6
引用核验
对答案中的引用做二次核验
- 7
输出守卫
过滤编造标准编号等不合规输出
状态机让每个环节的边界清晰可测——守卫规则可以独立迭代,不会牵连生成逻辑;新增一个处理环节只需要注册状态和转移规则。
RAG 全链路:从文档到可溯源答案
搭建覆盖”解析→切分→向量化→检索→重排→核验”的完整管线:
- 文档解析与切分:PDF / DOCX 解析(表格转 Markdown),按章节条款结构化切分,保留”第 X 条”这类条款引用锚点;
- 向量化与检索:text-embedding-v3 向量化,Qdrant 检索 top20,重排后取 top5 进入生成环节;
- 引用核验:以 LLM 结构化输出对答案引用做二次核验,无来源不输出,有效抑制模型编造标准编号与虚构规程。
top20 top5 top20 提升到 top5 Qdrant 检索 + 重排
无来源不输出 引用核验策略
LLM 工程化:多模型网关与安全守卫
- 多 Provider 模型网关:通义千问 / 讯飞星火 / Mock 降级三级接入,支持运行时切换——内网环境不可用外网模型时自动降级,保证系统可用性;
- 规则化安全守卫:拦截 Prompt 注入、危险设备指令、编造标准编号,规则独立于生成逻辑,可审计可迭代;
- 能力画像与自适应补学:基于 EMA 加权更新学员六维能力画像,驱动”薄弱知识点→补学资源”的闭环,让系统不只是问答,而是教学工具。
工程交付:在小服务器上跑起来的完整系统
59 张 数据库表
5 个 Docker Compose 服务
416 个 自动化测试
ruff 零告警 代码质量
完成 Docker Compose 五服务编排(后端 / 前端 / 数据库 / 向量库 / 网关),在 2 核 2G 服务器上完成离线部署上线。416 个自动化测试覆盖工作流状态转移、守卫规则与 RAG 管线,保证链路改动不引入回归。
经验与反思
- 工作流引擎的价值在”边界”,不在”功能”。 状态机拆开后,每个环节可以独立测试、独立替换,这是 416 个测试能真正挡住回归的前提。
- “无来源不输出”比”输出更流畅”重要。 教学场景对错误的容忍度远低于通用问答,宁可让模型说”资料中未找到”,也不能编造标准编号。
- 2 核 2G 是真实约束,不是玩笑。 离线部署倒逼每个组件做减法:Qdrant 用小内存模式、LLM 走远程 API 而非本地推理、SSE 流式输出降低首字延迟。
技术栈
- Python
- FastAPI
- Vue3
- PostgreSQL
- SQLAlchemy
- Qdrant
- text-embedding-v3
- Qwen
- 讯飞星火
- Docker Compose
- SSE
- FSM