ai-robot-core/spec/ai-service/requirements.md

44 KiB
Raw Permalink Blame History

feature_id title status version owners last_updated source
AISVC Python AI 中台ai-service需求规范 in-progress 0.6.0
product
backend
2026-02-25
type ref
conversation

Python AI 中台ai-service需求规范AISVC

1. 背景与目标

1.1 背景

主框架Java需要通过统一的 HTTP 接口调用 Python AI 中台完成对话回复生成,并支持:

  • 多租户隔离tenant 一套知识库/索引、会话与元数据隔离)。
  • 流式输出Java → Python 主通道采用 SSE
  • RAG 检索增强(检索命中/不中均有明确兜底逻辑与置信度策略)。
  • AI 侧上下文与记忆管理Java 侧仅传 sessionId + metadatahistory 可选)。

1.2 目标

  • 提供稳定的 Provider API至少对齐 java/openapi.deps.yaml/ai/chat/ai/health 的契约需求)。
  • 在 MVP 期实现可用的对话能力 + 可控的上下文/记忆 + 基础 RAG。
  • 预留 GraphRAG/HybridRAG 扩展口(非 MVP 必须项,但接口与模块边界需支持可插拔)。

1.3 非目标Out of Scope

  • 主框架侧的降级策略与超时处理的业务编排实现(由 Java 侧完成AI 中台只需返回明确错误语义,便于上游处理)。
  • 知识图谱构建与 GraphRAG/HybridRAG 的具体算法实现(仅预留扩展点)。
  • 渠道接入、用户身份体系、工单/坐席系统等业务系统实现。

2. 模块边界Scope

2.1 覆盖

  • 对话生成服务:支持 non-streaming JSON 与 streaming SSE。
  • 多租户隔离:知识库(检索范围)、会话历史、元数据读写隔离。
  • 上下文管理:基于 sessionId 的会话持久化与加载;支持可选 history
  • 基础 RAG检索、拼装上下文、生成与置信度/转人工建议。

2.2 不覆盖

  • 业务侧路由、工单流转与最终转人工执行。
  • Java 侧调用超时与降级策略的实现细节。

3. 依赖盘点Dependencies

3.1 调用方依赖Consumer

  • Java 主框架调用 AI 中台:依赖契约见 java/openapi.deps.yaml

3.2 AI 中台内部可能依赖(实现阶段确定,规范阶段仅声明)

  • 向量库Qdrant 或 Milvus二选一
  • 会话存储PostgreSQL 或 MySQL。
  • 缓存可选Redis。
  • LLM 提供方可插拔OpenAI / 兼容 OpenAI 的网关 / 本地模型。

4. 术语与约定Definitions

  • tenantId:租户标识,用于隔离知识库、会话与元数据。必须贯穿请求与存储分区。
  • sessionId:会话标识,用于定位同一会话下的对话记忆。
  • history调用方提供的历史消息列表可选。AI 中台可结合 AI 侧持久化会话一起构建上下文。
  • SSEServer-Sent EventsHTTP 单向流式推送(text/event-stream)。

5. 用户故事User Stories

  • [US-AISVC-01] 作为 Java 主框架,我希望通过统一 HTTP 接口调用 AI 中台生成回复,以便对外提供智能对话能力。
  • [US-AISVC-02] 作为平台运营者,我希望不同租户的数据严格隔离,以便满足多租户安全与合规要求。
  • [US-AISVC-03] 作为终端用户,我希望 AI 回复可以流式呈现,以便更快看到内容并提升交互体验。
  • [US-AISVC-04] 作为终端用户,我希望 AI 能结合知识库检索回答问题,并在检索不足时有稳健兜底,以便减少"胡编"。
  • [US-AISVC-05] 作为系统维护者,我希望 AI 中台可被健康检查探测,以便稳定运维。

6. 验收标准Acceptance Criteria, EARS

说明:

  • Java 侧既有验收标准以 AC-MCA-* 表示(来自依赖契约描述);本模块新增以 AC-AISVC-* 表示。
  • 本模块的 Provider API 必须对齐 java/openapi.deps.yaml 中的 /ai/chat/ai/health 约束。

6.1 对齐 Java 契约:/ai/chatHTTP POST + Response Schema

  • [AC-AISVC-01] WHEN Java 主框架通过 HTTP POST /ai/chat 发送包含 sessionIdcurrentMessagechannelType 的请求 THEN AI 中台 SHALL 返回 200 并给出业务回复结果(兼容 non-streaming JSON

    • 对齐AC-MCA-04HTTP POST 调用)。
  • [AC-AISVC-02] WHEN AI 中台成功生成回复 THEN 响应体non-streaming SHALL 至少包含 replyconfidenceshouldTransfer 字段,且字段类型与语义满足 Java 依赖契约。

    • 对齐AC-MCA-05Response Schema
  • [AC-AISVC-03] WHEN 请求参数缺失或格式非法 THEN AI 中台 SHALL 返回 400 且返回结构化错误(至少包含 codemessage)。

  • [AC-AISVC-04] WHEN AI 中台发生未预期内部错误 THEN AI 中台 SHALL 返回 500 且返回结构化错误(至少包含 codemessage)。

  • [AC-AISVC-05] WHEN AI 中台暂不可用(例如依赖 LLM/向量库不可用导致无法服务) THEN AI 中台 SHALL 返回 503 且返回结构化错误(至少包含 codemessage)。

6.2 SSE 流式输出(主通道)

  • [AC-AISVC-06] WHEN 调用方以流式方式调用 POST /ai/chat(例如通过 Accept: text/event-streamstream=true 参数) THEN AI 中台 SHALL 以 SSE 推送事件流,直到生成结束或发生错误。

  • [AC-AISVC-07] WHEN AI 中台产生可增量输出的回复内容 THEN AI 中台 SHALL 多次发送 event: message 事件每次携带本次增量文本delta以便调用方逐步渲染。

    • 返回时机:模型生成过程中持续发送。
  • [AC-AISVC-08] WHEN AI 中台完成本次生成(正常结束) THEN AI 中台 SHALL 发送一次 event: final 事件,携带最终结构化结果,且其字段集合至少包含 replyconfidenceshouldTransfer(与 non-streaming 响应同构)。

    • 返回时机:生成完成后立即发送,并随后关闭 SSE 连接(或发送结束标记后关闭)。
  • [AC-AISVC-09] WHEN 处理过程中发生可判定错误(参数错误/内部错误/依赖不可用等) THEN AI 中台 SHALL 发送 event: error 事件,携带结构化错误(至少 codemessage,可含 details),并终止事件流。

    • 返回时机:错误发生后立即发送,并关闭连接。

