RAG API
概要: インデックスを選択してRAG(Retrieval-Augmented Generation)を利用するAPIです。検索結果と共にLLMによる回答を取得できます。
POST /v1/api/rag
インデックス化されたドキュメントを検索し、LLMを使用して質問に対する回答を生成します。
POST /v1/api/rag
Headers
api-key: string(required) - rokadoc APIキー
Request Example
- Python
- curl
import requests
import os
api_key = os.getenv("ROKADOC_API_KEY")
space_id = os.getenv("SPACE_ID")
tag = os.getenv("TAG")
chatlog_id = os.getenv("CHATLOG_ID") # 任意
url = "https://beta-api.rokadoc.ntt.com/v1/api/rag"
headers = {
"api-key": api_key
}
# メッセージはプレーンテキストで送信(multipart/form-data)
message = "NTTドコモビジネスに社名変更したのはいつですか"
files = {
"message": (None, message),
"tags_filter": (None, tag or ""),
"search_top_k": (None, "3"),
"tags_filter_include": (None, "true"),
"space_id": (None, space_id or ""),
"use_llm": (None, "openai"),
"system_prompt": (None, "あなたは親切なアシスタントです。"),
"reasoning_effort": (None, "minimal"),
"highlight_display": (None, "false"),
"chatlog_id": (None, chatlog_id or "")
}
# 空値は送信しないようにフィルタ
files = {k: v for k, v in files.items() if v[1]}
response = requests.post(url, headers=headers, files=files)
print(response.json())
curl -X 'POST' \
'https://beta-api.rokadoc.ntt.com/v1/api/rag' \
-H "api-key: ${ROKADOC_API_KEY}" \
-F "message=NTTドコモビジネスに社名変更したのはいつですか" \
-F "tags_filter=${TAG}" \
-F 'search_top_k=3' \
-F 'tags_filter_include=true' \
-F "space_id=${SPACE_ID}" \
-F 'use_llm=openai' \
-F 'system_prompt=あなたは親切なアシスタントです。' \
-F 'reasoning_effort=minimal' \
-F 'highlight_display=false' \
-F "chatlog_id=${CHATLOG_ID}"
Request Body (multipart/form-data)
必須パラメータ
message: string(required) - RAGで検索するメッセージ
オプショナルパラメータ
tags_filter: array(optional) - 検索で絞り込むタグ名 (デフォルト: [])search_top_k: integer(optional) - 検索するchunk数。最大5件まで指定可能 (デフォルト: 3)tags_filter_include: boolean(optional) - 指定したタグが含まれるものを返却するか否か。falseでタグが含まれないものが返却される (デフォルト: true)space_id: string(optional) - スペース機能を利用する場合はIDを入力use_llm: string(optional) - RAGで使用するLLM (デフォルト: openai、他選択肢: openai, gpt-5, gpt-5-mini、openai指定時は最も最適なものをサーバー側で選択します)system_prompt: string(optional) - RAGで使用するシステムプロンプトreasoning_effort: string(optional) - LLMへの推論強度ヒント(デフォルト: minimal、他選択肢: minimal, low, medium, high)chatlog_id: string(optional) - 会話を継続するためのチャットログID(前回レスのchatlog_idを指定、指定しない場合は新規会話になる)highlight_display: boolean(optional) - ハイライトする要素情報を返すか否か。(デフォルト: false)temperature: float(optional) - LLMに渡すパラメータ。gpt4.1のようなno reasoningなモデルの場合に利用可能(デフォルト: 0)
Response
200 OK - 成功
{
"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": "",
"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": "<ここに質問内容が入ります>",
"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
}
]
}
assistant_message_id: string - 生成されたアシスタントメッセージのIDuser_message_id: string - 受信したユーザーメッセージのIDchatlog_id: string - この会話スレッドのID(次回以降の継続に利用可能)chat_request: string - 送信された質問内容chat_response: string - LLMによる回答search_result: array - 検索結果のドキュメント一覧context: string - 検索されたコンテキストconversion_id: string - 変換IDpage_number: integer - ページ番号pdf_name: string - ファイル名roka_algorithm: string|null - 使用されたアルゴリズムtags: array - 関連タグunit: object - ドキュメントのユニット情報unit: integer - ユニット番号title: string - elementsに集約したため、現在不使用body: string - elementsに集約したため、現在不使用elements: array - ドキュメントに含まれるレイアウト情報type: string - 要素のタイプ(title, text, table, image)coordinates: array - 要素の左上基準の座標情報 [[x1, y1], [x2, y2]]形式text: string - 該当elementに含まれるテキストpage: integer - 要素が存在するページ番号reading_order: integer - 1から始まる読み順
description: string - elementsが統合された全量テキストwidth: integer - PDFを画像化したときのページの幅height: integer - PDFを画像化したときのページの高さ
user_id: string - ユーザーID
highlight_elements: array - ハイライトする要素情報の一覧type: string - 要素のタイプ(title, text, table, image, null) nullの場合はページ全体を表すcoordinates: array - 要素の左上基準の座標情報 [[x1, y1], [x2, y2]]形式text: string - 該当elementに含まれるテキストpage: integer - 要素が存在するページ番号reading_order: integer - 要素のページ内の読み順1から始まる読み順 0の場合はページ全体を表すchat_message_id: string - チャットメッセージのIDassistant_message_id: string - 生成されたアシスタントメッセージのIDconversion_id: string - 変換IDpdf_name: string - 要素が含まれるPDFのファイル名page_width: integer - 要素が含まれるページを画像化したときの幅page_height: integer - 要素が含まれるページを画像化したときの高さscore: float - 要素が含まれるページの類似度スコア 大きいほど類似度が高い
422 Validation Error
{
"detail": [
{
"loc": ["body", "field"],
"msg": "Field required",
"type": "missing"
}
]
}
注意事項
- search_top_kは最大5件まで指定可能です
- LLMの回答は検索されたコンテキストに基づいて生成されます