赞
踩
了解 Cognita 如何简化组织代码库的过程,同时提供用于探索各种 RAG 自定义的多功能前端。 了解它如何促进本地无缝测试以及在生产就绪环境中轻松部署。
Langchain/LlamaIndex 提供易于使用的抽象,可用于在 Jupyter Notebook 上进行快速实验和原型设计。 但是,当产品投入生产时,会遇到一些限制,例如组件应该是模块化的、易于扩展和扩展。 这就是 Cognita 发挥作用的地方。 Cognita 在底层使用 Langchain/Llamaindex 并为您的代码库提供组织,其中每个 RAG 组件都是模块化、API 驱动且易于扩展的。 Cognita 可以在本地设置中轻松使用,同时为您提供生产就绪环境以及无代码 UI 支持。 Cognita 默认情况下还支持增量索引。
Cognita 是一个开源框架,用于组织 RAG 代码库以及用于处理不同 RAG 自定义的前端。 它提供了一种简单的方法来组织代码库,以便轻松在本地测试它,同时还能够将其部署在生产就绪环境中。 从 Jupyter Notebook 生产 RAG 系统时出现的关键问题是:
Cognita 使定制和试验有关 RAG 系统的所有内容变得非常容易,并且仍然能够以良好的方式部署它。 它还附带一个 UI,可以更轻松地尝试不同的 RAG 配置并实时查看结果。 您可以在本地使用它,也可以使用/不使用任何 Truefoundry 组件。 然而,使用 Truefoundry 组件可以更轻松地测试不同的模型并以可扩展的方式部署系统。 Cognita 允许您使用一个应用程序托管多个 RAG 系统。
特征:
您可以使用 python 脚本或使用代码附带的 UI 组件在本地使用代码。
在使用 Cognita 之前,您需要确保系统上安装了 Python >=3.10.0,并且您可以创建虚拟环境以实现更安全、更简洁的项目设置。
建议使用虚拟环境以避免与其他项目或系统范围的Python包发生冲突。
导航到终端中项目的目录。 运行以下命令创建一个名为 venv 的虚拟环境(您可以将其命名为任何您喜欢的名称):
python3 -m venv ./venv
venv\Scripts\activate.bat
source venv/bin/activate
激活虚拟环境后,您将在终端提示符中看到其名称。 现在,您可以按照快速入门部分中提供的步骤安装 Cognita。
使用完 Cognita 后,请记住通过在终端中运行 deactivate 来停用虚拟环境。
以下是在本地运行 Cognita 且无需任何其他 Truefoundry 依赖项的说明
在项目根目录中执行以下命令:
pip install -r backend/requirements.txt
python -m local.ingest
这些命令使用 local.metadata.yaml 文件,您可以在其中设置 qdrant 集合名称、不同的数据源路径和嵌入器配置。
您可以通过从 run.py 中的 backend.modules.query_controllers.example.payload 导入来尝试不同的检索器和查询
您还可以启动 FastAPI 服务器: uvicorn --host 0.0.0.0 --port 8000 backend.server.app:app --reload 然后,Swagger 文档将位于: http://localhost:8000/ 对于本地版本,您 不需要使用 API 创建数据源、收集或索引它们,因为它由 local.metadata.yaml 和 ingest.py 文件处理。 您可以直接尝试检索器端点。
要使用前端 UI 进行查询,您可以转到:cd fronend 并执行yarn dev 来启动 UI 并进行操作。 更多内容请参阅前端自述文件
总体而言,Cognita 的架构由多个实体组成
整个代码库位于 backend/
. |-- Dockerfile |-- README.md |-- __init__.py |-- backend/ | |-- indexer/ | | |-- __init__.py | | |-- indexer.py | | |-- main.py | | `-- types.py | |-- modules/ | | |-- __init__.py | | |-- dataloaders/ | | | |-- __init__.py | | | |-- loader.py | | | |-- localdirloader.py | | | `-- ... | | |-- embedder/ | | | |-- __init__.py | | | |-- embedder.py | | | -- mixbread_embedder.py | | | `-- embedding.requirements.txt | | |-- metadata_store/ | | | |-- base.py | | | |-- client.py | | | `-- truefoundry.py | | |-- parsers/ | | | |-- __init__.py | | | |-- parser.py | | | |-- pdfparser_fast.py | | | `-- ... | | |-- query_controllers/ | | | |-- default/ | | | | |-- controller.py | | | | `-- types.py | | | |-- query_controller.py | | |-- reranker/ | | | |-- mxbai_reranker.py | | | |-- reranker.requirements.txt | | | `-- ... | | `-- vector_db/ | | |-- __init__.py | | |-- base.py | | |-- qdrant.py | | `-- ... | |-- requirements.txt | |-- server/ | | |-- __init__.py | | |-- app.py | | |-- decorators.py | | |-- routers/ | | `-- services/ | |-- settings.py | |-- types.py | `-- utils.py
Cognita 使得在解析器、加载器、模型和检索器之间切换变得非常容易。
- from backend.modules.dataloaders import LocalDirLoader
- from backend.types import DataSource
-
- data_source = DataSource(
- type="local",
- uri="sample-data/creditcards",
- )
-
- loader = LocalDirLoader()
-
-
- loaded_data_pts = loader.load_full_data(
- data_source=data_source,
- dest_dir="test/creditcards",
- )
-
-
- for data_pt in loaded_data_pts:
- print(data_pt)
- import asyncio
- from backend.modules.parsers import MarkdownParser
-
- parser = MarkdownParser()
- chunks = asyncio.run(
- parser.get_chunks(
- filepath="sample-data/creditcards/diners-club-black.md",
- )
- )
- print(chunks)
负责实现 RAG 应用程序的查询接口的代码。 这些查询控制器中定义的方法将添加到 FastAPI 服务器的路由。
- from backend.server.decorator import query_controller
-
- @query_controller("/my-controller")
- class MyCustomController():
- ...
- from backend.server.decorator import post
-
- @query_controller("/my-controller")
- class MyCustomController():
- ...
-
- @post("/answer")
- def answer(query: str):
- # Write code to express your logic for answer
- # This API will be exposed as POST /my-controller/answer
- ...
- ...
- from backend.modules.query_controllers.sample_controller.controller import MyCustomController
作为示例,我们在 backend/modules/query_controllers/example 中实现了示例控制器。 请参考以获得更好的理解
下载资源:Cognita
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。