6.3 多租户隔离tenantId

  • [AC-AISVC-10] WHEN 请求的 metadata 中包含 tenantId THEN AI 中台 SHALL 将 tenantId 作为一级隔离维度贯穿:知识库检索范围、会话读写、元数据读写均必须在该 tenantId 分区内进行。

  • [AC-AISVC-11] WHEN 不同 tenantId 的请求使用相同 sessionId THEN AI 中台 SHALL 视为两个互相隔离的会话空间,禁止跨租户读取/写入对话历史与记忆。

  • [AC-AISVC-12] WHEN 请求缺失 tenantId(或 tenantId 非法/空) THEN AI 中台 SHALL 按契约返回 400参数错误并在错误中明确缺失字段。

6.4 上下文管理sessionId 持久化history 可选)

  • [AC-AISVC-13] WHEN AI 中台收到 sessionId THEN AI 中台 SHALL 在服务端持久化该会话的对话记录与必要的摘要/记忆,并可在后续同一 tenantId + sessionId 请求中加载用于上下文构建。

  • [AC-AISVC-14] WHEN Java 调用方未提供 history THEN AI 中台 SHALL 仅基于服务端持久化会话历史(若存在)与本次 currentMessage 构建上下文完成生成。

  • [AC-AISVC-15] WHEN Java 调用方提供了 history THEN AI 中台 SHALL 将其作为"外部补充历史"参与上下文构建,并以确定性的去重/合并规则避免与服务端历史冲突(规则在 design.md 明确)。

6.5 RAG 检索(命中/不中的兜底与置信度阈值)

  • [AC-AISVC-16] WHEN 请求触发知识库检索RAG THEN AI 中台 SHALL 在 tenantId 对应的知识库范围内进行检索,并将检索结果用于回答生成。

  • [AC-AISVC-17] WHEN 检索结果为空或低质量(定义为:未达到最小命中文档数或相关度阈值,阈值在配置中可调整) THEN AI 中台 SHALL 执行兜底逻辑:

    1. 生成"基于通用知识/无法从知识库确认"的稳健回复(避免编造具体事实),并
    2. 下调 confidence,并
    3. 视阈值策略可将 shouldTransfer=true(例如用户强诉求或关键信息缺失)。
  • [AC-AISVC-18] WHEN 生成完成后计算得到的 confidence 低于阈值 T_low THEN AI 中台 SHALL 将 shouldTransfer 置为 true 或提供 transferReason,以便上游决定是否转人工。

    • 说明:阈值 T_low 为可配置MVP 可先采用经验值并在 design.md 中定义默认值与可配置项。
  • [AC-AISVC-19] WHEN 检索命中且证据充分(达到相关度与覆盖度阈值) THEN AI 中台 SHALL 提升 confidence(相对兜底场景)并优先基于检索证据回答;如回答包含事实性结论,应以检索证据为主。

6.6 健康检查

  • [AC-AISVC-20] WHEN 调用方请求 GET /ai/health THEN AI 中台 SHALL 在健康时返回 200 且包含可解析的 status 字段;在不健康时返回 503。

7. 需求追踪映射Traceability

说明:本表用于把验收标准映射到 Provider 端点(以及未来的 operationId。 在下一步生成 openapi.provider.yaml 时,应保证:

  • /ai/chat 的 non-streaming 响应 schema 对齐 Java depsreply/confidence/shouldTransfer
  • streaming SSE 的事件模型在 provider 契约中明确(可作为 text/event-stream 响应体描述)。
AC ID 对齐外部 AC Endpoint 方法 operationId 备注
AC-AISVC-01 AC-MCA-04 /ai/chat POST generateReply HTTP POST 调用对齐 Java deps
AC-AISVC-02 AC-MCA-05 /ai/chat POST generateReply non-streaming 响应字段对齐reply/confidence/shouldTransfer
AC-AISVC-03 /ai/chat POST generateReply 400 参数错误 + ErrorResponse
AC-AISVC-04 /ai/chat POST generateReply 500 内部错误
AC-AISVC-05 /ai/chat POST generateReply 503 不可用
AC-AISVC-06 /ai/chat POST generateReplyStream SSE 入口(同路径不同协商方式)
AC-AISVC-07 /ai/chat POST generateReplyStream event: message
AC-AISVC-08 /ai/chat POST generateReplyStream event: final
AC-AISVC-09 /ai/chat POST generateReplyStream event: error
AC-AISVC-10 /ai/chat POST generateReply tenantId 贯穿隔离
AC-AISVC-11 /ai/chat POST generateReply tenantId + sessionId 组合隔离
AC-AISVC-12 /ai/chat POST generateReply 缺 tenantId 返回 400本模块约束
AC-AISVC-13 /ai/chat POST generateReply session 持久化
AC-AISVC-14 /ai/chat POST generateReply history 可选
AC-AISVC-15 /ai/chat POST generateReply history 合并规则design 明确)
AC-AISVC-16 /ai/chat POST generateReply RAG 检索
AC-AISVC-17 /ai/chat POST generateReply 检索不中兜底 + 下调置信度
AC-AISVC-18 /ai/chat POST generateReply 置信度阈值触发 shouldTransfer
AC-AISVC-19 /ai/chat POST generateReply 证据充分提升 confidence
AC-AISVC-20 /ai/health GET healthCheck 健康检查对齐 deps

8. 约束与待澄清Open Questions

  • tenantId 的承载方式:本规范要求在请求 metadata.tenantId 中提供;后续 openapi.provider.yaml 需将其提升为明确字段(是否提升为顶层字段需评审)。
  • streaming 协商方式:Accept: text/event-stream vs stream=true 参数;下一阶段在 provider OpenAPI 中确定主方案。
  • confidence 计算方式与默认阈值MVP 先给默认值与可配置项,后续可基于日志/评测迭代。
  • shouldTransfer 的策略AI 中台提供"建议",最终转人工编排由上游业务实现。

