選擇不同嵌入模型
使用參數embeddings便可以選擇不同的嵌入模型,預設是openai:text-embedding-ada-002.
範例
1. openai
(請先完成設定 API Key)
1 2 3 4
| import akasha
akasha.RAG( embeddings="openai:text-embedding-ada-002") ak(dir_path, prompt)
|
2. huggingface
1 2 3 4
| import akasha
akasha.RAG( embeddings="huggingface:all-MiniLM-L6-v2") ak(dir_path, prompt)
|
3. gemini
(請先完成設定 API Key)
1 2 3
| akasha.RAG( embeddings="gemini:models/text-embedding-004", model="gemini:gemini-1.5-flash") ak(dir_path, prompt)
|
推薦一些可使用的模型
每個嵌入模型都有max sequence length,超過的話後面的文字就會被截斷,不會拿進去做嵌入。
1 2 3 4 5 6 7 8 9
| openai_emb = "openai:text-embedding-ada-002" # need environment variable "OPENAI_API_KEY" # 8192 max seq length openai_3l_emb = "openai:text-embedding-3-large" openai_3s_emb = "openai:text-embedding-3-small" gemini_emb = "gemini:models/text-embedding-004" huggingface_emb = "hf:all-MiniLM-L6-v2" alibaba_bge_emb = "hf:Alibaba-NLP/gte-multilingual-base" #8192 max seq length bge_en_emb = "hf:BAAI/bge-base-en-v1.5" # 512 max seq length bge_ch_emb = "hf:BAAI/bge-base-zh-v1.5" # 512 max seq length
|
自訂嵌入模型
如果你想使用其他模型,可以建立一個輸入是texts:list的函數,代表的是文件庫中所有分割好的文字段落,此函數需回傳embedding之後每段文字的向量,並將此函數作為embeddings參數
example
我們建立一個test_embed函數,並可以將它作為參數輸入進get_response回答問題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import akasha
def test_embed(texts:list)->list:
from sentence_transformers import SentenceTransformer mdl = SentenceTransformer('BAAI/bge-large-zh-v1.5') embeds = mdl.encode(texts,normalize_embeddings=True)
return embeds
doc_source = ["./mic/"] prompt = "五軸是什麼?"
qa = akasha.RAG(verbose=True, search_type = "svm", embeddings = test_embed) qa(doc_source= doc_path, prompt = prompt)
|
建立Embeddings物件
以上使用embeddings參數選擇模型後,便會在Doc_QA物件內建立模型的物件embeddings_obj(Embeddings)
1 2 3 4 5 6
| import akasha
AK = akasha.RAG(embeddings="openai:text-embedding-ada-002")
print(type(AK.embeddings_obj))
|
也可以使用輔助函數建立Embeddings物件
1 2 3 4 5 6
| import akasha import akasha.helper as ah embeddings_obj = ah.handle_embeddings("openai:text-embedding-ada-002",verbose=False)
print(type(embeddings_obj))
|
此Embeddings物件也可直接傳入高級物件,避免重複宣告
1 2 3 4 5 6 7
| import akasha import akasha.helper as ah model_obj = ah.handle_model("openai:gpt-3.5-turbo",verbose=False,temperature=0.0) embeddings_obj = ah.handle_embeddings("openai:text-embedding-ada-002",verbose=False) AK = akasha.RAG(model=model_obj, embeddings=embeddings_obj)
|
直接使用Embeddings物件
embed_documents
創建完Embeddings物件後,可以直接使用來得到文件片段的向量資料(list[list[float]])
1 2 3 4 5 6 7 8 9 10
| import akasha import akasha.helper as ah text_list = ["範例文件內容1", "範例文件內容2", "範例文件內容3"] embeddings_obj = ah.handle_embeddings("openai:text-embedding-ada-002",verbose=False) vectors = embeddings_obj.embed_documents(text_list)
print(vectors)
|