AI アプリケーション向けに、信頼性が高く本番環境に対応したデータ レイヤーを必要とする開発者向けに構築します。
Cognee は、スケーラブルなモジュール式の ECL (抽出、認識、読み込み) パイプラインを実装しており、これにより、幻覚、開発者の労力、コストを削減しながら、過去の会話、ドキュメント、音声転写を相互接続して取得できるようになります。 Google Colab ノートブックで試すか、ドキュメントを参照してください。
質問がある場合は、Discord コミュニティに参加してください
pip インストール コグニー
pip インストール 'cognee[postgres]'
詩追加コニー
詩の追加 cogne -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 に移動します。
PostgreSQL で Cognee を使用する場合は、.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("resetting cognee data...")await cognee.prune.prune_data()await cognee.prune.prune_system(metadata=True)print("データリセット完了.n")# cognee ナレッジ グラフは、この text に基づいて作成されますtext = """ 自然言語処理 (NLP) は、コンピューター サイエンスと情報検索の学際的なサブフィールドです。 """print("cognee にテキストを追加:")print(text.strip( )) # テキストを追加し、cognifyawait で使用できるようにします。 cognee.add(text)print("テキストが正常に追加されました。n") print("ナレッジを作成するために cognify を実行していますグラフ...n")print("プロセス ステップの認識:")print("1. ドキュメントの分類: 入力テキストのタイプとカテゴリの決定。")print("2. アクセス許可の確認: ユーザーがテキストを処理するために必要な権限。")print("3. テキスト チャンクの抽出: 分析のためにテキストを文またはフレーズに分割します。")print("4.データ ポイントの追加: 抽出されたチャンクを処理用に保存します。")print("5. ナレッジ グラフの生成: エンティティと関係を抽出してナレッジ グラフを形成します。")print("6. テキストの要約: コンテンツの簡潔な要約を作成して迅速に作成します。 Insights.n") # LLM と cognee を使用してナレッジを作成する grawawait cognee.cognify()print("Cognify process complete.n") query_text = 'NLP について教えてください'print(f"Searching cognee for insight with query: '{query_text}'")# 追加された text に関する分析情報を cognee にクエリしますsearch_results = await 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'), 'ターゲットノード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), 'name': 'コンピュータサイエンス'、'説明': '計算と情報処理の研究。'}) # (...)## ナレッジ グラフ内のノードと関係を表します:# - 最初の要素はソース ノード (例: '自然言語処理')。# - 2 番目の要素はノード間の関係 (例: 'is_a_subfield_of')。# - 3 番目の要素はターゲット ノード (例: 'コンピュータ サイエンス') です。if __name__ == '__main__':asyncio.run(main())
このスクリプトを実行すると、実行フローを追跡し、スクリプトが各段階で何を行っているかを理解するのに役立つ段階的なメッセージがコンソールに表示されます。この例のバージョンは、 examples/python/simple_example.py
にあります。
cognee フレームワークは、パイプラインにグループ化できるタスクで構成されます。各タスクはビジネス ロジックの独立した部分にすることができ、他のタスクと結び付けてパイプラインを形成できます。これらのタスクにより、データがメモリ ストアに保存され、過去の会話、ドキュメント、または保存したその他のデータの関連コンテキストを検索できるようになります。
以下は、デフォルトの cognify パイプラインを検索する方法の例です。
パイプライン実行用のデータを準備するには、まずデータをメタストアに追加して正規化する必要があります。
以下から始めます:
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
次のステップでは、タスクを作成します。タスクには必要なビジネス ロジックを使用できますが、重要なのは、タスクを 1 つの関数にカプセル化する必要があるということです。
ここでは、Pydantic モデルを取得し、各チャンクを分析した後にデータをグラフ ストアとベクター ストアの両方に保存する単純な LLM 分類器を作成する例を示します。参考のために提供したのはほんの一部ですが、リポジトリで実装を自由にチェックしてください。
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 インストール コグニー
<スタイル> テーブル { 幅: 100%; } </スタイル>
名前 | タイプ | 現在の状態 | 既知の問題 |
---|---|---|---|
クドラント | ベクター | 安定しています ✅ | |
ウィアビエイト | ベクター | 安定しています ✅ | |
ランスDB | ベクター | 安定しています ✅ | |
Neo4j | グラフ | 安定しています ✅ | |
ネットワークX | グラフ | 安定しています ✅ | |
ファルコーDB | ベクトル/グラフ | 不安定 | |
PGベクトル | ベクター | 不安定 | Postgres DB がタイムアウト エラーを返す |