跳至正文
Starone

参考架构

示意

AI 知识平台

一个检索增强平台,针对企业文档和系统回答问题,提供引用来源、感知权限的检索以及完整的可观测性。

问题

设想一家组织,它的工作知识分散在文档、Wiki、工单工具、数据库和内部系统里。人们先要花时间找到正确的来源,再花更多时间判断它是否仍然有效。关键词搜索返回的是页面而不是答案,而那些知道东西放在哪里的人则成了瓶颈。

单靠语言模型解决不了这个问题。它对组织的内容一无所知,在不该回答的时候也会自信作答,而且完全没有“谁可以读什么”的概念。工程上要解决的是:让模型以组织自己的资料为依据,让这些资料保持最新,尊重既有权限,并让每一个答案都可以核验。

设计必须满足的需求

  • 每个答案都必须引用生成它所依据的段落;当检索不到相关内容时,系统必须拒绝回答。
  • 检索必须执行源系统的权限,用户绝不会拿到自己无法直接打开的内容。
  • 源系统中的变更必须在约定的新鲜度窗口内进入索引,包括删除和权限变更。
  • 在发布任何提示词、模型或检索方面的变更之前,必须能够基于一套持续维护的评估集衡量答案质量。
  • 模型提供方必须可以替换而无需重写应用,敏感数据必须留在约定的边界之内。
  • 每个请求都必须可以端到端追踪,并逐步记录延迟、token 成本和检索结果。

设计

组件

检索增强生成流水线

摄取

  1. 01

    数据源

    文档、数据库、内部 API

  2. 02

    解析与切分

    提取文本,保留结构

  3. 03

    向量化

    批量生成嵌入,模型有版本

  4. 04

    索引

    带 ACL 的向量与关键词索引

查询

  1. 01

    提问

    已认证用户及其权限范围

  2. 02

    检索

    向量与关键词混合检索

  3. 03

    重排

    只保留相关性最高的段落

  4. 04

    生成

    有依据并附引用的答案

  5. 05

    评估与记录

    追踪、评分并收集反馈

摄取环节提前把企业内容处理成可检索的形态。查询路径依次完成检索、重排与生成,答案会标注所引用的段落,随后记录本次交互以供评估。
01

摄取与连接器

连接器按计划或在收到变更事件时,从文档库、Wiki、数据库和内部 API 拉取内容。每份文档在整条流水线中都带着自己的来源标识、版本和访问控制列表。删除和权限变更被当作一等事件处理,而不是等到下一次全量抓取时才顺带处理。

02

解析、切分与向量化

文档被解析为文本,同时保留标题、表格和页码引用,再按内容类型切分成大小合适的片段。嵌入由一个带版本的嵌入模型批量生成,因此当该模型变更时,可以有计划地重建索引。片段的元数据保留得足够丰富,足以构成一条有用的引用。

03

向量数据库与关键词索引

片段存入向量索引,同时对相同内容建立关键词索引。混合检索覆盖了单一方法薄弱的场景:一边是精确的标识符和产品编码,另一边是换了说法的问题。访问控制元数据与每个片段一起建立索引,因此过滤发生在查询内部,而不是查询之后。

04

LLM 编排服务

一个专门的服务负责提示词模板、查询改写、检索、重排、模型路由和护栏。提示词是带测试的版本化制品,而不是散落在应用代码里的字符串。该服务对外暴露一份小而稳定的契约,使模型提供方和检索策略都可以替换。

05

企业 API 层

API 网关 通过一个经过认证的统一接口,把平台开放给 Web 客户端、聊天工具和其他内部系统。它按用户、按应用施加限流和配额,并以流式方式返回响应,让长答案也有即时反馈。对记录系统的结构化查询,则以类型化工具的形式提供给编排器。

06

认证与授权

用户通过组织的身份提供方以 OIDC 或 SAML 登录。用户的身份和所属群组会传递到检索查询中,并与随每个片段存储的访问控制列表进行匹配。服务之间的调用使用短期凭据,而不是共享密钥。

07

评估框架

一组经过筛选的问题,配有预期来源和参考答案,会针对每一个候选变更运行一遍。检索与生成分开评分,因为两者失败的原因不同,修复的位置也不同。来自生产环境的用户反馈经过审阅后,会逐步纳入评估集。

08

可观测性

每个请求都会产生一条链路追踪,覆盖查询改写、检索、重排和生成,并附带检索到的片段标识、token 数量和延迟。仪表盘跟踪每次请求的成本、检索命中质量以及拒答比例。正因如此,一个糟糕的答案才能被诊断,而不只是被上报。

取舍

设计决策

决策理由
先做检索增强生成,再考虑微调企业内容每天都在变化,而且必须能够追溯到来源。检索可以直接解决新鲜度、引用和权限问题,而微调是把知识固化进权重,既无法引用,也无法有选择地撤回。等检索质量稳定之后,微调仍可用于调整语气或格式。
混合检索加重排阶段仅用向量检索会漏掉零件号、条款编号这类精确术语,仅用关键词检索又会漏掉换了说法的表述。两者并行再对合并后的候选结果重排,会带来额外延迟;这一代价可以接受,因为检索质量决定了答案质量的上限。
在检索时、在索引查询内部执行权限生成之后再过滤为时已晚,因为模型已经读到了受限文本。把访问元数据与每个片段一起存储会增大索引体积,并使权限同步成为硬性要求,但只有放在这个位置,才能从构造上杜绝泄露。
编排服务独立于应用把提示词、路由和护栏集中在一个服务中,会多出一次网络跳转和一个需要运维的组件。换来的是多个应用共用一套经过测试的实现,更换模型或提供方只是一次范围可控的发布,而不是一次重写。
证据不足时拒绝回答为检索相关性设定阈值,意味着一些本可回答的问题会被拒绝。这仍然好过一个流畅却没有来源支撑的答案,因为平台失去信任的速度远快于建立信任的速度。

预期成效

  • 答案附带引用来源,审阅者可以据此核验
  • 检索沿用既有权限,而不是另建一套并行的访问模型
  • 提示词、模型和检索的变更在发布前经过评估
  • 糟糕的答案可以追溯到具体的检索或生成步骤

该设计旨在达成的目标。仅为示意,并非客户项目的实测结果。

代表性技术

  • Python
  • FastAPI
  • TypeScript
  • Next.js
  • PostgreSQL
  • pgvector
  • OpenSearch
  • Redis
  • Kafka
  • Kubernetes
  • OpenTelemetry
  • OIDC / SAML
全部参考架构

有一套必须在生产环境中正常运行的系统?

告诉我们您正在构建什么。工程师会阅读您的留言,并在两个工作日内回复。