首页 > 其他分享 >Cognita: 开源RAG框架助力生产级应用开发

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

时间:2024-10-12 14:00:30浏览次数:8  
标签:RAG 嵌入 Cognita py modules 开源 backend


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

标签:RAG,嵌入,Cognita,py,modules,开源,backend
From: https://www.cnblogs.com/dongai/p/18460405

相关文章

  • AWS GenAI LLM Chatbot: 多模型多RAG驱动的聊天机器人解决方案
    aws-genai-llm-chatbotAWSGenAILLMChatbot:打造智能对话新体验在人工智能和自然语言处理技术快速发展的今天,聊天机器人已成为企业与用户交互的重要工具。AWSGenAILLMChatbot项目应运而生,为开发者提供了一个强大而灵活的解决方案,用于在AWS云平台上部署先进的AI驱动聊天......
  • ReplitLM: 开源代码生成模型的新突破
    ReplitLMReplitLM模型简介ReplitLM是由在线编程平台Replit公司开发的一系列开源大型语言模型(LLM),专门用于代码生成和自然语言处理任务。这些模型在大规模代码数据集上进行训练,能够理解和生成多种编程语言的代码,为开发人员提供强大的AI辅助编程工具。目前,ReplitLM模型系列......
  • Pywebview 5.2 storage_path传递参数参数无效
    背景pywebview5.2在我测试数据目录时,发现在启动界面后webview目录仍然为空deftest_storage_dir():window=webview.create_window('StorageDirectory',url='https://kimi.moonshot.cn/')webview.start(debug=True,private_mode=False,g......
  • 金字塔流(Pyramid Flow): 用于生成人工智能长视频的新文本-视频开源模型
    在"生成式人工智能"中的文本生成模型和图像生成模型大行其道之后,现在该是文本-视频模型大显身手的时候了,这个列表中的新模型就是pyramid-flow-sd3,它是一个开源模型,用于从文本或图像生成长达10秒的视频,而且是24fps的视频!该模型非常重要的点,可以免费使用,并且开源,因......
  • iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
    作者:UC浏览器后端工程师,梁若羽传统ELK方案众所周知,ELK中的E指的是ElasticSearch,L指的是Logstash,K指的是Kibana。Logstash是功能强大的数据处理管道,提供了复杂的数据转换、过滤和丰富的数据输入输出支持。Filebeat是师出同门的轻量级日志文件收集器,在处理大量日志文......
  • 大模型RAG入门到实战基础教程(非常详细),大模型RAG入门到精通,收藏这一篇就够了!
    写在前面大模型(LargeLanguageModel,LLM)的浪潮已经席卷了几乎各行业,但当涉及到专业场景或行业细分域时,通用大模型就会面临专业知识不足的问题。相对于成本昂贵的“PostTrain”或“SFT”,基于RAG的技术方案往成为一种更优选择。本文从RAG架构入手,详细介绍相关技术细节,并附上......
  • 圈子社交系统源码PHP前后端开源二次可扩展
    一、开源概述开源的圈子系统源码允许开发者自由下载、使用和修改,这有助于降低开发成本,提高开发效率,并促进技术的交流和共享。许多开源项目都提供了详细的文档和教程,以帮助开发者更好地理解和使用源码。二、具体实例基于Vue.js和uni-app的圈子系统技术栈:前端采用Vue.js和un......
  • 多客最新游戏陪玩源码APP开源提供独特丝滑陪玩体验
    多客最新游戏陪玩源码APP开源提供独特丝滑陪玩体验系统基于TP6+Uni-app框架开发;客户移动端采用uni-app开发,管理后台TH6开发。系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步,可快速打包生成APP;优秀全面功能和独立完善个性功能,非常适合陪玩、技能服务等领域使用......
  • 记录运行thingsboard开源项目中遇到的一些问题(windows系统安装)
    前端是thingsVue,通过git可以拉取前端代码,然后要使用yarn或者npm来安装,如果没有yarn用npm来安装就行但是运行前端时,一直遇到’npm’既不是内部命令也不是外部命令的报错。我解决的办法非常粗暴,就是遇到这种报错时就把node.js给卸载了,然后再安装。每次卸载后再安装就能成......
  • 星云ERP 1.2k star,一款完全开源的进销存ERP系统,附下载链接
    项目介绍本系统是基于SpringBoot框架,为中小企业提供完全开源、用户体验好的进销存ERP系统,解决开店难、管理难、数据统计难的问题。系统下载链接下载链接:  星云ERP下载主要技术框架Springboot2.2.2.RELEASEMyBatis-plus3.4.2Spring-session-data-redis2.2.0.R......