会話の生成

Prev Next

VPC環境で利用できます。

ユーザークエリに対し、LLMが会話型文章を生成します。

リクエスト

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

メソッド URI
POST /api/v1/svc/{serviceId}/conversation

リクエストヘッダ

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

リクエストパスパラメータ

パラメータの説明は次の通りです。

フィールド タイプ 必須の有無 説明
serviceId String Required サービスの固有 ID

リクエストボディ

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

フィールド タイプ 必須の有無 説明
serviceId String Required サービスの固有 ID
messages Array Required メッセージリスト
  • 会話履歴を表すメッセージオブジェクトの配列
blocks Object Optional 各ブロックの名前をキーとする設定オブジェクト (基本設定を上書きするためのパラメータ)
  • ブロック名
    • RETRIEVAL (文書検索) | GENERATOR (回答生成)
blocks.{blockName}.type String Optional ブロックタイプ
  • RETRIEVAL | LLM
    • RETRIEVALブロックの場合、RETRIEVALと入力
    • GENERATORブロックの場合、LLMと入力
blocks.{blockName}.parameters Object Optional 各ブロックの詳細設定パラメータ
citation Object Optional 引用設定
citation.enabled Boolean Optional モデル回答で引用を表示するか
  • true (デフォルト) | false
    • true: 引用を表示
    • false: 引用を表示しない
verbose Boolean Optional ブロック別詳細結果を出力するか
  • true | false (デフォルト)
    • true: ブロックをすべて表示
    • false: GENERATORブロックのみ表示

messages

会話のコンテキストを提供するメッセージの配列です。

フィールド タイプ 必須の有無 説明
role String Required メッセージのロール
  • user | assistant
    • user: ユーザークエリ
    • assistant: モデル回答
content String Required メッセージの内容
参考

配列の最後の要素は必ずrole = "user"でなければならず、最後のメッセージはユーザのクエリとして使用されます。

RETRIEVALパラメータ

文書検索ブロック(blocks.RETRIEVAL.type = "RETRIEVAL")の設定パラメータです。

フィールド タイプ 必須の有無 説明
k Integer Optional 検索対象の文書数
  • デフォルト: 5
fileName String Optional 検索対象ファイル名
chunkSize Integer Optional テキストチャンクサイズ
  • 256~4096 (デフォルト: 512)
overlapSize Integer Optional チャンクの間で重複するテキストサイズ
  • 0以上、chunkSizeの半分以下 (デフォルト: 128)
filters Array Optional 検索範囲を制限するフィルタ条件

filters

フィールド タイプ 必須の有無 説明
term Object Optional 完全に一致する値で文書を絞り込み
  • フィールド名: extra.bucketextra.keyextra.last_modifiedextra.sizeextra.{userField}file_name
  • extraフィールドの検索時に明示的に使用するために.keywordを付け、valueに検索値を入力 (文字列タイプ)
range Object Optional 数字/日付の範囲で文書を絞り込み
  • フィールド名: extra.last_modifiedextra.sizeextra.{userField}
  • 演算子: gte (以上)、gt (超過)、lte (以下)、lt (未満)
  • 日付形式: YYYY-MM-DD、ファイルサイズ単位: Byte

GENERATORパラメータ

回答生成ブロック(blocks.GENERATOR.type = "LLM")の設定パラメータです。

フィールド タイプ 必須の有無 説明
chatModel String Optional LLMモデル
  • 現在、HyperClovaXのみサポート
systemPrompt String Optional システム指示文
llmParameters Object Optional LLMの詳細設定パラメータ
llmParameters.model String Optional HyperCLOVA Xモデルのバージョン
  • HCX-003 | HCX-005 | HCX-DASH-001 | HCX-DASH-002
llmParameters.clovaStudioApiKey String Optional CLOVA Studio API認証キー
llmParameters.temperature Float Optional 生成トークンに対する多様性の程度
  • 0.00~1.00 (デフォルト: 0.50)
  • 値が高いほど多様な文章を生成
