タブは増えるのに、比較はまだ始められない

比較する資料はすべて見つけたのに、ブラウザにはタブだけが大量に開いています。ページごとに本文をコピーして元のリンクを付けていると、実際に読んで比較する時間が減っていきます。 要約を見て「これはどこに書いてあったのだろう?」と思えば、またタブを探し直すことになります。

AIに任せるつもりだった分析が、AIに読ませる資料を用意する手作業に変わってしまったのです。次の調査でもこの準備を繰り返すなら、見つけたリンクから本文と出典をまとめて集めておく方法が必要です。

Olostep Batchesは、URLごとに名前を付けて送信し、処理が終わった項目の本文を取得し直せるツールです。ここでは公開ドキュメント2件から始めて、AIの回答から原文までたどり直せる参考資料を作ってみます。

インストールなしで、ブラウザから2つのアドレスで始めます

最初の収集は、公式APIドキュメントのTry itリクエスト画面で行えます。別途コードは必要ありませんが、Olostepアカウント、ダッシュボードで発行したAPIトークン、リクエストに使うクレジットは用意する必要があります。APIリクエストはAuthorization: Bearer <API-TOKEN>形式で認証します。

  1. Olostepに登録するか、ログインします。 続けてAPI Keys画面でトークンを作成し、ダッシュボードで利用可能なクレジットを確認してください。
  2. Create BatchドキュメントのTry itを開きます。 認証欄には、画面の案内に従ってAPIトークンを入力します。ヘッダー全体を直接入力する環境では、Bearerとトークンの間に空白を1つ入れます。

2つのリンクに見つけやすい名前を付けましょう

itemsに2つの項目を作り、それぞれにcustom_idとurlを入力します。custom_idは、後で取得した本文がどのアドレスから来たかを探すための名前です。最初のリクエストではパーサーなどの任意項目を空欄にし、まずMarkdown本文を取得できることだけ確認してもかまいません。

リクエストデータは次のようになります。

{"items":[
  {"custom_id":"batches-guide","url":"https://docs.olostep.com/features/batches"},
  {"custom_id":"retrieve-guide","url":"https://docs.olostep.com/api-reference/retrieve"}
]}

受付番号だけでなく、本文を受け取って初めて完了です

バッチは、送信、完了確認、項目照会、本文取得の順に進めます。作成直後は本文ではなくin_progress状態のバッチ情報が返ることがあるため、最初のレスポンスを受け取っただけで終えてはいけません。

  1. Create Batchで2つのURLを送信します。 レスポンスで新たに返されたidを保存してください。この値が以後のリクエストで使用するbatch_idです。ドキュメントにあらかじめ表示された例の値と、実際のレスポンスの値を混同しないことが重要です。
  2. Batch Infoでステータスを確認します。 保存したbatch_idで照会し、statusがcompletedになったら次へ進みます。処理時間は対象ページとアカウント環境によって異なる場合があるため、固定の完了時間を前提に自動化しないでください。
  3. Batch Itemsでドキュメントごとの番号を取得します。 完了した項目には、custom_id、元のurl、本文取得に使うretrieve_idが含まれます。失敗した項目もstatus=failedで別途照会してください。
  4. Retrieve Contentで本文を取得します。 各retrieve_idとformats=markdownを使って照会します。レスポンスのmarkdown_contentを、同じ項目のcustom_idと元のURLとともに保存してください。

最初の成功基準は、4つの値がつながることです。

2つのドキュメントの両方で、custom_id、元のURL、retrieve_id、空でないMarkdown本文が1組として保存されなければなりません。バッチIDしか受け取っていない、または本文とURLの対応を確認できていないなら、AI参考資料はまだ完成していません。

リクエストが通らない場合は、まずエラーを分類してください。401またはinvalid_api_keyはトークンとBearer形式を、402またはcredits_exhaustedはクレジットを確認する合図です。完了一覧にドキュメントがなければ、失敗項目を別途照会します。size_exceeded=trueの場合は、レスポンス本文ではなく、提供されたホストURLからコンテンツを取得して保管する必要があります。このURLは7日後に失効します。

公式ドキュメントと公開リクエスト画面を確認して作成したものであり、有効なAPIトークンでバッチ作成と本文取得を直接実行した結果ではありません。

