スキルセット

Prev Next

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

特定のスキルセットの APIを呼び出して適切な返答を生成します。

リクエスト

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

メソッド URI
POST /v1/skillsets/{skillset-id}/versions/{version}/final-answer

リクエストヘッダ

リクエストヘッダの説明は次の通りです。

フィールド 必須の有無 説明
Authorization Required 認証用 APIキー<例> Bearer nv-************
X-NCP-CLOVASTUDIO-REQUEST-ID Optional リクエスト ID
Content-Type Required リクエストデータの形式
  • application/json
Accept Conditional レスポンスデータの形式
  • text/event-stream
参考

レスポンス結果は基本的に JSON形式で返しますが、Accepttext/event-streamに指定するとストリーム形式で返します。

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

リクエストパスパラメータの説明は次の通りです。

フィールド タイプ 必須の有無 説明
skillset-id String Required スキルセット ID
version Integer Required スキルセットのバージョン
  • 1 ≤ version

リクエストボディ

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

フィールド タイプ 必須の有無 説明
query String Required クエリ内容
tokenStream Boolean Optional 返答生成時のトークンストリーミング使用有無
chatHistory Array Optional 返答生成履歴
chatHistory.role Enum Required 会話メッセージのロール
  • user | assistant
    • user: ユーザーの発話または質問
    • assistant: モデルの返答
chatHistory.content String Required 会話メッセージの内容
requestOverride Object Optional すべての APIに適用する呼び出しオプション
requestOverride.baseOperation Object Optional すべての APIに適用する呼び出しオプション情報
requestOverride.baseOperation.header Object Optional すべての APIに適用するリクエストヘッダ
requestOverride.baseOperation.query Object Optional すべての APIに適用するリクエストクエリパラメータ
requestOverride.baseOperation.requestBody Object Optional すべての APIに適用するリクエストボディ
  • GETメソッド APIの場合は適用しない
requestOverride.operations Array Optional 特定の APIに適用する呼び出しオプション

operations

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

フィールド タイプ 必須の有無 説明
operationId String Conditional 特定の APIのオペレーション ID
  • operationsの入力時は必須
header Object Optional 特定の APIに適用するリクエストヘッダ
query Object Optional 特定の APIに適用するリクエストクエリパラメータ
requestBody Object Optional 特定の APIに適用するリクエストボディ
  • GETメソッド APIの場合は適用しない

リクエスト例

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

curl --location --request POST 'https://clovastudio.stream.ntruss.com/testapp/v1/skillsets/{skillset-id}/versions/{version}/final-answer' \
--header 'Authorization: Bearer {API Key}' \
--header 'X-NCP-CLOVASTUDIO-REQUEST-ID: {Request ID}' \
--header 'Content-Type: application/json' \
--data '{  
    "query": "明日の天気はどう?",
    "tokenStream": true,
    "chatHistory": [
        {
            "role": "user",
            "content": "今日のソウルの天気はどう?"
         },
        {
            "role": "assistant",
            "content": "嵐の前の静けさです。"
         }
     ],
     "requestOverride": {
        "baseOperation": {
            "query": {
                "appid": "appid-11223344"
                }
            }
        }
    }'

レスポンス

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

レスポンスヘッダ

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

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

レスポンスボディ

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

フィールド タイプ 必須の有無 説明
status Object - レスポンスステータス
result Object - レスポンス結果
result.finalAnswer String - モデルの最終実行結果
  • 最後まで実行されなかった場合、空の文字列を返す
result.tokenCount Integer - 返答生成時に測定されたトークン数
result.useTask Boolean - 呼び出したモデルの学習有無
  • false | true
    • false: 学習していない
    • true: 学習完了
result.apiResult Array - 呼び出した APIの結果

apiResult

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

フィールド タイプ 必須の有無 説明
url String - 返答中に呼び出した API URL
requestBody String - 返答中に呼び出した APIリクエストボディ
responseBody String - 返答中に呼び出した APIレスポンスボディ
apiOrder Integer - API呼び出しの結果に関係なく、レスポンス順序を固定するためのソート基準
operationId String - 返答中に呼び出した API Specのオペレーション ID
nameForHuman String - 返答中に呼び出した APIが登録されたスキルの名前

レスポンス例

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

成功

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

{
  "status": {
    "code": "20000",
    "message": "OK"
  },
  "result": {
    "finalAnswer": "明日のソウルの天気は晴れ、気温は約27度程度と予想されます。",
    "tokenCount": 1032,
    "apiResult": [
      {
        "url": "http://example.com?numOfRows=1&location=서울&date=20240530",
        "requestBody": "string",
        "responseBody": "string",
        "apiOrder": 1,
        "operationId": "weatherAPI",
        "nameForHuman": "WeatherSkill"
      }
    ]
  }
}

