🥥

CocoIndex - AI向けオープンソースデータフレームワーク

に公開

CocoIndexのオープンソースリリースを発表できることを大変嬉しく思います。CocoIndexは、データインデックス作成に特化したカスタム変換ロジックとインクリメンタルアップデートの両方をサポートする世界初のエンジンです。

https://github.com/cocoindex-io/cocoindex

CocoIndexは、セマンティック検索や検索拡張生成(RAG)などのAIアプリケーション向けにデータを準備するためのETLフレームワークです。データ駆動型のプログラミングモデルを提供し、データインデックス作成パイプラインの作成と維持を簡素化し、データの鮮度と一貫性を確保します。

CocoIndexは現在、Apache License 2.0の下でオープンソース化されています。これは、CocoIndexの中核機能が誰でも自由に使用、修正、配布できることを意味します。CocoIndexをオープンソース化することで、イノベーションを促進し、より広い採用を可能にし、その将来を形作るのを助ける活気あるコントリビューターのコミュニティを作り出すと信じています。Apache License 2.0を選択することで、個人開発者と企業の両方が、独自の拡張機能を作成する柔軟性を維持しながら、自信を持ってCocoIndexを自分たちのプロジェクトに組み込み、構築できるようにしています。

🔥 主な特徴

  • データフロープログラミング: レゴブロックのように変換を組み合わせてインデックス作成パイプラインを構築し、状態管理と可観測性を内蔵しています。
  • カスタムロジックのサポート: チャンキング、埋め込み、ベクトルストアを自由に選択できます。重複排除や調整などのカスタム変換で拡張可能です。
  • インクリメンタルアップデート: スマートな状態管理により、ファイルレベルでの変更を追跡して再計算を最小限に抑え、将来的にはチャンクレベルの粒度もサポート予定です。
  • Python SDK: パフォーマンスのためにRUSTコア🦀で構築され、使いやすさのための直感的なPythonバインディング🐍を通じて公開されています。

私たちは急速に進化しており、多くの機能と改善が近日中に提供される予定です。

🚀 はじめ方

  1. インストール: CocoIndex Pythonライブラリをインストールします:

    pip install cocoindex
    
  2. pgvector拡張機能を持つPostgresのセットアップ: Docker Composeがインストールされていることを確認し、Postgresデータベースを起動します:

    docker compose -f <(curl -L https://raw.githubusercontent.com/cocoindex-io/cocoindex/refs/heads/main/dev/postgres.yaml) up -d
    
  3. インデックス作成フローの定義: データをインデックス化するフローを作成します。例えば:

    @cocoindex.flow_def(name="TextEmbedding")
    def text_embedding(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope):
        data_scope["documents"] = flow_builder.add_source(cocoindex.sources.LocalFile(path="markdown_files"))
        doc_embeddings = data_scope.add_collector()
    
        with data_scope["documents"].row() as doc:
            doc["chunks"] = doc["content"].transform(
                cocoindex.functions.SplitRecursively(language="markdown", chunk_size=300, chunk_overlap=100))
    
            with doc["chunks"].row() as chunk:
                chunk["embedding"] = chunk["text"].transform(
                    cocoindex.functions.SentenceTransformerEmbed(model="sentence-transformers/all-MiniLM-L6-v2"))
    
                doc_embeddings.collect(filename=doc["filename"], location=chunk["location"],
                                       text=chunk["text"], embedding=chunk["embedding"])
    
        doc_embeddings.export(
            "doc_embeddings",
            cocoindex.storages.Postgres(),
            primary_key_fields=["filename", "location"],
            vector_indexes=[cocoindex.VectorIndex("embedding", cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY)])
    

詳細なチュートリアルについては、クイックスタートガイドを参照してください。

https://youtu.be/gv5R8nOXsWU?si=OlMI27zXOHyseA0f

🤗 コミュニティ

私たちは、コード改善、ドキュメント更新、問題報告、GitHubでの機能リクエスト、Discordでのディスカッションなど、あらゆる種類のコミュニティ貢献に非常に興奮しています。

私たちは、包括的で歓迎的でサポート的な環境を育成したいと考えています。CocoIndexへの貢献は、誰にとっても協力的で友好的で楽しいものであるべきです。一緒に、堅牢なデータインフラストラクチャを通じてより良いAIアプリケーションを構築しましょう。

CocoIndexで何を構築するのか楽しみにしています!

Discussion