llmParameters.topK Integer Optional 生成トークン候補群から確率の高いトークン K個を候補に指定してサンプリング
  • 0~128 (デフォルト: 0)
llmParameters.topP Float Optional 生成トークン候補群を累積確率に基づいてサンプリング
  • 0.00~1.00 (デフォルト: 0.80)
llmParameters.maxTokens Integer Optional 最大トークン生成数
  • 0~2048 (デフォルト: 256)

リクエスト例

リクエストのサンプルコードは次の通りです。

curl --location --request POST 'https://kr-pub-gateway.rag.naverncp.com/api/v1/svc/{serviceId}/conversation' \
--header 'Authorization: Bearer {apiKey}' \
--header 'Content-Type: application/json' \
--header 'Accept: text/event-stream' \
--data '{
  "serviceId": "{serviceId}",
  "messages": [
    {
      "role": "user",
      "content": "NAVERの技術について教えて。"
    },
    {
      "role": "assistant",
      "content": "NAVERは街の様子をデジタルでそっくり再現できる特別な技術を持っていて、ドローンを使って撮った写真をコンピュータの中でまるで本物のように立体的に見せることができます!"
    },
    {
      "role": "user",
      "content": "この技術は何と呼ばれているの?"
    }
  ],
  "blocks": {
    "RETRIEVAL": {
      "type": "RETRIEVAL",
      "parameters": {
        "k": 1,
        "fileName": "leap-25.docx",
        "chunkSize": 256,
        "overlapSize": 128,
        "filters": [
          {
            "term": {
              "extra.bucket.keyword": {
                "value": "clova-ai"
              }
            }
          },
          {
            "term": {
              "file_name": "leap-25.docx"
            }
          },
          {
            "range": {
              "extra.size": {
                "lte": 1000000
              }
            }
          }
        ]
      }
    },
    "GENERATOR": {
      "type": "LLM",
      "parameters": {
        "chatModel": "HyperClovaX",
        "systemPrompt": "小学生の目線に合わせて説明して。",
        "llmParameters": {
          "model": "HCX-005",
          "clovaStudioApiKey": "{clovaStudioApiKey}",
          "temperature": 0.50,
          "topK": 64,
          "topP": 0.50,
          "maxTokens": 1024
        }
      }
    }
  },
  "citation": {
    "enabled": true
  },
  "verbose": true
}

レスポンス

レスポンス形式を説明します。

レスポンスヘッダ

レスポンスヘッダの説明は次の通りです。

ヘッダ 必須の有無 説明
Content-Type - レスポンスデータの形式
  • application/json

レスポンスボディ

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

フィールド タイプ 必須の有無 説明
code Integer - APIレスポンスステータスコード
message String - APIレスポンスステータスメッセージ
data Object - API処理結果
data.results Array - RAG処理段階別結果
data.references Array - 引用情報
data.rateLimit Object - API使用量制限情報
data.rateLimit.limitRequests String - 最大リクエスト数
data.rateLimit.remainingRequests String - 現在残っているリクエスト数
data.rateLimit.resetRequests String - リクエスト制限リセット時間(秒)
data.rateLimit.limitTokens String - 最大トークン数
data.rateLimit.remainingTokens String - 現在残っているトークン数
data.rateLimit.resetTokens String - トークン制限リセット時間(秒)

data.results

配列の各要素は、RAGの処理段階を順に表します。

フィールド タイプ 必須の有無 説明
blockId String - RAG処理段階
  • START | QUERY_REWRITE | RETRIEVAL | CONDITIONAL | GENERATOR
    • START: ユーザークエリを入力
    • QUERY_REWRITE: クエリを再作成
    • RETRIEVAL: 文書を検索
    • CONDITIONAL: 分岐を選択
    • GENERATOR: 最終回答を生成
value String | Array - ブロックごとの詳細結果
  • START: ユーザークエリ
  • QUERY_REWRITE: 再作成されたクエリ
  • RETRIEVAL: 文書の検索結果
  • CONDITIONAL: 分岐の結果
  • GENERATOR: LLMの最終回答

