Cognita: 开源RAG框架助力生产级应用开发

news/2024/10/12 14:08:39


Cognita简介
Cognita是一个开源的RAG(检索增强生成)框架,由TrueFoundry开发,旨在帮助开发者构建模块化、可扩展的生产级应用程序。与Langchain和LlamaIndex等主要用于快速原型开发的框架不同,Cognita专注于提供一个组织良好的代码库结构,使RAG组件模块化、API驱动且易于扩展。

Cognita的主要优势
提供了一个中心化的可重用组件库,包括解析器、加载器、嵌入器和检索器。
通过UI界面,使非技术用户也能轻松上传文档并进行问答。
完全API驱动,便于与其他系统集成。
支持多种文档检索方法,如相似性搜索、查询分解、文档重排等。
支持使用最先进的开源嵌入和重排模型。
支持使用Ollama等工具进行本地LLM部署。
支持增量索引,减少计算负担并避免重复索引。
Cognita架构
Cognita的整体架构由以下几个主要组件构成:

数据源: 存储待索引文档的位置,如S3存储桶、数据库等。
元数据存储: 存储集合(一组文档)的元数据信息,包括集合名称、向量数据库信息、关联数据源等。
LLM网关: 统一代理各种嵌入和LLM模型的请求。
向量数据库: 存储解析文件的嵌入和元数据,目前支持Qdrant和SingleStore。
索引作业: 负责协调索引流程的异步作业,可手动启动或定期运行。
API服务器: 同步处理用户查询并生成答案,每个应用程序可以完全控制检索和回答过程。
数据索引流程
定期触发索引作业
扫描数据源中的所有数据点(文件)
比较向量数据库状态和数据源状态,确定新增、更新和删除的文件
下载新增和更新的文件
解析和分块处理文件
使用嵌入模型对分块进行嵌入
将嵌入的分块及元数据存入向量数据库
问答流程
用户发送查询请求
路由到相应的查询控制器
构建一个或多个检索器
构建问答链或代理
嵌入用户查询并获取相似分块
使用LLM模型生成答案
更新相关分块的元数据(如预签名URL等)
返回答案和相关文档分块
本地运行Cognita
Cognita提供了一种简单的方法来在本地运行整个系统,推荐使用Docker Compose(版本25+)。

复制models_config.sample.yaml为models_config.yaml
默认配置使用本地提供者,需要infinity和ollama服务器
如果有OpenAI API密钥,可以在models_config.yaml中取消注释openai提供者,并在compose.env中更新OPENAI_API_KEY

docker-compose --env-file compose.env up

这将启动以下服务:

cognita-db: 用于存储集合和数据源元数据的Postgres实例
qdrant-server: 本地向量数据库服务器
cognita-backend: Cognita的FastAPI后端服务器
cognita-frontend: Cognita的前端

Qdrant服务器: http://localhost:6333
后端: http://localhost:8000
前端: http://localhost:5001

docker-compose --env-file compose.env --profile ollama --profile infinity up

自定义Cognita
Cognita的设计理念是"一切皆可用,一切皆可定制"。它提供了简单的方法来切换解析器、加载器、模型和检索器。

自定义数据加载器
继承backend/modules/dataloaders/loader.py中的BaseDataLoader类
在backend/modules/dataloaders/init.py中注册加载器
自定义嵌入器
在backend/modules/embedder/init.py中注册自定义嵌入
可以参考backend/modules/embedder/mixbread_embedder.py添加自己的嵌入器
自定义解析器
继承backend/modules/parsers/parser.py中的BaseParser类
在backend/modules/parsers/init.py中注册解析器
添加自定义向量数据库
继承backend/modules/vector_db/base.py中的BaseVectorDB
在backend/modules/vector_db/init.py中注册向量数据库
编写查询控制器
查询控制器负责实现RAG应用程序的查询接口。步骤如下:

在backend/modules/query_controllers/中添加查询控制器类
使用query_controller装饰器并传入自定义控制器名称
添加方法并使用HTTP装饰器(如post, get, delete)使其成为API
在backend/modules/query_controllers/init.py中导入自定义控制器类
使用TrueFoundry部署
Cognita可以轻松部署到TrueFoundry平台上。主要步骤包括:

在TrueFoundry注册并创建组织
设置集群和存储集成
创建ML仓库和工作空间
部署RAG应用程序
部署后,可以通过UI界面上传文档、创建数据源和集合,并进行问答交互。

