- 人工智能
- RAG
- 大模型
【免费下载链接】llama_index
LlamaIndex is the document processing platform for AI
本文是一份围绕 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 平台上的模型名 |
dimensions | None | 输出向量的维度数;仅在模型支持时生效,会透传为请求的dimensions参数 |
embed_batch_size | 10(即DEFAULT_EMBED_BATCH_SIZE) | 批量嵌入时每个请求最多携带的文本条数 |
additional_kwargs | None | 追加给 Fireworks API 的额外关键字参数(如dimensions) |
api_key | None | Fireworks API Key;不传则读取FIREWORKS_API_KEY环境变量 |
api_base | "https://api.fireworks.ai/inference/v1" | API 基础地址,可覆盖为自定义代理端点 |
api_version | None | API 版本标识(Fireworks 默认留空) |
max_retries | 10 | 请求失败时的最大重试次数 |
timeout | 60.0 | 单次请求超时时间(秒) |
reuse_client | True | 是否在多次请求间复用底层 OpenAI 客户端 |
callback_manager | None | LlamaIndex 回调管理器,用于事件追踪 |
default_headers | None | 附加到 API 请求的默认请求头 |
http_client | None | 自定义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中,其优先级为:
- 构造时传入的参数(param);
- 环境变量(env);
- 包内默认值(default)。
支持的环境变量为:
| 环境变量 | 作用 | 默认值 |
|---|---|---|
FIREWORKS_API_KEY | Fireworks API Key | 空字符串 |
FIREWORKS_API_BASE | 自定义 API 基础地址 | "https://api.fireworks.ai/inference/v1" |
FIREWORKS_API_VERSION | API 版本 | 空字符串 |
源码中通过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
相关推荐
LlamaIndex 接入 Amazon SageMaker Endpoint 部署的 LLM:SageMakerLLM 集成实战与源码解析
LlamaIndex 接入 Amazon SageMaker Endpoint 部署的 LLM:SageMakerLLM 集成实战与源码解析 SageMaker
人工智能RAG大模型LlamaIndex Cloudflare Workers AI 嵌入集成指南:安装、配置与源码原理解析
LlamaIndex Cloudflare Workers AI 嵌入集成指南:安装、配置与源码原理解析 导读 本文围绕 LlamaIndex 官方集成的 ll
人工智能RAG大模型res-downloader 插件规范拆解:4 个方法 + 1 个桥如何接住任意新平台
res downloader 插件规范拆解:4 个方法 + 1 个桥如何接住任意新平台 res downloader 是一个 Go + Wails 的跨平台资源
桌面应用网络音视频
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考