chat with pennsieve
1.0.0
これは、ザカリー・アイブス博士の指導の下で開発された研究プロジェクトのコンポーネントです。最初の目標は、Pennsieveデータベースの上にグラフ層を開発し、複雑で多用途のファイル形式から医療データを効果的にデータ抽出して機械学習を可能にすることです。このコンポーネントは、データベースとの自然言語の相互作用を可能にします。
注:すべてのメソッドは、公開されるとリンクされる別のリポジトリを使用して、NEO4J上に構築された基礎となるグラフに実装されました。このプロジェクトは箱から出して使用する準備ができていますが、基礎となるグラフが入っていないと、結果は得られません。
__init__.py :アプリパッケージを初期化します。config.py :構成変数と環境変数を処理します。database.pyデータベース接続を管理します。setup_neo4j_graph() .envファイルで提供されるURL、ユーザー名、およびパスワードで構成されたNEO4Jグラフを返します。setup_neo4j_graph() langchain neo4jデータベースラッパーを返します。使用される重要な方法: query()およびrefresh_schema() 。 langchain neo4jgraphドキュメントmain.py :アプリケーションのエントリポイント。 qa_chain.pyからrun_query(user_query: str)を呼び出して、ユーザークエリを渡して結果を取得します。それはすべての複雑さを抽象化し、システムと対話するための簡単なインターフェイスを提供します。dataguide.py :データベースからdataguideパスを抽出し、それらをCypherパスにフォーマットします。extract_dataguide_paths(graph: Neo4jGraph) :cypherクエリを使用して、ルートから葉までのデータギャイドパスを抽出します。format_paths_for_llm(results: List[Dict[str, Any]]) : extract_dataguide_pathsの結果は、一致クエリの有効なCypherパスになります。test.pyグラフとの接続、Dataguideパスの抽出、およびそれらのフォーマットをテストします。各部品の時間を出力します。prompt_generator.py :このモジュールは、LangChainシステムとヒューマンプロンプトをlangchain.prompts.ChatPromptTemplateに作成および組み合わせる責任があります。プロジェクトの重要な部分は、プロンプトがラングチェーンフレームワークでどのように構造化され使用されるかを定義しているためです。get_cypher_prompt_template() :このメソッドは、このファイルで作成されたChatPromptTemplateインスタンスを返します。システムと人間のプロンプトを単一のテンプレートに組み合わせたもので、 qa_chain.pyのGraphCypherQAChainからCypherクエリを生成するために使用できます。input_variablesで、プロンプトに含まれる変数を指定し、プロンプトのテキストを定義するtemplateです。promptで、システムメッセージのテキストを定義します。promptで、人間のメッセージのテキストを定義します。from_messages()です。これは、メッセージテンプレートのリストを取り、それらをチャットプロンプトに結合します。qa_chain.py run_query(user_query: str)関数を定義します。これは、すべてのプロジェクトコンポーネントを統合し、ユーザークエリでGraphCypherQAChainを実行します。ChatOpenAI AzureChatopenaiに置き換えます。__init__.py :アプリパッケージを初期化します。generate_descriptions.pyパスのLLMSからの説明を生成するシステムプロンプトを定義します。generate_path_descriptions(all_paths: List[str]) :LLMを使用して指定されたパスの説明を生成します。説明のリストを出力します。generate_embedding(path_description: str) :openai埋め込みAPIを使用して、指定されたパス説明の埋め込みを生成します。random_path_generator.py :データベースからランダムパスを生成し、それらをCypherパスにフォーマットする方法を提供します。vectorDB_setup.pyコンテナを起動し、接続し、コレクションスキーマを定義し、コレクションを作成し、データを挿入し、ベクターの類似性検索を実行する方法を提供します。main.py :このディレクトリのすべての機能を組み合わせたラッパー関数。たとえば、 get_similar_paths_from_milvusは、 app/qa_chain.pyで使用され、ユーザークエリを使用してベクトルの類似性検索を実施します。test.py :さまざまな機能をテストする方法。現在コメントしています。write_read_data.py呼び出しから生成されたCypherパスと説明を保存するための簡単な書き込みと読み取り方法。fill_collection_with_random_paths in paths_vectorDB/main.pyは、API呼び出しから生成されたパスと説明をdata.txtに書き留めます。env.sample :Project Root Directoryでこのコピーを作成し、 .envに変更します。値に記入します。.gitignore :Gitで無視されるファイルとディレクトリを指定します。README.md :プロジェクトのドキュメント。docker-compose.yml :milvus dbのDockerファイル。新しいバージョンがある場合は、このファイルを置き換えます。 docker-compose.ymlという名前で、ルートディレクトリに配置されていることを確認してください。requirements.txt :txt:Python依存関係と開発に使用される互換性のあるバージョン。注: requirements.txtファイルはpipenvを介して作成されました。 このプロジェクトを始めるのは簡単です。以下の手順に従うことができます。
リポジトリをクローンします:
git clone https://github.com/hussainzs/chat-with-pennsieve.git
cd project_root注:次の手順を進める前に、プロジェクトルートディレクトリにいることを確認してください。
依存関係をインストールします:
pip install -r requirements.txt環境変数の設定:
env.sampleをコピーして、ファイルを.envに変更し、必要な値に記入します。NEO4Jデスクトップをセットアップ:
.envファイルを更新します。デフォルト値が記入されています。app/main.pyを実行:
appディレクトリに移動し、 main.pyを実行します。目的のユーザークエリがrun_query(user_query)関数の引数として渡されていることを確認してください。docker-compose.ymlがあることを確認してください。 App/main.pyを実行すると、Milvusコンテナは端末コマンドを実行することにより自動的に開始されます。詳細については、 paths_vectorDB/vectorDB_setup.pyをご覧ください。volumesという名前のルートディレクトリに新しいフォルダーをダウンロードして作成します。フォルダーには、3つのサブフォルダーが含まれています: milvus 、 minio 、 etcd 。注: app/main.py実行するときに予想出力をさらに明確にするために、予想出力と呼ばれるフォルダー内のシステムから生成された2つのPDFの出力を2つ添付しています。
first_output.pdfという名前のファイルは、ユーザーがデフォルト値の新しいセッションでapp/main.py初めて実行したときに予想されることを示します。 (初めて実行すると、すべてをダウンロードするのに時間がかかる場合があります)regular_output.pdfは、ユーザーがデフォルト値の通常のセッションでapp/main.pyを実行したときに予想されることを示します。 appとpaths_vectorDBの両方でプロンプトを強化すると、LLMパフォーマンスが大幅に向上する可能性があります。私は、システムプロンプトの高品質の例がパスの説明生成の品質を向上させると目撃しました。システムプロンプトは、LLMからの最終回答にも大きな影響を与えます。paths_vectorDB/vectorDB_setup.py内のsearch_similar_vectorsメソッドの「IP」(内部製品)からCOSINEに類似性メトリックを変更します。app/main.py.