RETRIEVALパラメータ

フィールド タイプ 必須の有無 説明
docId String - 文書の固有 ID
fileName String - 検索対象ファイル名
score Float - 検索の類似度スコア
  • 0~1
  • 値が高いほど類似度が高い
rank Integer - 検索結果ランキング
text String - 文書で検索されたテキスト
start_offset Integer - 文書でテキストチャンクが始まる文字の位置
end_offset Integer - 文書でテキストチャンクが終わる文字の位置
chunk_no Integer - チャンク番号
page_no Integer - ページ番号

data.references

回答作成時に使用された引用情報です。

フィールド タイプ 必須の有無 説明
name String - ブロック名
  • RETRIEVAL
data Array - 引用の詳細情報

data

フィールド タイプ 必須の有無 説明
docId String - 文書の固有 ID
fileName String - 引用対象ファイル名
text String - 文書で引用されたテキスト
start_offset Integer - 文書でテキストチャンクが始まる文字の位置
end_offset Integer - 文書でテキストチャンクが終わる文字の位置
chunk_no Integer - チャンク番号
page_no Integer - ページ番号
extra Object - 付加情報
extra.bucket String - バケット名
extra.size Integer - ファイルサイズ (Byte)
extra.last_modified String - 最終更新日時
  • ISO 8601形式
extra.key String - ファイル名

レスポンス例

レスポンスのサンプルコードは次の通りです。

{
    "code": 200,
    "message": null,
    "data": {
        "results": [
            {
                "blockId": "START",
                "value": "この技術は何と呼ばれているの?"
            },
            {
                "blockId": "QUERY_REWRITE",
                "value": "NAVERの技術のことを人々はどのような名称で呼んでいますか?"
            },
            {
                "blockId": "RETRIEVAL",
                "value": [
                    {
                        "docId": "c69cd98c0674e1a8a814",
                        "fileName": "leap-25.docx",
                        "score": 0.04168701171875,
                        "rank": 1,
                        "text": "NAVERは巨大な街全体をデジタルツインデータで製作できる独自の技術を持っています。NAVERは、航空写真と写真測量技術を利用してメガシティ規模のデジタルツインデータを迅速かつ正確に製作することができ、AI技術で実際と同じ3次元空間に復元しました。既に韓国では、NAVER Payを通じて、実際に団地を訪問しなくても不動産物件情報を確認できる VRサービスを提供しています。",
                        "start_offset": 4025,
                        "end_offset": 4258,
                        "chunk_no": 1,
                        "page_no": 0
                    }
                ]
            },
            {
                "blockId": "CONDITIONAL",
                "value": "branch1"
            },
            {
                "blockId": "GENERATOR",
                "value": "NAVERが持つこの技術は、「デジタルツイン(Digital Twin)」と呼ばれています。デジタルツインとは、現実世界の物理的なオブジェクトを仮想世界にそっくり作り、リアルタイムでモニタリング・制御する技術を指します。分かりやすく言うと、実際の空間をコンピュータの中に双子のように作ったものです。\n\n例えば、私たちが住んでいる街や学校の建物をデジタルツインにすると、実際にその場所に行かなくても、コンピュータの画面で建物の内外を見渡すことができ、街を歩いたり、周辺施設を確認することもできます。さらに、天気の変化や交通状況などをシミュレーションして未来の状況を予測したり、問題を解決するのにも活用することができます。\n\nNAVERは、このようなデジタルツイン技術を活用してさまざまな分野で新しいサービスを開発しています。例えば、ネットでショッピングをしながら洋服を実際に試着したかのように見せてくれるバーチャルフィッティングルームや、家の中を3Dで探索しながらインテリアを飾る機能などがこれに当たります。\n\nこのように、デジタルツインテクノロジーは、私たちの日常生活をより便利にし、想像力を刺激する素晴らしいツールです。今後も絶えず進化を続けて、より多くの場面で活用されることが期待されています。"
            }
        ],
        "references": [
            {
                "name": "RETRIEVAL",
                "data": [
                    {
                        "docId": "c69cd98c0674e1a8a814",
                        "fileName": "leap-25.docx",
                        "text": "NAVERは巨大な街全体をデジタルツインデータで製作できる独自の技術を持っています。NAVERは、航空写真と写真測量技術を利用してメガシティ規模のデジタルツインデータを迅速かつ正確に製作することができ、AI技術で実際と同じ3次元空間に復元しました。既に韓国では、NAVER Payを通じて、実際に団地を訪問しなくても不動産物件情報を確認できる VRサービスを提供しています。",
                        "startOffset": 4025,
                        "endOffset": 4258,
                        "chunkNo": 1,
                        "pageNo": 0,
                        "extra": {
                            "bucket": "clova-ai",
                            "size": 966060,
                            "last_modified": "2025-07-02T10:17:19+00:00",
                            "key": "leap-25.docx"
                        }
                    }
                ]
            }
        ],
        "rateLimit": {
            "limitRequests": null,
            "remainingRequests": null,
            "resetRequests": null,
            "limitTokens": "60000",
            "remainingTokens": "58324",
            "resetTokens": "59s"
        }
    }
}

