当前位置: 首页 > news >正文

ChromaDB调用BGE模型的两种实践方式

ChromaDB调用BGE模型

  • 前言
    • 1.chromadb调用BGE模型api
    • 2.调用本地模型

前言

在语义搜索、知识库构建等场景中,文本向量化(Embedding)是核心技术环节。作为一款开源的向量数据库,ChromaDB允许开发者通过自定义嵌入函数灵活对接各类模型。本文将详细介绍两种基于BGE模型的实现方案:​​远程API调用​​与​​本地模型部署​​,并解析它们的应用场景与实现细节。

1.chromadb调用BGE模型api

此api接口是Ollama接口方式:

关键点解析:

​​API服务对接​​:通过HTTP POST请求调用部署在9.1.47.89:11434的Ollama服务
​​模型指定​​:使用bge-m3:latest模型的最新版本
​​超时控制​​:设置30秒超时避免长期阻塞
​​异常处理​​:非200状态码时抛出详细错误信息

import requests
from chromadb.api.types import Documents, EmbeddingFunction, Embeddingsclass MyEmbeddingFunction(EmbeddingFunction):def __call__(self, texts: Documents) -> Embeddings:# 调用远程Ollama服务的BGE-M3模型response = requests.post("http://9.1.47.89:11434/v1/embeddings",json={"model": "bge-m3:latest","input": texts},timeout=30  # 增加超时设置)if response.status_code == 200:return [vec['embedding'] for vec in response.json()['data']]else:raise Exception(f"Embedding API调用失败: {response.text}")# 初始化自定义嵌入函数
ef = MyEmbeddingFunction()

注意不同版本之间的访问方式可能不一致。“http://9.1.47.89:11434/v1/embeddings”,可修改为"http://9.1.47.89:11434/api/embeddings"。

[vec[‘embedding’] for vec in response.json()[‘data’]]中的"data"可修改为“embeddings”。 都可进行尝试。

2.调用本地模型

from chromadb.api.types import Documents, EmbeddingFunction, Embeddings
from sentence_transformers import SentenceTransformer
model_path = "emmodel/bge-large-zh-v1.5"
model = SentenceTransformer(model_name_or_path=model_path)class MyEmbeddingFunction(EmbeddingFunction):def __call__(self, texts: Documents) -> Embeddings:embeddings = [model.encode(x).tolist() for x in texts]return embeddingsef = MyEmbeddingFunction()

关键点解析:
​​本地模型加载​​:使用sentence-transformers库加载预训练模型
​​路径指定​​:从emmodel/目录加载bge-large-zh-v1.5模型文件
​​批量编码​​:对输入文本列表进行并行向量化

模型准备:

# 下载官方模型
git clone https://www.modelscope.cn/company/BAAI/bge-large-zh-v1.5.git# 或使用huggingface-hub
from huggingface_hub import snapshot_download
snapshot_download(repo_id="BAAI/bge-large-zh-v1.5")

相关文章:

  • vscode 安装插件
  • java算法的核心思想及考察的解题思路
  • 制作一款打飞机游戏39:鼠标控制
  • 【大模型系列】使用fastapi为langchain应用快速对外提供restful api
  • 学习Linux的第四天
  • nginx 上传文件,413 request entity too large
  • 使用Milvus向量数据库构建具有长期记忆的对话机器人
  • 从人脸扫描到实时驱动,超写实数字分身技术解析
  • Java学习手册:数据库事务相关知识
  • Web 架构之动静分离:原理、实践与优化
  • SSL/TLS 证书与数字签名:构建互联网信任的详解
  • spark转换算子
  • 【Java项目脚手架系列】第三篇:Spring MVC基础项目脚手架
  • Excel处理控件Aspose.Cells教程:压缩Excel文件完整指南
  • arXiv论文 MALOnt: An Ontology for Malware Threat Intelligence
  • Laravel 12 实现验证码功能
  • 解决 Chrome 与 Chromedriver 版本不一致问题的方法
  • 如何在金仓数据库KingbaseES中新建一个数据库?新建一个表?给表添加一个字段?
  • android 折叠屏开发适配全解析:多窗口、铰链处理与响应式布局
  • 【北京迅为】iTOP-4412精英版使用手册-第八章 Android 4.4系统编译
  • 重庆一高校75万采购市价299元产品?工作人员:正在处理
  • 巴基斯坦关闭全部领空
  • 拿出压箱底作品,北京交响乐团让上海观众享受音乐盛宴
  • 全国人大常委会启动食品安全法执法检查
  • 水利部:山西、陕西等地旱情将持续
  • 国防部:正告菲方停止以任何方式冲撞中方核心利益