☰
LlamaIndex 集成 Fireworks Embeddings:FireworksEmbedding 的接入配置与底层源码解析
2026/10/10 5:57:16 网站建设 项目流程
  • 人工智能
  • RAG
  • 大模型

【免费下载链接】llama_index

LlamaIndex is the document processing platform for AI

项目地址:https://gitcode.com/GitHub_Trending/ll/llama_index
点击查看免费下载

本文是一份围绕 LlamaIndex 中 Fireworks 嵌入模型集成的完整技术指南,核心对象是 docs/api_reference/api_reference/embeddings/fireworks.md 所指向的FireworksEmbedding类。读完本文,你将掌握 Fireworks 嵌入模型在 LlamaIndex 中的安装方式、初始化与调用 API、全部构造参数的作用与默认值、凭证解析优先级,以及该类如何复用 OpenAI Embedding 客户端的调用链、重试策略与批处理机制,并能直接将其接入索引构建流程。

集成包总览:FireworksEmbedding 是什么

Fireworks AI 提供面向生成与嵌入模型的快速推理服务。LlamaIndex 通过独立集成包llama-index-embeddings-fireworks将 Fireworks 的嵌入端点接入自身统一的 Embedding 抽象体系。

该集成的核心实现位于 llama-index-integrations/embeddings/llama-index-embeddings-fireworks/llama_index/embeddings/fireworks/base.py:

  • DEFAULT_API_BASE = "https://api.fireworks.ai/inference/v1":默认 API 端点;
  • DEFAULT_MODEL = "nomic-ai/nomic-embed-text-v1.5":默认嵌入模型;
  • class FireworksEmbedding(OpenAIEmbedding):核心类直接继承OpenAIEmbedding,因此天然具备 OpenAI 兼容客户端的所有能力(见下文"底层实现"一节)。

包入口init.py 只导出一个符号:

from llama_index.embeddings.fireworks.base import FireworksEmbedding __all__ = ["FireworksEmbedding"]

从 pyproject.toml 可以看到包的依赖约束:llama-index-embeddings-openai>=0.6.0,<0.7与llama-index-core>=0.13.0,<0.15,支持 Python>=3.10,<4.0。也就是说,Fireworks 集成是建立在 OpenAI 集成之上的一个薄封装,安装它即会自动带上所需的 OpenAI 客户端与核心库。

安装与快速上手

安装

与所有 LlamaIndex 集成一样,只需安装对应集成包:

pip install llama-index-embeddings-fireworks

官方示例 notebook(docs/examples/embeddings/fireworks.ipynb)中同时演示了在 Jupyter 环境中先安装集成包、再安装llama-index本体:

%pip install llama-index-embeddings-fireworks !pip install llama-index

使用前需要在 fireworks.ai 注册账号获取 API Key(仓库 README 中说明,仅作背景提示)。

三种核心调用

集成包 README.md 给出了最直接的用法:初始化模型后,分别对单条文本、批量文本和查询文本取向量。

from llama_index.embeddings.fireworks import FireworksEmbedding # 初始化嵌入模型:api_key 可直接传入,或通过 FIREWORKS_API_KEY 环境变量提供 embed_model = FireworksEmbedding( api_key="your-api-key", model_name="nomic-ai/nomic-embed-text-v1.5", ) # 单条文本嵌入 embedding = embed_model.get_text_embedding("Hello, world!") # 多条文本批量嵌入 embeddings = embed_model.get_text_embedding_batch( ["Hello, world!", "How are you?"] ) # 查询(query)嵌入 query_embedding = embed_model.get_query_embedding("What is machine learning?")

示例 notebook 中给出了实际运行结果:对"How do I sail to the moon?"调用get_text_embedding,返回一个长度为 768 的向量(默认模型nomic-ai/nomic-embed-text-v1.5的输出维度),前 10 维为浮点数值。这说明初始化后即可立刻产出可直接用于相似度计算的向量。

从源码层面看,get_text_embedding、get_text_embedding_batch、get_query_embedding均定义于核心库的BaseEmbedding抽象基类(llama-index-core/llama_index/core/base/embeddings/base.py),Fireworks 集成无需重写它们,只需实现底层的_get_text_embedding/_get_query_embedding系列方法,而这一层又被OpenAIEmbedding完整提供。

构造参数全解:默认值与行为说明

FireworksEmbedding.__init__的完整签名可以从 base.py 中直接确认,以下参数均可通过关键字传入:

