Classic/VPC環境で利用できます。
信頼性を高める引用の出典、引用の出典のインデックス表記などの回答タイプに合わせて学習した RAG Reasoningモデルを活用し、根拠に基づいた RAG回答を生成します。RAG Reasoningは Function calling形式でエンジンを呼び出します。単一または複数の RAG関数を指定することができ、LLMが状況に合わせて自動で最適な関数を選択して検索拡張生成を行うことができます。リランカーと連携して使用するとより安定した結果値を得ることができます。
リクエスト
リクエスト形式を説明します。リクエスト形式は次の通りです。
メソッド | URI |
---|---|
POST | /v1/api-tools/rag-reasoning |
リクエストヘッダ
リクエストヘッダの説明は次の通りです。
フィールド | 必須の有無 | 説明 |
---|---|---|
Authorization |
Required | 認証用 APIキー<例> Bearer nv-************ |
X-NCP-CLOVASTUDIO-REQUEST-ID |
Optional | リクエスト ID |
Content-Type |
Required | リクエストデータの形式 |
リクエストボディ
リクエストボディの説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
messages |
Array | Required | 会話メッセージ |
topP |
Double | Optional | 生成トークン候補群を累積確率に基づいてサンプリング
|
topK |
Integer | Optional | 生成トークン候補群から確率の高いトークン K個を候補に指定してサンプリング
|
maxTokens |
Integer | Optional | 最大トークン生成数
|
temperature |
Double | Optional | 生成トークンに対する多様性の程度(設定値が高いほど多様な文章を生成)temperature ≤ 1.00 (デフォルト: 0.50) |
repetitionPenalty |
Double | Optional | 同じトークンを生成することに対するペナルティの程度(設定値が高いほど同じ結果値を繰り返し生成する確率は下がる)repetitionPenalty ≤ 2.0 (デフォルト: 1.1) |
stop |
Array | Optional | トークン生成停止文字 |
seed |
Integer | Optional | モデルの繰り返し実行時、結果値の一貫性レベルを調整seed ≤ 4294967295: 一貫して生成しようとする結果値のseed またはユーザーが指定するseed 値 |
includeAiFilters |
Boolean | Optional | AIフィルタ(生成された結果値に対する罵倒、蔑み/差別/嫌悪、セクハラ/わいせつなどカテゴリ別に当てはまる程度)結果を表示するかどうか
|
tools |
Array | Required | Function calling の使用可能なツールリスト: tools |
toolChoice |
String | Object | Optional | Function calling ツール呼び出し動作の方法
|
toolChoice.type |
String | Optional | Function calling モデルが呼び出すツールタイプ |
toolChoice.function |
Object | Optional | Function calling モデルが呼び出すツール
|
toolChoice.function.name |
String | Optional | Function calling モデルが呼び出すツール名 |
messages
messages
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
role |
Enum | Required | 会話メッセージのロール
|
content |
String | Required | 会話メッセージ内容
|
toolCalls |
Array | Conditional | assistantの呼び出しツール情報 role がtool の場合、assistantのtoolCallsリクエストのように入力 |
toolCallId |
String | Conditional | ツール ID
|
role
がtool
の場合、messages
のcontent
には、検索データベースまたは検索 APIで検索した文書リスト(search_result
)を追加します。検索結果(search_result
)にid: {文書の固有 ID}
、doc: {検索した文書の原本}
を含め、RAG回答の引用表記に使用されるように構成してください。サンプルコードは次の通りです。
{
"role": "tool",
"content": "[
{
\"search_result\": [{\"id\": \"doc-1493058999\",
\"doc\": \"NAVERアカウントによるログインは、個人会員を対象にしており、事業者会員は対象外です。\"
},
...
]"
}
tools
tools
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
type |
String | Required | ツールのタイプ
|
function |
Object | Required | 呼び出しfunction 情報 |
function.name |
String | Required | function 名 |
function.description |
String | Required | function の説明 |
function.parameters |
Object | Required | function 使用時に渡されるパラメータ
|
toolCalls
toolCalls
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
id |
String | - | ツール識別子 |
type |
String | - | ツールのタイプ
|
function |
Object | - | 呼び出しfunction 情報 |
function.name |
String | - | function 名 |
function.arguments |
Object | - | function 使用時に渡されるパラメータ |
リクエスト例
リクエストのサンプルコードは次の通りです。
- Step 1.
role: user
に質問の内容を入力し、回答生成に最適な関数を呼び出す (レスポンスの確認)curl --location --request POST 'https://clovastudio.stream.ntruss.com/v1/api-tools/rag-reasoning' \ --header 'Authorization: Bearer <access_token>' \ --header 'Content-Type: application/json' \ --data-raw '{ "messages": [ { "content": "A100 GPUを借りる方法", "role": "user" } ], "tools": [ { "function": { "description": "NCloud関連検索の際に使用するツールです。\n分けて質問する必要がある場合、クエリを分割してツールを使用します。\n情報が見つからなかった場合、最終回答は出さずに suggested_queriesを参照してツールを再度使用することができます。", "name": "ncloud_cs_retrieval", "parameters": { "properties": { "query": { "description": "ユーザーの検索キーワードを整理して入れてください。", "type": "string" } }, "required": [ "query" ], "type": "object" } }, "type": "function" } ], "toolChoice": "auto", "maxTokens": 1024 }'
- Step 2. 最終回答を生成するための、
role: tool
を含めむリクエスト (レスポンスの確認)curl --location --request POST 'https://clovastudio.stream.ntruss.com/v1/api-tools/rag-reasoning' \ --header 'Authorization: Bearer <access_token>' \ --header 'Content-Type: application/json' \ --data-raw '{ "messages": [ { "content": "A100 GPUを借りる方法", "role": "user" }, { "role": "assistant", "content": "", "toolCalls": [ { "id": "call_enTEYb0kWBjOwtkngbl7FGTm", "type": "function", "function": { "name": "ncloud_cs_retrieval", "arguments": { "query": "A100 GPUを借りる方法" } } } ] }, { "content": "{\"search_result\": [{\"id\": \"doc-179\", \"doc\": \"GPU A100は、KR-1でのみ作成できます。A100の作成時は、KR-1の Subnetを選択してください。GPUサーバは企業会員に限り、最大5台まで作成できます。\"}, {\"id\": \"doc-248\", \"doc\": \"NAVERクラウドプラットフォームコンソールの Services > Compute > Serverメニューから GPU A100サーバを作成できます。作成方法の詳細は、サーバ作成ガイドをご参照ください。\"}, {\"id\": \"doc-156\", \"doc\": \"より多くの GPUサーバが必要な場合、または GPUサーバの作成が必要な個人会員の場合は、FAQを参照してカスタマーサポートにお問い合わせください。\"}]}", "role": "tool", "toolCallId": "call_enTEYb0kWBjOwtkngbl7FGTm" } ], "tools": [ { "function": { "description": "NCloud関連検索の際に使用するツールです。\n分けて質問する必要がある場合、クエリを分割してツールを使用します。\n情報が見つからなかった場合、最終回答は出さずに suggested_queriesを参照してツールを再度使用することができます。", "name": "ncloud_cs_retrieval", "parameters": { "properties": { "query": { "description": "ユーザーの検索キーワードを整理して入れてください。", "type": "string" } }, "required": [ "query" ], "type": "object" } }, "type": "function" } ] }'
レスポンス
レスポンス形式を説明します。
レスポンスヘッダ
レスポンスヘッダの説明は次の通りです。
ヘッダ | 必須の有無 | 説明 |
---|---|---|
Content-Type |
- | レスポンスデータの形式
|
レスポンスボディ
レスポンスボディの説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
status |
Object | - | レスポンスステータス |
result |
Object | - | レスポンス結果 |
result.message |
ChatMessage | - | 会話メッセージリスト |
result.message.role |
Enum | - | 会話メッセージのロール
|
result.message.content |
String | - | 会話メッセージの内容 |
result.message.thinkingContent |
String | - | モデルの意思決定フロー |
result.message.toolCalls |
Array | - | toolCalls |
result.usage |
Object | - | トークン使用量 |
result.usage.completionTokens |
Integer | - | 生成トークン数 |
result.usage.promptTokens |
Integer | - | 入力(プロンプト)トークン数 |
result.usage.totalTokens |
Integer | - | トークンの総数
|
toolCalls
toolCalls
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
id |
String | - | ツール識別子 |
type |
String | - | ツールのタイプ
|
function |
Object | - | 呼び出しfunction 情報 |
function.name |
String | - | function 名 |
function.arguments |
Object | - | function 使用時に渡されるパラメータ |
レスポンス例
レスポンスのサンプルコードは次の通りです。
-
Step 1.に対するレスポンス例 (リクエストの確認)
{ "status": { "code": "20000", "message": "OK" }, "result": { "message": { "role": "assistant", "content": "", "thinkingContent": "ユーザーから\"A100 GPUの借り方\"について質問がありました。この質問への回答を見つけるには、'ncloud_cs_retrieval'ツールを使って関連情報を検索する必要があります。", "toolCalls": [ { "id": "call_enTEYb0kWBjOwtkngbl7FGTm", "type": "function", "function": { "name": "ncloud_cs_retrieval", "arguments": { "query": "A100 GPUを借りる方法" } } } ] }, "usage": { "promptTokens": 135, "completionTokens": 84, "totalTokens": 219 } } }
-
Step 2.に対するレスポンス例 (LLMの最終回答を返す) (リクエストの例)
{ "status": { "code": "20000", "message": "OK" }, "result": { "message": { "role": "assistant", "content": "A100 GPUを借りる方法は、<doc-248>NAVERクラウドプラットフォームコンソールの Services > Compute > Serverメニューから GPU A100サーバを作成できます。</doc-248>しかし、<doc-179>GPU A100は KR-1でしか作成できないため、A100の作成時には KR-1の Subnetを選択する必要があります。</doc-179>さらに、<doc-179>GPUサーバは企業会員に限り、最大5台まで作成できます。</doc-179>より多くの GPUサーバが必要な場合、または GPUサーバの作成が必要な個人会員の場合は、<doc-156>FAQを参照してカスタマーサポートにお問い合わせください。</doc-156>" }, "usage": { "promptTokens": 332, "completionTokens": 146, "totalTokens": 478 } } }
失敗
呼び出しに失敗した場合のレスポンスのサンプルコードは次の通りです。