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 | 요청 데이터의 형식 |
요청 바디
요청 바디에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
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 모델이 호출할 도구 이름 |
RAG Reasoning 의 최대 입력 토큰 수는 128,000이며, 최대 출력 토큰 수는 4,096입니다.
messages
messages
에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
role |
Enum | Required | 대화 메시지 역할
|
content |
String | Required | 대화 메시지 내용
|
toolCalls |
Array | Conditional | assistant의 호출 도구 정보 role 이 tool 인 경우, assistant의 toolCalls 요청과 같이 입력 |
toolCallId |
String | Conditional | 도구 아이디
|
role
이 tool
인 경우, messages
의 content
에는 검색 데이터베이스 또는 검색 API에서 검색한 문서 목록(search_result
)를 추가해야 합니다. 검색 결과(search_result
)에 id: {문서 고유 아이디}
, doc: {검색한 문서 원본}
을 포함하여 RAG 답변의 인용 표기에 활용될 수 있도록 구성해 주십시오. 예시는 다음과 같습니다.
{
"role": "tool",
"content": "[
{
\"search_result\": [{\"id\": \"doc-1493058999\",
\"doc\": \"네이버 계정으로 로그인은 개인 회원만 가능하며 사업자 회원은 불가능합니다.\"
},
...
]"
}
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\": \"네이버 클라우드 플랫폼 콘솔의 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>네이버 클라우드 플랫폼 콘솔의 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 } } }
실패
호출이 실패한 경우의 응답 예시는 다음과 같습니다.