我们为需要为人工智能应用程序提供可靠、可立即投入生产的数据层的开发人员而构建
Cognee 实现了可扩展的模块化 ECL(Extract、Cognify、Load)管道,使您能够互连和检索过去的对话、文档和音频转录,同时减少幻觉、开发人员工作量和成本。在 Google Colab 笔记本中尝试一下或查看我们的文档
如果您有疑问,请加入我们的 Discord 社区
pip 安装 cognee
pip install 'cognee[postgres]'
诗歌添加科尼
诗歌添加 cognee -E postgres
import os os.environ["LLM_API_KEY"] = "YOUR OPENAI_API_KEY"
或者
import cognee cognee.config.set_llm_api_key("YOUR_OPENAI_API_KEY")
您还可以通过创建 .env 文件来设置变量,这是我们的模板。要使用不同的 LLM 提供商,请查看我们的文档以了解更多信息
如果您使用 Network,请在 Graphistry 上创建一个帐户以可视化结果:
cognee.config.set_graphistry_config({ "username": "YOUR_USERNAME", "password": "YOUR_PASSWORD" })
(可选)要运行 UI,请转到 cognee-frontend 目录并运行:
npm run dev
或者在 docker 容器中运行所有内容:
docker-compose up
然后导航到 localhost:3000
如果您想将 Cognee 与 PostgreSQL 一起使用,请确保在 .env 文件中设置以下值:
DB_PROVIDER=postgres DB_HOST=postgres DB_PORT=5432 DB_NAME=cognee_db DB_USERNAME=cognee DB_PASSWORD=cognee
首先,将.env.template
复制到.env
并将 OpenAI API 密钥添加到 LLM_API_KEY 字段。
该脚本将运行默认管道:
import cogneeimport asynciofrom cognee.api.v1.search import SearchTypeasync def main():# 为 cognee 创建一个干净的状态 -- 重置数据和系统状态print("重置 cognee 数据...")await cognee.prune.prune_data()await cognee.prune.prune_system(metadata=True)print("数据重置完成.n")# cognee知识图谱将基于此 texttext = """ 自然语言处理 (NLP) 是计算机科学和信息检索的跨学科子领域。 """print("将文本添加到 cognee:")print(text.strip()) # 添加文本,并使其可用于 cognifyawait cognee.add(text)print("文本添加成功。n") print("运行 cognify 创建知识图...n")print("Cognify 进程步骤:")print("1.对文档进行分类:确定输入文本的类型和类别。")print("2.检查权限:确保用户拥有处理文本所需的权限。")print(" 3. 提取文本块:将文本分解为句子或短语进行分析。")print("4.添加数据点:存储提取的数据块以进行处理。")print("5.生成知识图谱:提取实体和关系以形成知识图谱。")print("6.总结文本:创建简洁的内容摘要,以便快速完成Insights.n") # 使用 LLM 和 Cognee 创建知识图await cognee.cognify()print("Cognify processcomplete.n") query_text = 'Tell me about NLP'print(f"通过查询搜索 cognee 以获得见解:'{query_text}'")# 查询 cognee 以获取有关添加的文本的见解search_results = wait cognee.search(SearchType.INSIGHTS, query_text=query_text) print("搜索结果:" )# 显示 search_results 中 result_text 的结果:print(result_text)# 示例输出: # ({'id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), '名称': “自然语言处理”、“描述”: '计算机科学和信息检索的跨学科子领域。'}, {'relationship_name': 'is_a_subfield_of', 'source_node_id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'target_node_id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 15, 473137, tzinfo=datetime.timezone.utc)}, {'id ': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), '名称': “计算机科学”,“描述”: '计算和信息处理的研究。'}) # (...)## 它表示知识图谱中的节点和关系:# - 第一个元素是源节点(例如,'自然语言处理')。# - 第二个元素是节点之间的关系(例如,'is_a_subfield_of')。# - 第三个元素是目标节点(例如,'计算机科学')。if __name__ == '__main__':asyncio.run(main() )
运行此脚本时,您将在控制台中看到分步消息,帮助您跟踪执行流程并了解脚本在每个阶段执行的操作。此示例的一个版本位于: examples/python/simple_example.py
cognee 框架由可分组为管道的任务组成。每个任务可以是业务逻辑的独立部分,可以与其他任务绑定以形成管道。这些任务将数据保存到您的内存存储中,使您能够搜索过去对话、文档或您存储的任何其他数据的相关上下文。
以下是它如何查找默认 cogniify 管道的示例:
要为管道运行准备数据,首先我们需要将其添加到元存储中并对其进行规范化:
从以下开始:
text = """Natural language processing (NLP) is an interdisciplinary subfield of computer science and information retrieval""" await cognee.add(text) # Add a new piece of information
下一步我们制定一个任务。该任务可以是我们需要的任何业务逻辑,但重要的是它应该封装在一个函数中。
在这里,我们展示了一个创建简单的 LLM 分类器的示例,该分类器采用 Pydantic 模型,然后在分析每个块后将数据存储在图和向量存储中。我们仅提供了一个片段供参考,但请随意查看我们的存储库中的实现。
async def chunk_naive_llm_classifier( data_chunks: list[DocumentChunk], classification_model: Type[BaseModel] ): # Extract classifications asynchronously chunk_classifications = await asyncio.gather( *(extract_categories(chunk.text, classification_model) for chunk in data_chunks) ) # Collect classification data points using a set to avoid duplicates classification_data_points = { uuid5(NAMESPACE_OID, cls.label.type) for cls in chunk_classifications } | { uuid5(NAMESPACE_OID, subclass.value) for cls in chunk_classifications for subclass in cls.label.subclass } vector_engine = get_vector_engine() collection_name = "classification" # Define the payload schema class Keyword(BaseModel): uuid: str text: str chunk_id: str document_id: str # Ensure the collection exists and retrieve existing data points if not await vector_engine.has_collection(collection_name): await vector_engine.create_collection(collection_name, payload_schema=Keyword) existing_points_map = {} else: existing_points_map = {} return data_chunks ...
我们有许多任务可以在您的管道中使用,您也可以创建适合您的业务逻辑的任务。
一旦我们有了任务,就可以将它们分组到管道中。这个简化的代码片段演示了如何将任务添加到管道中,以及它们如何将信息从一个管道传递到另一个管道。
Task( chunk_naive_llm_classifier, classification_model = cognee_config.classification_model, ) pipeline = run_tasks(tasks, documents)
要查看工作代码,请检查我们存储库中的 cognee.api.v1.cognify 默认管道。
Cognee 支持针对不同操作的多种工具和服务:
模块化:Cognee 本质上是模块化的,使用分组到管道中的任务
本地设置:默认情况下,LanceDB 与 NetworkX 和 OpenAI 一起在本地运行。
矢量存储:Cognee 支持 LanceDB、Qdrant、PGVector 和 Weaviate 进行矢量存储。
语言模型 (LLM) :您可以使用 Anyscale 或 Ollama 作为您的 LLM 提供商。
图存储:除了 NetworkX 之外,还支持 Neo4j 进行图存储。
用户管理:创建个人用户图并管理权限
在这里查看我们的演示笔记本
请参阅 cognee 快速入门指南以获取重要的配置信息。
码头工人组成
请参阅 cognee 开发指南以获取重要的测试版信息和使用说明。
pip 安装 cognee
<样式>表格{宽度:100%; } </风格>
姓名 | 类型 | 目前状态 | 已知问题 |
---|---|---|---|
奎德兰特 | 向量 | 稳定✅ | |
韦维阿特 | 向量 | 稳定✅ | |
兰斯数据库 | 向量 | 稳定✅ | |
新4j | 图形 | 稳定✅ | |
网络X | 图形 | 稳定✅ | |
福克数据库 | 矢量/图形 | 不稳定 | |
PG向量 | 向量 | 不稳定 | Postgres DB 返回超时错误 |