新聞
模型
產品
keyboard_arrow_down
深度搜索
搜索、讀取並推理直到找到最佳答案。
讀取器
讀取URL或搜索為大模型提供更好的依據。
向量模型
世界一流的多模態多語言向量模型。
重排器
世界一流的重排器,最大限度地提高搜索相關性。
分類器
圖片和文本的零樣本和少樣本分類。
切分器
將長文本切分成塊或詞元。

API 文檔
為您的AI 編程助手 IDE 或大模型自動生成代碼
open_in_new


公司
keyboard_arrow_down
關於我們
聯繫銷售
實習生計劃
加入我們
open_in_new
下載Logo
open_in_new
條款及條件


登錄
login
為什麼我需要 Meta-Prompt?
Meta-Prompt 實驗
使用 Meta-Prompt:我們發現了什麼?
結論
技術文章
十一月 19, 2024

更好進行 Jina API 整合與程式碼生成的元提示詞

是否 Meta-Prompt 已成為 API 規範的新標準?將它輸入至 LLMs 就能生成可靠整合 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 金鑰:

export ANTHROPIC_API_KEY=

現在,讓我們寫一個 prompt 來視覺化 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:使用 Meta-Prompt 建立應用工廠

現在我們可以非交互式地生成腳本和應用程式,我們可以輕鬆地自動化一個「應用工廠」——一個遍歷提示並產生 Python 腳本作為輸出的腳本。你現在可以在 GitHub gist 中獲取應用工廠腳本:

App Factory with Jina AI Meta-Prompt
App Factory with Jina AI Meta-Prompt. GitHub Gist:即時分享代碼、筆記和片段。
Gist262588213843476

簡而言之,它的功能是:

  • 遍歷包含提示文件的 prompts 目錄。
  • 通過 llm 將 Meta-Prompt 和每個提示文本傳遞給 Claude-3.5-Sonnet。
  • 將輸出再次傳遞給 Claude,這次使用告訴它只保留代碼的提示。
  • 將其寫入 apps 目錄中的文件。

我們本想展示一個演示,但沒什麼可看的。它只會記錄正在處理的提示文件名,除此之外,它會靜默運行,不會向螢幕輸出任何有趣的內容。

💡
測試 它生成的應用程式是另一個問題,我目前無法立即想出解決方案。根據我們的經驗,我們通常在提示中指定想要使用的數據,通常是通過傳遞外部 URL 給 Reader 來下載。但有時 LLM 會產生幻想的模擬數據,腳本運行時沒有明顯問題——它只是對自己在做什麼"撒謊"。

要將應用程式工廠提升到下一個層次,你可以完全採用 Factorio 的方式,編寫另一個腳本來生成應用程式想法,然後從中生成提示來輸入工廠。我們還沒有這樣做,但我們把它留給你,讀者,作為練習。

tag使用 Meta-Prompt:我們發現了什麼?

通過使用 Meta-Prompt,我們學到了很多,包括如何編寫自己的提示,以及不同的 LLM 如何生成不同的輸出。

tag一般觀察

  • API 專業化:使用特定任務的 API(例如用於書籍相關查詢的 Google Books)比使用通用搜索 API 能確保更一致的結果,這可以減少 token 使用並提高可靠性。
  • 自定義提示的可重用性:對於非互動式設置,將提示保存為 .txt 檔案並將其通過管道輸入 CLI,可以有效地只輸出代碼,避免額外的解釋文本造成混亂。
  • 結構化輸出:存儲輸出(通常是 JSON 格式)並在需要時重新載入可以節省 token 並簡化任務,比如生成 embeddings,這種情況下 token 使用可能會很昂貴。

tag使用不同 LLM 的見解

GPT

  • 提示保留問題:GPT-4o 有時會在長指令中遺失細節,導致它在討論過程中"忘記"關鍵元素。當你必須提醒它一些簡單的事情時,這會導致大量的挫折感。
  • API 整合挑戰:在像整合 Milvus Lite 與 jina-embeddings-v3 這樣的情況下,即使我們提供了 Milvus Lite API 指令,GPT-4o 還是完全且反覆地失敗,生成的代碼創建的數據庫缺少剛剛生成的 embeddings,使語義搜索應用變得不可能。

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 確保生成的代碼從一開始就準確且可用。無論是驗證陳述、生成 embeddings、構建輕量級 RAG 系統,還是自動化應用程式創建,Meta-Prompt 都能將自然語言指令轉換為可操作、正確的代碼,繞過了與 LLM 反覆溝通以獲得實際可用結果的典型過程。

無論你是將 Meta-Prompt 複製到 ChatGPT 中,還是使用自定義 LLM 命令,它都提供了一種直接、可靠的方式來利用 Jina 的功能。我們的實驗和見解顯示 Meta-Prompt 是一個將其穩健地整合到你的項目中的可靠工具。

如果你準備好探索 Meta-Prompt 能做什麼,請前往 docs.jina.ai 查看最新的文件和資源。

類別:
技術文章
rss_feed
辦公室
location_on
加利福尼亞州桑尼維爾
710 Lakeway Dr, Ste 200, 桑尼維爾, CA 94085, 美國
location_on
德國柏林(總部)
Prinzessinnenstraße 19-20,10969 柏林,德國
location_on
中國北京
中國北京市海淀區西大街48號6號樓5層
location_on
中國深圳
中國深圳市賦安科技大廈4樓402
搜索底座
深度搜索
讀取器
向量模型
重排器
分類器
切分器
API 文檔
獲取 Jina API 密鑰
速率限制
API 狀態
公司
關於我們
聯繫銷售
新聞
實習生計劃
加入我們
open_in_new
下載Logo
open_in_new
條款
安全
條款及條件
隱私
管理 Cookie
email
Jina AI © 2020-2025.