RAG Reasoning

Prev Next

Classic/VPC環境で利用できます。

信頼性を高める引用の出典、引用の出典のインデックス表記などの回答タイプに合わせて学習した RAG Reasoningモデルを活用し、根拠に基づいた RAG回答を生成します。RAG Reasoningは Function calling形式でエンジンを呼び出します。単一または複数の RAG関数を指定することができ、LLMが状況に合わせて自動で最適な関数を選択して検索拡張生成を行うことができます。リランカーと連携して使用するとより安定した結果値を得ることができます。

リクエスト

リクエスト形式を説明します。リクエスト形式は次の通りです。

メソッド URI
POST /v1/api-tools/rag-reasoning

リクエストヘッダ

CLOVA Studio APIで共通して使用されるヘッダの詳細は、CLOVA Studioのリクエストヘッダをご参照ください。

リクエストボディ

リクエストボディの説明は次の通りです。

フィールド タイプ 必須の有無 説明
messages Array Required 会話メッセージ: messages
topP Double Optional 生成トークン候補群を累積確率に基づいてサンプリング
  • 0.00 < topP ≤ 1.00 (デフォルト: 0.8)
topK Integer Optional 生成トークン候補群から確率の高いトークン K個を候補に指定してサンプリング
  • 0 ≤ topK ≤ 128 (デフォルト: 0)
maxTokens Integer Optional 最大トークン生成数
  • 1024 ≤ maxTokens < 4096 (デフォルト: 1024)
temperature Double Optional 生成トークンに対する多様性の程度(設定値が高いほど多様な文章を生成)
  • 0.00 < temperature ≤ 1.00 (デフォルト: 0.50)
repetitionPenalty Double Optional 同じトークンを生成することに対するペナルティの程度(設定値が高いほど同じ結果値を繰り返し生成する確率は下がる)
  • 0.0 < repetitionPenalty ≤ 2.0 (デフォルト: 1.1)
stop Array Optional トークン生成停止文字
  • [](デフォルト)
seed Integer Optional モデルの繰り返し実行時、結果値の一貫性レベルを調整
  • 0: 一貫性レベルをランダム適用 (デフォルト)
  • 1 ≤ seed ≤ 4294967295: 一貫して生成しようとする結果値のseedまたはユーザーが指定するseed
includeAiFilters Boolean Optional AIフィルタ(生成された結果値に対する罵倒、蔑み/差別/嫌悪、セクハラ/わいせつなどカテゴリ別に当てはまる程度)結果を表示するか
  • true(デフォルト) | false
    • true: 表示
    • false: 表示しない
tools Array Required Function callingの使用可能なツールリスト: tools
toolChoice String | Object Optional Function callingツール呼び出し動作の方法
  • auto: モデルがツールを自動で呼び出し (String)
  • none: モデルがツールを呼び出さずに一般の回答を生成(String)
  • モデルが特定のツールを強制呼び出し(Object)
toolChoice.type String Optional Function callingモデルが呼び出すツールタイプ
toolChoice.function Object Optional Function callingモデルが呼び出すツール
  • function(有効値)
toolChoice.function.name String Optional Function callingモデルが呼び出すツール名
参考

RAG Reasoningの最大入力トークン数は128,000で、最大出力トークン数は4,096です。

messages

messagesの説明は次の通りです。

フィールド タイプ 必須の有無 説明
role Enum Required 会話メッセージのロール
  • system | user | assistant | tool
    • system: ロールを規定する指示文
    • user: ユーザーの発話または質問
    • assistant: ユーザーの発話または質問に対する回答
    • tool: assistant(モデル)が呼び出した関数の実行結果
content String Required 会話メッセージ内容
  • テキスト入力(String)
toolCalls Array Conditional assistantの呼び出しツール情報
  • roletoolの場合、assistantのtoolCallsリクエストのように入力
toolCallId String Conditional ツール ID
  • roletoolの場合、必ず入力
    • assistantのtoolCallsリクエストと関連付ける用途
参考

roletoolの場合、messagescontentには、検索データベースまたは検索 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(有効値)
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(有効値)
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 - レスポンスデータの形式
  • application/json

レスポンスボディ

レスポンスボディの説明は次の通りです。

フィールド タイプ 必須の有無 説明
status Object - レスポンスステータスを参照
result Object - レスポンス結果
result.message ChatMessage - 会話メッセージリスト
result.message.role Enum - 会話メッセージのロール
  • system | user | assistant
    • system: ロールを規定する指示文
    • user: ユーザーの発話または質問
    • assistant: モデルの回答
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(有効値)
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
            }
        }
    }
    

失敗

呼び出しに失敗した場合のレスポンスのサンプルコードは次の通りです。