9. 迭代需求前后端联调真实对接v0.2.0

说明:本节为 v0.2.0 迭代新增,用于支持 ai-service-admin 前端与后端的真实对接,替换原有 Mock 实现。

9.1 知识库管理真实对接

  • [AC-AISVC-21] WHEN 前端通过 POST /admin/kb/documents 上传文档 THEN AI 中台 SHALL 将文档存储到本地文件系统,创建 Document 实体记录,并返回 jobId 用于追踪索引任务。

  • [AC-AISVC-22] WHEN 文档上传成功后 THEN AI 中台 SHALL 异步启动索引任务,将文档内容分块并向量化存储到 Qdrant按 tenantId 隔离 Collection

  • [AC-AISVC-23] WHEN 前端通过 GET /admin/kb/documents 查询文档列表 THEN AI 中台 SHALL 从 PostgreSQL 数据库查询 Document 实体,支持按 kbId、status 过滤和分页。

  • [AC-AISVC-24] WHEN 前端通过 GET /admin/kb/index/jobs/{jobId} 查询索引任务状态 THEN AI 中台 SHALL 返回任务状态pending/processing/completed/failed、进度百分比及错误信息。

9.2 RAG 实验室真实对接

  • [AC-AISVC-25] WHEN 前端通过 POST /admin/rag/experiments/run 触发 RAG 实验 THEN AI 中台 SHALL 调用 VectorRetriever 进行真实向量检索返回检索结果列表content、score、source及最终拼接的 Prompt。

  • [AC-AISVC-26] WHEN RAG 实验检索失败(如 Qdrant 不可用THEN AI 中台 SHALL 返回 fallback 结果而非抛出异常,确保前端可正常展示。

9.3 会话监控真实对接

  • [AC-AISVC-27] WHEN 前端通过 GET /admin/sessions 查询会话列表 THEN AI 中台 SHALL 从 PostgreSQL 数据库查询 ChatSession 实体,支持按 status、时间范围过滤和分页并关联统计消息数量。

  • [AC-AISVC-28] WHEN 前端通过 GET /admin/sessions/{sessionId} 查询会话详情 THEN AI 中台 SHALL 返回该会话的所有消息记录及追踪信息trace

9.4 需求追踪映射(迭代追加)

AC ID Endpoint 方法 operationId 备注
AC-AISVC-21 /admin/kb/documents POST uploadDocument 文档上传真实存储
AC-AISVC-22 /admin/kb/documents POST uploadDocument 异步索引任务
AC-AISVC-23 /admin/kb/documents GET listDocuments 文档列表真实查询
AC-AISVC-24 /admin/kb/index/jobs/{jobId} GET getIndexJob 索引任务状态查询
AC-AISVC-25 /admin/rag/experiments/run POST runRagExperiment RAG 真实检索
AC-AISVC-26 /admin/rag/experiments/run POST runRagExperiment 检索失败 fallback
AC-AISVC-27 /admin/sessions GET listSessions 会话列表真实查询
AC-AISVC-28 /admin/sessions/{sessionId} GET getSessionDetail 会话详情真实查询

10. 迭代需求嵌入模型可插拔与文档解析支持v0.3.0

说明:本节为 v0.3.0 迭代新增,用于支持嵌入模型的灵活配置与多格式文档解析。

10.1 嵌入模型可插拔设计

  • [AC-AISVC-29] WHEN 系统需要生成文本嵌入向量 THEN 系统 SHALL 通过统一的 EmbeddingProvider 抽象接口调用,支持运行时动态切换不同的嵌入模型实现。

  • [AC-AISVC-30] WHEN 管理员通过配置或界面指定嵌入模型类型(如 ollamaopenailocalTHEN 系统 SHALL 自动加载对应的 EmbeddingProvider 实现,无需修改代码。

  • [AC-AISVC-31] WHEN 管理员通过界面配置嵌入模型参数(如 API 地址、模型名称、维度等THEN 系统 SHALL 动态应用配置,支持热更新(无需重启服务)。

  • [AC-AISVC-32] WHEN 嵌入模型调用失败 THEN 系统 SHALL 返回明确的错误信息,并支持配置 fallback 策略(如降级到备用模型或返回错误)。

10.2 文档解析服务

  • [AC-AISVC-33] WHEN 用户上传 PDF 格式文档 THEN 系统 SHALL 使用文档解析服务提取纯文本内容,用于后续分块和向量化。

  • [AC-AISVC-34] WHEN 用户上传 Word.docx格式文档 THEN 系统 SHALL 使用文档解析服务提取纯文本内容,保留段落结构。

  • [AC-AISVC-35] WHEN 用户上传 Excel.xlsx格式文档 THEN 系统 SHALL 使用文档解析服务提取表格内容,转换为结构化文本格式。

  • [AC-AISVC-36] WHEN 文档解析失败如文件损坏、格式不支持THEN 系统 SHALL 返回明确的错误信息,并标记文档索引任务为 failed 状态。

  • [AC-AISVC-37] WHEN 用户上传不支持的文件格式 THEN 系统 SHALL 在上传阶段拒绝并返回 400 错误,提示支持的格式列表。

10.3 嵌入模型管理 API

  • [AC-AISVC-38] WHEN 前端通过 GET /admin/embedding/providers 查询可用的嵌入模型提供者 THEN 系统 SHALL 返回所有已注册的提供者列表及其配置参数定义。

  • [AC-AISVC-39] WHEN 前端通过 GET /admin/embedding/config 查询当前嵌入模型配置 THEN 系统 SHALL 返回当前激活的提供者及其参数配置。

  • [AC-AISVC-40] WHEN 前端通过 PUT /admin/embedding/config 更新嵌入模型配置 THEN 系统 SHALL 验证配置有效性,更新配置并返回成功状态。

  • [AC-AISVC-41] WHEN 前端通过 POST /admin/embedding/test 测试嵌入模型连接 THEN 系统 SHALL 调用嵌入模型生成测试向量,返回连接状态和向量维度信息。

10.4 需求追踪映射(迭代追加)

AC ID Endpoint 方法 operationId 备注
AC-AISVC-29 - - - EmbeddingProvider 抽象接口设计
AC-AISVC-30 - - - 工厂模式动态加载
AC-AISVC-31 /admin/embedding/config PUT updateEmbeddingConfig 配置热更新
AC-AISVC-32 - - - 错误处理与 fallback
AC-AISVC-33 /admin/kb/documents POST uploadDocument PDF 解析支持
AC-AISVC-34 /admin/kb/documents POST uploadDocument Word 解析支持
AC-AISVC-35 /admin/kb/documents POST uploadDocument Excel 解析支持
AC-AISVC-36 /admin/kb/documents POST uploadDocument 解析失败处理
AC-AISVC-37 /admin/kb/documents POST uploadDocument 格式校验
AC-AISVC-38 /admin/embedding/providers GET listEmbeddingProviders 提供者列表
AC-AISVC-39 /admin/embedding/config GET getEmbeddingConfig 当前配置查询
AC-AISVC-40 /admin/embedding/config PUT updateEmbeddingConfig 配置更新
AC-AISVC-41 /admin/embedding/test POST testEmbedding 连接测试

11. 迭代需求LLM 模型配置与 RAG 调试输出v0.4.0

说明:本节为 v0.4.0 迭代新增,用于支持 LLM 模型的界面配置及 RAG 实验室的 AI 输出调试。

11.1 LLM 模型配置管理

  • [AC-AISVC-42] WHEN 前端通过 GET /admin/llm/providers 获取 LLM 提供者列表 THEN 系统 SHALL 返回所有支持的 LLM 提供者及其配置参数定义。

  • [AC-AISVC-43] WHEN 前端通过 GET /admin/llm/config 获取当前 LLM 配置 THEN 系统 SHALL 返回当前激活的 LLM 提供者及其配置参数(敏感字段脱敏)。

  • [AC-AISVC-44] WHEN 前端通过 PUT /admin/llm/config 更新 LLM 配置 THEN 系统 SHALL 验证配置有效性,更新配置并立即生效。

  • [AC-AISVC-45] WHEN 前端通过 POST /admin/llm/test 测试 LLM 连接 THEN 系统 SHALL 调用 LLM 生成测试回复返回响应内容、Token 消耗和延迟统计。

  • [AC-AISVC-46] WHEN LLM 连接测试失败 THEN 系统 SHALL 返回详细错误信息,帮助用户排查配置问题。

11.2 RAG 实验室 AI 输出增强

  • [AC-AISVC-47] WHEN 前端通过 POST /admin/rag/experiments/run 运行 RAG 实验 THEN 系统 SHALL 返回检索结果、最终 Prompt 和 AI 回复。

  • [AC-AISVC-48] WHEN 前端通过 POST /admin/rag/experiments/stream 运行 RAG 实验 THEN 系统 SHALL 以 SSE 流式输出 AI 回复。

  • [AC-AISVC-49] WHEN RAG 实验生成 AI 回复 THEN 系统 SHALL 返回 Token 消耗统计和响应耗时。

  • [AC-AISVC-50] WHEN RAG 实验请求指定 llm_provider THEN 系统 SHALL 使用指定的 LLM 提供者生成回复。

11.3 追踪映射v0.4.0 迭代)

AC ID Endpoint 方法 Operation 描述
AC-AISVC-42 /admin/llm/providers GET listLLMProviders LLM 提供者列表
AC-AISVC-43 /admin/llm/config GET getLLMConfig 当前 LLM 配置查询
AC-AISVC-44 /admin/llm/config PUT updateLLMConfig LLM 配置更新
AC-AISVC-45 /admin/llm/test POST testLLM LLM 连接测试
AC-AISVC-46 /admin/llm/test POST testLLM LLM 测试失败处理
AC-AISVC-47 /admin/rag/experiments/run POST runRagExperiment RAG 实验含 AI 输出
AC-AISVC-48 /admin/rag/experiments/stream POST runRagExperimentStream RAG 实验流式输出
AC-AISVC-49 /admin/rag/experiments/run POST runRagExperiment Token 统计
AC-AISVC-50 /admin/rag/experiments/run POST runRagExperiment 指定 LLM 提供者

12. 迭代需求:智能客服增强 — Prompt 模板化 + 多知识库 + 规则引擎 + 输出护栏v0.6.0

说明:本节为 v0.6.0 迭代新增。目标是将 AI 中台从"单知识库 + 硬编码 Prompt"升级为可配置的拟人客服中台,支持:

  • Prompt 模板数据库驱动(按租户配置人设、语气、禁忌词)
  • 多知识库分类管理与智能路由
  • 意图识别 + 话术流程引擎(固定步骤引导)
  • 输出护栏(禁词检测、敏感内容过滤)
  • 智能 RAG 增强Query 改写、上下文感知检索、分层知识优先级)

12.1 Prompt 模板化(数据库驱动)

  • [AC-AISVC-51] WHEN 系统启动或租户首次请求 THEN 系统 SHALL 从数据库加载该租户的 Prompt 模板配置(人设名称、语气风格、角色描述、系统指令),替代硬编码的 SYSTEM_PROMPT

  • [AC-AISVC-52] WHEN 管理员通过 POST /admin/prompt-templates 创建 Prompt 模板 THEN 系统 SHALL 存储模板内容(含模板名称、场景标签、系统指令、变量占位符列表),并返回模板 ID。

  • [AC-AISVC-53] WHEN 管理员通过 PUT /admin/prompt-templates/{tplId} 更新模板 THEN 系统 SHALL 创建新版本(版本号自增),保留历史版本,且同一时间仅一个版本为"已发布"状态。

  • [AC-AISVC-54] WHEN 管理员通过 POST /admin/prompt-templates/{tplId}/publish 发布指定版本 THEN 系统 SHALL 将该版本标记为"已发布",旧版本自动降级为"历史版本",发布后立即生效(热更新)。

  • [AC-AISVC-55] WHEN 管理员通过 POST /admin/prompt-templates/{tplId}/rollback 回滚 THEN 系统 SHALL 将指定历史版本重新标记为"已发布"。

  • [AC-AISVC-56] WHEN Orchestrator 构建 Prompt 时 THEN 系统 SHALL 从已发布的模板中读取系统指令,并替换内置变量(如 {{persona_name}}{{current_time}}{{channel_type}}),最终拼接为 LLM 的 system message。

  • [AC-AISVC-57] WHEN 管理员通过 GET /admin/prompt-templates 查询模板列表 THEN 系统 SHALL 返回该租户下所有模板(含场景标签、当前发布版本号、更新时间),支持按场景筛选。

  • [AC-AISVC-58] WHEN 管理员通过 GET /admin/prompt-templates/{tplId} 查询模板详情 THEN 系统 SHALL 返回模板所有版本列表及当前发布版本的完整内容。

12.2 多知识库分类管理

  • [AC-AISVC-59] WHEN 管理员通过 POST /admin/kb/knowledge-bases 创建知识库 THEN 系统 SHALL 创建独立的知识库实体,包含名称、类型(product 产品知识 / faq 常见问题 / script 话术模板 / policy 政策规范 / general 通用)、描述、优先级权重,并在 Qdrant 中初始化对应的 Collection。

  • [AC-AISVC-60] WHEN 管理员通过 GET /admin/kb/knowledge-bases 查询知识库列表 THEN 系统 SHALL 返回该租户下所有知识库(含文档数量、索引状态统计、类型、优先级)。

  • [AC-AISVC-61] WHEN 管理员通过 PUT /admin/kb/knowledge-bases/{kbId} 更新知识库 THEN 系统 SHALL 支持修改名称、描述、类型、优先级权重、启用/禁用状态。

  • [AC-AISVC-62] WHEN 管理员通过 DELETE /admin/kb/knowledge-bases/{kbId} 删除知识库 THEN 系统 SHALL 删除知识库实体、关联文档记录,并清理 Qdrant 中对应的 Collection 数据。

  • [AC-AISVC-63] WHEN 文档上传时指定 kbId THEN 系统 SHALL 将文档索引到指定知识库对应的 Qdrant Collection替代原有的 kb_default 硬编码)。

  • [AC-AISVC-64] WHEN Orchestrator 执行 RAG 检索 THEN 系统 SHALL 根据意图路由结果选择目标知识库集合进行检索,而非全库搜索。若未命中意图规则,则按知识库优先级权重依次检索。