参数默认值说明
model_name"nomic-ai/nomic-embed-text-v1.5"使用的嵌入模型标识,对应 Fireworks 平台上的模型名
dimensionsNone输出向量的维度数;仅在模型支持时生效,会透传为请求的dimensions参数
embed_batch_size10(即DEFAULT_EMBED_BATCH_SIZE)批量嵌入时每个请求最多携带的文本条数
additional_kwargsNone追加给 Fireworks API 的额外关键字参数(如dimensions)
api_keyNoneFireworks API Key;不传则读取FIREWORKS_API_KEY环境变量
api_base"https://api.fireworks.ai/inference/v1"API 基础地址,可覆盖为自定义代理端点
api_versionNoneAPI 版本标识(Fireworks 默认留空)
max_retries10请求失败时的最大重试次数
timeout60.0单次请求超时时间(秒)
reuse_clientTrue是否在多次请求间复用底层 OpenAI 客户端
callback_managerNoneLlamaIndex 回调管理器,用于事件追踪
default_headersNone附加到 API 请求的默认请求头
http_clientNone自定义httpx.Client,可注入代理或连接池配置

其中embed_batch_size、max_retries、timeout等参数的约束可以在继承链上找到依据:

  • 核心库BaseEmbedding中embed_batch_size字段约束为gt=0, le=2048(base.py#L81-L86),默认值来自 constants.py 中的DEFAULT_EMBED_BATCH_SIZE = 10;
  • OpenAIEmbedding中max_retries与timeout均为ge=0的非负字段(openai/base.py#L250-L251)。

参数表格中 README 与源码的唯一差异是:README 描述model_name为默认模型,而源码中__init__的形参名即model_name(而非 OpenAI 父类的model),使用时保持一致即可。

凭证解析机制:参数 > 环境变量 > 默认值

Fireworks 集成的凭证解析独立封装在 utils.py 的resolve_fireworks_credentials中,其优先级为:

  1. 构造时传入的参数(param);
  2. 环境变量(env);
  3. 包内默认值(default)。

支持的环境变量为:

环境变量作用默认值
FIREWORKS_API_KEYFireworks API Key空字符串
FIREWORKS_API_BASE自定义 API 基础地址"https://api.fireworks.ai/inference/v1"
FIREWORKS_API_VERSIONAPI 版本空字符串

源码中通过get_from_param_or_env依次读取参数与环境变量,再回退到DEFAULT_FIREWORKS_API_BASE等默认值。这一点在单元测试 tests/test_embeddings.py 中得到了验证:清空环境后调用resolve_fireworks_credentials()得到空 API Key 与默认 API Base;设置FIREWORKS_API_KEY与FIREWORKS_API_BASE后则返回环境变量的值。

因此,实际项目中两种等价的密钥配置方式:

# 方式一:直接传参 embed_model = FireworksEmbedding(api_key="your-api-key") # 方式二:环境变量(export FIREWORKS_API_KEY=...) embed_model = FireworksEmbedding()

底层实现:继承 OpenAIEmbedding 的完整调用链

FireworksEmbedding是OpenAIEmbedding的直接子类,__init__在解析完凭证后调用父类构造器并透传几乎全部参数(base.py#L59-L74)。这意味着 Fireworks 集成自动复用了 OpenAI 集成中完整成熟的 HTTP 客户端与重试机制。

客户端构造

在 openai/base.py 中,_get_client/_get_aclient使用api_key、api_base(作为base_url)、max_retries、timeout、default_headers构造OpenAI/AsyncOpenAI客户端。reuse_client=True时客户端实例被缓存复用,reuse_client=False时每次请求新建客户端——后者在大量异步调用场景下有助于提升稳定性(见父类字段说明)。

请求与重试策略

所有嵌入请求都经由_create_retry_decorator包装(openai/base.py#L364-L372),具体策略实现在 openai/utils.py#L88-L121:

  • 指数随机退避(random_exponential=True),等待时间在 1~20 秒之间;
  • 总超时上限 60 秒(stop_after_delay_seconds=60),同时受max_retries次数限制;
  • 仅对连接错误、超时、限流与服务器内部错误(APIConnectionError、APITimeoutError、RateLimitError、InternalServerError)触发重试,并在重试前记录 WARNING 日志。

查询与文本向量使用同一模型

从源码结构看,FireworksEmbedding构造时通过关键字model_name传给父类,父类OpenAIEmbedding.__init__检测到model_name出现在kwargs中后,将query_engine与text_engine统一设置为该模型名(openai/base.py#L310-L314)。因此可以推断:Fireworks 集成中查询向量与文本向量调用的是同一个模型,不存在 OpenAI 系"query 专用引擎 / 文本专用引擎"的区分。

另外,父类的get_embedding等辅助函数在发送请求前会把文本中的换行符替换为空格(openai/base.py#L126),这保证了跨行文本也能被嵌入服务稳定处理。

批处理与异步能力

BaseEmbedding提供了开箱即用的批处理与异步接口(llama-index-core/llama_index/core/base/embeddings/base.py):

  • get_text_embedding_batch(texts, show_progress=False):按embed_batch_size将文本列表切分,逐批调用底层_get_text_embeddings,并在每批前后发出EmbeddingStartEvent/EmbeddingEndEvent(同时触发回调事件),便于观测与追踪;
  • aget_text_embedding/aget_text_embedding_batch/aget_query_embedding:异步版本,底层使用AsyncOpenAI客户端;
  • num_workers参数可控制异步嵌入的并发工作线程数。

批次切分逻辑的判定条件是"到达末尾或当前批已满"(idx == len(texts) - 1 or len(cur_batch) == self.embed_batch_size),即embed_batch_size决定了每次实际请求 Fireworks 端点的文本数量,调大可减少请求次数,但需注意父类中单批最大 2048 条的上限约束。

此外,BaseEmbedding还支持注入rate_limiter(限流器)与embeddings_cache(KVStore 缓存,命中缓存时不再重复请求),适合对 API 配额敏感的批量索引场景。

在 LlamaIndex 全局配置中接入索引流程

FireworksEmbedding作为BaseEmbedding子类,是 LlamaIndex 标准的 Embedding 抽象实现,可以无缝融入索引构建链路。两种推荐接入方式:

from llama_index.core import Settings from llama_index.embeddings.fireworks import FireworksEmbedding # 方式一:全局设置,后续所有索引/查询默认使用该嵌入模型 Settings.embed_model = FireworksEmbedding( api_key="your-api-key", model_name="nomic-ai/nomic-embed-text-v1.5", embed_batch_size=10, )
from llama_index.core import VectorStoreIndex # 方式二:构建索引时按需注入 index = VectorStoreIndex.from_documents( documents, embed_model=FireworksEmbedding(api_key="your-api-key"), )

Settings.embed_model的装载机制位于 llama-index-core/llama_index/core/settings.py:未显式设置时走resolve_embed_model("default")(默认解析为 OpenAIEmbedding,见 embeddings/utils.py);显式赋值为实例后,索引、检索、向量存储写入等流程都会统一使用该嵌入模型。这样即可将 Fireworks 嵌入端点作为整个 RAG 管道的向量化引擎。

测试验证:默认值与凭证解析的保障

集成包自带单元测试 tests/test_embeddings.py,覆盖了两类关键行为,可作为集成可用性的验证依据:

def test_fireworks_embedding(): """FireworksEmbedding initializes with correct defaults.""" emb = FireworksEmbedding(api_key="test") assert isinstance(emb, BaseEmbedding) assert FireworksEmbedding.class_name() == "FireworksEmbedding" assert emb.model_name == DEFAULT_MODEL assert emb.api_base == DEFAULT_API_BASE

测试确认:仅传入api_key即可完成初始化,默认模型名与默认 API 地址与源码常量一致,class_name()返回"FireworksEmbedding"(该方法定义于 base.py#L76-L78)。凭证解析测试则验证了环境变量优先级的正确性。

小结

FireworksEmbedding是 LlamaIndex 嵌入生态中"以 OpenAI 兼容协议快速接入第三方嵌入服务"的典型范例:

  • 面向使用者,只需安装llama-index-embeddings-fireworks、提供 API Key 与模型名,即可获得单条、批量、查询及异步嵌入能力;
  • 面向原理研究者,其继承链(FireworksEmbedding→OpenAIEmbedding→BaseEmbedding)清晰展示了凭证解析、客户端复用、指数退避重试、批量切分与可观测事件如何在 LlamaIndex 中层层组装。

相关资源可继续深入阅读:

  • 集成说明与配置表:llama-index-integrations/embeddings/llama-index-embeddings-fireworks/README.md
  • 核心实现:llama-index-integrations/embeddings/llama-index-embeddings-fireworks/llama_index/embeddings/fireworks/base.py
  • 凭证解析:llama-index-integrations/embeddings/llama-index-embeddings-fireworks/llama_index/embeddings/fireworks/utils.py
  • 父类实现:llama-index-integrations/embeddings/llama-index-embeddings-openai/llama_index/embeddings/openai/base.py
  • 核心抽象:llama-index-core/llama_index/core/base/embeddings/base.py
  • 测试用例:llama-index-integrations/embeddings/llama-index-embeddings-fireworks/tests/test_embeddings.py
  • 运行示例:docs/examples/embeddings/fireworks.ipynb
  • 人工智能
  • RAG
  • 大模型

【免费下载链接】llama_index

LlamaIndex is the document processing platform for AI

项目地址:https://gitcode.com/GitHub_Trending/ll/llama_index
点击查看免费下载
上一篇:植物大战僵尸修改器怎么用?新手5分钟上手
下一篇:docTR 版面检测模型训练完全指南:基于 references/layout 脚本从零跑通 LW-DETR 训练

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询