レスポンスストリーム

Server-Sent Events (SSE)方式でリアルタイムストリーミングレスポンスを提供します。各 SSEメッセージは次のような形式で構成されます (イベントは空の行で区切ります)。

event: [event_type]
data: [json_data]

会話生成 APIがサポートするイベントタイプは、steppingtokenresulterrorの5つです。

  • step: 回答生成前にブロック別処理結果を出力 (verbose = trueの場合)
  • ping: 回答生成前の待機中に Read Timeoutを防止するためにデータを出力 (回答生成まで1秒ごとに)
  • token: 生成中回答のトークンをリアルタイムで出力
  • result: 最終回答を出力
  • error: 回答生成中にエラーが発生した場合に出力

レスポンスヘッダ

レスポンスヘッダの説明は次の通りです。

ヘッダ 必須の有無 説明
Accept - レスポンスデータの形式
  • text/event-stream

レスポンスボディ

レスポンスボディはイベントタイプによって異なります。

stepイベント

stepイベントの説明は次の通りです。

フィールド タイプ 必須の有無 説明
blockName String - RAG処理段階
  • START | QUERY_REWRITE | RETRIEVAL | CONDITIONAL | GENERATOR
    • START: ユーザークエリを入力
    • QUERY_REWRITE: クエリを再作成
    • RETRIEVAL: 文書を検索
    • CONDITIONAL: 分岐を選択
    • GENERATOR: 最終回答を生成
blockResult String | Array - ブロックごとの詳細結果
  • START: ユーザークエリ
  • QUERY_REWRITE: 再作成されたクエリ
  • RETRIEVAL: 文書の検索結果
  • CONDITIONAL: 分岐の結果
  • GENERATOR: LLMの最終回答

RETRIEVALパラメータ

フィールド タイプ 必須の有無 説明
docId String - 文書の固有 ID
fileName String - 検索対象ファイル名
score Float - 検索の類似度スコア
  • 0~1
  • 値が高いほど類似度が高い
rank Integer - 検索結果ランキング
text String - 文書で検索されたテキスト
start_offset Integer - 文書でテキストチャンクが始まる文字の位置
end_offset Integer - 文書でテキストチャンクが終わる文字の位置
chunk_no Integer - チャンク番号
page_no Integer - ページ番号

pingtokenresultイベント

pingtokenresultイベントの説明は次の通りです。

フィールド タイプ 必須の有無 説明
message Object - メッセージ情報
message.role String - メッセージのロール
  • assistant
message.content String - 現在生成済みのトークン
message.totalContent String - これまでに生成された全トークン
status String - メッセージの状態
  • IN_PROGRESS | COMPLETE
    • IN_PROGRESS: 生成中
    • COMPLETE: 生成完了
