Cognita提供统一的平台来构建和部署AI应用程序,是全流程的RAG应用开发平台,与流行机器学习框架和工具集成,内置监控和可观测性功能,支持模型版本管理和实验跟踪。
适合希望简化整个机器学习生命周期的组织,特别是在需要端到端AI应用开发和部署的平台的场景。
项目地址:https://github.com/truefoundry/cognita
一、特点和优势
- 模块化设计:每个RAG组件都是独立的模块,如数据加载器、解析器、嵌入器等,易于维护和扩展,可在不同项目中重复使用,减少开发时间和精力。
- API驱动:所有组件都通过API进行交互,方便与其他系统集成,能够轻松连接现有的基础设施和数据流。
- 生产就绪:支持本地部署和生产环境部署,并提供无代码UI,方便非技术用户使用,可通过UI界面上传文档、执行查询和与系统互动。
- 增量索引:默认支持增量索引,只对新增、更新的数据进行处理,减少计算负担,提高效率。
- 多模态支持:支持音频和视频解析,可处理多种类型的数据。
- 可定制性:允许用户自定义数据加载器、嵌入器、解析器和向量数据库等组件,以满足特定的业务需求。
- 支持多种向量数据库:目前支持Qdrant和SingleStore,未来计划支持Chroma、Weaviate等,为用户提供了灵活的后端选择。
- 支持多种嵌入模型和LLM:支持OpenAI、Ollama等多种模型,可根据需求选择合适的模型。
二、平台架构
1. 数据层
- 数据源接入:
- Cognita具有强大的数据源接入能力,能够连接多种不同类型的数据源。它可以接入文件存储系统,如本地文件系统、云存储(像亚马逊S3等),从中获取各种格式的文档,包括但不限于PDF、DOCX、TXT等。同时,也能与数据库系统相连,例如关系型数据库(如MySQL、PostgreSQL)或非关系型数据库(如MongoDB),以获取结构化的数据。
- 对于实时数据更新的场景,Cognita支持数据的动态接入。例如,在一个企业知识管理系统中,当有新的知识库文档上传或者数据库中的知识表更新时,它能够及时感知并获取这些新的数据。
- 数据解析与预处理:
- 一旦数据接入,Cognita会对数据进行解析和预处理。对于文档类型的数据,它会利用专门的文档解析器将文档内容提取出来,并进行文本清洗操作,如去除多余的空格、特殊字符、HTML标签(如果是网页文档)等。
- 它还会将长文本进行分块处理,这是为了更好地适应后续的向量嵌入和检索操作。例如,将一个长篇的技术报告按照段落或者主题划分为合适大小的文本块,每个文本块作为一个独立的单元进行处理。
- 数据存储(向量数据库):
- Cognita采用向量数据库来存储经过处理的数据。目前支持Qdrant和SingleStore等向量数据库,向量数据库存储的是数据的向量表示,这些向量是通过嵌入模型对文本块进行转换得到的。
- 除了向量表示,还会存储相应的元数据,如文本块所属的原始文档名称、文档类型、创建时间等信息。这些元数据在检索和生成答案的过程中起到辅助作用,帮助筛选和排序最相关的文本块。
2. 模型层
- 嵌入模型:
- Cognita支持多种嵌入模型,如OpenAI、Ollama等。嵌入模型的作用是将文本块转换为向量表示。这些模型已经在大规模的文本语料上进行了训练,能够捕捉文本的语义信息,并将其映射到高维向量空间中。
- 例如,一个关于“人工智能在医疗领域的应用”的文本块,通过嵌入模型会被转换为一个向量,这个向量在向量空间中的位置与其他具有相似语义的文本块(如“AI技术在医学影像诊断中的应用”)的向量位置比较接近。
- 语言模型(LLM):
- 在生成回答的阶段,Cognita利用语言模型(LLM)。这些LLM可以根据检索到的相关文本块的向量和内容,结合用户的问题,生成自然流畅的回答。
- 模型网关在模型层起到了统一管理的作用,它提供了一个统一的接口来调用不同的嵌入模型和语言模型,使得系统可以灵活地选择和切换模型,以满足不同的应用场景和性能要求。
3. 应用层
- API服务器:
- API服务器是Cognita与外部应用程序或用户进行交互的核心组件。它接收来自外部的用户查询请求,这些请求可以通过RESTful API等方式发送。
- API服务器会对请求进行处理,包括验证请求的合法性、解析请求的内容等操作。然后,它会根据请求的类型和系统的配置,调用相应的检索和生成模块来处理请求,并将最终的回答返回给用户。
- 在处理多个并发请求时,API服务器具有良好的扩展性,能够根据流量的增加自动调整资源分配,以确保系统的性能和稳定性。
- 检索与生成模块:
- 检索模块负责根据用户的问题,在向量数据库中查找最相关的文本块。它会将用户问题也转换为向量形式,然后通过计算向量相似度(如余弦相似度)的方法,从向量数据库中检索出与问题向量相似度较高的文本块。
- 生成模块则利用检索到的文本块和语言模型,生成回答。它会对检索到的文本块进行排序和筛选,选取最相关的部分,然后将这些内容和用户问题一起作为输入,提供给语言模型,让语言模型生成自然语言回答。
- 用户界面(UI)组件:
- Cognita提供了无代码UI,方便非技术用户使用。用户可以通过UI界面上传文档、执行查询和与系统互动。UI界面设计简洁直观,用户可以轻松地进行操作,如在企业内部知识库应用场景中,员工可以通过简单的搜索框输入问题,获取系统生成的答案。
三、功能模块
1.数据索引:负责从各种数据源(如S3、数据库、本地磁盘等)收集、解析和嵌入文档,将文本数据转换为可被AI模型高效处理的数值表示。定期触发索引作业,扫描数据源中的所有数据点,比较向量数据库状态和数据源状态,确定新增、更新和删除的文件,然后下载、解析和分块处理文件,使用嵌入模型对分块进行嵌入,最后将嵌入的分块及元数据存入向量数据库。
2.API服务器:同步处理用户查询并生成答案,每个应用程序可以完全控制检索和回答过程,能够同时处理多个查询,并随着流量的增加而自动扩展。
3.模型网关:统一管理各种嵌入模型和LLM模型,提供统一的API接口,方便调用不同的模型。
4.向量数据库:存储嵌入向量和文档元数据,用于相似性搜索,以实现快速准确的检索。
5.问答交互:用户发送查询请求,路由到相应的查询控制器,构建一个或多个检索器,构建问答链或代理,嵌入用户查询并获取相似分块,使用LLM模型生成答案,更新相关分块的元数据,返回答案和相关文档分块。
四、内容准确性
1. 数据更新机制
- 增量索引:Cognita默认支持增量索引功能。这意味着它只会对新增、更新的数据进行处理,而不是每次都重新索引全部数据。通过定期扫描数据源,如文件系统、数据库等,它能够快速识别出哪些文件是新添加的,哪些文件的内容发生了变化。例如,在企业知识库场景中,如果有新的政策文件发布或者旧文件进行了修订,Cognita会及时将这些变化更新到索引中,确保用户获取到最新的知识。
- 实时数据感知:对于一些需要实时更新知识的场景,Cognita可以配置为实时或近实时地获取数据变化。它可以与数据源建立连接,当数据源有新的数据插入、更新或删除操作时,能够迅速响应并更新相关的索引。比如在金融新闻数据应用中,Cognita可以连接到金融新闻的实时数据源,一旦有新的财经新闻发布,立即将其纳入索引范围,保证知识的时效性。
2. 数据质量控制
- 数据清洗与预处理:在数据摄入阶段,Cognita会对数据进行清洗和预处理。它会去除文档中的噪声信息,如多余的空格、特殊字符、格式标记等。对于从网页等来源获取的数据,还会去除HTML标签等无关内容。同时,它会对文本进行适当的格式化处理,如统一文本编码、处理换行符等,确保数据的质量和一致性,这有助于提高知识的准确性。
- 数据验证与纠错:Cognita可以集成数据验证机制,对数据的内容进行检查。例如,在处理企业内部的结构化数据时,它可以验证数据是否符合预先定义的格式和规则,如日期格式是否正确、数字字段是否在合理范围内等。对于发现的错误或可疑数据,可以通过标记、纠正或者与用户交互的方式进行处理,防止错误知识进入索引。
3. 检索与生成优化
- 语义理解与检索准确性:Cognita利用先进的嵌入模型将文本转换为向量表示,并通过计算向量相似度进行检索。这些嵌入模型经过大量的文本训练,能够很好地捕捉文本的语义信息。在检索过程中,通过合理的相似度计算方法(如余弦相似度)和阈值设置,确保检索出的文本块与用户问题高度相关。例如,当用户询问“人工智能在医疗影像诊断中的应用”,系统能够准确检索出包含相关内容的文档段落,而不是仅仅匹配关键词,从而提高知识获取的准确性。
- 生成答案的验证与优化:在生成答案阶段,Cognita结合检索到的高质量文本块和语言模型来生成回答。它可以通过设置一些规则和策略来优化生成的答案。例如,对生成的答案进行语法检查、逻辑验证,确保答案通顺合理。同时,系统可以根据用户反馈和历史数据,对生成答案的质量进行评估和优化,不断提高答案的准确性。
4. 知识来源管理与验证
- 数据源可信度评估:Cognita允许对知识来源进行管理和评估。在接入数据源时,可以对数据源的可信度进行标记和分类。例如,对于企业内部经过审核的官方文件,可以标记为高可信度来源;而对于用户生成的内容或者外部未经严格审核的资料,可以设置较低的可信度等级。在检索和生成答案时,系统可以根据可信度权重来提供知识,优先使用高可信度的知识源,保证知识的准确性。
- 多源知识融合与验证:当知识来自多个不同的数据源时,Cognita可以进行知识融合和交叉验证。例如,在回答一个关于行业趋势的问题时,系统可以整合来自行业报告、专家博客、新闻媒体等多个来源的知识。通过对比和验证这些不同来源的内容,去除可能存在的矛盾或不准确的信息,提供一个综合且准确的答案。
五、应用场景
1. 企业知识管理与问答系统
- 内部知识库查询:企业通常拥有大量的内部文档,如操作手册、政策文件、技术文档等。Cognita可以将这些文档进行索引,员工在需要信息时,通过自然语言提问,就能快速从知识库中获取准确的答案。例如,在一家软件公司,开发人员可以询问关于特定代码库的使用方法,或者查询公司内部软件开发流程的详细规定。
- 跨部门知识共享:不同部门之间往往存在知识壁垒。Cognita搭建的平台可以整合各部门的知识,促进跨部门的知识交流。比如,市场部门可以查询技术部门关于产品技术细节的知识,以便更好地制作宣传材料;而技术部门也能了解市场部门对产品功能的反馈,通过问答平台获取相关文档信息。
- 培训与学习支持:对于新员工培训或者员工技能提升,Cognita可以作为一个辅助学习工具。将培训资料和学习资源纳入系统,员工可以随时就学习内容提问,系统提供针对性的解答,提高学习效率。
2. 智能客服领域
- 在线客服自动应答:在电商、金融等行业,客服需要处理大量的客户咨询。Cognita可以集成到客服系统中,利用已有的常见问题解答(FAQ)文档、产品说明等,自动回答客户的常见问题。例如,在电商平台上,客户询问产品的退换货政策、产品规格等问题时,系统能够快速生成准确的回答,提高客服响应速度和客户满意度。
- 复杂问题转接辅助:对于一些复杂的、需要人工客服介入的问题,Cognita可以帮助客服人员快速获取相关知识。当客户提出复杂的技术问题或者涉及多个业务领域的问题时,客服人员可以通过平台快速查找相关文档和信息,更好地为客户提供服务,减少客户等待时间。
3. 内容创作与辅助写作
- 资料收集与启发思路:在新闻、自媒体、学术研究等领域,创作者需要收集大量的资料。Cognita可以帮助他们从各种文档中快速检索出与主题相关的内容。例如,一名记者在撰写一篇关于科技行业最新趋势的报道时,通过平台可以获取不同公司的技术报告、行业分析等相关文档,为写作提供素材和灵感。
- 内容生成辅助:结合语言模型,Cognita可以辅助生成内容。比如,在撰写产品介绍文案时,根据产品文档和相关资料,系统可以生成部分内容框架或者提供一些描述性语句,创作者可以在这个基础上进行修改和完善,提高写作效率。
4. 智能助手应用
- 个人信息管理助手:对于个人用户,Cognita可以构建个人智能助手。它可以索引个人的笔记、文档、日程安排等信息,用户可以通过自然语言询问来获取信息,如查询特定日期的日程安排、查找某份重要文件的位置等。
- 办公智能助手:在办公场景中,Cognita可以帮助用户管理办公文档。例如,用户可以询问关于某个项目文档的最新版本、特定文档中的关键内容等,还可以协助进行文档的分类和整理,提高办公效率。
六、未来发展方向
1.支持更多向量数据库:如Chroma、Weaviate等,为用户提供更多的选择。
2.支持标量+二进制量化嵌入:提高嵌入的效率和性能。
3.支持RAG评估和可视化:方便用户对RAG应用的效果进行评估和分析。
4.支持带上下文的对话式聊天机器人:提升聊天机器人的交互能力和智能水平。
5.支持RAG优化的LLM:如stable-lm-3b、dragon-yi-6b等,进一步提高生成答案的质量。
6.支持图数据库:拓展数据存储和处理的方式,更好地处理复杂的知识图谱等数据结构。