RAG 实践 & AI 当下发展
RAG 实践 & AI 当下发展
Nov 26, 2024
| Jan 15, 2025
2135  |  Read Time 6 min
type
status
date
slug
summary
tags
category
icon
password
AI 摘要
RAG 是 Retrieval-Augmented Generation 的缩写,是一种结合了检索和生成技术的问答系统架构

背景

公司的 1024 节日开展了一个自建 RAG 应用的比赛,虽然在比赛之前,我已经接触并参与了一些相关项目,但相比于比赛的形式,这种有标准化输入输出还能评判优劣的场景,对自己的实际能力考察确实会更加全面

赛事经历

赛事介绍:
  • 模仿客服的角色定位,结合众多产品的私有知识库,回答赛方评委提供的一些问题,问题类型包含(文本、图片和视频)
  • 应用结果通过公网可访问 API 来输出,问题即 request,答案即 response
  • 团队作业,4-5 人一组(不同方向:前端、大数据、IT 等等)
期间自己还参与了其他的一些 toy 项目,比如: AI 女友聊天机器人
这里先聊聊团队作业,从离开大学之后,再次和不同频道、不同专业的人协作比赛,人和人的沟通成本确实比自己闷头做要高很多,但好处是大家都有自己的分工,自己只需要做好自己的事情,然后和队友同步进度,最后再合并到一起,这样确实可以完成一个相对完整的东西

技术思考

比赛的整体方案思路比较朴实无华:
  1. 对图片做 OCR 提取文本信息,对视频做字幕提取文本信息,对所有文本信息做结构化处理
  1. 对知识库做清洗、切片、整理,内嵌到 LLM 中
  1. 对问题做前置工作:意图识别、意图发散、问题转义和记忆上下文变量
  1. LLM 处理问题,对得到的结果进行过滤、精炼、总结
  1. 格式化最终返回结果
期间尝试了字节的 COZE,其应用完善程度超乎我的想象,就是有些节点(记忆上下文、知识库查询)效果还差点
期间也做了两套方案:
  1. COZE 的工作流编排方案
  1. 使用 LangChain 的直接 prompt 调用方案
最后因为知识库查询的准确度问题,还是使用了方案 2

后续

团队老大最后在赛事总结的时候,提到一个概念:我们要当设计者,而不是执行者
结合我自身也将近两年的工作经历来看,这确实是一个方向上的转变,从执行者到设计者的转变
  • 管理层的绩效目标,是定向锚定目标去拿结果,至于过程中谁做的、谁付出最多,那是团队内部的事情
  • 社会性群体,天然就会形成类似 1-3-5-1 的比例群体,十个人的团队,锚定📌自己的定位,很重要

承上启下

技术之外的事情到此结束,回到技术本身
行业内对这个业务场景的标准作业流是怎样的,我找到了这样一张图
notion image

问答系统架构分析

上图展示了一个复杂的问答系统的工作流程,分为 查询翻译路由查询构建索引检索生成 六大模块。以下是按流程顺序的详细分析和补充说明:

1. 查询翻译(Query Translation)

  • 查询分解(Query Decomposition): 将复杂问题分解为子问题或分步问题,例如:
    • 多轮查询(Multi-query)
    • 回溯查询(Step-back)
    • 检索-生成融合(RAG-Fusion)
  • 伪文档生成(Pseudo-documents): 使用 HyDE 技术生成假设性文档,以帮助回答潜在的复杂问题。
补充分析
通过问题分解与伪文档生成,可以提升系统处理复杂问题的能力,适用于需要多轮推理或具备丰富背景知识的对话场景。

2. 路由(Routing)

  • 逻辑路由(Logical Routing): 基于查询逻辑选择适合的数据库类型(关系型数据库、图数据库或向量数据库)。
  • 语义路由(Semantic Routing): 将查询转换为语义向量,通过语义匹配选择最合适的提示或数据库。
路由模块提升了系统的效率和准确性。逻辑路由解决了数据库选择的问题,而语义路由进一步优化了查询意图与匹配效果。

3. 查询构建(Query Construction)

  • 关系型数据库(Relational DBs):
    • 通过 Text-to-SQL 技术将自然语言转换为 SQL 查询。
    • 支持关系型数据库操作,并可结合 PGVector 进行嵌入查询。
  • 图数据库(Graph DBs): 使用 Text-to-Cypher 技术将自然语言转换为 Cypher 查询语言,以访问图数据库。
  • 向量数据库(Vector DBs): 采用自查询检索器(Self-query Retriever),自动生成元数据过滤条件,支持向量数据库。
该模块支持多模态查询(SQL、Cypher、向量化),适用于结构化和非结构化数据存储,实现多源信息的融合。

4. 索引(Indexing)

  • 分块优化(Chunk Optimization): 使用语义分割器(Semantic Splitter)按字符、段落或语义片段拆分文档,提高嵌入效率。
  • 多表示索引(Multi-representation Indexing): 将文档转化为紧凑的表示单元(如摘要),以便快速检索。
  • 专用嵌入(Specialized Embeddings): 通过微调技术(如 ColBERT)优化嵌入表示的任务特化能力。
  • 分层索引(Hierarchical Indexing): 采用 RAPTOR 技术实现文档的分层抽象与组织。
索引模块通过分块、分层和优化技术,提升系统性能,特别适合大规模语料库的高效检索需求。

5. 检索(Retrieval)

  • 排序与精炼(Ranking & Refinement): 使用 Re-Rank、RankGPT 或 RAG-Fusion,对检索到的文档进行相关性排序、过滤和压缩。
  • 主动检索(Active Retrieval): 如果初始检索结果不理想,可采用 CRAG 技术从其他数据源重新检索。
检索模块支持动态调整,确保系统对实时数据和复杂查询的适应性,是开放域问答系统的核心能力。

6. 生成(Generation)

  • 主动生成检索(Active Retrieval for Generation): 根据生成质量,动态调整问题的重写或重新检索。
  • Self-RAG 与 RRR: 将生成模型(如 GPT)与检索模块(如 RAG)结合,优化答案质量。
生成模块结合检索结果与生成能力,提供高质量且解释性强的答案,适用于需要推理或生成复杂内容的场景。

总结

图中的技术(如 RAG-Fusion、ColBERT、HyDE)处于前沿水平,是多源异构数据融合与生成增强的典型架构
可以看出,RAG 技术在问答系统中已经非常成熟,在实际应用中,RAG 可与其他技术结合使用,以达到更好的效果

AI 当下发展

我目前日常使用的 AI 应用:
  • Cursor IDE
  • 豆包(拍照识图、百度百科
体验过程中明显能感觉到:
  • 国内应用在服务体验上,更能体现一个产品的优势
  • 国外应用则是在专业角度上,内容更加全面和权威
再来看这位行业投资人的看法:
notion image
其中不乏有些"暴论",但整体的一个思考逻辑,还是挺能反映问题的
  • AI 应用会先落实在 b 端,然后反哺 c 端
  • 国内因为体制的原因,真正的 AI 助手落地十分困难
至于我们的态度? —— 当下的风口还没停下来,需要关注亦或者等待一个机会的来临
 
 
notion image
Relate Posts :
  • ai
  • 笼中雀信息分发的资本化
    Loading...