基于 Ollama 的本地向量化工具类(BGE-M3)

在构建 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": "新能源汽车技术"
}