跳轉到

將文字轉成 Embedding

使用 Ollama embedding model

Akasha 可以使用 Ollama 提供的 embedding model。請先啟動 Ollama,並下載模型:

ollama pull nomic-embed-text

使用 ollama: alias 建立 embedding object,後續可以使用相同的 embed_query()embed_documents() 方法:

import akasha.helper as ah

embedding_model = ah.handle_embeddings("ollama:nomic-embed-text")

query_vector = embedding_model.embed_query("什麼是檢索?")
document_vectors = embedding_model.embed_documents(
    ["第一份文件介紹檢索。"]
)

print("Query 維度:", len(query_vector))
print("Document 維度:", len(document_vectors[0]))

預設會連線到 http://localhost:11434。如果 Ollama 執行在其他主機,可以設定 OLLAMA_API_BASE,或直接在 alias 中指定 endpoint:

OLLAMA_API_BASE=http://192.168.1.10:11434
embedding_model = ah.handle_embeddings(
    "ollama:http://192.168.1.10:11434@nomic-embed-text"
)

Embedding 模型會將文字轉成數值向量。語意相關的文字通常會在向量空間中比較接近,因此 Embedding 適合用於語意搜尋、RAG、分類與推薦。

建立 Embedding 模型

import akasha.helper as ah

embedding_model = ah.handle_embeddings(
    "openai:text-embedding-3-small"
)

Provider 別名會決定使用哪一種 Embedding 整合。執行遠端請求前,必須先設定對應 Provider 的憑證。

將單一查詢轉成向量

vector = embedding_model.embed_query(
    "這是一段要轉成 Embedding 的文字。"
)

print(type(vector))
print("向量維度:", len(vector))
print("前五個數值:", vector[:5])

embed_query() 會回傳一個浮點數清單。向量維度會依選用的 Embedding 模型而不同。

將多段文件轉成向量

texts = [
    "第一份文件討論檢索。",
    "第二份文件討論 Agent。",
    "第三份文件討論記憶功能。",
]

vectors = embedding_model.embed_documents(texts)

print("文件數量:", len(vectors))
print("向量維度:", len(vectors[0]))

embed_documents() 會為每段輸入文字回傳一個向量,順序與輸入清單相同。

RAG 中的 Embedding

通常不需要在 RAG 中直接呼叫 Embedding 方法,只要將 Embedding 別名傳給 akasha.RAG(),Akasha 就會自動處理文件與查詢的向量化:

import akasha

rag = akasha.RAG(
    model="gemini:gemini-2.5-flash",
    embeddings="ollama:nomic-embed-text",
)

answer = rag("./docs", "主要主題是什麼?")
print(answer)

Warning

遠端 Embedding 請求可能產生 Provider 費用。不要將私人文字、API key 或產生的向量提交到公開 repository。