TSPR-WEB-LLM-HIC 工业级实施方案
1. 项目概述
TSPR-WEB-LLM-HIC 是一个结合动态权重(TSPR)、大语言模型(LLM)与人机协同(HITL)的智能问答系统。系统通过向量化碎片化数据,动态调整检索权重,利用LLM生成答案,并引入人工审核闭环持续优化模型与权重,实现高置信度答案自动输出、低置信度答案人工干预的混合智能。
核心目标:
-
实现多源异构数据的统一接入与向量化
-
动态融合全局、租户、领域、反馈四类权重,提升检索精准度
-
LLM生成答案并自动计算置信度,分级处理
-
建立HITL反馈闭环,持续优化权重与向量索引
-
支持多租户隔离,确保数据安全与定制化
2. 系统架构
![系统架构简图]
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 数据源层 │ │ 应用层 │ │ 运维层 │
│ CRM, ERP, 文档, │───▶│ Web API │───▶│ 监控告警 │
│ 图片, 日志 │ │ HITL前端 │ │ 日志中心 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────┐
│ 核心引擎层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 数据层 │ │ 权重模块 │ │ LLM模块 │ │ HITL模块 │ │
│ │(ETL+向量)│ │ (TSPR) │ │(检索+生成)│ │(队列+审核)│ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ │
│ │ 反馈闭环 │ │ 多租户 │ │
│ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 数据存储 │ │ 向量存储 │ │ 缓存 │
│ PostgreSQL │ │ Milvus/FAISS │ │ Redis │
└─────────────────┘ └─────────────────┘ └─────────────────┘
3. 模块详细设计
3.1 数据层
职责
-
多源数据采集、清洗、向量化
-
原始数据与向量索引的增量管理
数据结构
class DataRecord: id: str # 唯一ID tenant_id: str # 租户ID domain: str # 领域标签 source_type: str # 文本/表格/JSON/图片 content: Union[str, dict, bytes] timestamp: datetime cleaned: bool = False vector: List[float] = [] confidence: float = 0.0 usage_count: int = 0
核心接口
-
fetch_raw_data(source_id) → DataRecord -
clean_data(raw_data) → cleaned_data -
vectorize(data) → vector -
insert_raw_data(cleaned_data) -
insert_vector_index(id, vector, metadata) -
incremental_index_update(new_vectors: List[DataRecord])
操作流程(伪代码)
for source in data_sources: raw = fetch_raw_data(source) if not raw.content: log_error(raw.id, "empty content") continue cleaned = clean_data(raw) try: vector = vectorize(cleaned) except VectorizationError as e: log_error(cleaned.id, str(e)) continue insert_raw_data(cleaned) insert_vector_index(cleaned.id, vector, metadata=cleaned.meta)
条件分支与异常处理
| 条件 | 操作 | 异常处理 |
|---|---|---|
| content为空 | 跳过写入 | 写错误日志,标记失败 |
| 向量维度异常 | 重试1次后跳过 | 记录异常,人工介入 |
| 数据重复(相同id) | 合并或更新metadata | 记录日志,保留最新 |
| 增量索引批量失败 | 回滚批次,延迟重试 | 告警通知管理员 |
3.2 权重动态化模块(TSPR)
权重计算公式
Wfinal=softmax(αgWglobal+αtWtenant+αdWdomain+αffeedback_bias)
-
α 初期固定,后期通过RL自博弈动态调整
-
权重向量的长度等于检索时使用的特征维度(如不同字段权重)
核心接口
-
get_weights(domain, tenant_id) → dict -
combine_weights(W_global, W_tenant, W_domain, W_feedback) → dict -
update_tenant_weight(W_t_old, feedback_vec) → W_t_new
操作流程
def compute_final_weight(domain, tenant): W_g = get_global_weight() W_t = get_tenant_weight(tenant) W_d = get_domain_weight(domain) W_f = get_feedback_bias(domain, tenant) W_final = softmax([W_g, W_t, W_d, W_f]) if abs(sum(W_final)-1) > 0.01: W_final = normalize(W_final) return W_final
条件分支与异常处理
| 条件 | 操作 | 异常处理 |
|---|---|---|
| 某类权重缺失 | 使用默认权重(如全局) | 写错误日志 |
| softmax溢出 | 数值裁剪后重算 | 记录并告警 |
| 权重计算异常 | 重试一次,仍失败则回退到上一版本 | HITL人工确认 |
3.3 LLM调用模块
流程
-
用户查询 → 向量编码
-
向量检索 top_k 数据片段(按 Wfinal 排序)
-
LLM 生成候选答案(支持多模型 ensemble)
-
计算置信度:
confidence=α⋅retrieval_score+β⋅llm_score+γ⋅feedback_bias
-
根据置信度分级处理:
-
高 (>0.85):自动输出
-
中 (0.6–0.85):HITL快速确认
-
低 (<0.6):HITL强制审核
-
核心接口
-
generate_candidates(query, top_k, weights) → List[Candidate] -
compute_confidence(candidate) → float
操作流程
query_vector = vectorize_query(query) candidates = search_vector_index(query_vector, top_k) W = compute_final_weight(domain, tenant) candidates_sorted = sort_by_weight(candidates, W) answer = LLM_generate(candidates_sorted) conf = compute_confidence(answer) if conf < 0.6: enqueue_HITL(answer, tenant, priority="high") elif conf < 0.85: enqueue_HITL_fast(answer, tenant, priority="medium") else: output_answer(answer)
条件分支与异常处理
| 条件 | 操作 | 异常处理 |
|---|---|---|
| top_k 为空 | 直接进入HITL强制审核 | 记录日志,报警 |
| LLM 返回异常(超时/空结果) | 重试3次,失败后HITL处理 | 降级为规则答案(如有) |
| 置信度计算失败 | 默认置为中置信度 | 写错误日志,人工复核 |
3.4 HITL人工协同模块
队列管理
-
优先级队列:低置信度 > 中置信度,同等级按时间排序
-
租户隔离:任务按租户分配,审核员可筛选租户
-
超时处理:任务超过设定时限(如24h)重新排队或报警
-
批量审核:支持多任务批量确认/修改
操作界面
-
展示:候选答案 + 检索片段 + 来源 + 租户信息 + 置信度
-
操作按钮:确认、修改、标注错误(并提供正确内容)、补充信息、驳回
反馈写入
submit_human_feedback(query, tenant_id, corrected_answer, feedback_vector)
条件分支与异常处理
| 条件 | 操作 | 异常处理 |
|---|---|---|
| HITL 超时 | 重新排队,优先级提升 | 发送提醒给负责人 |
| 输入非法(空答案) | 拒绝提交,要求重新输入 | 提示错误原因 |
| 修改内容与原文冲突 | 标记并记录 | 日志存储,人工复核 |
3.5 反馈闭环与数据飞轮
偏置向量更新
bnew=γ⋅bold+(1−γ)⋅bcurrent
-
周期:每次HITL提交后实时更新,或每日批量更新
权重更新
-
根据反馈,调整租户权重 Wt:
Wt,new=update_tenant_weight(Wt,old,feedback)
-
更新频率:HITL提交后实时更新,或每日汇总更新
增量索引更新
-
新数据入库时自动触发索引增量
-
HITL反馈中的新内容(如标注的正确片段)也会生成向量并索引
自动迭代逻辑
-
周期性(如每周)运行 RL 自博弈优化,调整 α 系数
-
HITL反馈优先用于更新权重和偏置,形成数据飞轮
3.6 多租户策略
-
初期:共享索引 + tenant_id 过滤
-
中期:分租户独立索引 + 租户专属权重子集
-
权限:租户只能访问自身数据,公共数据按规则开放
-
缓存:租户级缓存,提高查询响应速度
-
查询优先级:租户数据 > 公共数据
4. 接口定义汇总
| 模块 | 接口名 | 输入 | 输出 | 说明 |
|---|---|---|---|---|
| 数据层 | fetch_raw_data |
source_id | DataRecord | 从源获取原始数据 |
| 数据层 | clean_data |
DataRecord | DataRecord | 清洗并标准化 |
| 数据层 | vectorize |
DataRecord | List[float] | 调用Embedding模型 |
| 数据层 | incremental_index_update |
List[DataRecord] | bool | 增量更新向量库 |
| 权重模块 | get_weights |
domain, tenant_id | dict | 获取最终权重 |
| 权重模块 | update_tenant_weight |
W_old, feedback | W_new | 基于反馈更新租户权重 |
| LLM模块 | generate_candidates |
query, top_k, weights | List[Candidate] | 生成候选答案 |
| LLM模块 | compute_confidence |
Candidate | float | 计算置信度 |
| HITL | submit_human_feedback |
query, tenant_id, corrected_answer, feedback_vector | bool | 提交反馈 |
| 反馈闭环 | update_feedback_bias |
query, tenant_id, feedback_vec | – | 更新偏置向量 |
5. 数据流与核心流程
5.1 数据入库流程
数据源 → fetch_raw_data → clean_data → vectorize → insert_raw_data (关系库) & insert_vector_index (向量库) → incremental_index_update (异步)
5.2 在线查询流程
用户查询 → 向量化 → 向量检索 → 权重融合排序 → LLM生成 → 置信度计算 → 分级处理 → (高置信度自动返回 / 中低置信度入HITL队列)
5.3 反馈闭环流程
HITL审核 → submit_human_feedback → 更新反馈偏置 → 更新租户权重 → 增量索引更新(如添加新知识) → 定期RL优化全局权重系数
6. 异常处理与容错机制
| 异常场景 | 处理策略 | 恢复方式 |
|---|---|---|
| ETL 数据校验失败 | 写入错误日志,跳过该条 | 人工查看日志修复后重新导入 |
| 向量化 API 超时 | 重试3次,间隔递增 | 若仍失败,记录并跳过,后续补录 |
| LLM 调用失败 | 重试队列,降级为规则答案 | 重试3次后转HITL处理 |
| HITL 任务超时 | 重新排队,优先级提升 | 告警通知负责人 |
| 向量索引损坏 | 从增量备份自动恢复 | 恢复后检查一致性,必要时全量重建 |
| 数据库连接池耗尽 | 等待并重试,扩缩容 | 自动扩容或重启服务 |
7. 迭代路线图
| 阶段 | 时间 | 核心目标 | HITL角色 |
|---|---|---|---|
| MVP | 1-2个月 | 核心数据整合,固定权重,LLM生成,低/中置信度人工审核 | 审核低/中置信度答案 |
| 中级 | 3-6个月 | 多租户隔离,批量反馈闭环,引入领域权重 | 快速批量审核,反馈闭环 |
| 高级 | 6-12个月 | RL自博弈优化,全自动闭环,实时索引更新 | 仅处理极低置信度输出,审核少量边缘案例 |
8. 技术栈
| 分类 | 技术选型 |
|---|---|
| 关系数据库 | PostgreSQL / MySQL / MongoDB |
| 向量数据库 | Milvus / FAISS / Pinecone |
| LLM | OpenAI GPT / LLaMA / ChatGLM |
| Web框架 | FastAPI / Flask |
| HITL前端 | React / Vue |
| ETL | Python + Pandas / Airflow |
| 缓存 | Redis |
| 监控 | Prometheus + Grafana |
9. 部署与运维建议
-
容器化:使用 Docker + Kubernetes 部署,便于扩展与滚动更新
-
配置管理:环境变量或配置中心(如 Apollo)管理租户权重、α系数等动态参数
-
日志与监控:集中日志(ELK),关键指标(QPS、置信度分布、HITL处理延迟)实时监控
-
备份策略:数据库每日全量备份,向量库增量备份,保留最近7天版本
-
灰度发布:权重更新或模型替换时采用AB测试,逐步切流
10. 附录:关键代码片段与条件分支表
(可参考各模块“操作流程”与“条件分支与异常处理”表格,作为开发人员每日执行清单。)