首页
/ AutoGPT 平台 Jina Embeddings 接入指南:基于 Jina AI 的文本向量化与语义检索实现

AutoGPT 平台 Jina Embeddings 接入指南:基于 Jina AI 的文本向量化与语义检索实现

2026-09-07 18:15:44作者:姚月梅Lane

导读

本指南以 docs/integrations/block-integrations/jina/embeddings.md 为骨架,深入介绍 AutoGPT 平台中 Jina Embedding 块的输入/输出契约、调用链与底层实现。通过本文,你将掌握如何在可视化工作流中配置该块生成文本向量、理解它与向量数据库 / 语义搜索链路的配合方式,并结合平台源码了解认证机制、默认模型与 token 用量统计的具体逻辑。

Jina Embedding 块概览

它是什么

JinaEmbeddingBlock 是一个用于调用 Jina AI 文本向量化服务的平台块(Block),负责把输入的文本批量转换为高维数值向量(Embedding)。源码中对其的描述是 “Generates embeddings using Jina AI”,注册类别为 BlockCategory.AI,块 ID 为 7c56b3ab-62e7-43a2-a2dc-4ec4245660b6,参见 embeddings.py

它的工作原理

向量是文本语义的数值化表示:语义相近的文本在向量空间中彼此靠近,因此可支撑相似度搜索聚类等下游任务。块的 run() 实现步骤如下(见 embeddings.py):

  1. 将请求发送到 Jina AI 官方接口 https://api.jina.ai/v1/embeddings
  2. Authorization: Bearer <api_key> 携带用户配置的 Jina 凭据,请求体为 {"input": texts, "model": model}
  3. 解析响应 JSON,逐条从 data 数组中提取每个文本对应的 embedding 向量;
  4. 从响应的 usage 字段读取 total_tokens,通过 merge_stats 记录为节点的 input_token_count(用于平台侧用量统计);
  5. 通过生成器 yield 输出整理后的向量列表 embeddings

需要说明的是,平台块通过 backend.util.request.Requests 发起异步 HTTP 调用,因此在平台执行引擎中该块以异步任务方式运行,不会阻塞同一 Graph 中的其他节点。

输入与输出契约

按照平台 Block 声明式 Schema 的定义(embeddings.py),本块暴露的字段如下。

输入

输入 描述 类型 必填 备注
texts 需要生成向量的文本列表 List[Any] 一次调用可批量处理多条文本,平台会原样放入请求体 input 字段
credentials Jina 集成所需的 API Key 凭据 JinaCredentialsInput 属于 provider="jina"、认证类型为 api_key 的凭据(见下文“凭据配置”)
model 用于生成向量的 Jina 嵌入模型 str 默认值 jina-embeddings-v2-base-en,可按需切换模型名称

其中 textscredentialsmodel 均以 SchemaField 形式声明,model 若不传则使用默认模型。

输出

输出 描述 类型
embeddings 文本对应的向量列表 List[Any]
error 操作失败时的错误信息 str

说明:原文档输出表同时列出了 error 输出。在平台实际 Schema 中,Output 仅声明了 embeddingserror 属于该类别块在运行时由执行引擎统一处理的异常分支(底层 Requests.post 抛出的错误会走平台异常处理),因此上图 Graph 连线时你只需消费 embeddings 输出即可。

凭据配置与认证机制

Jina 系列块(Embedding / Chunking / Search / Fact Checker)共用同一套凭据定义,位于 _auth.py

  • JinaCredentials = APIKeyCredentials:凭据本质是平台统一的 API Key 凭据模型;
  • JinaCredentialsInput:限定凭据必须来自 ProviderName.JINA,且认证类型为 api_key
  • JinaCredentialsField():为块注入凭据输入控件。

平台通过 _config.pyjina 注册为 Provider,描述为 “Embeddings and reranking”,仅支持 api_key 一种认证方式。因此在使用本块前,你需要先在平台“集成 / 凭据”管理中添加一个 Jina API Key。请求发起时,块从凭据中取出密钥明文并通过 Authorization: Bearer 头传给 Jina(embeddings.py)。源码内还预置了一组仅用于单测/离线验证的 Mock 凭据(mock-jina-api-key),方便在本地测试中不触碰真实账号即可模拟执行。

典型应用场景与编排建议

原文档给出了三类高度契合该块的落地场景:

  1. 语义搜索(Semantic Search):先生成文档向量,再在检索阶段将查询文本同样向量化,通过余弦相似度等距离度量召回最相关的文档片段;
  2. 向量数据库(Vector Database):把 embeddings 输出批量写入 Pinecone、Weaviate 等向量库,供后续近似最近邻(ANN)检索使用;
  3. 文档聚类(Document Clustering):对一批文档向量做聚类,自动发现相似内容或关联条目。