12.3 意图识别与规则引擎

  • [AC-AISVC-65] WHEN 管理员通过 POST /admin/intent-rules 创建意图规则 THEN 系统 SHALL 存储规则(含意图名称、关键词列表、正则模式列表、优先级、响应类型 flow / rag / fixed / transfer、关联的知识库 ID 列表或话术流程 ID 或固定回复内容)。

  • [AC-AISVC-66] WHEN 管理员通过 GET /admin/intent-rules 查询意图规则列表 THEN 系统 SHALL 返回该租户下所有规则(含命中统计、启用状态),支持按意图名称和响应类型筛选。

  • [AC-AISVC-67] WHEN 管理员通过 PUT /admin/intent-rules/{ruleId} 更新规则 THEN 系统 SHALL 支持修改关键词、正则、优先级、响应类型、关联资源,更新后立即生效。

  • [AC-AISVC-68] WHEN 管理员通过 DELETE /admin/intent-rules/{ruleId} 删除规则 THEN 系统 SHALL 删除规则并立即生效。

  • [AC-AISVC-69] WHEN 用户消息进入 Orchestrator THEN 系统 SHALL 在 RAG 检索之前执行意图识别:按优先级遍历规则,依次进行关键词匹配和正则匹配。命中规则后根据 response_type 路由:

    • fixed:直接返回固定回复,跳过 LLM 调用。
    • flow:进入话术流程引擎,按步骤推进。
    • rag:使用规则关联的知识库集合进行定向检索。
    • transfer:直接设置 shouldTransfer=true 并返回转人工话术。
  • [AC-AISVC-70] WHEN 所有规则均未命中 THEN 系统 SHALL 回退到默认 RAG pipeline按知识库优先级检索行为与现有逻辑一致。

