0%

設定嵌入模型

選擇不同嵌入模型

使用參數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) # [[-0.004720511846244335, -2.9706923214689596e-06, -0.013798418454825878,...], [-0.004720511846244335, -2.9706923214689596e-06, -0.013798418454825878,...], [-0.004720511846244335, -2.9706923214689596e-06, -0.013798418454825878,...]]