说明
我们集成了 Jina AI 的五个核心接口,助你轻松构建功能强大的智能体。这些接口主要适用于以下场景:- 向量嵌入 (Embeddings):适用于多模态 RAG 问答场景,例如智能客服、智能招聘和知识库问答。
- 重排序 (Rerank):通过优化 Embedding 候选结果,依据话题相关性进行重排序,显著提升大型语言模型的回答质量。
- 深度搜索 (DeepSearch):进行深度搜索与推理,直至找到最优答案,特别适用于课题研究和产品解决方案制定等复杂任务。
- 网页搜索 (Search):输入查询词,返回搜索结果页 (SERP) 的干净正文,直接可喂给 LLM 做联网问答 / RAG。
- 网页读取 (Reader):输入任意网址,返回该网页转换后的干净 markdown 正文,适合抓取网页内容喂给 LLM。
我们在 Jina AI 接口的基础上进行了增强,以便支持未来的功能扩展,因此在使用方式上会与官方原生调用略有不同。
快速指引
除了更换API_KEY 为 AIHUBMIX_API_KEY 和模型端点链接,其他参数和用法和 Jina AI 官方完全一致。
端点替换:
-
向量嵌入 (Embeddings):
https://jina.ai/embeddings->https://aihubmix.com/v1/embeddings -
重排序 (Rerank):
https://api.jina.ai/v1/rerank->https://aihubmix.com/v1/rerank -
深度搜索 (DeepSearch):
https://deepsearch.jina.ai/v1/chat/completions->https://aihubmix.com/v1/chat/completions -
网页搜索 (Search):
https://s.jina.ai/?q=->https://aihubmix.com/v1/jina/search?q= -
网页读取 (Reader):
https://r.jina.ai/<url>->https://aihubmix.com/v1/jina/reader/<url>如遇当前 API 主地址不可用,可将此处域名替换为备用地址https://api.inferera.com,路径保持不变。
一、向量嵌入 (Embeddings)
Jina AI 的 Embedding 支持普通文本和多模态图文,对于多语言任务的处理表现出众。请求参数
string
必填
模型名称,可用的嵌入模型列表如下:
jina-clip-v2:多模态、多语言、1024 维、8K 上下文窗口、865M 参数jina-embeddings-v3:文本模型、多语言、1024 维、8K 上下文窗口、570M 参数jina-colbert-v2:多语言 ColBERT 模型,8K token 上下文,560M 参数,用于嵌入和重排序jina-embeddings-v2-base-code:针对代码和文档搜索优化的模型,768 维,8K 上下文窗口,137M 参数
array
必填
输入文本或图片,根据不同模型支持不同的输入格式。对于文本,直接提供字符串数组;对于多模态模型,可以提供包含 text 或 image 字段的对象数组
string
默认值:"float"
返回的数据类型,可选值:
float:默认,返回浮点数数组。最常见且易于使用的格式,返回为浮点数列表binary_int8:返回为 int8 打包的二进制格式。更高效的存储、搜索和传输方式binary_uint8:返回为 uint8 打包的二进制格式。更高效的存储、搜索和传输方式base64:返回 base64 编码的字符串。更高效的传输方式
integer
默认值:"1024"
计算维度,可选值:
- 1024
- 768
1. 多模态用法
curl https://aihubmix.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-***" \
-d @- <<EOFEOF
{
"model": "jina-clip-v2",
"input": [
{
"text": "A beautiful sunset over the beach"
},
{
"text": "Un beau coucher de soleil sur la plage"
},
{
"text": "海滩上美丽的日落"
},
{
"text": "浜辺に沈む美しい夕日"
},
{
"image": "https://i.ibb.co/nQNGqL0/beach1.jpg"
},
{
"image": "https://i.ibb.co/r5w8hG8/beach2.jpg"
},
{
"image": "R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7"
}
]
}
EOFEOF
import requests
import json
url = 'https://aihubmix.com/v1/embeddings'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-***' # 替换为你的 AiHubMix 密钥
}
data = {
"model": "jina-clip-v2",
"input": [
{
"text": "A beautiful sunset over the beach"
},
{
"text": "Un beau coucher de soleil sur la plage"
},
{
"text": "海滩上美丽的日落"
},
{
"text": "浜辺に沈む美しい夕日"
},
{
"image": "https://i.ibb.co/nQNGqL0/beach1.jpg"
},
{
"image": "https://i.ibb.co/r5w8hG8/beach2.jpg"
},
{
"image": "R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7"
}
]
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json())
import fetch from 'node-fetch';
const url = 'https://aihubmix.com/v1/embeddings';
const headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-***' // 替换为你的 AiHubMix 密钥
};
const data = {
"model": "jina-clip-v2",
"input": [
{
"text": "A beautiful sunset over the beach"
},
{
"text": "Un beau coucher de soleil sur la plage"
},
{
"text": "海滩上美丽的日落"
},
{
"text": "浜辺に沈む美しい夕日"
},
{
"image": "https://i.ibb.co/nQNGqL0/beach1.jpg"
},
{
"image": "https://i.ibb.co/r5w8hG8/beach2.jpg"
},
{
"image": "R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7"
}
]
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(err => console.error(err));
2. 纯文本用法
只需要提供文本字符串数组,不需要提供image 字段。
curl https://aihubmix.com/v1/rerank \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-***" \
-d @- <<EOFEOF
{
"model": "jina-embeddings-v3",
"input": [
"A beautiful sunset over the beach",
"Un beau coucher de soleil sur la plage",
"海滩上美丽的日落",
"浜辺に沈む美しい夕日"
]
}
EOFEOF
import requests
url = 'https://aihubmix.com/v1/embeddings'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-***' # 替换为你的 AiHubMix 密钥
}
data = {
'model': 'jina-embeddings-v3',
'input': [
'A beautiful sunset over the beach',
'Un beau coucher de soleil sur la plage',
'海滩上美丽的日落',
'浜辺に沈む美しい夕日'
]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
import * as https from 'https';
const options = {
hostname: 'aihubmix.com',
path: '/v1/embeddings',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-***' // 替换为你的 AiHubMix 密钥
}
};
const data = JSON.stringify({
"model": "jina-embeddings-v3",
"input": [
"A beautiful sunset over the beach",
"Un beau coucher de soleil sur la plage",
"海滩上美丽的日落",
"浜辺に沈む美しい夕日"
]
});
const req = https.request(options, res => {
let responseData = '';
res.on('data', chunk => {
responseData += chunk;
});
res.on('end', () => {
console.log(responseData);
});
});
req.write(data);
req.end();
二、重排序 (Rerank)
重排序器的目标是提高搜索相关性和 RAG 准确性。它通过对初始搜索结果的深度分析,考虑查询与文档内容之间的细微交互,从而重新排列搜索结果,将最相关的结果放在顶部。请求参数
string
必填
模型名称,可用模型列表如下:
jina-reranker-m0:多模态多语言文档重排序器,10K 上下文,2.4B 参数,用于视觉文档排序
string
必填
搜索查询文本,用于与候选文档进行比较
integer
要返回的最相关文档数量。默认返回所有文档
array
必填
候选文档数组,将根据与查询的相关性进行重新排序
integer
默认值:"4096"
文档最大分块长度,仅适用于 Cohere,不适用于 Jina。默认值为 4096。
超过该长度的长文档将自动被截断为指定的 token 数量。
超过该长度的长文档将自动被截断为指定的 token 数量。
1. 多模态用法
curl https://aihubmix.com/v1/rerank \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-***" \
-d @- <<EOFEOF
{
"model": "jina-reranker-m0",
"query": "small language model data extraction",
"documents": [
{
"image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/handelsblatt-preview.png"
},
{
"image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/paper-11.png"
},
{
"image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/wired-preview.png"
},
{
"text": "We present ReaderLM-v2, a compact 1.5 billion parameter language model designed for efficient web content extraction. Our model processes documents up to 512K tokens, transforming messy HTML into clean Markdown or JSON formats with high accuracy -- making it an ideal tool for grounding large language models. The models effectiveness results from two key innovations: (1) a three-stage data synthesis pipeline that generates high quality, diverse training data by iteratively drafting, refining, and critiquing web content extraction; and (2) a unified training framework combining continuous pre-training with multi-objective optimization. Intensive evaluation demonstrates that ReaderLM-v2 outperforms GPT-4o-2024-08-06 and other larger models by 15-20% on carefully curated benchmarks, particularly excelling at documents exceeding 100K tokens, while maintaining significantly lower computational requirements."
},
{
"image": "https://jina.ai/blog-banner/using-deepseek-r1-reasoning-model-in-deepsearch.webp"
},
{
"text": "Data extraction? Why not just use regular expressions—wouldn't regex solve it all?"
},
{
"text": "During the California Gold Rush, some merchants made more money selling supplies to miners than the miners made finding gold."
},
{
"text": "Die wichtigsten Beiträge unserer Arbeit sind zweifach: Erstens führen wir eine neuartige dreistufige Datensynthese-Pipeline namens Draft-Refine-Critique ein, die durch iterative Verfeinerung hochwertige Trainingsdaten generiert; und zweitens schlagen wir eine umfassende Trainingsstrategie vor, die kontinuierliches Vortraining zur Längenerweiterung, überwachtes Feintuning mit spezialisierten Kontrollpunkten, direkte Präferenzoptimierung (DPO) und iteratives Self-Play-Tuning kombiniert. Um die weitere Forschung und Anwendung der strukturierten Inhaltsextraktion zu erleichtern, ist das Modell auf Hugging Face öffentlich verfügbar."
},
{
"image": "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"
}
]
}
EOFEOF
import requests
url = 'https://aihubmix.com/v1/rerank'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-***' # 替换为你的 AiHubMix 密钥
}
data = {
"model": "jina-reranker-m0",
"query": "small language model data extraction",
"documents": [
{
"image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/handelsblatt-preview.png"
},
{
"image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/paper-11.png"
},
{
"image": "https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/wired-preview.png"
},
{
"text": "We present ReaderLM-v2, a compact 1.5 billion parameter language model designed for efficient web content extraction. Our model processes documents up to 512K tokens, transforming messy HTML into clean Markdown or JSON formats with high accuracy -- making it an ideal tool for grounding large language models. The models effectiveness results from two key innovations: (1) a three-stage data synthesis pipeline that generates high quality, diverse training data by iteratively drafting, refining, and critiquing web content extraction; and (2) a unified training framework combining continuous pre-training with multi-objective optimization. Intensive evaluation demonstrates that ReaderLM-v2 outperforms GPT-4o-2024-08-06 and other larger models by 15-20% on carefully curated benchmarks, particularly excelling at documents exceeding 100K tokens, while maintaining significantly lower computational requirements."
},
{
"image": "https://jina.ai/blog-banner/using-deepseek-r1-reasoning-model-in-deepsearch.webp"
},
{
"text": "Data extraction? Why not just use regular expressions—wouldn't regex solve it all?"
},
{
"text": "During the California Gold Rush, some merchants made more money selling supplies to miners than the miners made finding gold."
},
{
"text": "Die wichtigsten Beiträge unserer Arbeit sind zweifach: Erstens führen wir eine neuartige dreistufige Datensynthese-Pipeline namens Draft-Refine-Critique ein, die durch iterative Verfeinerung hochwertige Trainingsdaten generiert; und zweitens schlagen wir eine umfassende Trainingsstrategie vor, die kontinuierliches Vortraining zur Längenerweiterung, überwachtes Feintuning mit spezialisierten Kontrollpunkten, direkte Präferenzoptimierung (DPO) und iteratives Self-Play-Tuning kombiniert. Um die weitere Forschung und Anwendung der strukturierten Inhaltsextraktion zu erleichtern, ist das Modell auf Hugging Face öffentlich verfügbar."
},
{
"image": "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"
}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
import fetch from 'node-fetch';
const url = 'https://aihubmix.com/v1/rerank';
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-***' // 替换为你的 AiHubMix 密钥
},
body: JSON.stringify({
model: 'jina-reranker-m0',
query: 'small language model data extraction',
documents: [
{
image: 'https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/handelsblatt-preview.png'
},
{
image: 'https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/paper-11.png'
},
{
image: 'https://raw.githubusercontent.com/jina-ai/multimodal-reranker-test/main/wired-preview.png'
},
{
text: 'We present ReaderLM-v2, a compact 1.5 billion parameter language model designed for efficient web content extraction. Our model processes documents up to 512K tokens, transforming messy HTML into clean Markdown or JSON formats with high accuracy -- making it an ideal tool for grounding large language models. The models effectiveness results from two key innovations: (1) a three-stage data synthesis pipeline that generates high quality, diverse training data by iteratively drafting, refining, and critiquing web content extraction; and (2) a unified training framework combining continuous pre-training with multi-objective optimization. Intensive evaluation demonstrates that ReaderLM-v2 outperforms GPT-4o-2024-08-06 and other larger models by 15-20% on carefully curated benchmarks, particularly excelling at documents exceeding 100K tokens, while maintaining significantly lower computational requirements.'
},
{
image: 'https://jina.ai/blog-banner/using-deepseek-r1-reasoning-model-in-deepsearch.webp'
},
{
text: 'Data extraction? Why not just use regular expressions—wouldn\'t regex solve it all?'
},
{
text: 'During the California Gold Rush, some merchants made more money selling supplies to miners than the miners made finding gold.'
},
{
text: 'Die wichtigsten Beiträge unserer Arbeit sind zweifach: Erstens führen wir eine neuartige dreistufige Datensynthese-Pipeline namens Draft-Refine-Critique ein, die durch iterative Verfeinerung hochwertige Trainingsdaten generiert; und zweitens schlagen wir eine umfassende Trainingsstrategie vor, die kontinuierliches Vortraining zur Längenerweiterung, überwachtes Feintuning mit spezialisierten Kontrollpunkten, direkte Präferenzoptimierung (DPO) und iteratives Self-Play-Tuning kombiniert. Um die weitere Forschung und Anwendung der strukturierten Inhaltsextraktion zu erleichtern, ist das Modell auf Hugging Face öffentlich verfügbar.'
},
{
image: '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'
}
]
})
};
fetch(url, options)
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
响应说明
{
"model": "jina-reranker-m0",
"results": [
{
"index": 1,
"relevance_score": 0.8814517277012487
},
{
"index": 3,
"relevance_score": 0.7756727858283531
},
{
"index": 7,
"relevance_score": 0.6128658982982312
}
],
"usage": {
"total_tokens": 2894
}
}
model: 使用的模型名称results: 重排序结果数组,按相关性得分降序排列,每个元素包含:index: 原始文档数组中的索引位置relevance_score: 相关性分数,介于 0-1 之间,越高表示与查询越相关total_tokens: 此请求处理的总 Token 数
2. 文本用法
文本重排序包含多语言任务和普通任务,和 embedding 用法类似,传入数组。curl https://aihubmix.com/v1/rerank \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-***" \
-d @- <<EOFEOF
{
"model": "jina-reranker-v2-base-multilingual",
"query": "Organic skincare products for sensitive skin",
"top_n": 3,
"documents": [
"Organic skincare for sensitive skin with aloe vera and chamomile: Imagine the soothing embrace of nature with our organic skincare range, crafted specifically for sensitive skin. Infused with the calming properties of aloe vera and chamomile, each product provides gentle nourishment and protection. Say goodbye to irritation and hello to a glowing, healthy complexion.",
"New makeup trends focus on bold colors and innovative techniques: Step into the world of cutting-edge beauty with this seasons makeup trends. Bold, vibrant colors and groundbreaking techniques are redefining the art of makeup. From neon eyeliners to holographic highlighters, unleash your creativity and make a statement with every look.",
"Bio-Hautpflege für empfindliche Haut mit Aloe Vera und Kamille: Erleben Sie die wohltuende Wirkung unserer Bio-Hautpflege, speziell für empfindliche Haut entwickelt. Mit den beruhigenden Eigenschaften von Aloe Vera und Kamille pflegen und schützen unsere Produkte Ihre Haut auf natürliche Weise. Verabschieden Sie sich von Hautirritationen und genießen Sie einen strahlenden Teint.",
"Neue Make-up-Trends setzen auf kräftige Farben und innovative Techniken: Tauchen Sie ein in die Welt der modernen Schönheit mit den neuesten Make-up-Trends. Kräftige, lebendige Farben und innovative Techniken setzen neue Maßstäbe. Von auffälligen Eyelinern bis hin zu holografischen Highlightern – lassen Sie Ihrer Kreativität freien Lauf und setzen Sie jedes Mal ein Statement.",
"Cuidado de la piel orgánico para piel sensible con aloe vera y manzanilla: Descubre el poder de la naturaleza con nuestra línea de cuidado de la piel orgánico, diseñada especialmente para pieles sensibles. Enriquecidos con aloe vera y manzanilla, estos productos ofrecen una hidratación y protección suave. Despídete de las irritaciones y saluda a una piel radiante y saludable.",
"Las nuevas tendencias de maquillaje se centran en colores vivos y técnicas innovadoras: Entra en el fascinante mundo del maquillaje con las tendencias más actuales. Colores vivos y técnicas innovadoras están revolucionando el arte del maquillaje. Desde delineadores neón hasta iluminadores holográficos, desata tu creatividad y destaca en cada look.",
"针对敏感肌专门设计的天然有机护肤产品:体验由芦荟和洋甘菊提取物带来的自然呵护。我们的护肤产品特别为敏感肌设计,温和滋润,保护您的肌肤不受刺激。让您的肌肤告别不适,迎来健康光彩。",
"新的化妆趋势注重鲜艳的颜色和创新的技巧:进入化妆艺术的新纪元,本季的化妆趋势以大胆的颜色和创新的技巧为主。无论是霓虹眼线还是全息高光,每一款妆容都能让您脱颖而出,展现独特魅力。",
"敏感肌のために特別に設計された天然有機スキンケア製品: アロエベラとカモミールのやさしい力で、自然の抱擁を感じてください。敏感肌用に特別に設計された私たちのスキンケア製品は、肌に優しく栄養を与え、保護します。肌トラブルにさようなら、輝く健康な肌にこんにちは。",
"新しいメイクのトレンドは鮮やかな色と革新的な技術に焦点を当てています: 今シーズンのメイクアップトレンドは、大胆な色彩と革新的な技術に注目しています。ネオンアイライナーからホログラフィックハイライターまで、クリエイティビティを解き放ち、毎回ユニークなルックを演出しましょう。"
]
}
EOFEOF
import requests
url = 'https://aihubmix.com/v1/rerank'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-***' # 替换为你的 AiHubMix 密钥
}
data = {
"model": "jina-reranker-v2-base-multilingual",
"query": "Organic skincare products for sensitive skin",
"top_n": 3,
"documents": [
"Organic skincare for sensitive skin with aloe vera and chamomile: Imagine the soothing embrace of nature with our organic skincare range, crafted specifically for sensitive skin. Infused with the calming properties of aloe vera and chamomile, each product provides gentle nourishment and protection. Say goodbye to irritation and hello to a glowing, healthy complexion.",
"New makeup trends focus on bold colors and innovative techniques: Step into the world of cutting-edge beauty with this seasons makeup trends. Bold, vibrant colors and groundbreaking techniques are redefining the art of makeup. From neon eyeliners to holographic highlighters, unleash your creativity and make a statement with every look.",
"Bio-Hautpflege für empfindliche Haut mit Aloe Vera und Kamille: Erleben Sie die wohltuende Wirkung unserer Bio-Hautpflege, speziell für empfindliche Haut entwickelt. Mit den beruhigenden Eigenschaften von Aloe Vera und Kamille pflegen und schützen unsere Produkte Ihre Haut auf natürliche Weise. Verabschieden Sie sich von Hautirritationen und genießen Sie einen strahlenden Teint.",
"Neue Make-up-Trends setzen auf kräftige Farben und innovative Techniken: Tauchen Sie ein in die Welt der modernen Schönheit mit den neuesten Make-up-Trends. Kräftige, lebendige Farben und innovative Techniken setzen neue Maßstäbe. Von auffälligen Eyelinern bis hin zu holografischen Highlightern – lassen Sie Ihrer Kreativität freien Lauf und setzen Sie jedes Mal ein Statement.",
"Cuidado de la piel orgánico para piel sensible con aloe vera y manzanilla: Descubre el poder de la naturaleza con nuestra línea de cuidado de la piel orgánico, diseñada especialmente para pieles sensibles. Enriquecidos con aloe vera y manzanilla, estos productos ofrecen una hidratación y protección suave. Despídete de las irritaciones y saluda a una piel radiante y saludable.",
"Las nuevas tendencias de maquillaje se centran en colores vivos y técnicas innovadoras: Entra en el fascinante mundo del maquillaje con las tendencias más actuales. Colores vivos y técnicas innovadoras están revolucionando el arte del maquillaje. Desde delineadores neón hasta iluminadores holográficos, desata tu creatividad y destaca en cada look.",
"针对敏感肌专门设计的天然有机护肤产品:体验由芦荟和洋甘菊提取物带来的自然呵护。我们的护肤产品特别为敏感肌设计,温和滋润,保护您的肌肤不受刺激。让您的肌肤告别不适,迎来健康光彩。",
"新的化妆趋势注重鲜艳的颜色和创新的技巧:进入化妆艺术的新纪元,本季的化妆趋势以大胆的颜色和创新的技巧为主。无论是霓虹眼线还是全息高光,每一款妆容都能让您脱颖而出,展现独特魅力。",
"敏感肌のために特別に設計された天然有機スキンケア製品: アロエベラとカモミールのやさしい力で、自然の抱擁を感じてください。敏感肌用に特別に設計された私たちのスキンケア製品は、肌に優しく栄養を与え、保護します。肌トラブルにさようなら、輝く健康な肌にこんにちは。",
"新しいメイクのトレンドは鮮やかな色と革新的な技術に焦点を当てています: 今シーズンのメイクアップトレンドは、大胆な色彩と革新的な技術に注目しています。ネオンアイライナーからホログラフィックハイライターまで、クリエイティビティを解き放ち、毎回ユニークなルックを演出しましょう。"
]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const https = require('https');
const requestData = {
model: "jina-reranker-v2-base-multilingual",
query: "Organic skincare products for sensitive skin",
top_n: 3,
documents: [
"Organic skincare for sensitive skin with aloe vera and chamomile: Imagine the soothing embrace of nature with our organic skincare range, crafted specifically for sensitive skin. Infused with the calming properties of aloe vera and chamomile, each product provides gentle nourishment and protection. Say goodbye to irritation and hello to a glowing, healthy complexion.",
"New makeup trends focus on bold colors and innovative techniques: Step into the world of cutting-edge beauty with this seasons makeup trends. Bold, vibrant colors and groundbreaking techniques are redefining the art of makeup. From neon eyeliners to holographic highlighters, unleash your creativity and make a statement with every look.",
"Bio-Hautpflege für empfindliche Haut mit Aloe Vera und Kamille: Erleben Sie die wohltuende Wirkung unserer Bio-Hautpflege, speziell für empfindliche Haut entwickelt. Mit den beruhigenden Eigenschaften von Aloe Vera und Kamille pflegen und schützen unsere Produkte Ihre Haut auf natürliche Weise. Verabschieden Sie sich von Hautirritationen und genießen Sie einen strahlenden Teint.",
"Neue Make-up-Trends setzen auf kräftige Farben und innovative Techniken: Tauchen Sie ein in die Welt der modernen Schönheit mit den neuesten Make-up-Trends. Kräftige, lebendige Farben und innovative Techniken setzen neue Maßstäbe. Von auffälligen Eyelinern bis hin zu holografischen Highlightern – lassen Sie Ihrer Kreativität freien Lauf und setzen Sie jedes Mal ein Statement.",
"Cuidado de la piel orgánico para piel sensible con aloe vera y manzanilla: Descubre el poder de la naturaleza con nuestra línea de cuidado de la piel orgánico, diseñada especialmente para pieles sensibles. Enriquecidos con aloe vera y manzanilla, estos productos ofrecen una hidratación y protección suave. Despídete de las irritaciones y saluda a una piel radiante y saludable.",
"Las nuevas tendencias de maquillaje se centran en colores vivos y técnicas innovadoras: Entra en el fascinante mundo del maquillaje con las tendencias más actuales. Colores vivos y técnicas innovadoras están revolucionando el arte del maquillaje. Desde delineadores neón hasta iluminadores holográficos, desata tu creatividad y destaca en cada look.",
"针对敏感肌专门设计的天然有机护肤产品:体验由芦荟和洋甘菊提取物带来的自然呵护。我们的护肤产品特别为敏感肌设计,温和滋润,保护您的肌肤不受刺激。让您的肌肤告别不适,迎来健康光彩。",
"新的化妆趋势注重鲜艳的颜色和创新的技巧:进入化妆艺术的新纪元,本季的化妆趋势以大胆的颜色和创新的技巧为主。无论是霓虹眼线还是全息高光,每一款妆容都能让您脱颖而出,展现独特魅力。",
"敏感肌のために特別に設計された天然有機スキンケア製品:アロエベラとカモミールのやさしい力で、自然の抱擁を感じてください。敏感肌用に特別に設計された私たちのスキンケア製品は、肌に優しく栄養を与え、保護します。肌トラブルにさようなら、輝く健康な肌にこんにちは。",
"新しいメイクのトレンドは鮮やかな色と革新的な技術に焦点を当てています:今シーズンのメイクアップトレンドは、大胆な色彩と革新的な技術に注目しています。ネオンアイライナーからホログラフィックハイライターまで、クリエイティビティを解き放ち、毎回ユニークなルックを演出しましょう。"
]
};
const options = {
hostname: 'aihubmix.com',
port: 443,
path: '/v1/rerank',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-***' // 替换为你的 AiHubMix 密钥
}
};
const req = https.request(options, res => {
let responseData = '';
res.on('data', chunk => {
responseData += chunk;
});
res.on('end', () => {
console.log(responseData);
});
});
req.write(JSON.stringify(requestData));
req.end();
三、深度搜索 (DeepSearch)
DeepSearch 结合了搜索、阅读和推理能力,直到找到最佳答案。它完全兼容 OpenAI 的 Chat API 格式,只需将api.openai.com 替换为 aihubmix.com 即可开始使用。流式调用 (stream) 会返回思考过程。
请求参数
string
必填
模型名称,可用模型列表:
jina-deepsearch-v1:默认模型,搜索、阅读和推理直到找到最佳答案
boolean
默认值:"true"
是否启用流式响应。强烈建议保持此选项开启,DeepSearch 请求可能需要较长时间完成,禁用流式可能导致 ‘524 超时’ 错误
array
必填
用户与助手之间的对话消息列表。支持多种类型(模态)的消息,如文本 (.txt, .pdf)、图像 (.png, .webp, .jpeg) 等。文件大小最大支持 10MB
多模态消息格式
DeepSearch 支持多种类型的消息格式,可以包含纯文本(message)、文件(file)和图像(image)。以下是不同格式的示例:1. 纯文本消息
{
"role": "user",
"content": "hi"
}
2. 带有文件附件的消息
{
"role": "user",
"content": [
{
"type": "text",
"text": "what's in this file?"
},
{
"type": "file",
"data": "data:application/pdf;base64,JVBERi0xLjQKJfbk...", // PDF 文件的 base64 编码
"mimeType": "application/pdf"
}
]
}
3. 带有图像的消息
{
"role": "user",
"content": [
{
"type": "text",
"text": "what's in the image?"
},
{
"type": "image",
"image": "data:image/webp;base64,UklGRoDOAAB...", // 图像的 base64 编码
"mimeType": "image/webp"
}
]
}
调用示例
请注意 Jina AI 官网的 Python 流式调用会没有响应,参考我们的示例即可。curl https://aihubmix.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-***" \
-d @- <<EOFEOF
{
"model": "jina-deepsearch-v1",
"messages": [
{
"role": "user",
"content": "Hi!"
},
{
"role": "assistant",
"content": "Hi, how can I help you?"
},
{
"role": "user",
"content": "what's the latest blog post from jina ai?"
}
],
"stream": true
}
EOFEOF
import requests
import json
url = 'https://aihubmix.com/v1/chat/completions'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-***' # 替换为你的 AiHubMix 密钥
}
data = {
"model": "jina-deepsearch-v1",
"messages": [
{
"role": "user",
"content": "Hi!"
},
{
"role": "assistant",
"content": "Hi, how can I help you?"
},
{
"role": "user",
"content": "what's the latest blog post from jina ai?"
}
],
"stream": True
}
# Use stream=True in the request to handle streaming responses
response = requests.post(url, headers=headers, json=data, stream=True)
# Check if the request was successful
if response.status_code == 200:
# Iterate over the response content line by line
for line in response.iter_lines():
if line:
# Decode line and print (assuming SSE format: "data: {...}")
decoded_line = line.decode('utf-8')
if decoded_line.startswith('data: '):
# Handle potential end signal like "data: [DONE]"
if decoded_line[len('data: '):].strip() == '[DONE]':
print("\nStream finished.")
break
try:
# Extract the JSON part
json_data = json.loads(decoded_line[len('data: '):])
# Process the JSON data
if 'choices' in json_data and len(json_data['choices']) > 0:
delta = json_data['choices'][0].get('delta', {})
content_to_print = delta.get('content') or delta.get('reasoning_content') # Check both fields
if content_to_print:
print(content_to_print, end='', flush=True)
except json.JSONDecodeError:
# Ignore lines that are not valid JSON after "data: "
# print(f"\nCould not decode JSON from line: {decoded_line}")
pass # Optionally log or handle non-JSON data lines if needed
# Handle lines that don't start with "data: " if necessary
# else:
# print(f"Received non-data line: {decoded_line}")
print() # Add a newline at the end
elif response.status_code == 401:
print(f"Error: {response.status_code} - Unauthorized. Please check your API key.")
try:
print(response.json())
except json.JSONDecodeError:
print(response.text)
else:
print(f"Error: {response.status_code}")
try:
print(response.json()) # Print error details if available
except json.JSONDecodeError:
print(response.text) # Print raw text if not JSON
const https = require('https');
const data = JSON.stringify({
model: "jina-deepsearch-v1",
messages: [
{
role: "user",
content: "Hi!"
},
{
role: "assistant",
content: "Hi, how can I help you?"
},
{
role: "user",
content: "what's the latest blog post from jina ai?"
}
],
stream: true
});
const options = {
hostname: 'aihubmix.com',
path: '/v1/chat/completions',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length,
'Authorization': 'Bearer sk-***' // 替换为你的 AiHubMix 密钥
}
};
const req = https.request(options, res => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', d => {
process.stdout.write(d);
});
});
req.on('error', error => {
console.error(error);
});
req.write(data);
req.end();
响应说明
DeepSearch 的响应默认是开启流式的,包括推理步骤和最终答案。最后一个块包含最终答案、访问的 URL 和 token 使用情况。关闭流式则不输出 thinking 内容。注意这个对象和 Jina AI 有所差异。
{
"id": "1745506101379",
"object": "chat.completion.chunk",
"created": 1745506101,
"model": "jina-deepsearch-v1",
"choices": [
{
"index": 0,
"delta": {
"role": "assistant",
"reasoning_content": "<think>"
}
}
],
"system_fingerprint": "fp_1745506101379"
}
// 流式推理内容
{
"id": "1745506101379",
"object": "chat.completion.chunk",
"created": 1745506101,
"model": "jina-deepsearch-v1",
"choices": [
{
"index": 0,
"delta": {
"reasoning_content": "推理内容片段"
}
}
],
"system_fingerprint": "fp_1745506101379"
}
// 推理结束
{
"id": "1745506101379",
"object": "chat.completion.chunk",
"created": 1745506101,
"model": "jina-deepsearch-v1",
"choices": [
{
"index": 0,
"delta": {
"reasoning_content": "</think>\n\n"
},
"finish_reason": "thinking_end"
}
],
"system_fingerprint": "fp_1745506101379"
}
// 最终响应内容(包含注释和URL引用)
{
"id": "1745506101379",
"object": "chat.completion.chunk",
"created": 1745506101,
"model": "jina-deepsearch-v1",
"choices": [
{
"index": 0,
"delta": {
"content": "响应内容",
"type": "text",
"annotations": [
{
"type": "url_citation",
"url_citation": {
"url": "https://example.com",
"title": "页面标题",
"start_index": 0,
"end_index": 0
}
}
]
},
"finish_reason": "stop"
}
],
"system_fingerprint": "fp_1745506101379",
"usage": {
"prompt_tokens": 673423,
"completion_tokens": 109286,
"total_tokens": 583555
}
}
data: [DONE]
Python
<think>I need to check the Jina AI blog for their most recent post, which requires up-to-date information. I need to find the latest blog post from Jina AI. I will use a search engine to find the Jina AI blog and then identify the most recent post. Let me search for latest blog post from Jina AI to gather more information. Okay, I've created some queries to find the latest Jina AI blog post. First, a general search for the Jina AI blog updated in the past week. Then, some focused queries on specific Jina AI products like DeepSearch and neural search, checking for updates in the last month. Also, I included queries about embedding models and API updates, again looking at the past month. And I added a query about Elasticsearch integration from the past year. Finally, I've added a query to find any criticisms or limitations of Jina AI, to get a balanced perspective. Let me search for Jina AI Elasticsearch integration, Jina AI criticism limitations, Jina AI deepsearch updates, Jina AI neural search, Jina AI embedding models to gather more information. To accurately answer the user's question about the latest blog post from Jina AI, I need to visit the provided URLs and extract the publication dates and titles of the blog posts. This will allow me to identify the most recent one. I'll start with the most relevant URLs based on the weights assigned during the search action. Let me read https://jina.ai/news/a-practical-guide-to-implementing-deepsearch-deepresearch, https://jina.ai/news/auto-gpt-unmasked-hype-hard-truths-production-pitfalls, https://jinaai.cn/news/a-practical-guide-to-implementing-deepsearch-deepresearch, https://businesswire.com/news/home/20250220781575/en/Elasticsearch-Open-Inference-API-now-Supports-Jina-AI-Embeddings-and-Rerank-Model, https://gurufocus.com/news/2709507/elastic-nv-estc-enhances-elasticsearch-with-jina-ai-integration to gather more information. Content of https://jina.ai/news/a-practical-guide-to-implementing-deepsearch-deepresearch is too long, let me cherry-pick the relevant parts. Content of https://jinaai.cn/news/a-practical-guide-to-implementing-deepsearch-deepresearch is too long, let me cherry-pick the relevant parts. Content of https://jina.ai/news/auto-gpt-unmasked-hype-hard-truths-production-pitfalls is too long, let me cherry-pick the relevant parts. I have found several blog posts and news articles related to Jina AI. I will summarize the most recent information available to answer the user's question. But wait, let me evaluate the answer first. The answer provides a summary of recent blog posts from Jina AI, covering different aspects of their activities. This constitutes a definitive response as it directly addresses the question with specific information. The answer discusses recent blog posts and news from Jina AI. Tech news has a max age of 7 days, and since the blog posts are only a few days old, the answer is still fresh. I am sorry, but the answer is too generic. While it mentions a few blog posts, it doesn't identify the absolute latest one. A perfect answer should pinpoint the most recent blog post with its exact title and, if possible, a direct link. The current answer provides a summary of several recent posts, which isn't precise enough for what I'm looking for. I messed up by summarizing multiple blog posts instead of pinpointing the single latest one. I needed to focus on finding the most recent date and title. I should prioritize identifying the latest date associated with a blog post and then provide its title and a direct link if available. Okay, I need to find the absolute latest blog post from Jina AI. The previous answer was too generic. I need to be laser-focused on identifying the most recent post. I'll revisit the Jina AI news page and look for specific dates and titles. I'll prioritize URLs that are likely to contain blog posts or news announcements directly from Jina AI. Let me read https://jina.ai/news, https://jina.ai/deepsearch, https://zilliz.com/blog/training-text-embeddings-with-jina-ai, https://github.com/jina-ai/node-DeepResearch, https://x.com/jinaai_?lang=en to gather more information. Content of https://zilliz.com/blog/training-text-embeddings-with-jina-ai is too long, let me cherry-pick the relevant parts. Content of https://jina.ai/deepsearch is too long, let me cherry-pick the relevant parts. I have reviewed my knowledge and can confidently answer the user's question about the latest blog post from Jina AI. I will provide the title and a direct link. But wait, let me evaluate the answer first. The answer provides a clear and direct response to the question, including the title, publication date, and a link to the latest blog post from Jina AI. There are no uncertainty markers or hedging. The blog post was published on April 16, 2025, which is 8 days ago from today (April 24, 2025). Since the blog post falls under 'Tech News,' the maximum age should be 7 days. Therefore, the answer is outdated. Okay, I jumped the gun and didn't double-check the date of the blog post against the current date. My bad for not ensuring it was within the acceptable timeframe! Next time, I'll make absolutely sure to verify the publication date and confirm it's fresh enough before confidently declaring it the latest blog post. Gotta keep those dates in check! I need to find the very latest blog post from Jina AI. The previous attempt failed because it wasn't recent enough. I need to revisit the Jina AI news page to check for any even more recent posts. I'll focus on extracting the title and URL of the most recent entry. Let me read https://jina.ai/news?tag=tech-blog, https://news.ycombinator.com/item?id=38020109, https://github.com/sthagen/jina-ai-jina, https://parsers.vc/news/250222-the-new-frontier-of-ai--elasticsearch-and, https://jina.ai/embeddings to gather more information. Content of https://jina.ai/embeddings is too long, let me cherry-pick the relevant parts. Content of https://news.ycombinator.com/item?id=38020109 is too long, let me cherry-pick the relevant parts. I have gathered information from various sources about Jina AI's blog posts. I will now synthesize this information to provide the most recent blog post title and a direct link, if available. But wait, let me evaluate the answer first. The answer makes a direct statement about the latest blog post from Jina AI, providing the title, publication date, and a link to the post. There are no hedges or qualifications, so it is definitive. Let me finalize the answer. Let Let me cross-reference the information from the web to verify the answer. </think>
The relentless pursuit of better search demands we confront a harsh reality: size matters, and not always in a good way. Jina AI's latest blog post, "On the Size Bias of Text Embeddings and Its Impact in Search," published on April 16, 2025, tackles this head-on. It's not just another piece of content; it's a critical examination of how the length of text inputs can skew similarity metrics, leading search systems to favor verbose, often irrelevant documents over concise, precise matches.
Why should you care? Because in the age of information overload, relevance is king. We're drowning in data, and search engines are our life rafts. But if those rafts are steered by algorithms that are easily fooled by sheer volume, we're all going down with the ship.
The post likely delves into the mechanics of text embeddings, those numerical representations of text that allow machines to understand and compare semantic meaning. The core issue, as Jina AI points out, is that these embeddings can be influenced by the length of the input text, a phenomenon they term "size bias." This means that a longer document, even if only marginally relevant, might appear more similar to a query than a shorter, more focused one.[^1]
To truly grasp the implications, consider the following:
* **What is Size Bias?** Size bias refers to how the length of text inputs affects similarity, regardless of semantic relevance. It explains why search systems sometimes return long, barely-relevant documents instead of shorter, more precise matches to your query.[^2]
* **Who is impacted?** Anyone relying on semantic search, from researchers sifting through academic papers to businesses trying to surface the most pertinent information for their customers, is vulnerable to the distortions caused by size bias.
* **Where does this problem manifest?** This issue isn't confined to a specific search engine or platform. It's a systemic challenge inherent in the way many text embedding models are designed and implemented.
* **When did this become a pressing concern?** As context windows grow, and models are ingesting larger and larger documents, the problem of size bias becomes amplified.
* **Why does this happen?** The reasons are complex, but it boils down to the mathematical properties of high-dimensional spaces and the way similarity is calculated. Longer vectors simply have more "surface area" to overlap with a query vector, even if the semantic alignment is weak.
* **How can we fix it?** Jina AI's blog post likely explores potential mitigation strategies. These might include normalization techniques, architectural modifications to embedding models, or novel similarity metrics that are less susceptible to length-related distortions.
Jina AI's work here isn't just academic; it's a practical intervention. By identifying and analyzing size bias, they're paving the way for more accurate and reliable search technologies. This has real-world implications, influencing everything from information retrieval to content recommendation and beyond.
The latest blog post can be found here: https://jina.ai/news
Ultimately, Jina AI's willingness to confront the inconvenient truths about text embeddings is a testament to their commitment to advancing the field. It's a reminder that progress isn't just about building bigger and more complex models; it's about understanding the nuances and limitations of those models and striving for solutions that prioritize accuracy and relevance above all else. And that's a size-independent truth worth embracing.
[^1]: Size bias refers to how the length of text inputs affects similarity regardless of semantic relevance It explains why search systems sometimes return long barely relevant documents instead of shorter more precise matches to your query [Newsroom - Jina AI](https://jina.ai/news)
[^2]: Size bias refers to how the length of text inputs affects similarity regardless of semantic relevance It explains why search systems sometimes return long barely relevant documents instead of shorter more precise matches to your query [Newsroom - Jina AI](https://jina.ai/news?tag=tech-blog)
Stream finished.
四、网页搜索 (Search)
基于 Jina AI 的s.jina.ai,传入查询词即可返回搜索结果页 (SERP) 的干净正文,可直接用于 LLM 的联网问答与 RAG。接口同时支持 GET 与 POST。
响应格式(默认 markdown):默认返回拼接好的 markdown 结果列表,直接可喂给 LLM;需要结构化数据(各结果的
title / url / content 与 usage 用量)时,在请求头加 Accept: application/json 即返回 JSON。请求参数
string
必填
查询词。在代码中调用时需先做 URL 编码
integer
默认值:"5"
返回结果的条数上限;实际返回条数以可用结果数量为准
string
国家 / 地区代码,如
USstring
界面语言,如
enstring
限定在指定站点内搜索,可重复传入,如
site=jina.ai&site=github.comstring
默认值:"markdown"
结果正文格式,可选
markdown / html / textstring
图片保留策略,传
none 可移除图片以节省 tokenboolean
跳过缓存,抓取最新结果
X-* 请求头,同样适用于搜索结果。
调用示例
查询词与参数可作为 URL 查询参数使用GET(推荐,最简洁),也可放入 JSON 请求体使用 POST;两者打的是同一端点、返回相同结果。下方示例默认加了 Accept: application/json 返回 JSON;去掉该头即返回干净的 markdown 结果列表(见首个 Curl-markdown 示例)。
# 不带 Accept 头 → 直接返回拼好的 markdown 结果列表
curl "https://aihubmix.com/v1/jina/search?q=AIHubMix&num=5&gl=US&hl=en" \
-H "Authorization: Bearer sk-***"
curl "https://aihubmix.com/v1/jina/search?q=AIHubMix&num=5&gl=US&hl=en" \
-H "Authorization: Bearer sk-***" \
-H "Accept: application/json"
curl -X POST "https://aihubmix.com/v1/jina/search" \
-H "Authorization: Bearer sk-***" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"q": "AIHubMix",
"num": 5,
"gl": "US",
"hl": "en"
}'
import requests
url = 'https://aihubmix.com/v1/jina/search'
headers = {
'Authorization': 'Bearer sk-***', # 替换为你的 AiHubMix 密钥
'Accept': 'application/json'
}
params = {'q': 'AIHubMix', 'num': 5, 'gl': 'US', 'hl': 'en'}
response = requests.get(url, headers=headers, params=params)
print(response.json())
const url = 'https://aihubmix.com/v1/jina/search?q=AIHubMix&num=5&gl=US&hl=en';
fetch(url, {
method: 'GET',
headers: {
'Authorization': 'Bearer sk-***', // 替换为你的 AiHubMix 密钥
'Accept': 'application/json'
}
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
响应说明
默认(不带Accept)返回拼好的 markdown 列表,每条依次给出标题、来源链接、摘要(若有)与正文:
[1] Title: AIHubMix - One Interface, Router All LLMs
[1] URL Source: https://aihubmix.com/?lang=en
[1] Description: Access every major LLM through a single, unified interface. Connect to ChatGPT, Claude, Gemini, DeepSeek and more.
[1] Content:
If requests to http://aihubmix.com fail, you can try using a VPN, or switch to the alternative baseURL: https://api.inferera.com …
[2] Title: AI Models & Pricing - AIHubMix
[2] URL Source: https://aihubmix.com/models?lang=en
[2] Content:
…
Accept: application/json 返回结构化 JSON:
{
"code": 200,
"status": 200,
"data": [
{
"title": "AIHubMix - One Interface, Router All LLMs",
"url": "https://aihubmix.com/?lang=en",
"content": "If requests to http://aihubmix.com fail, you can try using a VPN, or switch to the alternative …",
"usage": { "tokens": 4244 }
},
{
"title": "AI Models & Pricing - AIHubMix",
"url": "https://aihubmix.com/models?lang=en",
"content": "…",
"usage": { "tokens": 4303 }
}
]
}
data:搜索结果数组(条数由num控制,上例返回 5 条,此处仅示前 2 条;content为完整正文,示例中已截断),每条含title、url、content、usage.tokens。- 计费:按各条结果的
usage.tokens之和计费;Jina 官方对每次搜索按最低 10000 token 起收,因此最终按二者中的较大值计费,即max(10000, token 之和)。
五、网页读取 (Reader)
基于 Jina AI 的r.jina.ai,传入任意网址即可返回该网页转换后的干净 markdown 正文,便于抓取网页内容供 LLM 使用。除网页外,还支持图片(由视觉模型生成描述)与本地文件(PDF、Word / Excel / PPT、HTML、图片)的解析。
响应格式(默认 markdown):默认直接返回干净的 markdown 正文,可直接喂给 LLM;需要带
usage 用量与 title / url 等字段的结构化 JSON(正文在 data.content)时,在请求头加 Accept: application/json。请求参数
string
必填
要读取的网页地址,直接拼接在端点路径末尾,如
/v1/jina/reader/https://jina.aifile
上传的本地文件,支持 PDF、Word / Excel / PPT、HTML、图片,通过
POST 以 multipart/form-data 放在 file 字段string
上传 HTML 文件时必填,作为解析页面内相对链接的参考地址;上传 PDF 时无需
string
默认值:"markdown"
返回格式,可选
markdown / html / text / screenshot / pageshotstring
默认值:"all"
图片保留策略,可选
all / none(移除图片以节省 token)/ altstring
默认值:"all"
链接保留策略,可选
all / none / textboolean
为无
alt 的图片自动生成描述文字boolean
在正文末尾汇总全部链接
boolean
在正文末尾汇总全部图片
string
抓取引擎,可选
browser / direct / cf-browser-renderingstring
CSS 选择器,仅提取匹配的页面区域
string
CSS 选择器,移除匹配的元素(如
header, footer, nav)integer
抓取超时时间(秒),最大 180
boolean
跳过缓存,抓取最新
string
默认值:"atx"
markdown 标题样式,可选
atx(#)/ setext(下划线)string
markdown 项目符号,可选
- / + / *string
markdown 水平线样式,如
***string
markdown 链接样式,可选
inlined / referenced / discardedX-* 请求头(包括整个 X-Md-* 系列)以及 POST 请求体字段(如注入脚本 injectPageScript)均由网关原样转发,完整列表与取值请以 Jina 官方文档 为准。
多模态输入格式
Reader 支持三种输入。网页与图片直接把地址拼接在端点路径末尾(GET);本地文件通过 POST 以 multipart/form-data 上传。
1. 网页 URL
GET /v1/jina/reader/https://example.com
2. 图片 URL(返回视觉描述)
图片地址同样拼在路径末尾。Reader 用视觉模型为图片生成描述(caption,非逐字 OCR)放入content。
GET /v1/jina/reader/https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png
3. 上传本地文件(PDF / Word·Excel·PPT / HTML / 图片)
POST /v1/jina/reader
Content-Type: multipart/form-data
file=@./doc.pdf # 文件放在 file 字段
url=https://example.com/... # 仅上传 HTML 时需要,作为解析相对链接的参考地址
调用示例
默认直接返回 markdown 正文;带Accept: application/json 返回结构化 JSON。可选参数以 X-* 请求头传入,均由网关原样转发给 Jina(完整参数见上方「请求参数」)。
1. 读取网页
# 不带 Accept → 直接返回干净 markdown 正文
curl "https://aihubmix.com/v1/jina/reader/https://example.com" \
-H "Authorization: Bearer sk-***"
# 组合多个 X-* 头,均由网关原样转发给 Jina:
# 去图省 token · 只提取 #bodyContent 区域 · 末尾汇总链接
curl "https://aihubmix.com/v1/jina/reader/https://en.wikipedia.org/wiki/Large_language_model" \
-H "Authorization: Bearer sk-***" \
-H "Accept: application/json" \
-H "X-Retain-Images: none" \
-H "X-Target-Selector: #bodyContent" \
-H "X-With-Links-Summary: true"
curl "https://aihubmix.com/v1/jina/reader/https://example.com" \
-H "Authorization: Bearer sk-***" \
-H "Accept: application/json"
import requests
url = 'https://aihubmix.com/v1/jina/reader/https://example.com'
headers = {
'Authorization': 'Bearer sk-***', # 替换为你的 AiHubMix 密钥
'Accept': 'application/json'
}
response = requests.get(url, headers=headers)
print(response.json())
const url = 'https://aihubmix.com/v1/jina/reader/https://example.com';
fetch(url, {
method: 'GET',
headers: {
'Authorization': 'Bearer sk-***', // 替换为你的 AiHubMix 密钥
'Accept': 'application/json'
}
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
2. 读取图片
Curl
curl "https://aihubmix.com/v1/jina/reader/https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" \
-H "Authorization: Bearer sk-***" \
-H "Accept: application/json"
3. 上传本地文件
以POST + multipart/form-data 上传;上传 HTML 时需额外带 url 字段作参考地址。计费方式与读取网址一致。
curl -X POST "https://aihubmix.com/v1/jina/reader" \
-H "Authorization: Bearer sk-***" \
-H "Accept: application/json" \
-F "file=@./doc.pdf"
curl -X POST "https://aihubmix.com/v1/jina/reader" \
-H "Authorization: Bearer sk-***" \
-H "Accept: application/json" \
-F "file=@./local.html" \
-F "url=https://example.com/local.html"
响应说明
默认(不带Accept)直接返回 markdown 正文(即下方 JSON 中 data.content 的内容)。例如读取 https://example.com:
This domain is for use in documentation examples without needing permission. Avoid use in operations.
[Learn more](https://iana.org/domains/example)
Accept: application/json 则返回结构化 JSON。三类输入的 JSON 结构一致:data 为单个对象,含 title / url / content / usage.tokens。以下为三种输入的真实返回(content 过长时保留开头,其余以 … 略去)。
① 读取网页(读取 https://example.com):
{
"code": 200,
"status": 20000,
"data": {
"title": "Example Domain",
"url": "https://example.com/",
"content": "This domain is for use in documentation examples without needing permission. Avoid use in operations.\n\n[Learn more](https://iana.org/domains/example)",
"usage": { "tokens": 29 }
}
}
content 为视觉模型生成的描述):
{
"code": 200,
"status": 20000,
"data": {
"title": "googlelogo_color_272x92dp.png",
"url": "https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png",
"content": "The logo for Google, consisting of the word Google in lowercase letters, with its colors being blue, red, yellow, and green, representing the company's innovative approach to information and computing services",
"usage": { "tokens": 38 }
}
}
content 较长,仅示开头):
{
"code": 200,
"status": 20000,
"data": {
"title": "Unnoticeable Backdoor Attacks on Graph Neural Networks",
"url": "blob:df586d587956e0ca72e50e9e12dc06fc44b7c4b480b8a640a6db7d6f488a7c91",
"content": "# Unnoticeable Backdoor Attacks on Graph Neural Networks\n\n# Enyan Dai ∗\n\nemd5759@psu.edu\n\nThe Pennsylvania State University\n\nState College, USA\n\n## ABSTRACT\n\nGraph Neural Networks (GNNs) have achieved promising results in various tasks such as node classification and graph classification. …",
"usage": { "tokens": 20535 }
}
}
status:Jina 上游返回的业务状态码,reader 成功时为20000(与外层 HTTP200一致)。- 计费:按
data.usage.tokens(实际输出的 token 数)计费,无起步价(不同于搜索的「每次 10000 token 起收」);内容极短时按最低计费单位兜底,不会出现 0 扣费。
更新时间:2026-07-03