2025 updates
01/07(0.8.86)
- 更新huggingface embedding 以支援更多sentence transformer嵌入模型
- 新增 環境變數 REMOTE_API_KEY用來設定遠端api的金鑰 (見設定 API Key)
2024 updates
12/25(0.8.84)
- 在 Doc_QA 中僅在需要時加載嵌入模型
- 向量資料庫模組允許embedding object 和 embedding string作為輸入參數
- 向量資料庫模組新增 create_keyword_chromadb (見向量資料庫)
- 移除向量資料庫模組和文件搜尋模組中不必要的 use_rerank, embeddings 參數
- 向量資料庫模組中新增 pop_index_db (見向量資料庫)
11/15(0.8.77)
- 新增支援anthropic語言模型、vision模型(見語言模型, ask_image)
- deprecate thoreshold參數
- retriver新增函式 get_relevant_documents_and_scores,輸出文件與問題的相似度排序與分數(見文件搜尋)
- self_query.query_filter metadata_field_info 可用字典類別輸入(見自查詢)
11/05(0.8.73)
- 新增參數env_file,可指定export API KEY的.evn 檔名(見設定 API Key)
- 自查詢更新parse函式,新增custom_parser參數可自訂parser函式(見自查詢)
10/30(0.8.70)
- 新增支援gemini語言模型、嵌入模型(見語言模型, 嵌入模型)
- 新增self_query模組(見自查詢)
- 將 max_doc_len 取代為 max_input_tokens,新增計算token長度的輔助函式 Tokenizer.compute_tokens (見輔助函數)
10/17(0.8.66)
- llama-cpp使用gpu推論(見語言模型)
- remote兼容vllm serve
10/04(0.8.63)
- Doc_QA 新增ask_image函數,可輸入圖片與問題到多模態模型(如gpt-4o, llama3.2-Vision)中(見ask_image)
- Doc_QA 新增max_output_tokens參數,用以限制模型最大輸出長度
08/15(0.8.56)
- db 新增 extract_db_by_file 和 extract_db_by_keyword 可從chromadb中取出特定文件檔案或特定id的db(見嵌入模型)
08/08(0.8.53)
- Doc_QA 新增stream參數,若stream=True,則回傳值為generator (見 get_response)
- get_response 和 ask_self 新增history_messages參數來傳遞聊天紀錄訊息 (見get_response)
- get_response 可傳入dbs物件,避免重複load chromadb (見 get_response)
- prompt_format_type參數新增”chat_gpt”和”chat_mistral”,用來傳遞非str type輸入給語言模型 如([{“role”:current_role, “content”:prompt}]), (見 提示格式)
- 輔助函數新增 call_model, call_batch_model, call_stream_model (見 輔助函數)
- 輔助函數新增 self-rag (見 輔助函數)
- 語言模型物件(LLM)和嵌入模型物件(Embeddings)可直接傳入Doc_QA, Eval,和 Summary,避免重複宣告(見 語言模型 嵌入模型)
- 內建 FAST API,可使用 “akasha api (–port port –host host –workers num_of_workers) 啟動 (見 FAST API)
05/29(0.8.34)
- 新增stream output 流輸出
05/09(0.8.28)
- 新增語言模型類別: gptq
- remote 語言模型類別更新為streaming print out
- 基於參數 doc_path 的輸入類型,您可以使用 get_response 來運行 ask_whole_file 和 ask_self(若 doc_path 是單一文件路徑,則運行 ask_whole_file;如果 doc_path 是一段或多段文字,則運行 ask_self)。
- search type auto 改為 auto 和 auto_rerank,差別為在找不到足夠相似的文件段落時,是否使用rerank模型
- Doc_QA 新增 rerun_ask_agent 功能,可更改prompt並重新運行 ask_agent。
- Eval create_questionset添加參考文件名稱到產生的問題中。
04/26(0.8.25)
新增windows使用者透過WSL安裝ubuntu和anaconda 的使用說明。
dev-ui image 不再使用ccchang0518/akasha-dev-ui 改用 ccchang0518/akasha-lab:0.6
04/17 (0.8.25)
在summary中添加參數 consecutive_merge_failures 以防止需要摘要段落持續無法縮減。
在summary中加入進度條。(請注意,map_reduce 方法的進度條僅為估計。)
在helper module中,新增 call_translator 和 call_JSON_formatter 的函數。這些函數有助於利用 LLM 進行翻譯並將輸出格式化為 JSON 格式。
OpenAI 和 Hugging Face 文本生成模型的標準輸出(stdout)改為即時流模式。
04/11 (0.8.24)
- -參數questionset_path:不再使用參數questionset_path,改用questionset_file
04/11 (0.8.24)
- 新增參數 keep_logs如果為True會儲存每次執行的資料和結果,預設為False
- 預設不會安裝llama-cpp-python套件,若想使用llama-cpp模型,請使用 pip install akasha-terminal[llama-cpp]安裝
04/10 (0.8.23)
- HUGGINGFACEHUB_API_TOKEN:不再使用環境變數 HUGGINGFACEHUB_API_TOKEN, 使用HF_TOKEN匯入 key
03/27 (0.8.23)
- Summary: Summary新增選項auto_translate將摘要翻譯成目標語言, summary
- summarize_articles: Summary新增summarize_articles函數,將str或list做摘要
- language: 在akasha.format中新增語言對照表
03/22 (0.8.21)
- agent module: 新增代理模組,可以自定義tools和agents, 代理
- add document format: 新增可讀取文件類別.pptx .md
03/08 (0.8.20)
- search bm25: 在 search_type中, 新增 bm25選項, 文件搜尋
- search auto: 在 search_type中, 新增 auto選項, 文件搜尋
- Doc_QA ask_agent: 在akasha.Doc_QA中, 新增ask_agent,使用self-ask prompting回答較為複雜的問題, ask_agent
02/26 (0.8.19)
JSON_formatter: 在 akasha.prompts, 新增 JSON_formatter_list 和 JSON_formatter_dict, JSON格式
topK: 不再使用參數topK,使用max_doc_len來決定參考文件的選取上限。
use_rerank: 新增use_rerank參數,在文件相似度搜尋完之後使用rerank模型更精準排序文件與使用者問題的相關性,預設False。
topic_questionset: akasha.eval中新增topic_questionset,用以產生特定主題的測試問題集。
安裝&使用
使用anaconda和pip安裝akasha套件
Linux使用者安裝完畢anaconda,進行安裝akasha套件。
1 | ###create environment |
在Python中使用
1 | #PYTHON3.9 |
UI
在terminal上輸入,便會開起streamlit使用介面
1 | $ akasha ui |
在瀏覽器中開啟 http://localhost:8501/
CLI
透過command line interface使用akasha,你可以用’keep-responsing’來建立一個文檔問答模型,並可以提出不同的問題,根據給定目錄中的文檔獲取語言模型的回答。
1 | $ akasha keep-responsing -d ../doc/plc/ -c 400 -k 1 |
現在可使用的指令: get-response, keep-responsing, chain-of-thought, auto-create-questionset and auto-evaluation.
1 | $ akasha keep-responsing --help |
安裝WSL
windows使用者可以安裝Windows子系統(WSL),直接在Windows 執行Linux,請先確認windows版本是 Windows 10 版本 2004(組建 19041 和更新版本)或 Windows 11以上的版本才能安裝WSL。
先搜尋PowerShell,以系統管理員開啟 PowerShell執行WSL並安裝linux ubuntu,安裝完畢後要重新開機。
install wsl
安裝WSL並且安裝linux ubuntu。
1 | $ wsl --install |
安裝完畢,重新開機
更新ubuntu
重新開機後,開啟wsl,更新ubuntu到最新版本
1 | $ sudo apt update -y && sudo apt upgrade -y |
更新系統套件到最新版本
1 | $sudo apt update && upgrade |
安裝curl 套件
1 | $sudo apt install curl |
安裝anaconda
先建立一個資料夾
1 | $mkdir temp |
進入資料夾
1 | $cd temp |
下載anaconda.sh
1 | $curl https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh --output anaconda.sh |
安裝anaconda
1 | $bash anaconda.sh |
新增conda 指令
1 | $source ~/.bashrc |
確認conda 有安裝成功
1 | $conda info |
設定 API Key
openAI API Key
openAI:
如果需要使用openAI的模型,必須先去openai取得API金鑰。取得金鑰後,你可以選擇其中一種方法來匯入key:
1.將KEY放於.env檔案中OPENAI_API_KEY=your api key
1 | OPENAI_API_KEY={your api key} |
2.設定成環境變數(變數名:OPENAI_API_KEY)
3.在terminal中使用export設定環境變數
1 | export OPENAI_API_KEY={your api key} |
4.在Python中使用os.environ[‘OPENAI_API_KEY’]=your api key
Azure openAI
如果你想使用Azure openAI,先去azureAI取得base url 和 API key。
將OPENAI_API_KEY=your azure key, OPENAI_API_BASE=your Language API base url, OPENAI_API_TYPE=azure, OPENAI_API_VERSION=2023-05-15 寫於.env檔案並放於你要執行akasha的路徑中。
1 | ## .env file |
請記得在Azure openAI Studio部署所有你需要的模型,且部署名稱與模型名稱相同。
gemini API Key
如果你想使用Gemini 模型,請至google aistudio 或 GCP申請API金鑰。
取得金鑰後,你可以選擇其中一種方法來匯入key:
1.將KEY放於.env檔案中GEMINI_API_KEY=your api key
1 | GEMINI_API_KEY={your api key} |
2.設定成環境變數(變數名:GEMINI_API_KEY)
3.在terminal中使用export設定環境變數
1 | export GEMINI_API_KEY={your api key} |
4.在Python中使用os.environ[‘GEMINI_API_KEY’]=your api key
anthropic API Key
如果你想使用Gemini 模型,請至anthropic申請API金鑰。
取得金鑰後,你可以選擇其中一種方法來匯入key:
1.將KEY放於.env檔案中ANTHROPIC_API_KEY=your api key
1 | ANTHROPIC_API_KEY={your api key} |
2.設定成環境變數(變數名:ANTHROPIC_API_KEY)
3.在terminal中使用export設定環境變數
1 | export ANTHROPIC_API_KEY={your api key} |
4.在Python中使用os.environ[‘ANTHROPIC_API_KEY’]=your api key
遠端API Key
如果你想使用的遠端模型需指定API金鑰
1.將KEY放於.env檔案中RETMOE_API_KEY=your api key
1 | REMOTE_API_KEY={your api key} |
2.設定成環境變數(變數名:REMOTE_API_KEY)
3.在terminal中使用export設定環境變數
1 | export REMOTE_API_KEY={your api key} |
4.在Python中使用os.environ[‘REMOTE_API_KEY’]=your api key
1 | import os |
LLAMA-2
如果你想使用原版的meta-llama model,並須先去meta-llama去取得授權,並註冊huggingface取得access token,取得授權後才能經由huggingface下載並使用模型。
the account on Hugging Face and the email you use to request access to Meta-Llama must be the same, so that you can download models from Hugging Face once your account is approved.
You should see the Gated model You have been granted access to this model once your account is approved
同樣的,取得huggingface key值後,你可以選擇其中一種方法來匯入key:
1.將KEY放於.env檔案中HF_TOKEN=your api key
1 | HF_TOKEN={your api key} |
2.設定成環境變數(變數名:HF_TOKEN)
3.在terminal中使用export設定環境變數
1 | export HF_TOKEN={your api key} |
4.在Python中使用os.environ[‘HF_TOKEN’]=your api key
1 | #PYTHON3.9 |
設定多組不同API KEY
若你需要根據不同模型設定不同的API KEY,在Doc_QA, Model_Eval, Summary Class中皆提供env_file參數,可輸入不同的.env檔來export API KEY
若不存在或為空值,則為預設值(.env)
1 |
|
get_response
get_response
使用者輸入一個或多個文件(.pdf, .docx, .txt)資料夾,此函數可以讓語言模型根據搜尋到的文件回答問題。藉由使用者的問題和文件庫搜尋到知識片段,可以不用將整份文件輸入給模型,就讓語言模型正確回答問題。
example
1 | import akasha |
1 | 五軸工具機是一種先進的加工裝置,透過2軸控制工具旋轉方向,再透過長寬高3軸移動進行切削加工。相較於工具方向不會改變的3軸工具機,五軸工具機能夠進行更加複雜形狀的加工,並且具有更高 |
stream輸出
若需要即時輸出的場合(如UI即時顯示回答),使用stream=True可使get_response回傳generator。
1 | import akasha |
dbs物件
如想對同個文件集做多次問答,可以先建立dbs物件並傳入,避免多次重複載入文件的chromadb,若文件內容、使用嵌入模型、chunk size相等的chromadb已存在,則不會重新創建而直接讀取。
使用多個文字檔案創建chromadb可使用 createDB_file,使用資料夾創建chromadb則使用 createDB_directory
1 | import akasha |
Doc_QA 參數
verbose: 如果設True,會顯示每個步驟產生的文字和狀態
search_type: 用來搜尋文件段落的方法,可選擇: svm, tfidf, merge, mmr, knn.
model: 使用的語言模型,如 openai:gpt-3.5-turbo, hf:meta-llama/Llama-2-13b-chat-hf
doc_path: 一個或多個包含文件檔案的資料夾路徑名稱
prompt: 使用者的問題
max_input_tokens: 最長可允許的文件總token長度
chunk_size: 單個文件段落的長度
system_prompt: 指示給語言模型的output格式需求
stream: 如果設為True,會回傳generator
history_messages: 需要一併提供給語言模型的對話紀錄
max_input_tokens: 單次輸入模型的最大token數
max_output_tokens: 模型輸出的最大token數
env_file: 指定.env環境設定檔名
Doc_QA 輸出
使用完Doc_QA的函式後,物件內部會儲存用來搜尋的db(self.db)、讓語言模型參考的文件(self.docs)、使用者的問題(self.prompt)和回答(self.response)等資訊,若需要更完整的資訊可參考輔助函數中的 儲存紀錄
1 | import akasha |
self.db的詳細資訊可參考向量資料庫
self.docs的詳細資訊可參考文件搜尋
self.model_obj的詳細資訊可參考語言模型
self.embeddings_obj的詳細資訊可參考嵌入模型
chain_of_thought
使用chain_of_thought處理複雜的問題
如果你想詢問的問題較為複雜,可以將它拆解成一連串的小問題並使用chain_of_thought詢問。
example
1 | import akasha |
1 | response 1: |
1 | ### Arguments of Doc_QA class ### |
self.db的詳細資訊可參考向量資料庫
self.docs的詳細資訊可參考文件搜尋
self.model_obj的詳細資訊可參考語言模型
self.embeddings_obj的詳細資訊可參考嵌入模型
ask_whole_file
ask_whole_file
如果你想詢問單個檔案的內容,你可以使用ask_whole_file將整個文件的內容給語言模型做為參考。
若檔案中的總文字內容過多,文件內容會被分別提供給語言模型作回答,並最終整合成一個最終回答,因此可能會花費較久時間。
example
1 | import akasha |
1 | 工業4.0的參考標準或架構主要有以下幾種: |
self.docs的詳細資訊可參考文件搜尋
self.model_obj的詳細資訊可參考語言模型
ask_self
ask_self
如果你不想使用文件檔案,希望直接輸入文件內容,你可以使用ask_self,使用 info 參數將文件的內容傳給語言模型,info參數可為str 或者 list of str。
若 info中的單一字串長度大於語言模型上限,該字串會被自行切割成 list of str,因此建議若文字過多,請自行分段成 list of str
若 info中的總文字內容過多,文件內容會被分別提供給語言模型作回答,並最終整合成一個最終回答,因此可能會花費較久時間。
example
1 | install_requires = [ |
1 | langchain的套件版本是0.1.0或更高版本。 |
self.docs的詳細資訊可參考文件搜尋
self.model_obj的詳細資訊可參考語言模型
ask_image
ask_image
如果你想同時輸入圖片與文字來詢問多模態模型(如gpt-4o, llama3.2-Vision),可以使用ask_image,圖片路徑image_path可以是網址或本地圖片路徑,模型類別目前支援 openai, remote(vllm), huggingface(llama3.2-Vision), anthropic(claude-3-5-sonnet-20241022) ,但huggingface目前不支援stream流輸出。
example
1 | ak = akasha.Doc_QA(model="openai:gpt-4o",) |
1 | 這張圖片顯示了一個長度不等的木板路,穿過一片綠色的草地和樹林。路面上有許多細小的草根和葉子。路面兩側是高約1米左右的青綠色野生植物,中間有一些紅色的灌木丛。天空是藍色的,有一 |