Devv AI 是如何构建高效的 RAG 系统的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
forrestchang
V2EX    分享发现

Devv AI 是如何构建高效的 RAG 系统的

  forrestchang 2023-12-14 12:37:43 +08:00 7072 次点击
这是一个创建于 667 天前的主题,其中的信息可能已经有所发展或是发生改变。

devv.ai 是一款面向开发者的 AI 搜索引擎,目的是为了替代开发者日常使用 Google / StackOverflow / 文档搜索的场景,帮助开发者提升效率。

这篇文章分享一下 devv.ai 底层实现整个 RAG 系统的一些经验。

原贴: https://x.com/Tisoga/status/1731478506465636749?s=20


RAG 的全称是:Retrieval Augmented Generation (检索增强生成)

最初来源于 2020 年 Facebook 的一篇论文:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (是的,你没有看错,2020 年就有这项技术了)。

这篇论文要解决的一个问题非常简单:如何让语言模型使用外部知识( external knowledge )进行生成。

通常,pre-train 模型的知识存储在参数中,这就导致了模型不知道训练集之外的知识(例如搜索数据、行业的 knowledge )。

之前的做法是有新的知识就再重新在 pre-train 的模型上 finetune 。

这样的方式会有几个问题:

  1. 每次有新的知识后都需要进行 finetune
  2. 训练模型的成本是很高的

于是这篇论文提出了 RAG 的方法,pre-train 的模型是能够理解新的知识的,那么我们直接把要让模型理解的新知识通过 prompt 的方式给它即可。

所以一个最小的 RAG 系统就是由 3 个部分组成的:

  1. 语言模型
  2. 模型所需要的外部知识集合(以 vector 的形式存储)
  3. 当前场景下需要的外部知识

langchain, llama-index 本质上就是做的这套 RAG 系统(当然还包括构建在 RAG 上的 agent )。

如果理解了本质,其实是没有必要再额外增加一层抽象的,根据自己的业务情况来搭建这套系统即可。

例如,我们为了保持高性能,采用了 Go + Rust 的架构,能够支持高并发的 RAG 请求。

把问题简化,不管是搭建什么样的 RAG ,优化这套系统就是分别优化这 3 个模块。

1 )语言模型

为什么 2020 年的这篇论文直到今年才火起来?一个主要的原因就是之前的基座模型能力不够。

如果底层模型很笨,那么即使给到了 丰富的外部知识,模型也不能基于这些知识进行推演。

从论文的一些 benchmark 上也可以看出效果有提升,但是并没有特别显著。

1.1 ) GPT-3 的出现第一次让 RAG 变得可用

第一波基于 RAG + GPT-3 的公司都获得了非常高的估值 & ARR (年经常性收入):

  • Copy AI
  • Jasper

这两个都是构建营销领域 RAG 的产品,曾经一度成为明星 AI 独角兽,当然现在祛魅之后估值也大幅度缩水。

1.2 ) 2023 年以来,出现了大量的开源 & 闭源的基座模型,基本上都能够在上面构建 RAG 系统

最常见的方式就是:

  • GPT-3.5/4 + RAG (闭源方案)
  • Llama 2 / Mistral + RAG (开源方案)

2 )模型所需要的外部知识集合

现在应该大家都了解了 embedding 模型了,包括 embedding 数据的召回。

embedding 本质上就是把数据转化为向量,然后通过余弦相似度来找到最匹配的两个或多个向量。

knowledge -> chunks -> vector user query -> vector

2.1 )这个模块分成两个部分:

  1. embedding 模型
  2. 存储 embedding vector 的数据库

前者基本上都使用 OpenAI 的 embedding 模型,后者可选方案非常多,包括 Pinecone ,国内团队的 Zilliz ,开源的 Chroma ,在关系型数据库上构建的 pgvector 等。

2.2 )这些做 embedding 数据库的公司也在这一波 AI Hype 中获得了非常高的融资额和估值。

但是从第一性原理思考,模块 2 个目的是为了存储外部的知识集合,并在需要的时候进行召回。

这一步并不一定需要 embedding 模型,传统的搜索匹配在某些场景下可能效果更好( Elasticsearch )。

2.3 ) https://devv.ai 采用的方式是 embedding + 传统的 relation db + Elasticsearch 。

并在每个场景下都做了很多优化,一个思路是在 encoding knowledge 的时候做的工作越多,在 retrieve 的时候就能够更快 & 更准确(先做工 & 后做工的区别)。

2.4 )我们使用 Rust 构建了整套 knowledge index

包括:

  • GitHub 代码数据
  • 开发文档数据
  • 搜索引擎数据

3 )更好地召回当前场景下需要的外部知识

根据优先做工的法则,我们在 encoding 的时候对于原始的 knowledge 数据做了很多处理:

  • 对代码进行程序分析
  • 对开发文档进行逻辑级别的 chunk 分块
  • 对网页信息的提取 & page ranking 优化

3.1 )做完了上面的工作之后保证了我们在 retrieve 的时候获取到的数据本身就是结构化的了,不需要做太多的处理,而且可以提升召回的准确率。

现在再来看 a16z 的这张图,就是在每个步骤上扩展出了对应的组件,核心本质并没有变。

https://a16z.com/emerging-architectures-for-llm-applications/

2022 年基于这套 RAG system 做的搜索引擎 Perplexity 每个月已经拥有了几千万的流量,LangChain 也获得了几亿美金的估值。

不管是通用的 RAG ,还是专有的 RAG ,这是一个做得马马虎虎很容易的领域,但是要做到 90 分很难。

每一步骤都没有最佳实践,例如 embedding chunk size ,是否需要接搜索引擎,都需要根据实际的业务场景来多试。

相关的论文非常多,但是并不是每篇论文里面提到的方法都是有用的。

今天只是简单对 https://devv.ai 底层的一些使用到的技术做了一个 high level 的科普,没有太深入技术细节,目的是希望想要进入这一行的开发者们也能够从第一性原理来思考,对技术祛魅。

下一阶段会每周会发一篇 LLM 相关的技术分享推文,今天在写这个 thread 的时候大量使用了 https://devv.ai 来查询相关的资料,非常有帮助。

12 条回复    2024-02-27 11:44:26 +08:00
littlewey
    1
littlewey  
   2023-12-14 13:02:49 +08:00 via iPhone
感谢分享,虽然 twitter thread 已经点赞过了。

devv 也是我的一个 goto 开发工具
37Y37
    2
37Y37  
   2023-12-14 13:15:25 +08:00   1
这个项目是大佬的吗?做的很棒啊,我一直在用,很好用
kidult
    3
kidult  
   2023-12-14 14:22:05 +08:00
感谢大佬分享,Devv 很好用
KMpAn8Obw1QhPoEP
    4
KMpAn8Obw1QhPoEP  
   2023-12-14 14:29:56 +08:00 via Android
在用 感谢
Kuari
    5
Kuari  
   2023-12-14 16:42:53 +08:00
大佬牛逼!真的好用!
wagg
    6
wagg  
   2023-12-14 17:11:53 +08:00
大佬牛逼,非常好用的产品,在公司内还推广过一波
cheava
    7
cheava  
   2023-12-14 17:28:05 +08:00
666 ,刚刚试用了确实不错,现在用的基座是 gpt3.5 还是开源 llm ?
xyzxiaoking
    8
xyzxiaoking  
   2023-12-15 11:51:23 +08:00
使用之后感觉非常好用,属于最近使用的工具里面相当亮眼的一种,想问一下后续是计划如何收费呢
forrestchang
    9
forrestchang  
OP
   2023-12-15 12:47:45 +08:00
@xyzxiaoking 商业化估计还要过段时间,最近还在快速迭代产品 & 收集用户反馈,如果觉得好用,欢迎推荐给身边的同事和朋友。有任何问题也欢迎反馈,我们会第一时间处理。

反馈和建议可以提交到这个 repo 中: https://github.com/devv-ai/devv/issues
Carson089
    10
Carson089  
   2023-12-15 15:55:31 +08:00
牛逼。感觉产品的优势在于,用户是在联网的环境下使用是,而联网的话就可以使用 gpt4 墙大模型
JUNXIONGXX
    11
JUNXIONGXX  
   2023-12-18 22:11:09 +08:00
是否能透露下后端架构是怎么样的,大概什么量级?
stonelee800
    12
stonelee800  
   2024-02-27 11:44:26 +08:00
很牛的产品,用户体验很棒
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1038 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 29ms UTC 18:23 PVG 02:23 LAX 11:23 JFK 14:23
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86