在 AutoGPT 平台中,你通常不会让该块孤立运行,而是与同属 Jina 目录的块或其他文本处理块组合成 Graph,形成 “文本切分 → 向量化 → 入库” 的流水线。平台源码中 Jina 目录下还提供了与之互补的三块(blocks/jina):

  • JinaChunkingBlock:调用 https://segment.jina.ai/ 对长文本切块,支持 max_chunk_length(默认 1000)与 return_tokens,可先于向量化执行以适配模型上下文与索引粒度;
  • SearchTheWebBlock:基于 https://s.jina.ai/ 的 Jina Reader Search 做网页搜索;
  • ExtractWebsiteContentBlock:基于 https://r.jina.ai/ 抓取网页正文。

一个常见编排是:先用 Chunking 块把长文档切成片段 → 逐片喂给 Embedding 块得到向量 → 将 chunksembeddings 一一配对写入向量数据库。你也可以利用平台自带的 LLM / 文本输入节点把任意待检索文本接入 Embedding 块。

源码深读:一次块调用的完整链路

请求与响应解析

JinaEmbeddingBlock.run 的关键代码(embeddings.py):

url = "https://api.jina.ai/v1/embeddings"
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {credentials.api_key.get_secret_value()}",
}
data = {"input": input_data.texts, "model": input_data.model}
response = await Requests().post(url, headers=headers, json=data)
resp_json = response.json()
embeddings = [e["embedding"] for e in resp_json["data"]]
usage = resp_json.get("usage", {})
if usage.get("total_tokens"):
    self.merge_stats(NodeExecutionStats(input_token_count=usage.get("total_tokens", 0)))
yield "embeddings", embeddings

值得注意的实现细节:

  • 批量语义texts 会被完整透传,因此多条文本的单次 API 调用会返回同样数量(与入参顺序对应)的向量条目,平台内部用列表推导按序提取;
  • Token 统计的容错性:只有当响应含 usage.total_tokens 时才上报 input_token_count,否则静默跳过,不影响向量输出。这一行为被测试显式锁定(见下文)。

成本/用量追踪的测试验证

仓库在 block_cost_tracking_test.py 中对本块的用量上报逻辑写了两组单测:

  • test_merge_stats_called_with_token_count:mock 返回 {"data": [{"embedding": [...]}], "usage": {"total_tokens": 42}} 后断言 merge_stats 收到 input_token_count == 42
  • test_no_merge_stats_when_usage_absent:mock 响应不含 usage 字段时断言不调用 merge_stats

这两条测试印证了 “Token 上报是可选的、以 API 实际返回为准” 的实现行为,也说明该块会参与平台的节点级用量统计与成本归因,而不是单纯的透传调用。

快速上手:在 Agent/Graph 中接入

在 AutoGPT 平台可视化编辑器中,可直接按以下步骤使用(无需修改仓库代码):

  1. 准备凭据:前往平台集成设置,选择 Jina Provider,粘贴从 Jina AI 后台申请的 API Key 并保存;
  2. 拖入块:从块面板中搜索 “Jina Embedding”,拖入画布;该块默认归属 AI 类目,可直接与文本来源节点相连;
  3. 接输入:将上游文本节点的输出接到 texts(列表类型);如需切换模型,在 model 中填入目标模型名(例如 jina-embeddings-v3 等当前可用的模型标识),留空则使用默认的 jina-embeddings-v2-base-en
  4. 选凭据:在块的 credentials 字段中选中第 1 步保存的 Jina API Key;
  5. 消费输出:把 embeddings 接到后续节点(如写向量库的 HTTP/存储节点,或直接作为 LLM 上下文的一部分);
  6. 运行验证:执行 Graph 后在节点运行结果中应看到与输入数量相等的向量列表;若凭据无效或额度不足,运行会进入错误分支并显示相应信息。

运行前提与限制

  • 该块是在线调用型节点,运行环境必须能访问 https://api.jina.ai/v1/embeddings
  • 默认模型为 jina-embeddings-v2-base-enembeddings.py),切换模型时请确认该模型在 Jina 侧的可用性与输入长度约束;
  • 向量输出与文本输入一一对应,数量与顺序由 Jina API 返回决定;若要保证后续配对正确,建议保持上游列表元素顺序稳定;
  • 实际向量维度、模型能力边界与 API 计费以 Jina AI 官方为准,仓库源码不包含相关模型运行时细节;
  • 想进一步了解同目录其他 Jina 块,可对照阅读 search.mdchunking.md,或直接查看 blocks/jina 下的实现源码。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.74 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.81 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
595
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
920
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.63 K
1.02 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
518
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
389