ニュース
モデル
製品
keyboard_arrow_down
ディープサーチ
最善の答えが見つかるまで、検索し、読み、推論してください。
読者
URL を読み取ったり検索したりすると、大規模なモデルのサポートが向上します。
ベクトルモデル
世界クラスのマルチモーダル、多言語埋め込み。
並べ替え者
検索の関連性を最大化する世界クラスのニューラルレトリーバー。
もっと
keyboard_arrow_down
分類子
画像とテキストのゼロショットおよび少数ショットの分類。
スライサー
長いテキストをチャンクまたはトークンに分割します。

APIドキュメント
AIプログラミングアシスタントIDEまたは大規模モデル用のコードを自動生成
open_in_new


会社
keyboard_arrow_down
私たちについて
営業担当者に問い合わせる
インターンプログラム
参加しませんか
open_in_new
ロゴをダウンロード
open_in_new
利用規約


ログイン
login
なぜ Meta-Prompt が必要なのか?
Meta-Prompt を使用した実験
Meta-Prompt を使って分かったこと
結論
技術記事
11月 19, 2024

より良い Jina API 統合とコード生成のためのメタプロンプト

Meta-Prompt は API 仕様の新しい標準になるのでしょうか?これを LLM に与えることで、Jina の API を確実に統合するコードを生成し、通常の試行錯誤のプロセスを省くことができます。
Alex C-G
Alex C-G • 9 読む時間

最近、私たちは API 仕様の全てを単一のテキストファイルにまとめた Meta-Prompt を公開しました。これは LLM 向けのドキュメントと考えることができ、Reader、Embeddings、Reranker などの API インテグレーションを自動生成するのに使用できます。

0:00
/1:44

私たちのプロンプトを ChatGPT/Claude にコピー&ペーストするか、llm コマンドにシステムプロンプトとしてパイプするだけで簡単に使えます。その後、構築したいものを指定するプロンプトを追加します(以下で実演します)。Web スクレイピング、エンベディング処理、さらには完全な RAG システムを構築するアプリケーションを LLM を使って素早く作成したい場合に最適です。しかも、ハルシネーションを最小限に抑えることができます。

tagなぜ Meta-Prompt が必要なのか?

Jina の API を使用するコードを LLM に生成させたいとしましょう。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 がウェブ検索を使って適切に実行できたとしても、Claude のような他の多くの LLM は現在ウェブ検索をサポートしていないため、選択肢が大幅に制限されてしまいます。

ここで Meta-Prompt が真価を発揮します。Meta-Prompt を使用すると、Jina の API のコンテキストと仕様をすべて LLM に読み込むことができます。これにより、LLM は幻覚や不要な回避策なしに Jina の API を直接活用するコードを生成でき、最初から動作するコードを提供します。

💡
まあ、通常は最初から動作します。LLM は予測不可能な場合もありますが、以下のように私たちの実験ではうまくいきました。

tagMeta-Prompt を使用した実験

Meta-Prompt の能力を試すため、いくつかの実験を行い、結果を評価しました。特に指定がない限り、LLM として Claude-3.5-Sonnet を使用しました。

すべての実験において、生成されたコードを実行する前に、JINA_API_KEY や ANTHROPIC_API_KEY などの関連 API キーを環境変数として指定しました。

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:CLI から Hacker News を可視化する

コマンドラインの達人であれば、cURL を使って CLI から Meta-Prompt を使用できます。まず、llm Python パッケージをインストールする必要があります:

pip install llm

そして Claude-3 プラグインをインストールします:

llm install llm-claude-3

最後のセットアップとして、Anthropic API キーを指定します:

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
💡
現在の制限の1つ(ただし、ユーザーが追加のコーディングを行えば回避できる方法があると確信しています)は、要件を手動でインストールする必要があることです。requirements.txt は生成されません。この場合、UMAP と Matplotlib が必要でしたが、状況によって異なる場合があります。

tag実験 3:JSON ストレージを使用したシンプルな RAG システムの構築

さらに一歩進んで、シンプルな RAG システムを作成してみましょう。私は余暇に SolidPython を学んでいるので、レポジトリとウィキをナレッジベースとして使用します。シンプルに保つため、データベースは使用せず、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 をもっと投入すれば解決できない問題はありませんよね。そこで、元の出力を「解体」するためのプロンプトをもう1つ追加しましょう:

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 ディレクトリを反復処理します。
  • メタプロンプトと各プロンプトテキストを Claude-3.5-Sonnet(llm 経由)に渡します。
  • その出力を再び Claude に渡し、今度はコードだけを残すようにプロンプトします。
  • それを apps ディレクトリのファイルに書き込みます。

デモをお見せしたいところですが、見せるものはあまりありません。単にどのプロンプトファイル名を処理しているかを記録し、それ以外は画面に興味深い出力を表示することなく静かに動作します。

💡
Testing 生成されたアプリのテストは別の問題であり、すぐには解決できない課題です。私たちの経験では、プロンプトで使用したいデータを指定することが多く、通常は Reader で外部 URL をダウンロードして渡します。しかし時には、LLM が架空のデータを生成し、スクリプトは明らかな問題なく実行されます—ただし実際の動作について「嘘」をついているだけなのです。

アプリファクトリーを次のレベルに引き上げるには、Factorio のように、アプリのアイデアを生成し、そこからファクトリーに入力するプロンプトを生成するもう 1 つのスクリプトを書くこともできます。私たちはまだそれを実装していませんが、読者の皆さんへの課題として残しておきます。

tagMeta-Prompt を使って分かったこと

Meta-Prompt を使用することで、自分たちのプロンプトに何を入れるべきか、そして異なる LLM がどのように異なる出力を生成するかについて、多くのことを学びました。

tag一般的な観察

  • API の専門化:タスク特化型 API(例:書籍関連のクエリには Google Books)を使用することで、汎用検索 API よりも一貫した結果が得られ、トークン使用量を削減し信頼性を向上させることができます。
  • 再利用可能なカスタムプロンプト:非対話型のセットアップでは、プロンプトを .txt ファイルとして保存し CLI にパイプすることで、余分な説明テキストを排除してコードのみの出力を効率的に得ることができます。
  • 構造化された出力:出力(通常は JSON 形式)を保存し必要に応じて再読み込みすることで、トークンを節約し、トークン使用が高コストになる可能性のある埋め込み生成などのタスクを効率化できます。

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
オフィス
location_on
カリフォルニア州サニーベール
710 Lakeway Dr、Ste 200、サニーベール、CA 94085、アメリカ合衆国
location_on
ドイツ、ベルリン(本社)
Prinzessinnenstraße 19-20、10969 ベルリン、ドイツ
location_on
中国、北京
中国北京市海淀区西街48号ビル6号5階
location_on
深セン、中国
ルーム 402、4 階、福安テクノロジービル、深セン、中国
検索ベース
ディープサーチ
読者
ベクトルモデル
並べ替え者
分類子
スライサー
APIドキュメント
Jina APIキーを取得する
レート制限
APIステータス
会社
私たちについて
営業担当者に問い合わせる
ニュース
インターンプログラム
参加しませんか
open_in_new
ロゴをダウンロード
open_in_new
条項
安全性
利用規約
プライバシー
Cookieを管理する
email
Jina AI © 2020-2025.