Skip to content

TheAnyan/astrbot_plugin_embedding_adapter

Repository files navigation

EmbeddingAdapter 用于适配各种模型提供商

License AstrBot Version GitHub

Moe Counter

用于对各种embedding服务提供商进行适配。

喜欢的话点个🌟吧!

部署准备

插件安装

astrbot插件市场搜索astrbot_plugin_embedding_adapter,点击安装,等待完成即可。

embedding 模型部署

Openai

支持添加多种各种与Openai格式兼容的api,通过“,”进行分割,url只需要填写到例如"https://api.openai.com/v1"的程度

Note

更多api申请指南有待后续补充

百度千帆API

直接访问百度api key,创建api并授予全部权限,或指定embedding服务授予权限。将获得的api key填入插件配置项。模型名可以参考模型列表

硅基流动

创建api,并选择Embedding模型

Gemini

需要非国内ip,获取api,并选择Embedding模型

本地Ollama服务部署(推荐)

通过docker部署Ollama

version: '3.5'
services:
  ollama:
    restart: always
    container_name: 11434-ollama
    image: ollama/ollama
    ports:
      - 11434:11434
    environment:
      - OLLAMA_MODELS=/data/models
    volumes:
      - /your/path/to/models/:/data/models #你保存模型的位置,需要自己修改
    # 命令启动 serve
    command: serve

下载embedding模型

ollama pull your_model
推荐ollama模型 功能描述 大小
nomic-embed-text 仅英文,Ollama排名第一 274 MB
quentinz/bge-small-zh-v1.5 针对中文优化的轻量级文本嵌入模型 48 MB
bge-m3 多语言(支持100+语言)、多粒度模型,支持密集/稀疏/多向量检索 1.2 GB

接口信息

核心接口方法

方法名 参数 返回值 功能描述
get_embedding(text) str List[float] 获取当前文本的embedding向量(同步)
get_embeddings(texts) List[str] List[List[float]] 获取多个文本的embedding向量(同步)
get_dim() int 获取embedding向量的维度数(同步)
get_model_name() str 获取当前使用的embedding模型名称
get_provider_name() str 获取当前使用的服务商名称
is_available() bool 检查服务商是否可用(同步)
get_embedding_async(text) str List[float] 获取当前文本的embedding向量(异步)
get_embeddings_async(texts) List[str] List[List[float]] 获取多个文本的embedding向量(异步)
get_dim_async() int 获取embedding向量的维度数(异步)
is_available_async() bool 检查服务商是否可用(异步)

插件调用方式

在AstrBot插件系统中,可以通过以下方式获取插件实例并调用方法:

# 获取插件实例
embedding_adapter = context.get_registered_star("astrbot_plugin_embedding_adapter").star_cls

# 同步用法
embedding_vector = embedding_adapter.get_embedding("hello world")
embedding_vectors = embedding_adapter.get_embeddings(["hello", "world"])
dimension = embedding_adapter.get_dim()
model_name = embedding_adapter.get_model_name()
provider_name = embedding_adapter.get_provider_name()
is_ok = embedding_adapter.is_available()

# 异步用法
embedding_vector = await embedding_adapter.get_embedding_async("hello world")
embedding_vectors = await embedding_adapter.get_embeddings_async(["hello", "world"])
dimension = await embedding_adapter.get_dim_async()
is_ok = await embedding_adapter.is_available_async()

当前支持的服务商

  1. OpenAI (openai) • 需要配置: api_url, api_key, embed_model

  2. Ollama本地服务 (ollama) • 需要配置: api_url, embed_model

  3. Gemini (gemini) • 需要配置: api_key, embed_model

使用指南

基础命令

命令格式 功能描述 示例
/em ls 列出可以选择的提供商,检验可用性 /em ls
/em select <provider_name> 选择服务提供商(管理员权限) /em select openai

版本更新

v1.1.0

  • 支持以模型分类多个API,允许为同一模型配置多个服务商。
  • 若模型数大于1,get_embeddings_async方法支持负载均衡功能,自动分配请求到不同API以提升并发性能。
  • 增加了缓存功能,防止多次调用产生无意义的重复查询,提升效率。

项目来源

Embedding是计算机“理解“对话含义的重要步骤,对于一个QQbot来说,是一个很容易用到的功能。原本我把embedding适配的功能集成在我的第一个插件赛博考古中,但我在安装@lxfight的插件astrbot_plugin_mnemosyne时,我发现需要重复配置Embedding的api,而且两个项目的Embedding支持的服务商都有欠缺。因此我决定拆分该功能,构建一个对主流Embedding服务商的适配器,统一加载Embedding服务,为后续项目提供支持。

致谢

感谢@lxfight的插件项目astrbot_plugin_mnemosyne带来的启发。

感谢@Yxiguan在插件项目[astrbot_plugin_mnemosyne]中提供的代码,本项目对Gemini支持来源于对他代码的复用。

⚠️ 注意事项

  1. 首次使用需部署embedding模型并进行相应配置

📜 开源协议

本项目采用 AGPLv3 协议开源,基于 AstrBot 插件体系开发。

About

通用embedding支持插件

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages