API経由でrokadocを利用する
本ページではrokadocをAPI経由で利用する方法について説明します。
APIを利用することで、文書変換からRAGまでの一連の処理 を自動化し、任意のアプリケーションと接続できます。
- 本応用ガイドではHTTPクライアントとしてcurlコマンドを利用します。もしご利用の環境でcurlコマンドが使えない場合は、任意のHTTPクライアントを利用してください。
- 変換対象のPDFファイルを用意してください。
- APIキーを発行していることが前提です。APIキーの発行方法はAPIリファレンスのAPIキーをご覧ください。
本ページ(API応用ガイド)は 使い方の流れ を順に解説します。各エンドポイントのパラメータやレスポンスの詳細仕様は APIリファレンス を参照してください。
1. ファイルを変換APIでアップロードする
rokadocの変換機能をAPI経由で利用できます。以下ではcurlコマンドを使ってPDFファイルをアップロードし、変換ジョブを開始します。
ROKADOC_API_KEY="YOUR_API_KEY" # 発行したAPIキー
curl -X 'POST' \
'https://api.rokadoc.ntt.com/v1/api/conversions' \
-H "api-key: $ROKADOC_API_KEY" \
-F 'upload_file=@sample.pdf'
正常にリクエストが完了すると以下のようなレスポンスが返ってきます。
{
"code": 202,
"status": "Pending",
"conversion_id": "your_conversion_id_here"
}
conversion_idは後のステップ(ステータス確認・結果取得)で必要になるため保存してください。
今回のようにスペース(space_id)を指定しない場合、個人スペースにアップロードされます。
2. 変換ステータスを確認する
変換は非同期で実行されるため、ステータス確認APIで処理状況を監視します。
CONVERSION_ID="your_conversion_id_here" # 1.で取得したconversion_id
curl -X 'GET' \
"https://api.rokadoc.ntt.com/v1/user/conversions/${CONVERSION_ID}/status" \
-H "api-key: $ROKADOC_API_KEY" \
-H 'accept: application/json'
処理中の場合は以下のようなレスポンスが返ってきます:
{
"code": 200,
"data": {
"status": "Running",
"conversion_id": "your_conversion_id_here",
"document_name": "sample.pdf"
}
}
statusが"Succeeded"になるまで定期的に確認してください。
3. 変換結果を取得する
変換が完了したら、結果を取得します。
curl -X 'GET' \
"https://api.rokadoc.ntt.com/v1/user/conversions/${CONVERSION_ID}/document" \
-H "api-key: $ROKADOC_API_KEY" \
-H 'accept: application/json'
正常に完了すると、変換されたテキストデータとレイアウト情報を含む詳細な結果が返ってきます:
{
"code": 200,
"data": {
"status": "Succeeded",
"conversion_id": "your_conversion_id_here",
"document_name": "sample.pdf",
"roka_response": {
"meta": {
"separate_method": "page"
},
"document_summary": "",
"units": [
{
"unit": 1,
"title": "",
"body": "",
"chunk_context": "",
"elements": [
{
"type": "title",
"coordinates": [[305.0, 254.0], [802.0, 343.0]],
"text": "<ここにタイトルが入ります>",
"page": 1,
"reading_order": 1
},
{
"type": "text",
"coordinates": [[303.0, 522.0], [2044.0, 593.0]],
"text": "<ここにテキストが入ります>",
"page": 1,
"reading_order": 2
}
],
"description": "<elementsが統合された全量テキスト>",
"width": 2481,
"height": 3508
}
]
}
}
}
主なフィールドの意味は以下のとおりです。抽出したテキストを取り出したいだけの場合は、units[].elements[].text(要素ごとのテキスト)または units[].description(まとまり単位の全文)を参照してください。
| フィールド | 意味 |
|---|---|
units | 意味のまとまり(チャンク)の配列 |
units[].elements | ページ内の個別要素(タイトル・本文・表・画像など)の配列 |
elements[].type | 要素の種別(title / text / table / image など) |
elements[].text | 要素から抽出したテキスト |
elements[].coordinates | 要素のページ上の座標 [[xmin,ymin],[xmax,ymax]] |
units[].description | そのまとまりを統合した全文テキスト |
document_summary / chunk_context | 文脈保持(contextual_retrieval)を有効にしたときのみ生成 |
coordinatesはページ上の要素の位置を示す左上基準の座標情報([[xmin,ymin],[xmax,ymax]])です。
widthとheightはPDFのページサイズを示します。
4. RAGで対話的に質問する
変換したドキュメントに対してRAG(Retrieval-Augmented Generation)を使って質問できます。
メッセージはプレーンテキストでmultipart/form-dataとして送信します。
会話を継続する場合は、前回のレスポンスで返却されたchatlog_idを指定します。
space_idを指定しない場合は個人スペース内のすべてのドキュメントが検索の対象となります。
特定の conversion_id を指定する必要はありません(ステップ1〜3で取得した conversion_id は、ステータス確認・変換結果取得に使うものです)。
ROKADOC_API_KEY="YOUR_API_KEY" # 発行したAPIキー
curl -X POST \
"https://api.rokadoc.ntt.com/v1/api/rag" \
-H "api-key: $ROKADOC_API_KEY" \
-F "message=このドキュメントの概要を3点で教えてください" # ← アップロードした内容に合わせて変更してください
RAGの結果として、関連する文書の検索結果と共にLLMによる回答が返ってきます:
{
"assistant_message_id": "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"user_message_id": "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"chatlog_id": "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"search_result": [
{
"context": "<チャンク化されたテキスト>",
"unit": {
"unit": 1,
"title": "",
"body": "",
"chunk_context": "",
"elements": [
{
"type": "title",
"coordinates": [[305.0,254.0],[802.0,343.0]],
"text": "<ここにタイトルが入ります>",
"page": 1,
"reading_order": 1
}
],
"description": "<elementsが統合されたチャンク化される前の全量テキスト>",
"width": 2481,
"height": 3508
},
"pdf_name": "sample.pdf",
"page_number": 1,
"roka_algorithm": null,
"conversion_id": "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"user_id": "xxxxxxxxxxxx",
"tags": []
}
],
"chat_response": "<ここにAIの回答が入ります>",
"chat_request": "[指示]\n以下の関連情報に沿って質問に対して回答してください。\n\n[関連情報]\n<検索されたチャンク>\n\n[質問]\n<ユーザーの質問>\n\n",
"highlight_elements": [
{
"type": null,
"coordinates": [
[
0.0,
0.0
],
[
0.0,
0.0
]
],
"text": "",
"page": 1,
"reading_order": 0,
"element_id": "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx__1__0",
"chat_message_id": "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"conversion_id": "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"pdf_name": "sample.pdf",
"page_width": 2484,
"page_height": 3509,
"score": 2.4173874855041504
},
{
"type": "table",
"coordinates": [
[
311.54559326171875,
2175.313232421875
],
[
2174.080322265625,
3138.05810546875
]
],
"text": "<該当elementに含まれるテキスト>",
"page": 1,
"reading_order": 4,
"element_id": "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx__1__4",
"chat_message_id": "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"conversion_id": "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"pdf_name": "sample.pdf",
"page_width": 2484,
"page_height": 3509,
"score": 2.4173874855041504
}
]
}
まとめ
以上がrokadocを使った文書変換からRAGまでの一連のAPI利用方法です。
API仕様の詳細についてはAPIリファレンスを参照ください。