12.4 话术流程引擎(状态机)

  • [AC-AISVC-71] WHEN 管理员通过 POST /admin/script-flows 创建话术流程 THEN 系统 SHALL 存储流程定义(含流程名称、触发条件描述、步骤列表),每个步骤包含:步骤序号、话术内容(支持变量占位符)、等待用户输入标志、超时秒数、超时后动作(重复/跳过/转人工)、下一步条件(关键词匹配或无条件推进)。

  • [AC-AISVC-72] WHEN 管理员通过 GET /admin/script-flows 查询流程列表 THEN 系统 SHALL 返回该租户下所有流程(含步骤数、启用状态、关联意图规则数)。

  • [AC-AISVC-73] WHEN 管理员通过 PUT /admin/script-flows/{flowId} 更新流程 THEN 系统 SHALL 支持修改流程步骤、触发条件、启用/禁用状态。

  • [AC-AISVC-74] WHEN 意图识别命中 flow 类型规则 THEN 系统 SHALL 为当前会话创建流程执行实例(关联 session_id + flow_id),从第一步开始执行,返回第一步的话术内容。

  • [AC-AISVC-75] WHEN 会话存在进行中的流程实例 THEN 系统 SHALL 优先处理流程逻辑:根据用户输入匹配当前步骤的下一步条件,推进到下一步骤并返回对应话术。若用户输入不匹配任何条件,则重复当前步骤话术或按配置处理。

  • [AC-AISVC-76] WHEN 流程执行到最后一步或用户触发退出条件 THEN 系统 SHALL 标记流程实例为"已完成",后续消息恢复正常 RAG pipeline 处理。

  • [AC-AISVC-77] WHEN 流程步骤超时(用户在指定时间内未回复) THEN 系统 SHALL 按步骤配置执行超时动作(重复当前话术 / 跳到下一步 / 转人工。注超时检测由调用方Java 侧触发AI 中台提供查询流程状态的接口。

12.5 输出护栏(禁词检测与内容过滤)

  • [AC-AISVC-78] WHEN 管理员通过 POST /admin/guardrails/forbidden-words 添加禁词 THEN 系统 SHALL 存储禁词(含词语、类别 competitor / sensitive / political / custom、替换策略 mask 星号替换 / replace 替换为指定文本 / block 拦截整条回复并返回兜底话术)。

  • [AC-AISVC-79] WHEN 管理员通过 GET /admin/guardrails/forbidden-words 查询禁词列表 THEN 系统 SHALL 返回该租户下所有禁词(支持按类别筛选),含命中统计。

  • [AC-AISVC-80] WHEN 管理员通过 PUT /admin/guardrails/forbidden-words/{wordId} 更新禁词 THEN 系统 SHALL 支持修改词语、类别、替换策略、启用/禁用状态。

  • [AC-AISVC-81] WHEN 管理员通过 DELETE /admin/guardrails/forbidden-words/{wordId} 删除禁词 THEN 系统 SHALL 删除禁词并立即生效。

  • [AC-AISVC-82] WHEN LLM 生成回复后non-streaming 和 streaming 均适用) THEN 系统 SHALL 执行后置过滤:扫描回复内容中的禁词,按替换策略处理:

    • mask:将禁词替换为等长星号(如"竞品A" → "***")。
    • replace:将禁词替换为配置的替换文本。
    • block:丢弃整条回复,返回预配置的兜底话术(如"抱歉,让我换个方式回答您"),并在 metadata 中标记 guardrail_triggered=true
  • [AC-AISVC-83] WHEN 用户输入包含禁词(前置检测) THEN 系统 SHALL 在 metadata 中记录 input_flagged=true 及命中的禁词类别,但不阻断请求处理(仅记录,不拦截用户输入)。

  • [AC-AISVC-84] WHEN 管理员通过 POST /admin/guardrails/behavior-rules 添加行为规则 THEN 系统 SHALL 存储行为约束(如"不允许承诺具体赔偿金额"、"不允许透露内部流程"),这些规则将被注入到 Prompt 模板的系统指令中作为 LLM 的行为约束。

  • [AC-AISVC-85] WHEN 管理员通过 GET /admin/guardrails/behavior-rules 查询行为规则列表 THEN 系统 SHALL 返回该租户下所有行为规则。

