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"),
"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 "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-nano、openai指定時は最も最適なものをサーバー側で選択します)system_prompt: string(optional) - RAGで使用するシステムプロンプトreasoning_effort: string(optional) - LLMへの推論強度ヒント(デフォルト: minimal、他選択肢: minimal, low, medium, high)chatlog_id: string(optional) - 会話を継続するためのチャットログID(前回レスのchatlog_idを指定、指定しない場合は新規会話になる)
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": "<ここに質問内容が入ります>"
}
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 - 抽出したテキストpage: integer - 要素が存在するページ番号reading_order: integer - 1から始まる読み順
description: string - elementsが統合された全量テキストwidth: integer - PDFを画像化したときのページの幅height: integer - PDFを画像化したときのページの高さ
user_id: string - ユーザーID
422 Validation Error
{
"detail": [
{
"loc": ["body", "field"],
"msg": "Field required",
"type": "missing"
}
]
}
注意事項
- search_top_kは最大5件まで指定可能です
- LLMの回答は検索されたコンテキストに基づいて生成されます