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

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")
http://www.xdnf.cn/news/4557.html

相关文章:

  • 学习基本开锁知识
  • 【一篇详解】深入浅出RabbtiMQ消息队列
  • 阿里云平台与STM32的物联网设计
  • Python训练营打卡DAY18
  • 电气工程中漏源电压Vds的平台电压是什么?
  • 芳草集精油怎么样?佰草集精油的功效与用法一览
  • 利用相场法来求解任意脆性断裂问题
  • Notepad++中XML格式化插件介绍
  • Ubuntu安装pgsql
  • Golang 接口 vs Rust Trait:一场关于抽象的哲学对话
  • Qt 中信号与槽(signal-slot)机制支持 多种连接方式(ConnectionType)
  • Web 架构之负载均衡全解析
  • vue+vite难点和优化,及seo优化
  • 品质领航家装时代,亚新丽以匠心雕琢每一寸美好
  • GPT与LLaMA:两大语言模型架构的深度解析与对比
  • Kafka的消息保留策略是怎样的? (基于时间log.retention.hours或大小log.retention.bytes,可配置删除或压缩策略)
  • 强缓存与协商缓存的实现机制
  • AKS 网络深入探究:Kubenet、Azure-CNI 和 Azure-CNI(overlay)
  • 基于LVS实现负载均衡,对NAT模式的介绍和使用案例
  • LeetCode第190题_颠倒二进制位
  • 云蝠智能大模型语音交互智能体赋能电视台民意调研回访:重构媒体数据采集新范式
  • 2:点云处理—3D相机开发
  • 如何在Idea中编写Spark程序并运行
  • 【Bug经验分享】SourceTree用户设置必须被修复/SSH 主机密钥未缓存(踩坑)
  • Windows_PyCharm Python语言开发环境构建
  • 常见dp问题的状态表示
  • MCPHub:一站式MCP服务器聚合平台
  • CI/CD与DevOps流程流程简述(给小白运维提供思路)
  • Spring AI(1)—— 基本使用
  • QT中connect高级链接——指针、lambda、宏