尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LlamaIndex AutoEmbeddings 集成指南:一个统一接口接入多 Provider 文本嵌入模型

LlamaIndex AutoEmbeddings 集成指南:一个统一接口接入多 Provider 文本嵌入模型 LlamaIndex AutoEmbeddings 集成指南一个统一接口接入多 Provider 文本嵌入模型【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index导读本文将讲解 LlamaIndex 生态中的llama-index-embeddings-autoembeddings集成包它把 Chonkie 的 AutoEmbeddings 模块封装为符合 LlamaIndex 规范的ChonkieAutoEmbedding嵌入器。通过本文你将掌握如何用一行代码在 OpenAI、Model2Vec、Cohere、Jina AI、Sentence Transformers 等多个嵌入服务之间切换并了解其底层实现原理、异步调用方式以及如何将其无缝嵌入 LlamaIndex 的检索与索引流程。AutoEmbeddings 是什么llama-index-embeddings-autoembeddings是 LlamaIndex 官方集成目录中的一个嵌入模块其核心价值在于它基于 Chonkie 提供的AutoEmbeddings模块将多个不同的嵌入 Provider 收敛到同一个统一接口之下。使用方不需要针对每家服务编写不同的调用代码只需传入模型名称即可自动完成 Provider 识别与初始化。根据该模块的 README它支持以下嵌入 ProviderOpenAI如text-embedding-3-large等云服务模型Model2Vec轻量级静态嵌入模型Cohere云服务嵌入模型Jina AI云服务嵌入模型Sentence Transformers本地开源模型从仓库的 CHANGELOG 可以看到该集成包最早以 0.1.0 版本加入Support for AutoEmbeddings integration from chonkie当前仓库中版本为 0.3.0见 pyproject.toml是一个处于积极维护状态的集成模块。安装与其他 LlamaIndex 集成包一样通过 pip 直接安装即可pip install llama-index-embeddings-autoembeddings安装包本身会自动携带运行时依赖。查看 pyproject.toml 可知其依赖约束为llama-index-core0.13.0,0.15chonkie[all]其中chonkie[all]会安装 Chonkie 全量依赖从而保证 OpenAI、Sentence Transformers、Cohere、Jina AI、Model2Vec 等后端所需的三方库齐全。值得注意的是pyproject.toml要求 Python 版本为3.10,4.0。快速上手本地模型嵌入安装完成后在脚本中导入ChonkieAutoEmbedding并传入模型名称即可开始使用。下面的示例来自模块 README使用了 Sentence Transformers 家族中经典的本地轻量模型all-MiniLM-L6-v2from llama_index.embeddings.autoembeddings import ChonkieAutoEmbedding embedder ChonkieAutoEmbedding(model_nameall-MiniLM-L6-v2) vector embedder.get_text_embedding( The quick brown fox jumps over the lazy dog. ) print(vector)运行后vector是一个List[float]类型的嵌入向量可以直接用于后续的相似度计算或写入向量数据库。同步 API 与批量嵌入除了对单条文本调用get_text_embeddingChonkieAutoEmbedding还完整支持批量嵌入与查询嵌入。从源码实现看base.py 中get_text_embedding/_get_text_embedding单条文本嵌入内部调用 Chonkie 的embedder.embed(text)并转为List[float]get_text_embedding_batch/_get_text_embeddings批量文本嵌入内部调用embedder.embed_batch(texts)并对结果逐条执行tolist()转换。例如批量场景可以这样写embedder ChonkieAutoEmbedding(model_nameall-MiniLM-L6-v2) vectors embedder.get_text_embedding_batch( [First document text., Second document text., Third document text.] )这些公开的同步方法get_text_embedding、get_text_embedding_batch、get_query_embedding均来自BaseEmbedding基类在 llama-index-core 的 embeddings 基类 中实现了批处理、缓存、限流与可观测事件分发等通用逻辑。使用非本地 Provider通过环境变量提供 API Key当模型托管在云端如 OpenAI 的text-embedding-3-large时需要先声明对应的 API Key 环境变量再创建嵌入器from llama_index.embeddings.autoembeddings import ChonkieAutoEmbedding import os os.environ[OPENAI_API_KEY] YOUR-API-KEY embedder ChonkieAutoEmbedding(model_nametext-embedding-3-large) vector embedder.get_text_embedding( The quick brown fox jumps over the lazy dog. ) print(vector)该示例同样取自 README。实践中的要点如下按 Provider 设置对应环境变量OpenAI 使用OPENAI_API_KEY使用 Cohere、Jina AI 等 Provider 时需要设置各自服务约定的环境变量名具体以 Chonkie 对应用户端的要求为准不要在代码中硬编码密钥环境变量方式既符合安全最佳实践也便于在不同环境中切换模型名决定 Provider 与后端ChonkieAutoEmbedding本身不接收显式的 Provider 参数Provider 由model_name自动推断这正是 AutoEmbeddings 自动二字的含义。源码实现剖析ChonkieAutoEmbedding的实现非常精简全部逻辑位于 base.py核心结构如下class ChonkieAutoEmbedding(BaseEmbedding): model_name: str embedder: Optional[chonkie.BaseEmbeddings] None def __init__(self, model_name: str) - None: super().__init__(model_namemodel_name) self.embedder AutoEmbeddings.get_embeddings(self.model_name)关键设计可以归纳为三点继承BaseEmbeddingChonkieAutoEmbedding直接继承自 llama_index.core.base.embeddings.base.BaseEmbedding因此天然拥有 LlamaIndex 嵌入器的一切公共能力——批处理、进度条、缓存、限流器、callback 事件与 instrumentation 埋点无需自己重复实现延迟到构造时初始化后端AutoEmbeddings.get_embeddings(model_name)在__init__中执行根据模型名自动挑选并实例化对应的 Provider 封装暴露统一的embed/embed_batch接口以BaseEmbeddings作为字段类型embedder字段声明为Optional[chonkie.BaseEmbeddings]说明它接收的是 Chonkie 的通用嵌入器抽象而非某个具体厂商的客户端。同步与异步双通道实现中同时提供了同步与异步两组方法并且异步方法直接委托给同步实现_get_embedding(text)同步单条嵌入embedder.embed(text).tolist()_aget_embedding(text)异步单条嵌入直接返回self._get_embedding(text)_get_embeddings(texts)同步批量嵌入embedder.embed_batch(texts)后逐条tolist()_aget_embeddings(texts)异步批量嵌入委托同步批量实现_get_query_embedding(query)查询侧嵌入复用_get_embedding这意味着在异步场景如await embedder.aget_text_embedding(text)或await embedder.aget_text_embedding_batch(texts)下该集成同样可用底层通过 Chonkie 的同步调用完成计算。缺少 Chonkie 依赖时的报错信息base.py顶部对chonkie的导入做了保护性处理如果环境中没有安装 Chonkie会抛出带有明确指引的ImportErrorCould not import Autembeddings from chonkie. Please install it with pip install chonkie[all].因此如果直接pip install llama-index-embeddings-autoembeddings后出现上述报错说明chonkie[all]未能正常安装例如使用了--no-deps按提示补装即可。将 AutoEmbeddings 接入索引与检索流程由于ChonkieAutoEmbedding是标准BaseEmbedding子类它可以像任何其他 LlamaIndex 嵌入模型一样直接作为VectorStoreIndex、Settings.embed_model或文档处理管线的一部分使用from llama_index.embeddings.autoembeddings import ChonkieAutoEmbedding from llama_index.core import VectorStoreIndex, SimpleDirectoryReader from llama_index.core import Settings Settings.embed_model ChonkieAutoEmbedding(model_nameall-MiniLM-L6-v2) documents SimpleDirectoryReader(./data).load_data() index VectorStoreIndex.from_documents(documents) query_engine index.as_query_engine() response query_engine.query(What is the summary of the documents?) print(response)此时索引构建阶段的文档分块嵌入会由ChonkieAutoEmbedding批量完成查询阶段则通过get_query_embedding对问题进行嵌入。值得一提的是在 BaseEmbedding.call的实现中嵌入器还可以直接作为TransformComponent接收一批BaseNode并就地写入node.embedding这使其可以嵌入到 LlamaIndex 的 ingestion 管线中from llama_index.core.ingestion import IngestionPipeline from llama_index.core.node_parser import SentenceSplitter pipeline IngestionPipeline( transformations[ SentenceSplitter(chunk_size512), ChonkieAutoEmbedding(model_nameall-MiniLM-L6-v2), ] ) nodes pipeline.run(documentsdocuments)这种既是嵌入器、又是 TransformComponent的双重身份是BaseEmbedding体系带给所有嵌入集成的统一能力AutoEmbeddings 集成自然继承。测试与验证该模块在仓库中带有单元测试 test_autoembeddings.py验证了最基本的契约def test_class_init() - None: emb ChonkieAutoEmbedding(model_nameall-MiniLM-L6-v2) assert isinstance(emb, BaseEmbedding)测试确认了用all-MiniLM-L6-v2构造ChonkieAutoEmbedding后实例确实是BaseEmbedding的子类即满足 LlamaIndex 嵌入器的统一协议。你可以自行运行该测试来验证本地环境cd llama-index-integrations/embeddings/llama-index-embeddings-autoembeddings pytest tests/test_autoembeddings.py -v常见问题与注意事项模型首次使用需要下载all-MiniLM-L6-v2等 Sentence Transformers / Model2Vec 本地模型在首次运行时需要从模型仓库下载权重请确保网络可达之后的调用会命中本地缓存。云服务模型需要网络与密钥使用text-embedding-3-large等 OpenAI 模型时除 API Key 外还需可访问对应服务端点的网络环境。异步方法本质是同步委托从 base.py 的实现看_aget_embedding直接调用同步的_get_embedding因此高并发异步场景下的实际吞吐受 Chonkie 底层同步调用限制如需极致并发可以考虑外层使用num_workers或进程级并行。依赖版本约束该包要求llama-index-core0.13.0,0.15如果项目中的 core 版本超出该区间需先对齐版本再安装。小结llama-index-embeddings-autoembeddings用极少的代码量核心实现仅一个类、几十行为 LlamaIndex 接入了一个多 Provider 自适应的嵌入入口。它把 Chonkie AutoEmbeddings 的模型名自动路由能力与 LlamaIndex 的BaseEmbedding生态深度融合让开发者可以在本地开源模型与多家云端嵌入服务之间自由切换而无需改动业务代码。对需要在多个嵌入服务间横向对比、或希望以最小成本接入多种嵌入后端的项目而言这是一个值得优先考虑的统一入口。【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表