chat with pennsieve
1.0.0
這是在Zachary Ives博士的指導下開發的研究項目組成部分。最初的目標是在Pennsieve數據庫頂部開發圖層,並通過從復雜和多功能文件格式中提取醫療數據的有效數據來啟用機器學習。該組件可以與數據庫進行自然語言互動。
注意:所有方法均在基礎圖上實現,使用另一個存儲庫在NEO4J構建的基礎圖上實現,該存儲庫一旦公開就可以鏈接。該項目可以開箱即用,但是,如果沒有填充的基礎圖,您將無法獲得任何結果。
__init__.py :初始化應用程序包。config.py :處理配置和環境變量。database.py :管理neo4j數據庫連接。setup_neo4j_graph()了.envsetup_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查詢從根到葉提取dataguide路徑。format_paths_for_llm(results: List[Dict[str, Any]]) :格式從extract_dataguide_paths結果進入有效的cypher路徑,以進行匹配查詢。test.py :測試與neo4j圖,提取數據素路徑的連接並格式化它們。輸出每個部分所花費的時間。prompt_generator.py :此模塊負責創建和組合蘭鏈系統和人類提示到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 。__init__.py :初始化應用程序包。generate_descriptions.py :定義系統提示以生成Cypher路徑的LLMS的描述。generate_path_descriptions(all_paths: List[str]) :使用LLM生成給定路徑的描述。輸出描述列表。generate_embedding(path_description: str) :使用OpenAI嵌入式API生成給定路徑描述的嵌入。random_path_generator.py :提供從數據庫生成隨機路徑並將其格式化為Cypher路徑的方法。vectorDB_setup.py :提供啟動Milvus容器,與之連接的方法,定義集合模式,創建集合,插入數據並進行矢量相似性搜索。main.py :結合此目錄的所有功能的包裝函數。例如, get_similar_paths_from_milvus在app/qa_chain.py中使用用於使用用戶查詢進行矢量相似性搜索。test.py :測試各種功能的方法。目前發表評論。write_read_data.py :簡單的寫入和讀取方法,以存儲從API調用生成的Cypher路徑和描述。paths_vectorDB/main.py中的方法fill_collection_with_random_paths將從API呼叫生成的路徑和描述寫入data.txt中。env.sample :在您的項目root Directory中進行此副本,然後將其重命名為.env 。填寫值。.gitignore :指定git忽略的文件和目錄。README.md :項目文檔。docker-compose.yml :Milvus DB的Docker文件。如果有新版本,請替換此文件。確保將其命名為docker-compose.yml並放置在根目錄中。requirements.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 pdf,稱為預期輸出。
first_output.pdf的文件顯示了用戶在帶有默認值的新會話中首次運行app/main.py時的預期。 (當您第一次運行它時,可能需要一段時間才能下載所有內容)regular_output.pdf顯示了用戶在帶有默認值的常規會話中運行app/main.py時的預期。 app和paths_vectorDB中的提示可以顯著提高LLM的性能。我目睹了系統提示中的高質量示例將提高描述生成路徑的質量。系統提示還顯著影響LLM的最終答案。search_similar_vectors方法在paths_vectorDB/vectorDB_setup.py中,以獲得更好的結果。app/main.py.