## 選擇不同嵌入模型
使用參數***embeddings***便可以選擇不同的嵌入模型,預設是***openai:text-embedding-ada-002***.
## 範例
### 1. openai
```python!=
import akasha
akasha.Doc_QA()
ak.get_response(dir_path, prompt, embeddings="openai:text-embedding-ada-002",)
```
</br>
</br>
### 2. huggingface
```python!=
import akasha
ak = akasha.Doc_QA(embeddings="huggingface:all-MiniLM-L6-v2")
resposne = ak.get_response(dir_path, prompt)
```
</br>
</br>
## 可使用的模型
:::info
每個嵌入模型都有max sequence length,超過的話後面的文字就會被截斷,不會拿進去做嵌入。
:::
```python!=
openai_emd = "openai:text-embedding-ada-002" # need environment variable "OPENAI_API_KEY" # 8192 max seq length
huggingface_emd = "hf:all-MiniLM-L6-v2"
text2vec_ch_emd = "hf:shibing624/text2vec-base-chinese" # 128 max seq length
text2vec_mul_emd = "hf:shibing624/text2vec-base-multilingual" # 256 max seq length
text2vec_ch_para_emd = "hf:shibing624/text2vec-base-chinese-paraphrase" # perform better for long text, 256 max seq length
bge_en_emd = "hf:BAAI/bge-base-en-v1.5" # 512 max seq length
bge_ch_emd = "hf:BAAI/bge-base-zh-v1.5" # 512 max seq length
rerank_base = "rerank:BAAI/bge-reranker-base" # 512 max seq length
rerank_large = "rerank:BAAI/bge-reranker-large" # 512 max seq length
```
</br>
</br>
</br>
</br>
## 自訂嵌入模型
如果你想使用其他模型,可以建立一個輸入是***texts:list***的函數,代表的是文件庫中所有分割好的文字段落,此函數需回傳embedding之後每段文字的向量,並將此函數作為***embeddings***參數
### example
我們建立一個test_embed函數,並可以將它作為參數輸入進get_response回答問題
```python!=
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_path = "./mic/"
prompt = "五軸是什麼?"
qa = akasha.Doc_QA(verbose=True, search_type = "svm", embeddings = test_embed)
qa.get_response(doc_path= doc_path, prompt = prompt)
```
## 建立Embeddings物件
以上使用embeddings參數選擇模型後,便會在Doc_QA物件內建立模型的物件embeddings_obj(Embeddings)
```python!=
import akasha
AK = akasha.Doc_QA(embeddings="openai:text-embedding-ada-002")
print(type(AK.embeddings_obj))
```
</br>
</br>
也可以使用輔助函數建立Embeddings物件
```python!=
import akasha
embeddings_obj = akasha.handle_embeddings("openai:text-embedding-ada-002",verbose=False)
print(type(embeddings_obj))
```
</br>
</br>
此Embeddings物件也可直接傳入Doc_QA,避免重複宣告
```python!=
import akasha
model_obj = akasha.handle_model("openai:gpt-3.5-turbo",verbose=False,temperature=0.0)
embeddings_obj = akasha.handle_embeddings("openai:text-embedding-ada-002",verbose=False)
AK = Doc_QA(model=model_obj, embeddings=embeddings_obj)
```