新闻
模型
API
keyboard_arrow_down
读取器
读取URL或搜索为大模型提供更好的依据。
向量模型
世界一流的多模态多语言向量模型。
重排器
世界一流的重排器,最大限度地提高搜索相关性。
MCP terminal命令行articlellms.txtsmart_toy代理人data_object模式menu_book文档



登录
login
为什么我需要 Meta-Prompt?
Meta-Prompt 实验
使用 Meta-Prompt:我们发现了什么?
结论
技术博客
十一月 19, 2024

更好的 Jina API 集成和代码生成的元提示词

Meta-Prompt 会成为 API 规范的新标准吗?将其提供给 LLM,即可生成可靠集成 Jina API 的代码,让您免去常见的反复试错过程。
Alex C-G
Alex C-G • 9 分钟的读取量

我们最近发布了 Meta-Prompt,这是一个概述所有 API 规范的单个文本文件。你可以将其视为面向 LLM 的文档,并使用它来自动生成我们的 API 集成,包括 Reader、Embeddings、Reranker 等。

0:00
/1:44

使用方法很简单,只需将我们的提示复制粘贴到 ChatGPT/Claude 中,或者将其作为系统提示通过管道传递给 llm 命令,然后添加你自己的提示来指定想要构建的内容(我们将在下文演示)。如果你想使用 LLM 快速构建用于网络爬取、处理嵌入或者甚至是完整的 RAG 系统的应用程序,这是一个很好的方法。而且所有这些都能最大限度地减少幻觉。

tag为什么我需要 Meta-Prompt?

假设你想使用 LLM 生成使用 Jina API 的代码。让我们让 GPT-4 来试试看:

0:00
/0:27

看起来不错,对吧?它包含了 from jina import Client 和其他所有内容。

但有一个小问题:Jina 包目前处于维护模式,它并不是访问我们 API 的正确方式。即使你确实安装了 Jina 包,当你尝试运行生成的程序时,它也会崩溃:

0:00
/0:21

那么怎么办?我们可以让 GPT 在网上搜索 Jina 的 API,对吧?以下是我们得到的结果:

0:00
/1:14

然而,如果你查看代码,你会发现它并没有使用所有相关的 Jina API。它显然没有发现 Reader 是一个可用的工具,而是让我们安装 BeautifulSoup 来进行爬取。而且,即使它(据说)可以用 BeautifulSoup 进行爬取,它也没有准确解析 Jina Embeddings 的响应格式,导致崩溃:

0:00
/0:16

然而,即使 ChatGPT 能够通过搜索正确完成这项任务,许多其他 LLM(如 Claude)目前还不支持网络搜索,这严重限制了你的选择。

这就是 Meta-Prompt 大放异彩的地方。使用 Meta-Prompt,你可以将 Jina 的 API 的所有上下文和规范加载到 LLM 中。这意味着 LLM 可以直接生成利用 Jina API 的代码,而不会产生幻觉或不必要的变通方案,让你一次就能得到可用的代码。

💡
好吧,通常是一次就能成功。LLM 可能会不太稳定,但正如你在下面看到的,在我们的实验中一切都进行得很顺利。

tagMeta-Prompt 实验

为了测试 Meta-Prompt 的性能,我们进行了一些实验并评估了结果。除非特别说明,我们使用的是 Claude-3.5-Sonnet 作为 LLM。

对于所有实验,我们在运行生成的代码之前都将相关的 API 密钥(如 JINA_API_KEY 和 ANTHROPIC_API_KEY)设置为环境变量。

tag实验 1:使用 ChatGPT 中的 Meta-Prompt 验证声明

我们正在撰写这篇文章时恰逢美国大选之后,比以往任何时候都有更多的虚假信息在流传。我们如何从信息流中分离出有价值的信号,只获取好的内容而不要谎言呢?

假设我们想要检查 BBC.com 上关于一项新的英国法律的报道是否准确,具体是这样一个说法:

"英国政府已宣布一项新法律,该法律将要求社交媒体公司验证其用户的年龄。"

我们可以将 Meta-Prompt 复制粘贴到 ChatGPT 中,然后输入我们自己的提示来生成相关代码,比如:

Write the JavaScript code to check the validity
of the following statement on bbc.com: 

"The UK government has announced a new law 
that will require social media companies to 
verify the age of their users."
0:00
/0:35

然后我们可以运行该代码运行 node grounding.js(在安装好必要的包如 axios 之后)。我们会得到如下输出,显示该声明是真实的,并附带来源:

0:00
/0:04

tag实验 2:从命令行可视化 Hacker News

如果你更喜欢命令行操作,你可以通过 cURL 使用 Meta-Prompt。首先,你需要安装 llm Python 包:

pip install llm

然后安装 Claude-3 插件:

llm install llm-claude-3

最后一步设置是指定你的 Anthropic API key:

export ANTHROPIC_API_KEY=<your key>

现在,让我们编写一个提示来可视化 Hacker News 首页的每个句子:

grab every sentence from hackernews frontpage and 
visualize them in a 2d umap using matplotlib

我们可以用以下命令将其管道传递给 llm 命令:

curl docs.jina.ai | llm -s "grab every sentence from hackernews frontpage and visualize them in a 2d umap using matplotlib" -m claude-3.5-sonnet
0:00
/0:24

如果我们提取并运行生成的代码,我们会得到类似这样的结果:

0:00
/0:38
💡
目前的一个限制(虽然我确信用户通过一些额外的编码可以解决)是你需要手动安装依赖。代码不会生成 requirements.txt。在这个例子中我们需要 UMAP 和 Matplotlib,但你的具体需求可能会有所不同。

tag实验 3:使用 JSON 存储构建简单的 RAG 系统

为了进一步推进,让我们创建一个简单的 RAG 系统。在我的业余时间,我正在学习 SolidPython,因此我们将使用该仓库和 wiki 作为知识库。为了保持简单,我们不使用数据库,而是将数据存储在 JSON 文件中。

以下是存储在 prompt.txt 文件中的提示:

Create a simple RAG system using pages from these sources:

- repo: <https://github.com/jeff-dh/SolidPython>
- wiki: <https://github.com/jeff-dh/SolidPython/wiki> (and all the subpages)

Scrape no other pages.

Instead of using vector database, use JSON file

You can access an LLM with the CLI command: llm 'your prompt' -m claude-3.5-sonnet

After segmenting and indexing all the pages, present a prompt for the user to ask a
question. To answer the question, find the top three segments and pass them to the LLM
with the prompt:

--- prompt start ---
Based on these segments:

- {segment 1}
- {segment 2}
- {segment 3}

Answer the question: {question}
--- prompt end ---

正如你所见,我们可以通过在提示中指定来为 LLM 提供额外的工具。如果没有这个,Claude 通常会产生一种不太理想(甚至是有问题的)方式来将 LLM 添加到 RAG 系统中。

由于这是一个很长的提示(包含很多可能会破坏我们运行的任何管道的标点符号),我们将使用文本 $(cat prompt.txt) 而不是提示本身来运行我们的命令:

curl docs.jina.ai/v4 | llm -s "$(cat prompt.txt)" -m claude-3.5-sonnet
0:00
/0:34

呼!输出真是不少。但是(就像 Hacker News 的例子一样)从这个大文本块中提取和运行代码是很麻烦的。当然,没有什么问题是不能通过扔更多的 LLM 来解决的,对吧?所以让我们添加另一个提示来"解块"原始输出:

leave just the code in this file, remove all surrounding explanatory text. 
do not wrap code in backticks, just return "pure code"

现在我们把它添加到我们的命令管道并运行:

curl docs.jina.ai/v4 | llm -s "$(cat prompt.txt)" -m claude-3.5-sonnet | llm -s 'leave just the code in this file, remove all surrounding explanatory text. do not wrap code in backticks, just return "pure code"' -m claude-3.5-sonnet > app.py
💡
由于我们在命令末尾使用 > app.py 将所有输出重定向到文件,所以视频中没有什么可显示的。

然后我们可以用 python app.py 运行这个程序。如你所见,它可以回答问题并维持工作记忆:

0:00
/0:34
💡
第一次运行时间稍长,因为它必须对所有数据进行分段和编码。对于后续运行,它从 JSON 文件加载这些数据以节省时间和成本。

tag实验 4:使用元提示构建应用程序工厂

现在我们可以以非交互方式生成脚本和应用程序,我们可以轻松地自动化一个"应用程序工厂"——一个遍历提示并生成 Python 脚本作为输出的脚本。您现在可以在 GitHub gist 中获取应用程序工厂脚本:

使用 Jina AI 元提示的应用程序工厂
使用 Jina AI 元提示的应用程序工厂。GitHub Gist:即时共享代码、笔记和片段。
Gist262588213843476

简而言之,它做以下工作:

  • 遍历包含提示文件的 prompts 目录。
  • 通过 llm 将元提示和每个提示文本传递给 Claude-3.5-Sonnet。
  • 获取输出并再次传递给 Claude,这次使用的提示是让它只保留代码。
  • 将其写入 apps 目录中的文件。

我们本想展示一个演示,但没什么可看的。它只是记录它正在处理哪个提示文件名,除此之外就是静默操作,屏幕上没有有趣的输出。

💡
测试 它生成的应用程序是另一个问题,我一时无法解决。根据我们的经验,我们通常在提示中指定想要使用的数据,通常是通过向 Reader 传递外部 URL 进行下载。但有时 LLM 会产生虚假的模拟数据,脚本运行时没有明显问题——它只是在"欺骗"它正在做的事情。

