资讯详情

资讯详情

Xinference 内置模型指南:bge-base-en-v1.5 向量嵌入模型的启动、调用与底层实现解析

Xinference 内置模型指南bge-base-en-v1.5 向量嵌入模型的启动、调用与底层实现解析【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inferencebge-base-en-v1.5 是 BAAI 推出的英文通用向量嵌入Embedding模型输出 768 维向量、支持最长 512 token 的文本输入常被用于 RAG 检索、语义相似度计算与文本聚类等场景。本文以 Xinference 内置注册的 bge-base-en-v1.5 为核心讲解如何通过一条命令完成模型启动、通过 OpenAI 兼容接口或 Xinference Client 发起向量化请求并结合仓库源码剖析其内置规格定义、多引擎分发与批处理截断机制帮助你快速将该模型接入生产级推理管线。模型概述与核心规格根据 Xinference 内置模型注册页 bge-base-en-v1.5.rst该模型的基础信息如下项目值Model Namebge-base-en-v1.5Languagesen英文Abilitiesembed向量嵌入Dimensions768输出向量维度Max Tokens512单条输入最大 token 数Model IDHugging FaceBAAI/bge-base-en-v1.5Model IDModelScopeXorbits/bge-base-en-v1.5其中 768 维向量输出与 512 token 的输入上限是使用该模型做检索/相似度任务时的两个关键约束维度 768决定向量数据库如 FAISS、Milvus、pgvector中索引字段的维度配置也影响向量相似度计算的存储开销最大 512 token超长文本会在送入模型前被截断或需要预切分chunking这也是 Xinference 提供truncate_prompt_tokens参数的原因下文会详细说明。一行命令启动模型在 Xinference 服务已启动的前提下默认监听localhost:9997执行内置注册页给出的启动命令即可拉起该模型xinference launch --model-name bge-base-en-v1.5 --model-type embedding因为 bge-base-en-v1.5 是内置built-in模型无需手动指定模型下载地址--model-type embedding用于明确模型类别避免与其他同名或同家族模型混淆。模型权重会按内置规格自动下载并缓存到本机之后每次启动均复用本地缓存。如需查看当前可用的内置 embedding 模型列表可以运行参见 client_api.rstxinference registrations -t embedding输出中可以看到该模型被标记为内置模型Type Name Language Dimensions Is-built-in --------- ----------------------- ---------- ------------ ------------- embedding bge-base-en [en] 768 True embedding bge-base-en-v1.5 [en] 768 True embedding bge-base-zh [zh] 768 True ...内置注册信息与模型来源bge-base-en-v1.5 的内置定义位于 xinference/model/embedding/model_spec.json其注册条目约第 540 行起确认了以下事实model_formatpytorch即以 PyTorch 权重格式分发量化方式仅noneHugging Face 来源model_id为BAAI/bge-base-en-v1.5并固定了可复现的model_revisioncommit 级版本号ModelScope 来源model_id为Xorbits/bge-base-en-v1.5model_revision为v0.0.1多引擎声明virtualenv.packages中按引擎条件声明依赖——sentence_transformers引擎依赖 sentence-transformers 与系统 torch/torchvisionflag引擎依赖FlagEmbedding库vllm引擎依赖 vLLM 全家桶与 numpy。也就是说同一个 bge-base-en-v1.5 在内置层面同时支持三种推理后端enginesentence_transformers、flagFlagEmbedding、vllm。日常使用默认走 sentence_transformers这也是模型权重格式为pytorch时最通用的加载方式。从源码 embed_family.py 可以看到内置模型通过BUILTIN_EMBEDDING_MODELS注册表管理match_embedding()会根据model_name找到对应家族再结合model_format、quantization、download_hubhuggingface / modelscope完成规格匹配当未显式指定下载源时代码会判断download_from_modelscope()的环境配置来决定优先从哪个 hub 拉取权重specs [x for x in target_family.model_specs if x.model_hub modelscope] [x for x in ... if x.model_hub huggingface]。若指定了--model-engine等参数check_engine_by_model_name_and_engine()则会校验该引擎是否在此模型的EMBEDDING_ENGINES注册表中。调用向量化接口模型启动成功后即可通过两种方式提交文本并获取 768 维向量。方式一Xinference Clientfrom xinference.client import Client client Client(http://localhost:9997) # 通过模型名启动embedding 模型必须显式指定 model_type model_uid client.launch_model(model_namebge-base-en-v1.5, model_typeembedding) model client.get_model(model_uid) # 单条文本 result model.create_embedding(What is the capital of China?) # 批量文本一次请求多条返回列表 results model.create_embedding([text a, text b, text c])响应结构遵循 OpenAI Embeddings 约定包含object、model、data每项的index、object、embedding数组以及usageprompt_tokens/total_tokens{ object: list, model: model_uid-replica-0, data: [ { index: 0, object: embedding, embedding: [-0.014207549393177032, -0.01832585781812668, 0.010556723922491074, ...], } ], usage: {prompt_tokens: 37, total_tokens: 37} }方式二OpenAI 兼容接口Xinference 暴露了与 OpenAI Embeddings API 兼容的端点任何基于 OpenAI SDK 的代码只需更换base_url即可import openai # 假设模型已通过 CLI 或 Client 启动model_uid 为启动时返回的 UID client openai.Client(api_keynot empty, base_urlhttp://localhost:9997/v1) resp client.embeddings.create( modelmodel_uid, input[What is the capital of China?], )注意api_key不能为空但可填任意字符串本地服务不强制校验model参数传的是启动时生成的model_uid而非模型名。这一兼容层使已有 OpenAI 生态工具如 LangChain、LlamaIndex无需改动逻辑即可切换到 Xinference 上的 bge-base-en-v1.5。方式三RESTful 原生接口也可直接通过 HTTP 调用/v1/embeddings端点等价于 OpenAI 兼容层或用curl快速验证curl -X POST http://localhost:9997/v1/embeddings \ -H Content-Type: application/json \ -d {model: model_uid, input: What is the capital of China?}底层实现向量化的批处理与截断机制在源码层面所有 embedding 模型都继承自 core.py 中的EmbeddingModel抽象基类create_embedding()是其核心入口值得关注的有两点请求自动合并批处理create_embedding.batch装饰器将并发到达的多个请求按 kwargs 分组、合并成一个大 batch 一次性送入引擎再按各自的offsets切回并重排index最后按原始调用顺序返回。这意味着高并发下多个调用方共享一次模型前向吞吐更优对应实现见EmbeddingModel.create_embedding的 batch 版本与_extract_sentences_kwargs。输入长度截断truncate_prompt_tokens参数用于控制输入 token 上限语义与 vLLM LLM 保持一致——None不截断、0截断到 N token、0视为空输入、0截断到模型自身max_tokens即 512。截断通过_truncate_sentences()完成普通字符串走 tokenizer 精确截断tokenizer 不可用如 llama_cpp 引擎时退化为按字符估算默认每 token 约 4 字符可用环境变量XINFERENCE_EMBEDDING_TRUNCATE_CHAR_PER_TOKEN调整且该方法保证任何情况下不抛异常避免向量服务中断。对于 bge-base-en-v1.5输入超过 512 token 时建议显式设置该参数或预先切块以保证向量质量与显存开销可控。此外EmbeddingModelFamilyV2.to_version_info()会通过EmbeddingCacheManager计算模型的model_version、缓存目录与缓存状态模型版本号由model_name--max_tokens--dimensions--model_format--quantization组合生成因此 512 token / 768 维 / pytorch / none 的 bge-base-en-v1.5 在缓存与多副本管理上具备稳定、可区分的标识。适用场景与使用建议基于 bge-base-en-v1.5 的规格768 维、512 token、英文单语以下实践建议可直接落地RAG 文档切块英文文档按 256512 token 切块后向量化入库检索时对 query 同样向量化采用余弦相似度排序相似度/去重用create_embedding的批量能力一次性处理大批文本利用合并批处理提升吞吐与向量数据库对接将返回的 768 维数组与 Milvus / FAISS / pgvector 等索引维度对齐多引擎选择默认 sentence_transformers 即可若环境已安装 vLLM 且希望与其他 vLLM 推理共享 GPU 调度可在启动时指定--model-engine vllmFlagEmbedding 引擎则适合需要与 BGE 家族其他模型统一依赖的场景。无论选择哪个引擎内置注册表都已通过virtualenv声明了对应依赖包虚拟环境缺失时会按规格自动补装。参考路径索引内置模型文档doc/source/models/builtin/embedding/bge-base-en-v1.5.rst内置 embedding 模型注册表xinference/model/embedding/model_spec.json引擎匹配与分发逻辑xinference/model/embedding/embed_family.py嵌入模型抽象基类与批处理实现xinference/model/embedding/core.pyClient 调用示例与输出格式doc/source/user_guide/client_api.rst【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →