|
RAG常见的应用架构如下, 整个架构图的核心主要是两部分: - 中间件:文档分块处理并转成合适的Embedding,比如LangChain和LlamaIndex
RAG现存问题与解决方法 问题1:向量表征的语义召回粒度难以控制通过对文档进行适当的切分,可以平衡语义的精确度和召回的效率。使用LangChain、LlamaIndex等中间件来实现文档的合理切分。 问题2:文档切分策略的确定采取基于空白的文字分段,并将标题与段落合并的策略,以确保段落既能够体现局部文字的语义,也能反映整篇文章或章节的主题。 问题3:RAG系统与LLM微调的争论随着时间的推移,业界逐渐认识到RAG系统和LLM微调各有优势,两者可以结合使用,以达到更好的问答质量。RAG系统在实时性和成本方面相较于LLM微调具有优势,因此更受青睐。 问题6:长上下文LLM对RAG的挑战尽管长上下文LLM在处理长文本和复杂图表方面表现出色,并不能满足用户海量数据的需求,成本高,速度也不够快,也只能针对长文本、图片等数据提问。RAG依然在个人知识库问答场景依然是非常必要的,两者可以结合使用。LLM 的长上下文能力,对于 RAG 来说应该是很大的促进。用 OpenAI 联创 Andrej Karpathy 的一张图做个类比,他把 LLM 比喻为一台计算机的 CPU, 把上下文类比为计算机的内存,那么以向量为代表的数据库,就可以看作是这台计算机的硬盘 问题7:RAG的查询和排序能力比如单纯依靠向量数据库进行单路召回很难满足 RAG 落地要求。目前 RAG 大多面向C端个人知识库这样的简单场景,这些场景的用户数据,基本都是文档,那么个人用户对于文档的提问,大体上都是围绕着摘要总结来做的,答案看上去差不多就行。当面向B端时,单靠向量检索就力不从心了,一来无法对精确信息召回,二来无法与企业内部信息系统集成(大量结构化数据)。所以必须在检索阶段引入多路召回和重排序,保证数据查询的准确度。 问题8:如何应对复杂多变的数据这些数据包含各种格式,更复杂的还包含各类图表等,如果在没有理解这些语义的基础之上直接提供 RAG 方案,例如简单的根据文字空白就来切分段落,就会导致语义丢失从而让最终查询的结果也是混乱不堪。infiniFlow提出的 Infinity AI原生数据库。它旨在应对RAG在企业级应用中所面临的复杂查询挑战:这包括如何将企业现有的各类数据——不仅涵盖非结构化的内容如文档和图片,也包括结构化的信息系统——进行有效整合,并在此基础上实现多路召回机制和最终的融合排序解决方案。 ? 部署体验 ragflow本地容器化部署先拉一下代码 gitclonehttps://github.com/infiniflow/ragflow.git
ragflow默认从hf上下载模型,如果没有梯子,就配置一下ragflow/docker/docker-compose.yml文件里面的hf的endpoint地址,改成 https://hf-mirror.com 接着按照下面步骤启动容器即可 cdragflow/docker/
chmod+x./entrypoint.sh
sudosysctl-wvm.max_map_count=262144
sudodockercomposeup-d
服务启动后,查看一下日志 sudodockerlogs-fragflow-server
看到这个就ok了 打开 http://localhost:80 即跳转登录页面,注册之后就可以进入 通过ngrok配置转发ragflow服务ngrok在ubuntu的快速安装 sudoaptinstallsnapd#先安装snap snapinstallngrok
安装完之后需要在官网注册一下,并且配置token ngrokconfigadd-authtoken2d********Jpg
ngrok查看配置路径 ngrokconfigcheck
打开上面的配置路径,可以在authtoken字段下面增加tunnel字段。但是注意,官方只提供一个免费域名,也就是只能一个app配置这个域名,那其他app就会随机分配域名 tunnels: ssh: proto:tcp addr:2222 jupyter: proto:http addr:8888 domain:assured-fowl-gladly.ngrok-free.app ragflow: proto:http addr:80
除了上面proto、addr、domain字段之外,还有下面配置 要注意:ngrok管道只能起一次,比如要起多个jupyter和ragflow两个app,那么只能一次过启动 ngrokstartjupyterragflow
不能分开在不同的终端分别执行 ngrok start jupyter 和 ngrok start ragflow。 但是如果你不想动配置管道,且在启动ragflow服务时,指定了域名,可以这样 ngrokhttp--domain=assured-fowl-gladly.ngrok-free.app80
|