12.6 智能 RAG 增强

  • [AC-AISVC-86] WHEN Orchestrator 执行 RAG 检索前 THEN 系统 SHALL 对用户 Query 进行改写增强:结合对话历史解析指代词(如"它"、"这个"指代上文提到的产品),补全查询语义,生成优化后的检索 Query。Query 改写通过 LLM 调用实现(使用简短的改写 Prompt

  • [AC-AISVC-87] WHEN 多知识库检索返回结果后 THEN 系统 SHALL 按知识库优先级对结果进行分层排序:script(话术模板)> faq(常见问题)> product(产品知识)> policy(政策规范)> general(通用),同层内按相似度分数排序。高优先级知识库的命中结果优先进入 LLM 上下文。

  • [AC-AISVC-88] WHEN 检索结果中存在 script 类型知识库的高分命中score > 配置阈值) THEN 系统 SHALL 优先使用话术模板内容作为回复参考,引导 LLM 生成贴近标准话术的回复。

12.7 数据预处理扩展点(架构预留)

  • [AC-AISVC-89] WHEN 系统设计文档解析服务时 THEN 系统 SHALL 在 DocumentParser 抽象接口中预留 AudioParser(语音转文字)和 VideoParser(视频提取音轨转文字)的扩展点,但 v0.6.0 不实现具体解析逻辑。

  • [AC-AISVC-90] WHEN 系统设计知识库索引服务时 THEN 系统 SHALL 在 KnowledgeIndexer 中预留"对话记录结构化导入"接口(接受结构化 JSON 格式的对话记录,按轮次分块索引),但 v0.6.0 不实现具体导入逻辑。

12.8 追踪映射v0.6.0 迭代)

AC ID Endpoint 方法 Operation 描述
AC-AISVC-51 - - - Prompt 模板数据库驱动加载
AC-AISVC-52 /admin/prompt-templates POST createPromptTemplate 创建 Prompt 模板
AC-AISVC-53 /admin/prompt-templates/{tplId} PUT updatePromptTemplate 更新模板(版本化)
AC-AISVC-54 /admin/prompt-templates/{tplId}/publish POST publishPromptTemplate 发布模板版本
AC-AISVC-55 /admin/prompt-templates/{tplId}/rollback POST rollbackPromptTemplate 回滚模板版本
AC-AISVC-56 - - - Prompt 变量替换与拼接
AC-AISVC-57 /admin/prompt-templates GET listPromptTemplates 模板列表查询
AC-AISVC-58 /admin/prompt-templates/{tplId} GET getPromptTemplate 模板详情查询
AC-AISVC-59 /admin/kb/knowledge-bases POST createKnowledgeBase 创建知识库
AC-AISVC-60 /admin/kb/knowledge-bases GET listKnowledgeBases 知识库列表
AC-AISVC-61 /admin/kb/knowledge-bases/{kbId} PUT updateKnowledgeBase 更新知识库
AC-AISVC-62 /admin/kb/knowledge-bases/{kbId} DELETE deleteKnowledgeBase 删除知识库
AC-AISVC-63 /admin/kb/documents POST uploadDocument 文档指定知识库上传
AC-AISVC-64 - - - 多知识库智能路由检索
AC-AISVC-65 /admin/intent-rules POST createIntentRule 创建意图规则
AC-AISVC-66 /admin/intent-rules GET listIntentRules 意图规则列表
AC-AISVC-67 /admin/intent-rules/{ruleId} PUT updateIntentRule 更新意图规则
AC-AISVC-68 /admin/intent-rules/{ruleId} DELETE deleteIntentRule 删除意图规则
AC-AISVC-69 - - - 意图识别与路由执行
AC-AISVC-70 - - - 未命中规则回退默认 RAG
AC-AISVC-71 /admin/script-flows POST createScriptFlow 创建话术流程
AC-AISVC-72 /admin/script-flows GET listScriptFlows 话术流程列表
AC-AISVC-73 /admin/script-flows/{flowId} PUT updateScriptFlow 更新话术流程
AC-AISVC-74 - - - 流程实例创建与首步执行
AC-AISVC-75 - - - 流程步骤推进
AC-AISVC-76 - - - 流程完成与恢复
AC-AISVC-77 - - - 流程超时处理
AC-AISVC-78 /admin/guardrails/forbidden-words POST addForbiddenWord 添加禁词
AC-AISVC-79 /admin/guardrails/forbidden-words GET listForbiddenWords 禁词列表
AC-AISVC-80 /admin/guardrails/forbidden-words/{wordId} PUT updateForbiddenWord 更新禁词
AC-AISVC-81 /admin/guardrails/forbidden-words/{wordId} DELETE deleteForbiddenWord 删除禁词
AC-AISVC-82 - - - LLM 输出后置禁词过滤
AC-AISVC-83 - - - 用户输入前置禁词检测
AC-AISVC-84 /admin/guardrails/behavior-rules POST addBehaviorRule 添加行为规则
AC-AISVC-85 /admin/guardrails/behavior-rules GET listBehaviorRules 行为规则列表
AC-AISVC-86 - - - Query 改写增强
AC-AISVC-87 - - - 多知识库分层排序
AC-AISVC-88 - - - 话术模板优先匹配
AC-AISVC-89 - - - 音视频解析扩展点预留
AC-AISVC-90 - - - 对话记录导入扩展点预留

