AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


RAGFlow(2):集成深度文档理解能力的RAG引擎
发布日期:2024-05-02 11:25:20 浏览次数: 2052


RAG常见的应用架构如下,整个架构图的核心主要是两部分:

  1. 向量数据库:文档向量存储与查询召回
  2. 中间件:文档分块处理并转成合适的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本地容器化部署

先拉一下代码

git clone https://github.com/infiniflow/ragflow.git

ragflow默认从hf上下载模型,如果没有梯子,就配置一下ragflow/docker/docker-compose.yml文件里面的hf的endpoint地址,改成 https://hf-mirror.com接着按照下面步骤启动容器即可

cd ragflow/docker/

chmod +x ./entrypoint.sh

sudo sysctl -w vm.max_map_count=262144

sudo docker compose up -d

服务启动后,查看一下日志

sudo docker logs -f ragflow-server

看到这个就ok了打开 http://localhost:80 即跳转登录页面,注册之后就可以进入

通过ngrok配置转发ragflow服务

ngrok在ubuntu的快速安装

sudo apt install snapd  # 先安装snap
snap install ngrok 

安装完之后需要在官网注册一下,并且配置token

ngrok config add-authtoken 2d********Jpg

ngrok查看配置路径

ngrok config check

打开上面的配置路径,可以在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

除了上面protoaddrdomain字段之外,还有下面配置要注意:ngrok管道只能起一次,比如要起多个jupyter和ragflow两个app,那么只能一次过启动

ngrok start jupyter ragflow

不能分开在不同的终端分别执行 ngrok start jupyter 和 ngrok start ragflow。但是如果你不想动配置管道,且在启动ragflow服务时,指定了域名,可以这样

ngrok http --domain=assured-fowl-gladly.ngrok-free.app 80


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询