akasha使用手冊

akasha manual

目錄

更新

安裝&設定

文檔問答

評估

摘要



進階



指定輸出格式



UI



UI-DEV

01/07(0.8.86)

  • 更新huggingface embedding 以支援更多sentence transformer嵌入模型
  • 新增 環境變數 REMOTE_API_KEY用來設定遠端api的金鑰 (見設定 API Key)

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_fileextract_db_by_keyword 可從chromadb中取出特定文件檔案或特定id的db(見嵌入模型)

08/08(0.8.53)

  • Doc_QA 新增stream參數,若stream=True,則回傳值為generator (見 get_response)
  • get_responseask_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)

05/09(0.8.28)

  • 新增語言模型類別: gptq
  • remote 語言模型類別更新為streaming print out
  • 基於參數 doc_path 的輸入類型,您可以使用 get_response 來運行 ask_whole_fileask_self(若 doc_path 是單一文件路徑,則運行 ask_whole_file;如果 doc_path 是一段或多段文字,則運行 ask_self)。
  • search type auto 改為 autoauto_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_translatorcall_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
2
3
4
5
6
###create environment
$ conda create --name py3-9 python=3.9
$ activate py3-9

###install akasha
$ pip install akasha-terminal


在Python中使用

1
2
3
4
#PYTHON3.9
import akasha
ak = akasha.Doc_QA()
response = ak.get_response(dir_path, prompt, model="hf:meta-llama/Llama-2-7b-chat-hf")


UI

在terminal上輸入,便會開起streamlit使用介面

1
$ akasha ui

在瀏覽器中開啟 http://localhost:8501/ ui_5



CLI

透過command line interface使用akasha,你可以用’keep-responsing’來建立一個文檔問答模型,並可以提出不同的問題,根據給定目錄中的文檔獲取語言模型的回答。

1
2
3
4
5
6
7
8
9
10
11
12
$ akasha keep-responsing -d ../doc/plc/  -c 400 -k 1
Please input your question(type "exit()" to quit) : 應回收廢塑膠容器材質種類不包含哪種? 聚丙烯(PP) 聚苯乙烯(PS) 聚氯乙烯(PVC) 低密度聚乙烯(LDPE)
Response: 應回收廢塑膠容器材質種類不包含低密度聚乙烯(LDPE)。



Please input your question(type "exit()" to quit) : 所謂市盈率,是指每股市價除以每股盈餘,也就是股票的? 本益比 帳面值比 派息 資金
英國和德國等多個市場。然而,義大利、加拿大和澳洲並不在這些可交易的國家之列。



Please input your question(type "exit()" to quit) : exit()


現在可使用的指令: get-response, keep-responsing, chain-of-thought, auto-create-questionset and auto-evaluation.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ akasha keep-responsing --help
Usage: akasha keep-responsing [OPTIONS]

Options:
-d, --doc_path TEXT document directory path, parse all .txt, .pdf,
.docx files in the directory [required]
-e, --embeddings TEXT embeddings for storing the documents
-c, --chunk_size INTEGER chunk size for storing the documents
-m, --model TEXT llm model for generating the response
-l, --language TEXT language for the documents, default is 'ch' for
chinese
-s, --search_type TEXT search type for the documents, include merge,
svm, mmr, tfidf
-sys, --system_prompt TEXT system prompt for the llm model
-mt, --max_input_tokens INTEGER max token length for the llm model input
--help Show this message and exit.




安裝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

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
2
3
4
5
## .env file
AZURE_API_KEY={your azure key}
AZURE_API_BASE={your Language API base url}
AZURE_API_TYPE=azure
AZURE_API_VERSION=2023-05-15

請記得在Azure openAI Studio部署所有你需要的模型,且部署名稱與模型名稱相同。



gemini API Key

如果你想使用Gemini 模型,請至google aistudioGCP申請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
2
3
import os 
os.environ['REMOTE_API_KEY']="your api key"





LLAMA-2

如果你想使用原版的meta-llama model,並須先去meta-llama去取得授權,並註冊huggingface取得access token,取得授權後才能經由huggingface下載並使用模型。
granted

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
2
3
4
5
#PYTHON3.9
# os.environ['HF_TOKEN']=your api key
import akasha
ak = akasha.Doc_QA()
response = ak.get_response(dir_path, prompt, model="hf:meta-llama/Llama-2-7b-chat-hf")