失敗

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

レスポンスストリーム

生成されるトークンを1つずつ出力するようにトークンストリーミングを使用できます。トークンストリーミング形式を説明します。

レスポンスヘッダ

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

フィールド 必須の有無 説明
Accept - レスポンスデータの形式
  • text/event-stream

レスポンスボディ

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

フィールド タイプ 必須の有無 説明
selectedSkill Object - 選択されたスキルの名前
  • Planning eventでのみ表示
finalAnswer String - モデルの最終実行結果
  • 最後まで実行されなかった場合は空の文字列を返す
  • FinalAnswer eventでのみ表示
tokenCount Integer - イベントで使用されたトークン数
apiResult Object - 返答中に呼び出した APIの結果
  • FinalAnswer eventでのみ表示
apiResult.url String - 返答中に呼び出した API URL
apiResult.requestBody String - 返答中に呼び出した APIリクエストボディ
apiResult.responseBody String - 返答中に呼び出した APIレスポンスボディ
apiResult.apiOrder Integer - API呼び出しの結果に関係なく、レスポンス順序を固定するためのソート基準
apiResult.operationId String - 返答中に呼び出した API Specのオペレーション ID
apiResult.nameForHuman String - 返答中に呼び出した APIが登録されたスキルの名前

Token Event

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

フィールド タイプ 必須の有無 説明
probs Array - レスポンス候補のトークンリストと各トークンの確率
stopReason String - 結果生成停止の理由(通常、最後のイベントで渡す)
  • length | end_token | stop_before
    • length: 長さ制限
    • end_token: トークン数制限
    • stop_before: 返答生成中 stopBefore設定値の登場
text String - 完全なるテキストペア

レスポンス例

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

成功

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

id: aabdfe-dfgwr-edf-hpqwd-f2asd-g
event: planning
data: {"selectedSkill": {["nameForHuman":"ホテル検索"]}, "tokenCount": 432}
id: aabdfe-dfgwr-edf-hpqwd-f1asd-g
event: cot
data: {"apiResult": [{"url": "https://example.com/search_reviews_get?keyword=地下鉄の駅からのアクセスが良い", "requestBody": "keyword=地下鉄の駅からのアクセスが良い", "responseBody": "[{\"review_id\": 5,
\"review_date\": \"20230809\", \"reviewer\": \"ClaudeCalder\", \"rating\": 4.0, \"content\": \"サウナ、
プールなどの館内設備がないのが残念でしたが、値段が安いので良かったです。近くには地下鉄の駅もあるし、コンビニもあるので、アクセスが
良いです。短期滞在にはちょうどいいです。\", \"hotel_name\": \"Movenpick Hotel\", \"address\": \"ソウル特別市クァンジン区
ウォーカーヒルロ 120\", \"room_name\": \"City View\", \"good_cnt\": 9, \"bad_cnt\": 0, \"rating_service\":
3. 0, \"rating_clean\": 4.0, \"rating_room\": 4.0}]", "apiOrder": 1}], "tokenCount": 2401 }
id: aabdfe-dfgwr-edf-hpqwd-f2asd-g
event: finalAnswer
data: {"finalAnswer": "ソウルで地下鉄の駅からのアクセスが良いホテルは Movenpick Hotelで、ソウル特別市クァンジン区ウォーカーヒルロ 120に
位置しています。", "apiResult": [{"url": "https://example.com/search_reviews_get?keyword=地下鉄の駅からのアクセスが良い", "requestBody": "keyword=地下鉄の駅からのアクセスが良い", "responseBody":
"[{\"review_id\": 5, \"review_date\": \"20230809\", \"reviewer\": \"ClaudeCalder\", \"rating\": 4.0,
\"content\": \"サウナ、プールなどの館内設備がないのが残念でしたが、値段が安いので良かったです。近くには地下鉄の駅もあるし、
コンビニもあるので、アクセスが良いです。短期滞在にはちょうどいいです。\", \"hotel_name\": \"Movenpick Hotel\",
\"address\": \"ソウル特別市クァンジン区ウォーカーヒルロ 120\", \"room_name\": \"City View\", \"good_cnt\": 9, \"bad_cnt\":
0, \"rating_service\": 3.0, \"rating_clean\": 4.0, \"rating_room\": 4.0}]", "apiOrder": 1}],
"tokenCount": 214 }
...

失敗

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