ターミナルから同じリクエストを送る

Bash、curl、jqを使う開発者なら、同じ流れをターミナルで繰り返せます。まず、トークンを画面に表示せず環境変数として用意してください。

read -rs OLOSTEP_API_KEY
export OLOSTEP_API_KEY

1. バッチを作成し、実際のレスポンスのIDを保存します。

curl --fail-with-body --silent --show-error \
  https://api.olostep.com/v1/batches \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"items":[{"custom_id":"batches-guide","url":"https://docs.olostep.com/features/batches"},{"custom_id":"retrieve-guide","url":"https://docs.olostep.com/api-reference/retrieve"}]}' \
  > batch.json
batch_id=$(jq -er '.id' batch.json)

2. 完了ステータスを確認します。

curl --fail-with-body --silent --show-error \
  "https://api.olostep.com/v1/batches/$batch_id" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  | jq -r '.status'

3. 完了した項目を照会します。

curl --fail-with-body --silent --show-error --get \
  "https://api.olostep.com/v1/batches/$batch_id/items" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  --data-urlencode 'status=completed' \
  --data-urlencode 'limit=50' \
  > items.json
jq '{items, cursor}' items.json

レスポンスにcursorがあれば、同じ一覧リクエストにその値を追加して次のページを取得します。失敗した項目はstatus=failedで別途照会します。

4. ドキュメント名でretrieve_idを探し、本文を取得します。

retrieve_id=$(jq -er '.items[] | select(.custom_id == "batches-guide") | .retrieve_id' items.json)
curl --fail-with-body --silent --show-error --get \
  https://api.olostep.com/v1/retrieve \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  --data-urlencode "retrieve_id=$retrieve_id" \
  --data-urlencode 'formats=markdown' \
  > content.json
jq -e '.markdown_content | length > 0' content.json

2つ目のドキュメントも該当するcustom_idで探し、同じ方法で取得します。公式形式に合わせた例であり、実際のサービス呼び出し結果は検証していません。

集めた資料には回答の形式まで指定しましょう

本文を確保できたら、「Olostepの使い方を教えて」のように広く尋ねるより、添付資料だけに基づいて回答し、元のURLを表示するよう依頼するほうがよいでしょう。

添付した2つのドキュメントだけを読み、新規アカウントのバッチ上限と本文を取得する手順を整理してください。各回答に元のドキュメントURLを付け、ドキュメントにない内容は未確認と明記してください。

公式ドキュメントで確認できる回答は、新規アカウントのバッチあたりの上限は100件であり、上限を引き上げるには提供元へ問い合わせる必要がある、という内容です。構造化JSONが必要なら、バッチ送信時に対象に合ったパーサーを指定する必要があります。パーサーなしでもMarkdownやHTMLは取得できますが、すべてのサイトに共通して適合するパーサーや出力品質が保証されるわけではありません。

2つのURLが通ってから1万件へ増やしましょう

Olostepの公式なバッチ最大数は1万URLですが、新規アカウントの開始上限はバッチあたり100件です。そのため、2つのドキュメントで本文と出典の対応を確認してから、100件、さらに大きなまとまりへと拡大するのが現実的です。

  • 漏れを確認してください。 完了一覧だけを見るのではなく、失敗一覧も別途照会し、送信したすべてのcustom_idと結果を照合します。
  • カーソルを最後まで読み切ってください。 Batch Itemsからcursorが返ったら、次のリクエストで渡します。最初のページの最大50件だけを保存し、バッチ全体が終わったと判断してはいけません。
  • 配列の順序を信用しないでください。 結果の位置ではなくcustom_idで、元のURLと取得した本文を結び付けます。
  • 本文を自分で保管してください。 ホストURLは7日後に失効するため、再利用する資料は処理直後に別の保存先へ移します。

URL一覧がすでにあり、複数ページをまとめて集める作業を繰り返す場合、バッチはよく適しています。1ページだけをすぐに読みたい場合は、公式ドキュメントが案内する単一スクレイピング方式のほうが簡単かもしれません。

目標は1万回のリクエストを成功させることではありません。AIが読んだ本文ごとに元のアドレスを開き直せ、欠けた項目を見つけて再処理できる参考資料を作ることです。