开源贡献
Cognita欢迎社区贡献。您可以提出想法、反馈,或创建问题和错误报告。在贡献之前,请阅读贡献指南。

未来发展
Cognita的未来发展方向包括:

支持更多向量数据库(如Chroma、Weaviate等)
支持标量+二进制量化嵌入
支持RAG评估和可视化
支持带上下文的对话式聊天机器人
支持RAG优化的LLM(如stable-lm-3b、dragon-yi-6b等)
支持图数据库
总之,Cognita为构建生产级RAG应用提供了一个强大而灵活的框架。无论是本地开发还是云端部署,它都能满足开发者的需求,并且具有良好的可扩展性和可定制性。随着持续的开发和社区贡献,Cognita有望成为RAG应用开发的首选框架之一。

文章链接:www.dongaigc.com/a/cognita-open-source-rag-framework
https://www.dongaigc.com/a/cognita-open-source-rag-framework

www.dongaigc.com/p/truefoundry/cognita

https://www.dongaigc.com/p/truefoundry/cognita

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/70647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Nuxt.js 应用中的 ready 事件钩子详解

title: Nuxt.js 应用中的 ready 事件钩子详解 date: 2024/10/12 updated: 2024/10/12 author: cmdragon excerpt: ready 钩子是 Nuxt.js 中一个重要的生命周期事件,它在 Nuxt 实例初始化完成后被调用。当 Nuxt 已经准备好并准备开始处理请求或渲染页面时,这一钩子会被触发。…

Pywebview 5.2 storage_path传递参数参数无效

### 背景pywebview 5.2在我测试数据目录时,发现在启动界面后 webview 目录仍然为空```python def test_storage_dir():wind背景 pywebview 5.2 在我测试数据目录时,发现在启动界面后 webview 目录仍然为空 def test_storage_dir():window = webview.create_window(Storage Di…

E65 树形DP P3237 [HNOI2014] 米特运输

视频链接:E65 树形DP P3237 [HNOI2014] 米特运输_哔哩哔哩_bilibili P3237 [HNOI2014] 米特运输 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)// 树形DP O(n) #include <bits/stdc++.h> #define int long long using namespace std;const int N=500005,mod=1e9+7; …

MathType安装及使用教程

本文介绍了MathType的安装方法及一些使用技巧。MathType安装及使用教程 安装下载压缩包MathType_Crack_7.8.0.0.rar 百度云盘 提取码:81at 解压软件包,得到如下文件右键以管理员方式运行MathType-win-zh-7.8.0.0.exe;选择目标文件夹,可更换其他文件夹;选择中文语言;替换…

windows一些dos命令整理

说明: 1.打开文件方式,输入文件的绝对或者相对路径dos命令启用扩展下 cd chdir 格式:CHDIR [/D] [drive:][path] /d 除了改变驱动器的当前目录之外,还可改变当前驱动器。cd / 或者 cd \根目录 cd .. 上一层目录 切换盘符:如直接 d:或者c: 切换目录:cd 绝对或相对路径 CHD…

windows问题记录1

隐藏启动分区 1、win+R运行命令diskmgmt.msc 2、选择要隐藏的系统盘符,右键——更改驱动器号和路径3、将当前盘的驱动器号删除,删除时会提示两次,删除后电脑将不能访问此盘。不要将c盘取消驱动器号,负责可能系统无法启动。 关闭系统自动播放 需求:挂载cd盘,cd盘内容自动…

安全帽穿戴检测人脸闸机联动系统

安全帽穿戴检测人脸闸机联动系统结合安全帽穿戴检测技术和人脸识别技术,安全帽穿戴检测人脸闸机联动系统实现对进入工地施工区域人员是否穿戴安全帽进行精准监测和身份识别,安全帽穿戴检测人脸闸机联动系统通过摄像头对人员进行安全帽穿戴检测和人脸识别,只有在满足这两个条…

作业人员护目镜佩戴自动识别系统

作业人员护目镜佩戴自动识别系统利用先进的图像处理和人工智能技术,作业人员护目镜佩戴自动识别系统通过现场摄像头对作业人员的护目镜佩戴情况进行自动监测和识别。作业人员护目镜佩戴自动识别系统实现了作业人员护目镜佩戴的自动检测。通过布设摄像头并结合图像算法,作业人…