要将应用程序工厂提升到下一个层次,你可以采用完整的 Factorio 方式,编写另一个脚本来生成应用程序创意,然后生成提示输入到工厂中。我们还没有这样做,但我们把它作为一个练习留给你,读者。

tag使用 Meta-Prompt:我们发现了什么?

我们从使用 Meta-Prompt 中学到了很多,包括如何编写我们自己的提示,以及不同的 LLM 如何生成不同的输出。

tag一般性观察

  • API 专业化:使用特定任务的 API(例如,使用 Google Books 进行图书相关查询)比通用搜索 API 能确保更一致的结果,这可以减少 token 使用量并提高可靠性。
  • 可重用的自定义提示:对于非交互式设置,将提示保存为 .txt 文件并通过 CLI 传输它们,可以高效地仅输出代码,避免额外的解释性文本造成混乱。
  • 结构化输出:存储输出(通常是 JSON 格式)并根据需要重新加载它们,可以节省 token 并简化任务,比如生成嵌入向量时,token 使用可能会很昂贵。

tag使用不同 LLM 的见解

GPT

  • 提示保留问题:GPT-4o 有时会在遇到冗长指令时丢失细节,导致在讨论过程中"忘记"关键元素的问题。当你必须提醒它一些简单的事情时,这会导致很多挫折感。
  • API 集成挑战:在像将 Milvus Lite 与 jina-embeddings-v3 集成这样的情况下,即使我们提供了 Milvus Lite API 说明,GPT-4o 也会完全且反复失败,生成的代码创建的数据库缺少刚刚生成的嵌入向量,使语义搜索应用变得不可能。

Claude

  • 代码输出限制:Claude-3.5 经常生成看似完整但存在潜在问题的脚本,比如缺少错误处理或未考虑缺失的 API 密钥。此外,它有时会依赖预设示例,而不是根据具体指令生成定制响应。
  • 静默输出:对于 LLM 生成的代码来说,拥有一些后台运行日志确实很有帮助,这样可以确保模型没有搞砸。除非你直接指定要这样做,否则用 Claude 创建的应用程序通常会静默运行,让你完全不知道发生了什么。
  • 与 CLI 的交互:你需要清楚地指定 CLI 命令就是CLI命令。如果你告诉 Claude 它可以使用 llm 命令,它经常会尝试调用一个不存在的 Python llm() 函数。
  • Claude 3.5-Sonnet 是最佳选择:Claude-3.5-Haiku 在初始测试中似乎也表现不错,但 Opus 和 Sonnet-3 只是总结了 Jina API 说明,没有考虑用户提示。

tag结论

使用 Meta-Prompt 提供了将 Jina 的 API 与 LLM 集成的新方法,让你能够运行实验并构建一次就能工作的应用程序。不再有崩溃、错过的 API 连接或幻觉函数——Meta-Prompt 确保生成的代码是准确的,并且可以直接使用。无论是验证声明、生成嵌入向量、构建轻量级 RAG 系统,还是自动化应用程序创建,Meta-Prompt 都能将自然语言指令转化为可执行的、正确的代码,绕过与 LLM 反复交互以获得实际可用的代码的过程。

无论你是将 Meta-Prompt 复制到 ChatGPT 中,还是将其与自定义 LLM 命令一起使用,它都提供了一种直接、可靠的方式来利用 Jina 的功能。我们的实验和见解表明,Meta-Prompt 是一个可靠的工具,可以稳固地集成到你的项目中。

如果你准备好探索 Meta-Prompt 能做什么,请访问 docs.jina.ai 获取最新的文档和资源。

类别:
技术博客
rss_feed

更多新闻
三月 11, 2026 • 7 分钟的读取量
从多模态大模型中引导音频向量模型
Han Xiao
Abstract illustration of a sound wave or heartbeat, formed by blue, orange, and gray dots on a white background.
三月 06, 2026 • 6 分钟的读取量
通过原始数值识别向量模型
Han Xiao
Fingerprint illustration made from numbers, showcasing digital and high-tech design on a light background.
九月 09, 2025 • 11 分钟的读取量
Llama.cpp 和 GGUF 中的多模态向量模型
Andrei Ungureanu
Alex C-G
Cartoon llama in the center of a white background, emitting laser-like beams from its eyes. The illustration creates a playfu
办公室
location_on
加利福尼亚州桑尼维尔
710 Lakeway Dr, Ste 200, 桑尼维尔, 加州 94085, 美国
location_on
德国柏林
Prinzessinnenstraße 19-20,10969 柏林,德国
搜索底座
读取器
向量模型
重排器
获取 Jina API 密钥
速率限制
API 状态
公司
关于我们
联系销售
新闻
实习生项目
下载 Jina 标志
open_in_new
下载 Elastic 徽标
open_in_new
条款
安全
条款及条件
隐私
管理 Cookie
email
Elastic Jina AI © 2020-2026.