13. 迭代需求:对话流程测试与监控 APIv0.7.0

说明:本节为 v0.7.0 迭代新增,为前端测试与监控功能提供后端 API 支持。

13.1 Dashboard 统计增强 API

  • [AC-AISVC-91] WHEN 前端通过 GET /admin/dashboard/stats 请求 Dashboard 统计数据 THEN 系统 SHALL 在现有统计基础上新增以下字段:

    • intentRuleHitRate: 意图规则命中率(命中次数/总对话次数)
    • intentRuleHitCount: 意图规则总命中次数
    • promptTemplateUsageCount: Prompt 模板使用次数
    • scriptFlowActivationCount: 话术流程激活次数
    • guardrailBlockCount: 护栏拦截次数
  • [AC-AISVC-92] WHEN 前端通过 GET /admin/dashboard/stats 请求并指定时间范围参数(start_time, end_timeTHEN 系统 SHALL 返回该时间范围内的统计数据。

13.2 完整流程测试 API

  • [AC-AISVC-93] WHEN 前端通过 POST /admin/test/flow-execution 提交测试请求 THEN 系统 SHALL 执行完整的 12 步生成流程,并返回每一步的详细执行结果,包含:

    • step: 步骤编号1-12
    • name: 步骤名称
    • status: 执行状态success/failed/skipped
    • duration_ms: 执行耗时(毫秒)
    • input: 步骤输入数据
    • output: 步骤输出数据
    • error: 错误信息(如果失败)
    • metadata: 步骤元数据(如命中的规则、使用的模板等)
  • [AC-AISVC-94] WHEN 测试请求包含对比配置参数(如不同的 Prompt 模板 ID、知识库 ID 列表THEN 系统 SHALL 并行执行多个配置的测试,并返回对比结果数组。

  • [AC-AISVC-95] WHEN 测试执行过程中某一步失败 THEN 系统 SHALL 记录失败原因,并继续执行后续步骤(尽力而为模式),最终返回完整的执行链路。

13.3 意图规则测试与监控 API

  • [AC-AISVC-96] WHEN 前端通过 POST /admin/intent-rules/{ruleId}/test 提交测试消息 THEN 系统 SHALL 返回测试结果:

    • matched: 是否命中该规则boolean
    • matchedKeywords: 匹配的关键词列表
    • matchedPatterns: 匹配的正则表达式列表
    • priority: 规则优先级
    • priorityRank: 在所有规则中的优先级排名
    • conflictRules: 同时命中的其他规则列表(优先级冲突检测)
    • reason: 未命中原因(如果未命中)
  • [AC-AISVC-97] WHEN 前端通过 GET /admin/monitoring/intent-rules 查询意图规则监控统计 THEN 系统 SHALL 返回规则统计列表:

    • ruleId: 规则 ID
    • ruleName: 规则名称
    • hitCount: 命中次数
    • hitRate: 命中率(命中次数/总对话次数)
    • avgResponseTime: 平均响应时间(毫秒)
    • lastHitTime: 最近命中时间
    • responseType: 响应类型
  • [AC-AISVC-98] WHEN 前端通过 GET /admin/monitoring/intent-rules/{ruleId}/hits 查询规则命中记录 THEN 系统 SHALL 返回该规则的详细命中记录列表(支持分页):

    • conversationId: 对话 ID
    • sessionId: 会话 ID
    • userMessage: 用户消息
    • matchedKeywords: 匹配的关键词
    • matchedPatterns: 匹配的正则表达式
    • responseType: 响应类型
    • executionResult: 执行结果(成功/失败)
    • hitTime: 命中时间

13.4 Prompt 模板测试与监控 API

  • [AC-AISVC-99] WHEN 前端通过 POST /admin/prompt-templates/{tplId}/preview 提交预览请求含变量测试值THEN 系统 SHALL 返回预览结果:

    • templateId: 模板 ID
    • templateName: 模板名称
    • version: 版本号
    • rawContent: 原始模板内容(含变量占位符)
    • variables: 变量列表及当前值
    • renderedContent: 渲染后的完整 Prompt 内容
    • estimatedTokens: 预估 Token 数量
  • [AC-AISVC-100] WHEN 前端通过 GET /admin/monitoring/prompt-templates 查询 Prompt 模板监控统计 THEN 系统 SHALL 返回模板统计列表:

    • templateId: 模板 ID
    • templateName: 模板名称
    • scene: 场景标签
    • usageCount: 使用次数
    • avgTokens: 平均 Token 消耗
    • avgPromptTokens: 平均 Prompt Token 消耗
    • avgCompletionTokens: 平均 Completion Token 消耗
    • lastUsedTime: 最近使用时间

13.5 话术流程测试与监控 API

  • [AC-AISVC-101] WHEN 前端通过 POST /admin/script-flows/{flowId}/simulate 提交模拟执行请求 THEN 系统 SHALL 创建模拟会话并返回首步话术:

    • simulationId: 模拟会话 ID
    • flowId: 流程 ID
    • flowName: 流程名称
    • currentStep: 当前步骤编号
    • stepContent: 当前步骤话术内容
    • waitForInput: 是否等待用户输入
    • nextConditions: 下一步条件列表
  • [AC-AISVC-102] WHEN 前端通过 POST /admin/script-flows/{flowId}/simulate/{simulationId}/next 提交用户模拟输入 THEN 系统 SHALL 根据下一步条件推进流程,并返回下一步话术或流程结束标志。

  • [AC-AISVC-103] WHEN 前端通过 GET /admin/monitoring/script-flows 查询话术流程监控统计 THEN 系统 SHALL 返回流程统计列表:

    • flowId: 流程 ID
    • flowName: 流程名称
    • activationCount: 激活次数
    • completionCount: 完成次数
    • completionRate: 完成率(完成次数/激活次数)
    • avgCompletionTime: 平均完成时长(秒)
    • interruptionCount: 中断次数
    • interruptionRate: 中断率
  • [AC-AISVC-104] WHEN 前端通过 GET /admin/monitoring/script-flows/{flowId}/executions 查询流程执行记录 THEN 系统 SHALL 返回该流程的详细执行记录列表(支持分页):

    • executionId: 执行实例 ID
    • sessionId: 会话 ID
    • activationTime: 激活时间
    • currentStep: 当前步骤
    • status: 执行状态in_progress/completed/interrupted
    • interruptionReason: 中断原因(如果中断)
    • completionTime: 完成时间

13.6 输出护栏测试与监控 API

  • [AC-AISVC-105] WHEN 前端通过 POST /admin/guardrails/test 提交测试文本 THEN 系统 SHALL 返回护栏检测结果:

    • originalText: 原始文本
    • processedText: 处理后文本
    • detectedWords: 检测到的禁词列表(含词语、类别、位置、策略)
    • isBlocked: 是否被拦截boolean
    • blockReason: 拦截原因(如果被拦截)
  • [AC-AISVC-106] WHEN 前端通过 GET /admin/monitoring/guardrails 查询输出护栏监控统计 THEN 系统 SHALL 返回护栏统计列表:

    • wordId: 禁词 ID
    • word: 禁词内容
    • category: 类别
    • blockCount: 拦截次数
    • replaceCount: 替换次数
    • maskCount: 掩码次数
    • lastBlockTime: 最近拦截时间
  • [AC-AISVC-107] WHEN 前端通过 GET /admin/monitoring/guardrails/{wordId}/blocks 查询禁词拦截记录 THEN 系统 SHALL 返回该禁词的详细拦截记录列表(支持分页):

    • blockId: 拦截记录 ID
    • sessionId: 会话 ID
    • originalText: 原始文本
    • processedText: 处理后文本
    • strategy: 应用的策略mask/replace/block
    • blockTime: 拦截时间

13.7 对话追踪 API

  • [AC-AISVC-108] WHEN 前端通过 GET /admin/monitoring/conversations 查询对话追踪列表 THEN 系统 SHALL 返回对话记录列表(支持分页和筛选):

    • conversationId: 对话 ID
    • sessionId: 会话 ID
    • userMessage: 用户消息
    • aiReply: AI 回复
    • triggeredRules: 触发的意图规则列表
    • usedTemplate: 使用的 Prompt 模板
    • usedFlow: 使用的话术流程
    • executionTime: 执行耗时(毫秒)
    • createdAt: 创建时间
  • [AC-AISVC-109] WHEN 前端通过 GET /admin/monitoring/conversations/{conversationId} 查询对话执行链路详情 THEN 系统 SHALL 返回该对话的完整 12 步执行链路数据(与测试 API 返回格式一致)。

  • [AC-AISVC-110] WHEN 前端通过 POST /admin/monitoring/conversations/export 提交导出请求含筛选条件THEN 系统 SHALL 生成导出文件JSON/CSV 格式),并返回下载链接或直接返回文件流。

13.8 追踪映射v0.7.0 迭代)

