在构建 RAG(Retrieval-Augmented Generation)知识库时,需要先将文本转换为向量(Embedding),然后存储到 Milvus、FAISS 等向量数据库中。
本文基于 Ollama 部署的 BGE-M3 模型,实现本地文本向量化工具类。
一. 环境准备
1. 首先启动 Ollama 服务:
python
ollama serve
2.下载 BGE-M3 模型:
python
ollama pull bge-m3
3.配置 .env 文件:
python
OLLAMA_URL=http://127.0.0.1:11434
OLLAMA_NAME=bge-m3
二. 工具类代码
python
import os
from dotenv import load_dotenv
import requests
class OllamaUtils:
ollama_url = os.getenv("OLLAMA_URL")
embedding_model = os.getenv("OLLAMA_NAME")
"""
Ollama 向量工具类
功能:
调用本地 Ollama 的 Embedding 模型
将文本转换为向量(Embedding)
"""
# 批量循环转换。
# @staticmethod
# def ollama_embedding(text_list: list[str]):
# vectors = []
#
# for text in text_list:
#
# resp = requests.post(
# f"{OllamaUtils.ollama_url}/api/embed",
# json={
# "model": OllamaUtils.embedding_model,
# "input": text
# }
# )
#
# if resp.status_code != 200:
# raise Exception(f"Embedding失败: {resp.text}")
#
# vector = resp.json()["embeddings"][0]
#
# vectors.append(vector)
#
# return vectors
# 批量Embedding
@staticmethod
def ollama_embedding(text_list: list[str]):
resp = requests.post(
f"{OllamaUtils.ollama_url}/api/embed",
json={
"model": OllamaUtils.embedding_model,
"input": text_list
}
)
if resp.status_code != 200:
raise Exception(f"Embedding失败: {resp.text}")
return resp.json()["embeddings"]
# 问题转向量
@staticmethod
def ollama_single(text:str):
print(text)
resp = requests.post(
f"{OllamaUtils.ollama_url}/api/embed",
json={
"model": OllamaUtils.embedding_model,
"input": text
}
)
if resp.status_code != 200:
raise Exception(resp.text)
return resp.json()["embeddings"][0]
三. 代码解析
1. 获取配置
python
ollama_url = os.getenv("OLLAMA_URL")
embedding_model = os.getenv("OLLAMA_NAME")
从 .env 文件读取:
python
OLLAMA_URL=http://127.0.0.1:11434
OLLAMA_NAME=bge-m3
对应:
python
http://127.0.0.1:11434
以及:
python
bge-m3
2. 调用 Ollama 接口
python
resp = requests.post(
f"{OllamaUtils.ollama_url}/api/embed",
json={
"model": OllamaUtils.embedding_model,
"input": text
}
)
发送请求:
python
{
"model": "bge-m3",
"input": "新能源汽车技术"
}