references Array - 引用情報 (resultイベントにのみ含める)
rateLimit Object - API使用量制限情報 (resultイベントにのみ含める)
rateLimit.limitRequests String - リクエスト数制限
rateLimit.remainingRequests String - 現在残っているリクエスト数
rateLimit.resetRequests String - リクエスト制限リセット時間(秒)
rateLimit.limitTokens String - トークン数制限
rateLimit.remainingTokens String - 現在残っているトークン数
rateLimit.resetTokens String - トークン制限リセット時間(秒)
metadata String - リクエストメタデータ (resultイベントにのみ含める)
metadata.chatModel String - LLMモデル
  • HyperClovaX
metadata.modelName String - HyperCLOVA Xモデルのバージョン
  • HCX-003 | HCX-005 | HCX-DASH-001 | HCX-DASH-002
metadata.inputTokens Integer - 入力トークン数
metadata.outputTokens Integer - 出力トークン数
metadata.totalTokens Integer - トークンの総数

references

フィールド タイプ 必須の有無 説明
name String - ブロック名
  • RETRIEVAL
data Array - 引用の詳細情報

data

フィールド タイプ 必須の有無 説明
docId String - 文書の固有 ID
fileName String - 引用対象ファイル名
text String - 文書で引用されたテキスト
start_offset Integer - 文書でテキストチャンクが始まる文字の位置
end_offset Integer - 文書でテキストチャンクが終わる文字の位置
chunk_no Integer - チャンク番号
page_no Integer - ページ番号
extra Object - 付加情報
extra.bucket String - バケット名
extra.size Integer - ファイルサイズ (Byte)
extra.last_modified String - 最終更新日時
  • ISO 8601形式
extra.key String - Object Storageキー

errorイベント

errorイベントの説明は次の通りです。

フィールド タイプ 必須の有無 説明
code Integer Required APIレスポンスステータスコード
message String Required APIレスポンスステータスメッセージ

レスポンスステータスコード

RAG APIで共通して使用されるレスポンスステータスコードの詳細は、RAGのレスポンスステータスコードをご参照ください。

レスポンス例

レスポンスのサンプルコードは次の通りです。

event: step
data: {
    "blockName": "START",
    "blockResult": "この技術は何と呼ばれているの?"
}

event: step
data: {
    "blockName": "QUERY_REWRITE",
    "blockResult": "NAVERの技術のことを人々はどのような名称で呼んでいますか?"
}

event: step
data: {
    "blockName": "RETRIEVAL",
    "blockResult": [
        {
            "docId": "{docId}",
            "fileName": "leap-25.docx",
            "score": 0.04168701171875,
            "rank": 1,
            "text": "NAVERは巨大な街全体をデジタルツインデータで製作できる独自の技術を持っています。NAVERは、航空写真と写真測量技術を利用してメガシティ規模のデジタルツインデータを迅速かつ正確に製作することができ、AI技術で実際と同じ3次元空間に復元しました。既に韓国では、NAVER Payを通じて、実際に団地を訪問しなくても不動産物件情報を確認できる VRサービスを提供しています。",
            "start_offset": 4025,
            "end_offset": 4258,
            "chunk_no": 1,
            "page_no": 0
        }
    ]
}

event: step
data: {
    "blockName": "CONDITIONAL",
    "blockResult": "branch1"
}

event: ping
data: {
    "message": {
        "role": "assistant",
        "content": "",
        "totalContent": ""
    },
    "status": "IN_PROGRESS",
    "references": [],
    "rateLimit": null,
    "metadata": {}
}

...

event: token
data: {
    "message": {
        "role": "assistant",
        "content": " デジタル",
        "totalContent": "NAVERが持つこの技術は、「デジタルツイン(Digital Twin)」と呼ばれています。デジタル"
    },
    "status": "IN_PROGRESS",
    "references": [],
    "rateLimit": null,
    "metadata": {}
}

...

