RAG Reasoning

Prev Next

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 요청에 대한 아이디
Content-Type Required 요청 데이터의 형식
  • application/json
  • 요청 바디

    요청 바디에 대한 설명은 다음과 같습니다.

    필드 타입 필수 여부 설명
    messages Array Required 대화 메시지
    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 도구 아이디
    • roletool인 경우, 필수 입력
    • assistant의 toolCalls 요청과 연결하는 용도
    참고

    roletool인 경우, messagescontent에는 검색 데이터베이스 또는 검색 API에서 검색한 문서 목록(search_result)를 추가해야 합니다. 검색 결과(search_result)에 id: {문서 고유 아이디}, doc: {검색한 문서 원본}을 포함하여 RAG 답변의 인용 표기에 활용될 수 있도록 구성해 주십시오. 예시는 다음과 같습니다.

    {
        "role": "tool",
        "content": "[
                        {
                            \"search_result\": [{\"id\": \"doc-1493058999\",
                            \"doc\": \"네이버 계정으로 로그인은 개인 회원만 가능하며 사업자 회원은 불가능합니다.\"
                        },
                        ...
                     ]"
    }
    

    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\": \"네이버 클라우드 플랫폼 콘솔의 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>네이버 클라우드 플랫폼 콘솔의 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
              }
          }
      }
      

    실패

    호출이 실패한 경우의 응답 예시는 다음과 같습니다.