get_response
使用者輸入一個或多個文件(.pdf, .docx, .txt)資料夾,此函數可以讓語言模型根據搜尋到的文件回答問題。藉由使用者的問題和文件庫搜尋到知識片段,可以不用將整份文件輸入給模型,就讓語言模型正確回答問題。
example
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import akasha
qa = akasha.Doc_QA( verbose=False, search_type="svm", model="openai:gpt-3.5-turbo")
qa.get_response( doc_path="docs/mic/", prompt="五軸是甚麼?", chunk_size=500, max_input_tokens=3000, system_prompt="請用中文回答", )
|
1 2
| 五軸工具機是一種先進的加工裝置,透過2軸控制工具旋轉方向,再透過長寬高3軸移動進行切削加工。相較於工具方向不會改變的3軸工具機,五軸工具機能夠進行更加複雜形狀的加工,並且具有更高 的加工精密度和自動化能力。
|
stream輸出
若需要即時輸出的場合(如UI即時顯示回答),使用stream=True可使get_response回傳generator。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import akasha
qa = akasha.Doc_QA( verbose=False, search_type="svm", model="openai:gpt-3.5-turbo", stream=True)
streaming = qa.get_response( doc_path="docs/mic/", prompt="五軸是甚麼?", hitstory_messages=["hi 我的名字是iii", "你好iii"], system_prompt="請用中文回答", )
for s in streaming: print(s)
|
dbs物件
如想對同個文件集做多次問答,可以先建立dbs物件並傳入,避免多次重複載入文件的chromadb,若文件內容、使用嵌入模型、chunk size相等的chromadb已存在,則不會重新創建而直接讀取。
使用多個文字檔案創建chromadb可使用 createDB_file,使用資料夾創建chromadb則使用 createDB_directory
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import akasha db_files = akasha.createDB_file(file_path = ["f1.txt","f2.docs"], embeddings="openai:text-embedding-ada-002",chunk_size=500, ignore_check=True) db_directory = akasha.createDB_directory(doc_path= "./docs/mic/", embeddings="openai:text-embedding-ada-002", ignore_check=True) qa = akasha.Doc_QA( verbose=True, search_type="svm", model="openai:gpt-3.5-turbo", )
qa.get_response( doc_path=db_directory, prompt="五軸是甚麼?", system_prompt="請用中文回答", )
|
Doc_QA 參數
verbose: 如果設True,會顯示每個步驟產生的文字和狀態
search_type: 用來搜尋文件段落的方法,可選擇: svm, tfidf, merge, mmr, knn.
doc_path: 一個或多個包含文件檔案的資料夾路徑名稱
prompt: 使用者的問題
chunk_size: 單個文件段落的長度
system_prompt: 指示給語言模型的output格式需求
stream: 如果設為True,會回傳generator
history_messages: 需要一併提供給語言模型的對話紀錄
max_output_tokens: 模型輸出的最大token數
env_file: 指定.env環境設定檔名
Doc_QA 輸出
使用完Doc_QA的函式後,物件內部會儲存用來搜尋的db(self.db)、讓語言模型參考的文件(self.docs)、使用者的問題(self.prompt)和回答(self.response)等資訊,若需要更完整的資訊可參考輔助函數中的 儲存紀錄
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import akasha
qa = akasha.Doc_QA( verbose=False, search_type="svm", model="openai:gpt-3.5-turbo")
qa.get_response( doc_path="docs/mic/", prompt="五軸是甚麼?", chunk_size=500, max_input_tokens=3000, system_prompt="請用中文回答", )
## self.db (dbs class) ## print(len(qa.db.ids), qa.db.metadatas[0])
## self.docs (list of Documents) ## print(qa.docs[0])
## self.doc_tokens (integer, length of document tokens) ## print(self.doc_tokens)
print(self.prompt, self.response)
|
self.db的詳細資訊可參考向量資料庫
self.docs的詳細資訊可參考文件搜尋
self.model_obj的詳細資訊可參考語言模型
self.embeddings_obj的詳細資訊可參考嵌入模型