AC ID Endpoint 方法 Operation 描述
AC-AISVC-91 /admin/dashboard/stats GET getDashboardStats Dashboard 统计增强
AC-AISVC-92 /admin/dashboard/stats GET getDashboardStats 时间范围筛选
AC-AISVC-93 /admin/test/flow-execution POST testFlowExecution 完整流程测试
AC-AISVC-94 /admin/test/flow-execution POST testFlowExecution 对比测试
AC-AISVC-95 /admin/test/flow-execution POST testFlowExecution 失败容错处理
AC-AISVC-96 /admin/intent-rules/{ruleId}/test POST testIntentRule 意图规则测试
AC-AISVC-97 /admin/monitoring/intent-rules GET getIntentRuleStats 意图规则监控统计
AC-AISVC-98 /admin/monitoring/intent-rules/{ruleId}/hits GET getIntentRuleHits 规则命中记录
AC-AISVC-99 /admin/prompt-templates/{tplId}/preview POST previewPromptTemplate Prompt 模板预览
AC-AISVC-100 /admin/monitoring/prompt-templates GET getPromptTemplateStats Prompt 模板监控统计
AC-AISVC-101 /admin/script-flows/{flowId}/simulate POST simulateScriptFlow 话术流程模拟执行
AC-AISVC-102 /admin/script-flows/{flowId}/simulate/{simulationId}/next POST simulateScriptFlowNext 流程模拟推进
AC-AISVC-103 /admin/monitoring/script-flows GET getScriptFlowStats 话术流程监控统计
AC-AISVC-104 /admin/monitoring/script-flows/{flowId}/executions GET getScriptFlowExecutions 流程执行记录
AC-AISVC-105 /admin/guardrails/test POST testGuardrail 输出护栏测试
AC-AISVC-106 /admin/monitoring/guardrails GET getGuardrailStats 输出护栏监控统计
AC-AISVC-107 /admin/monitoring/guardrails/{wordId}/blocks GET getGuardrailBlocks 禁词拦截记录
AC-AISVC-108 /admin/monitoring/conversations GET getConversations 对话追踪列表
AC-AISVC-109 /admin/monitoring/conversations/{conversationId} GET getConversationDetail 对话执行链路详情
AC-AISVC-110 /admin/monitoring/conversations/export POST exportConversations 对话记录导出