event: result
data: {
    "message": {
        "role": "assistant",
        "content": "NAVERが持つこの技術は、「デジタルツイン(Digital Twin)」と呼ばれています。[†1]デジタルツインとは、現実世界の物理的なオブジェクトを仮想世界にそっくり作ることを意味し、これを通じてさまざまなシミュレーションや分析を行うことで、意思決定に役立てることができます。\n\n例えば、紙の上に家を描くとします。実際に建てる家とまったく同じ絵を描くのです。すると、その絵をもっていろいろな計画を立てたり、実験を行ったりできるわけです。雨が降ったときに水がどのように流れるか知りたいなら、絵の上で雨を降らせて結果を観察するといった具合にです。\n\nこのように作られた仮想世界は、実際の建物や都市を建設する前に、予めさまざまな状況をテストすることができて、時間とコストを節約できます。さらに、実際の建物の管理にも大いに役立ちます。例えば、建物内の機械が正常に動作しているか、エネルギーを効率的に使用しているかなどをモニタリングして、問題が発生する前に対策を講じることができます。\n\nNAVERはこのようなデジタルツイン技術を利用して、韓国のさまざまな地域を仮想世界に再現し、これに基づいてさまざまなサービスを開発しています。[†1]そうやって私たちは、直接現地に行かなくても、パソコンやスマートフォンでその地域の情報を確認したり、体験したりできるのです。本当にすごいと思いませんか?",
        "totalContent": "NAVERが持つこの技術は、「デジタルツイン(Digital Twin)」と呼ばれています。[†1]デジタルツインとは、現実世界の物理的なオブジェクトを仮想世界にそっくり作ることを意味し、これを通じてさまざまなシミュレーションや分析を行うことで、意思決定に役立てることができます。\n\n例えば、紙の上に家を描くとします。実際に建てる家とまったく同じ絵を描くのです。すると、その絵をもっていろいろな計画を立てたり、実験を行ったりできるわけです。雨が降ったときに水がどのように流れるか知りたいなら、絵の上で雨を降らせて結果を観察するといった具合にです。\n\nこのように作られた仮想世界は、実際の建物や都市を建設する前に、予めさまざまな状況をテストすることができて、時間とコストを節約できます。さらに、実際の建物の管理にも大いに役立ちます。例えば、建物内の機械が正常に動作しているか、エネルギーを効率的に使用しているかなどをモニタリングして、問題が発生する前に対策を講じることができます。\n\nNAVERはこのようなデジタルツイン技術を利用して、韓国のさまざまな地域を仮想世界に再現し、これに基づいてさまざまなサービスを開発しています。[†1]そうやって私たちは、直接現地に行かなくても、パソコンやスマートフォンでその地域の情報を確認したり、体験したりできるのです。本当にすごいと思いませんか?"
    },
    "status": "COMPLETE",
    "references": [
        {
            "name": "RETRIEVAL",
            "data": [
                {
                    "docId": "12345",
                    "fileName": "leap-25.docx",
                    "text": "NAVERは巨大な街全体をデジタルツインデータで製作できる独自の技術を持っています。NAVERは、航空写真と写真測量技術を利用してメガシティ規模のデジタルツインデータを迅速かつ正確に製作することができ、AI技術で実際と同じ3次元空間に復元しました。既に韓国では、NAVER Payを通じて、実際に団地を訪問しなくても不動産物件情報を確認できる VRサービスを提供しています。",
                    "startOffset": 4025,
                    "endOffset": 4258,
                    "chunkNo": 1,
                    "pageNo": 0,
                    "extra": {
                        "bucket": "clova-ai",
                        "size": 966060,
                        "last_modified": "2025-07-02T10:17:19+00:00",
                        "key": "leap-25.docx"
                    }
                }
            ]
        }
    ],
    "rateLimit": {
        "limitRequests": null,
        "remainingRequests": null,
        "resetRequests": null,
        "limitTokens": "60000",
        "remainingTokens": "56648",
        "resetTokens": "28s"
    },
    "metadata": {
        "chatModel": "HyperClovaX",
        "modelName": "HCX-005",
        "inputTokens": 267,
        "outputTokens": 262,
        "totalTokens": 529
    }
}