設定多組不同API KEY

若你需要根據不同模型設定不同的API KEY,在Doc_QA, Model_Eval, Summary Class中皆提供env_file參數,可輸入不同的.env檔來export API KEY
若不存在或為空值,則為預設值(.env)

1
2
3
4
5
6
7
8

import akasha
ak = akasha.Doc_QA("openai:gpt-4o", env_file=".env", verbose=True)
ak.ask_self("日本本州最大的城市是哪裡?")

ak2 = akasha.Doc_QA("openai:gpt-4", env_file=".env2", verbose=True)
ak2.ask_self("日本本州最大的城市是哪裡?")

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.
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
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的詳細資訊可參考嵌入模型

使用chain_of_thought處理複雜的問題

如果你想詢問的問題較為複雜,可以將它拆解成一連串的小問題並使用chain_of_thought詢問。

example

1
2
3
4
5
6
7
8
9
10
11
import akasha
import os


os.environ["OPENAI_API_KEY"] = "your openAI key"

dir_path = "mic/"
queries2 = ["西門子自有工廠如何朝工業4.0 發展","詳細解釋「工業4.0 成熟度指數」發展路徑的六個成熟度","根據西門子自有工廠朝工業4.0發展,探討其各項工業4.0的成熟度指標"]
ak = akasha.Doc_QA()
response = ak.chain_of_thought(dir_path, queries2, search_type='svm')
print(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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
response 1:
西門子自有工廠朝工業4.0發展的方式包括以下幾個方面:

1. 數位化戰略:西門子提出數位化戰略,從工業4.0策略擬定到落地執行,為客戶提供一條龍服務。他們設計數位工廠原型
,搭配OT、IT方案,並使用西門子的MindSphere工業物聯網平台,發展數據可視化和數據分析相關應用。

2. 跨領域合作:西門子近年積極與雲服務商、系統商等跨領域合作,推動智慧製造解決方案。此外,他們也與SAP進行ERP整合,專注於物聯網領域。

3. 虛實整合:西門子在中國大陸成都生產研發基地的案例中,從研發、生產、訂單管理、供應商管理到物流作業
,實現了整條價值鏈的虛實整合。他們不斷提高配料、傳輸、檢測等流程的自動化程度。

總體而言,西門子通過數位化戰略、跨領域合作和虛實整合等方式,推動自有工廠朝工業4.0發
展。他們致力於提升生產效率和效能,並利用先進的技術和解決方案實現智慧工廠的建設。






response 2:
「工業4.0成熟度指數」的發展路徑劃分為六個成熟度,分別是電腦化、可連結、可視化、可分析、可預測和自適應。

1. 電腦化:這是工業4.0發展的起點,指企業開始使用計算機技
術,人員不再手動操作機械。然而,機械仍未聯網,各個IT系統仍各自獨立,資料尚未串聯。例如,企業的ERP系統與生產相關的系統獨立運作,訂單與產品品檢紀錄分散於兩套系統,導致
訂單無法回溯出現品質問題的環節。

2. 可連結:在這個成熟度階段,企業開始將各個IT系統進行連接,實現資料的串聯。這使得不同系統之間可以共享資料,提高資訊的流通效率。例
如,企業的ERP系統與生產相關的系統進行連接,訂單與產品品檢紀錄可以實現資料的回溯。

3. 可視化:在這個成熟度階段,企業開始實現資料的可視化,將資料以圖形化或圖表化的方
式呈現,使得管理者可以直觀地了解企業的運營狀況。例如,企業可以使用數據儀表板或報表來呈現生產線的運行情況和產品的品質指標。

4. 可分析:在這個成熟度階段,企業開始進
行資料的分析,利用數據分析工具和算法來挖掘資料中的價值和洞察。這使得企業可以更深入地了解生產過程中的問題和潛在的改進空間。例如,企業可以使用數據分析工具來分析生產線的
效率和品質問題,並提出改進措施。

5. 可預測:在這個成熟度階段,企業開始利用資料分析的結果來進行預測和預測模型的建立。這使得企業可以預測生產過程中可能出現的問題,並
提前採取相應的措施。例如,企業可以利用預測模型來預測生產線的故障和產品的品質問題,並提前進行維護和調整。

6. 自適應:在這個成熟度階段,企業開始實現自動化和自適應能
力,使得生產過程可以根據實時的數據和環境變化進行調整和優化。這使得企業可以更靈活地應對市場需求和生產變化。例如,企業可以實現生產線的自動調整和產品的自動優化,以適應市
場需求的變化。

這六個成熟度階段代表了企業在工業4.0發展過程中的不同階段和能力水平,企業可以根據自身的情況和目標,逐步提升成熟度,實現工業4.0的目標。






response 3:
根據西門子自有工廠朝工業4.0發展的方式,可以探討其在工業4.0成熟度指標中的幾個方面:



1. 數位化戰略:西門子提出數位化戰略,從工業4.0策略擬定到落地執行提供一條龍服務
。這代表企業在工業4.0成熟度指標中已經達到了可連結和可視化的階段,並開始將數據應用於生產優化和資源利用。



2. 整合系統:西門子在廠內進行軟體間整合,包括PLM、ERP、MOM
、WMS和Automation五大系統的整合,使數據互聯互通。這代表企業在工業4.0成熟度指標中已經達到了可分析和可預測的階段,並能夠利用數據分析技術進行深入分析和預測。



3. 數據 應用:西門子利用自有的數位雙生軟體Tecnomatix,打造虛擬工廠,模擬生產狀況或監控實際生產狀況。這代表企業在工業4.0成熟度指標中已經達到了可分析和可預測的階段,並能夠利用
數據應用提供的資訊,優化生產設備和工序。



總的來說,根據西門子自有工廠朝工業4.0發展的方式,可以看出他們在工業4.0成熟度指標中已經達到了可連結、可視化、可分析和可預測,優化生產設備和工序。




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
### Arguments of Doc_QA class ###
"""
Args:
**embeddings (str, optional)**: the embeddings used in query and vector storage. Defaults to "text-embedding-ada-002".\n
**chunk_size (int, optional)**: chunk size of texts from documents. Defaults to 1000.\n
**model (str, optional)**: llm model to use. Defaults to "gpt-3.5-turbo".\n
**verbose (bool, optional)**: show log texts or not. Defaults to False.\n
**language (str, optional)**: the language of documents and prompt, use to make sure docs won't exceed
max token size of llm input.\n
**search_type (str, optional)**: search type to find similar documents from db, default 'merge'.
includes 'merge', 'mmr', 'svm', 'tfidf', also, you can custom your own search_type function, as long as your
function input is (query_embeds:np.array, docs_embeds:list[np.array], k:int, relevancy_threshold:float, log:dict)
and output is a list [index of selected documents].\n
**record_exp (str, optional)**: use aiido to save running params and metrics to the remote mlflow or not if record_exp not empty, and set record_exp as experiment name. default "".\n
**system_prompt (str, optional)**: the system prompt that you assign special instruction to llm model, so will not be used
in searching relevant documents. Defaults to "".\n
**max_input_tokens (int, optional)**: max token length of llm input. Defaults to 3000.\n
**temperature (float, optional)**: temperature of llm model from 0.0 to 1.0 . Defaults to 0.0.\n

"""
self.db的詳細資訊可參考向量資料庫
self.docs的詳細資訊可參考文件搜尋
self.model_obj的詳細資訊可參考語言模型
self.embeddings_obj的詳細資訊可參考嵌入模型

ask_whole_file

如果你想詢問單個檔案的內容,你可以使用ask_whole_file將整個文件的內容給語言模型做為參考。

若檔案中的總文字內容過多,文件內容會被分別提供給語言模型作回答,並最終整合成一個最終回答,因此可能會花費較久時間。

example

1
2
3
4
5
6
7
8
9
10
11
12
13
import akasha

ak = akasha.Doc_QA(
search_type="merge",
verbose=True,
max_input_tokens=30000,
model="openai:gpt-4-32k",
)

response = ak.ask_whole_file(system_prompt="用列舉的方式描述",
file_path="docs/mic/20230726_工業4_0發展重點與案例分析,以西門子、鴻海為例.pdf",
prompt="工業4.0有什麼可以參考的標準或是架構嗎?")

1
2
3
4
5
6
7
工業4.0的參考標準或架構主要有以下幾種:

1. 「工業 4.0成熟度指數」:由德國國家工程院(Acatech)提出,將發展階段劃分為電腦化、可連結、可視化、可分析、可預測、自適應共六個成熟度,前項為後項發展基礎。

2. 「新加坡工業智慧指數」(Singapore Smart Industry Readiness Index, SIRI):由新加坡政府提出,用於評估企業在工業4.0的發展程度。

3. 「工業 4.0實施步驟方法論」:這是一種實施工業4.0的具體步驟,包括盤點公司內部待改善問題,分析現況與預期目標差異,以及規劃具體要改善的業務流程路線圖。
self.docs的詳細資訊可參考文件搜尋
self.model_obj的詳細資訊可參考語言模型

ask_self

如果你不想使用文件檔案,希望直接輸入文件內容,你可以使用ask_self,使用 info 參數將文件的內容傳給語言模型,info參數可為str 或者 list of str
info中的單一字串長度大於語言模型上限,該字串會被自行切割成 list of str,因此建議若文字過多,請自行分段成 list of str

info中的總文字內容過多,文件內容會被分別提供給語言模型作回答,並最終整合成一個最終回答,因此可能會花費較久時間。

example

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
27
28
29
30
31
32
install_requires = [
"pypdf",
"langchain>=0.1.0",
"chromadb==0.4.14",
"openai==0.27",
"tiktoken",
"lark==1.1.7",
"scikit-learn<1.3.0",
"jieba==0.42.1",
"sentence-transformers==2.2.2",
"torch==2.0.1",
"transformers>=4.33.4",
"llama-cpp-python==0.2.6",
"auto-gptq==0.3.1",
"tqdm==4.65.0",
"docx2txt==0.8",
"rouge==1.0.1",
"rouge-chinese==1.0.3",
"bert-score==0.3.13",
"click",
"tokenizers>=0.13.3",
"streamlit==1.28.2",
"streamlit_option_menu==0.3.6",
]

ak = akasha.Doc_QA(
verbose=True,
max_input_tokens=30000,
model="openai:gpt-4",
)
response = ak.ask_self(prompt="langchain的套件版本?", info=install_requires)

1
langchain的套件版本是0.1.0或更高版本。
self.docs的詳細資訊可參考文件搜尋
self.model_obj的詳細資訊可參考語言模型

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
2
3
4
5
6
ak = akasha.Doc_QA(model="openai:gpt-4o",)
url = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"
png = "../miao.png"

res = ak.ask_image(image_path=url, prompt = "這張圖片是甚麼?")
print(res)
1
2
3
4
5
6
7
8
9
10
這張圖片顯示了一個長度不等的木板路,穿過一片綠色的草地和樹林。路面上有許多細小的草根和葉子。路面兩側是高約1米左右的青綠色野生植物,中間有一些紅色的灌木丛。天空是藍色的,有一
些白雲。

這張圖像可能是一個自然景觀或一個旅遊目的地,例如一個國家公園或一個鳥類保護區。它也可能是一個攝影作品,用來展示自然美景和人們與環境之間的互動關係。

總體而言,這張圖像展現了人們與自然環境之間美麗而微妙的關係,並呼籲我們去探索、欣賞和保護我們周圍的世界。這張圖片顯示了一個長度不等的木板路,穿過一片綠色的草地和樹林。路面上有許多細小的草根和葉子。路面兩側是高約1米左右的青綠色野生植物,中間有一些紅色的灌木叢。天空是藍色的,有一些白雲。

這張圖像可能是一個自然景觀或一個旅遊目的地,例如一個國家公園或一個鳥類保護區。它也可能是一個攝影作品,用來展示自然美景和人們與環境之間的互動關係。

總體而言,這張圖像展現了人們與自然環境之間美麗而微妙的關係,並呼籲我們去探索、欣賞和保護我們周圍的世界。
self.model_obj的詳細資訊可參考語言模型
0%