챗봇 대화 컨텍스트 미리 검색(Get RAG Context For Session) (V2)
사용자 메시지에 관련된 컨텍스트를 세션의 Agent에 구성한 데이터 소스에서 미리 검색합니다. 검색 결과를 전처리한 뒤 대화 추가 요청의 contextsOverride에 전달하려는 경우에 사용합니다.
HTTP 메서드는 PUT이며 api:aip-agents-write 권한 범위가 필요합니다. 사용자 메시지에 대한 최종 Agent 응답은 별도의 대화 추가 요청에서 생성합니다.
이 엔드포인트는 미리보기 기능이며 언제든 변경되거나 제거될 수 있습니다. 사용하려면 preview=true를 지정합니다.
HTTP 요청
PUT /api/v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/ragContext
작업 식별자는 v2.getRagContextForSession입니다. OAuth2로 호출하는 타사 애플리케이션에는 api:aip-agents-write 권한 범위가 필요합니다. 각 요청에 Authorization: Bearer <접근 토큰>을 전달합니다.
경로 매개변수
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
agentRid | string | 필수 | AIP Chatbot Studio에서 만든 챗봇의 Agent RID입니다. | ri.aip-agents..agent.732cd5b4-7ca7-4219-aabb-6e976faf63b1 |
sessionRid | string | 필수 | 대화 세션의 RID입니다. | ri.aip-agents..session.292db3b2-b653-4de6-971c-7e97a7b881d6 |
쿼리 매개변수
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
preview | boolean | 선택 | 미리보기 기능 사용을 활성화합니다. | true |
요청 본문
본문 형식은 GetRagContextForSessionRequest이며 필수입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
userInput | object | 필수 | Agent에 구성한 데이터 소스에서 관련 컨텍스트를 검색할 사용자 메시지입니다. | 본문 예시 참조 |
parameterInputs | map<ParameterId, ParameterValue> | 선택 | 컨텍스트 검색에 사용할 애플리케이션 변수 값입니다. | 본문 예시 참조 |
userInput의 구조
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
text | string | 필수 | 사용자 메시지의 텍스트입니다. | What is the status of my order? |
parameterInputs의 구조
맵의 키는 ParameterId(string), 값은 ParameterValue(union<string, objectSet>)입니다.
키: AIP Chatbot Studio에서 구성한 애플리케이션 상태 변수의 고유 식별자입니다.
Agent의 애플리케이션 상태에 구성한 변수에 전달하는 값입니다.
분기 string
StringParameter 애플리케이션 변수의 문자열 값입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
type | enum | 필수 | 분기를 구분하는 type 값입니다. 허용값: string. | string |
value | string | 필수 | Titan Technologies |
분기 objectSet
ObjectSetParameter 애플리케이션 변수에 전달하는 값입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
type | enum | 필수 | 분기를 구분하는 type 값입니다. 허용값: objectSet. | objectSet |
objectSet | ObjectSet | 필수 | 온톨로지의 객체 집합 정의입니다. | |
ontology | string | 필수 | 입력 ObjectSet이 속한 온톨로지의 API 이름입니다. List ontologies API나 Ontology Manager에서 확인합니다. |
objectSet의 구조
ObjectSet의 15가지 구성 방식과 중첩 필드는 객체 집합 정의를 따릅니다. 조건식은 검색 조건, 속성 선택은 속성 식별자와 로드 수준, 계산 필드는 파생 속성, 공간 조건은 공간 필터를 사용합니다. 실험적 분기와 각 연산의 한도 및 입력 조건도 함께 적용합니다.
다음 본문의 식별자와 값은 가상 예시입니다.
{
"userInput": {
"text": "What is the status of my order?"
},
"parameterInputs": {
"customerName": {
"type": "string",
"value": "Titan Technologies"
}
}
}
응답
응답은 AgentSessionRagContextResponse입니다. 객체 컨텍스트와 함수 검색 컨텍스트를 각각의 배열에 담습니다. functionRetrievedContexts의 각 항목에는 함수 RID와 버전뿐 아니라 필수 문자열 retrievedPrompt도 들어갑니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
objectContexts | list<ObjectContext> | 선택 | ||
functionRetrievedContexts | list<FunctionRetrievedContext> | 선택 |
objectContexts의 구조
배열 항목은 ObjectContext이며 자료형은 object입니다.
사용자 메시지에 대한 추가 컨텍스트로 프롬프트에 포함할 객체 인스턴스 정보입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
objectRids | list<ObjectRid> | 선택 | 프롬프트에 포함할 관련 객체 인스턴스의 RID 목록입니다. | |
propertyTypeRids | list<PropertyTypeRid> | 선택 | 해당 객체에서 프롬프트에 포함할 속성 유형의 RID 목록입니다. |
objectRids의 구조
배열 항목은 ObjectRid이며 자료형은 string입니다.
객체의 고유 리소스 식별자이며 다른 Foundry API와 연계할 때 사용합니다.
propertyTypeRids의 구조
배열 항목은 PropertyTypeRid이며 자료형은 string입니다.
속성의 고유 리소스 식별자입니다.
functionRetrievedContexts의 구조
배열 항목은 FunctionRetrievedContext이며 자료형은 object입니다.
Agent 프롬프트에 추가하기 위해 함수를 실행하여 얻은 컨텍스트입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
functionRid | string | 필수 | 함수의 고유 리소스 식별자이며 다른 Foundry API와 연계할 때 사용합니다. | ri.function-registry.main.function.8cb2d957-f0e6-4e0c-81de-e701bd54b18c |
functionVersion | string | 필수 | 함수 버전은 <major>.<minor>.<patch>-<tag> 형식이며 -<tag>는 생략할 수 있습니다. 예: 1.2.3, 1.2.3-rc1. | 1.2.3 |
retrievedPrompt | string | 필수 | 컨텍스트 검색 함수가 반환한 문자열입니다. |
가상의 주문 문의에서 검색한 컨텍스트 예시입니다.
{
"functionRetrievedContexts": [
{
"functionVersion": "1.2.3",
"functionRid": "ri.function-registry.main.function.8cb2d957-f0e6-4e0c-81de-e701bd54b18c",
"retrievedPrompt": "The example order for Titan Technologies is in transit."
}
],
"objectContexts": [
{
"objectRids": [
"ri.phonograph2-objects.main.object.48668bf6-8878-48d2-b8f8-f0017593feb5"
],
"propertyTypeRids": [
"ri.ontology.main.property.7899aeb4-a389-4f2e-a0fd-e7193a4f6cb1"
]
}
]
}
개별 오류
| 오류 이름 | 오류 코드 | HTTP | 의미와 조건 | 추가 매개변수 |
|---|---|---|---|---|
ObjectTypeIdsNotFound | NOT_FOUND | 404 | Agent에 구성한 객체 유형 중 일부를 찾을 수 없습니다. 객체 유형이 없거나 호출 토큰으로 접근할 수 없는 경우입니다. API에서 접근 가능한 객체 유형을 나열하거나 Ontology Manager에서 검색하여 확인합니다. | agentRid, sessionRid, objectTypeIds |
ObjectTypeRidsNotFound | NOT_FOUND | 404 | Agent에 구성한 객체 유형 중 일부를 찾을 수 없습니다. 객체 유형이 없거나 호출 토큰으로 접근할 수 없는 경우입니다. API에서 접근 가능한 객체 유형을 나열하거나 Ontology Manager에서 검색하여 확인합니다. | agentRid, sessionRid, objectTypeRids |
FunctionLocatorNotFound | NOT_FOUND | 404 | Agent에 구성한 함수 식별 정보를 찾을 수 없습니다. 해당 함수 유형이나 버전이 없거나 호출 토큰으로 접근할 수 없는 경우입니다. | agentRid, sessionRid, functionRid, functionVersion |
OntologyEntitiesNotFound | NOT_FOUND | 404 | Agent에 구성한 온톨로지 유형 중 일부를 찾을 수 없습니다. 유형이 없거나 호출 토큰으로 접근할 수 없는 경우입니다. API의 객체 유형 및 링크 유형 목록이나 Ontology Manager에서 확인합니다. | agentRid, sessionRid, objectTypeRids, linkTypeRids |
GetRagContextForSessionPermissionDenied | PERMISSION_DENIED | 403 | 세션의 검색 컨텍스트를 가져올 수 없습니다. | agentRid, sessionRid |
SessionNotFound | NOT_FOUND | 404 | 지정한 세션을 찾을 수 없습니다. | agentRid, sessionRid |
AgentNotFound | NOT_FOUND | 404 | 지정한 Agent를 찾을 수 없습니다. | agentRid |
요청 예제
FOUNDRY_HOST에는 https://를 제외한 Foundry 호스트를, FOUNDRY_TOKEN에는 유효한 토큰을 환경 변수로 제공합니다. 예시 식별자와 매개변수 값은 실제 작업 대상에 맞게 바꿉니다.
예시는 Agent에 문자열 변수 customerName을 구성한 경우입니다. 변수 이름과 값은 실제 세션의 Agent 버전에 맞게 바꿉니다.
cURL
curl -X PUT \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${FOUNDRY_TOKEN}" \
"https://${FOUNDRY_HOST}/api/v2/aipAgents/agents/ri.aip-agents..agent.732cd5b4-7ca7-4219-aabb-6e976faf63b1/sessions/ri.aip-agents..session.292db3b2-b653-4de6-971c-7e97a7b881d6/ragContext?preview=true" \
-d '{"userInput":{"text":"What is the status of my order?"},"parameterInputs":{"customerName":{"type":"string","value":"Titan Technologies"}}}'
Python
Requests 라이브러리가 설치된 Python 환경에서 사용합니다.
import os
import requests
HOSTNAME = os.environ["FOUNDRY_HOST"]
TOKEN = os.environ["FOUNDRY_TOKEN"]
headers = {
"content-type": "application/json",
"authorization": "Bearer {}".format(TOKEN)
}
request_body = {
"userInput": {
"text": "What is the status of my order?"
},
"parameterInputs": {
"customerName": {
"type": "string",
"value": "Titan Technologies"
}
}
}
response = requests.put('https://{}/api/v2/aipAgents/agents/ri.aip-agents..agent.732cd5b4-7ca7-4219-aabb-6e976faf63b1/sessions/ri.aip-agents..session.292db3b2-b653-4de6-971c-7e97a7b881d6/ragContext?preview=true'.format(HOSTNAME), headers=headers, json=request_body)
print(response)
Java
Apache HttpClient 4.5 API와 try-with-resources를 사용합니다. 클래스 이름에 맞는 GetRagContextForSessionExample.java 파일에서 사용합니다.
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
public class GetRagContextForSessionExample {
public static void main(String[] args) throws Exception {
String HOSTNAME = System.getenv("FOUNDRY_HOST");
String TOKEN = System.getenv("FOUNDRY_TOKEN");
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
HttpPut request = new HttpPut("https://" + HOSTNAME + "/api/v2/aipAgents/agents/ri.aip-agents..agent.732cd5b4-7ca7-4219-aabb-6e976faf63b1/sessions/ri.aip-agents..session.292db3b2-b653-4de6-971c-7e97a7b881d6/ragContext?preview=true");
request.addHeader("content-type", "application/json");
request.addHeader("authorization", String.format("Bearer %s", TOKEN));
request.setEntity(new StringEntity("{\"userInput\":{\"text\":\"What is the status of my order?\"},\"parameterInputs\":{\"customerName\":{\"type\":\"string\",\"value\":\"Titan Technologies\"}}}", ContentType.APPLICATION_JSON));
try (CloseableHttpResponse response = httpClient.execute(request)) {
System.out.println(response);
}
}
}
}
JavaScript
fetch를 제공하는 Node.js 환경에서 사용합니다. 서비스 사용자 토큰을 브라우저로 전달하지 않습니다.
const HOSTNAME = process.env.FOUNDRY_HOST;
const TOKEN = process.env.FOUNDRY_TOKEN;
fetch(`https://${HOSTNAME}/api/v2/aipAgents/agents/ri.aip-agents..agent.732cd5b4-7ca7-4219-aabb-6e976faf63b1/sessions/ri.aip-agents..session.292db3b2-b653-4de6-971c-7e97a7b881d6/ragContext?preview=true`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${TOKEN}`,
},
body: '{"userInput":{"text":"What is the status of my order?"},"parameterInputs":{"customerName":{"type":"string","value":"Titan Technologies"}}}'
}).then((response) => {
console.log(response)
});
PowerShell
$TOKEN = $env:FOUNDRY_TOKEN
$HOSTNAME = $env:FOUNDRY_HOST
$headers = @{
"authorization" = "Bearer $TOKEN"
}
$response = Invoke-WebRequest -Uri "https://$HOSTNAME/api/v2/aipAgents/agents/ri.aip-agents..agent.732cd5b4-7ca7-4219-aabb-6e976faf63b1/sessions/ri.aip-agents..session.292db3b2-b653-4de6-971c-7e97a7b881d6/ragContext?preview=true" `
-Method Put `
-Headers $headers `
-ContentType application/json `
-Body "{`"userInput`":{`"text`":`"What is the status of my order?`"},`"parameterInputs`":{`"customerName`":{`"type`":`"string`",`"value`":`"Titan Technologies`"}}}"
$response.content
검색 결과를 대화 입력으로 전달
응답의 두 목록을 하나의 contextsOverride 목록으로 합칠 때 각 항목에 컨텍스트 분기를 나타내는 type을 붙입니다. 다음 함수의 rag_context에는 이 API가 반환한 실제 JSON 객체를 전달합니다. 반환값을 대화 추가 요청의 contextsOverride에 넣습니다.
def build_contexts_override(rag_context: dict) -> list[dict]:
return [
{**context, "type": "objectContext"}
for context in rag_context.get("objectContexts", [])
] + [
{**context, "type": "functionRetrievedContext"}
for context in rag_context.get("functionRetrievedContexts", [])
]
objectContext의 객체 및 속성 식별자는 RID를 유지합니다. functionRetrievedContext에는 함수 RID, 버전과 retrievedPrompt를 함께 전달합니다. 필요한 전처리를 마친 뒤 응답 완료 대기 방식이나 스트리밍 방식으로 대화를 추가합니다. contextsOverride를 전달하면 해당 요청의 자동 컨텍스트 검색을 건너뜁니다.