챗봇 응답 추적 조회(Get Session Trace) (V2)
Agent가 응답을 생성하면서 거친 컨텍스트 검색과 도구 호출을 조회합니다. status가 COMPLETE가 될 때까지 이 엔드포인트를 다시 조회하여 진행 상태를 확인합니다. 이 상태는 응답 생성의 종료를 나타내며 모든 도구 호출이 성공했다는 뜻은 아닙니다.
대화 결과의 sessionTraceId를 경로에 지정합니다. 대화 내용 조회의 각 교환 결과에도 이 식별자가 들어 있습니다.
이 엔드포인트는 미리보기 기능이며 언제든 변경되거나 제거될 수 있습니다. 사용하려면 preview=true를 지정합니다.
HTTP 요청
GET /api/v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/sessionTraces/{sessionTraceId}
작업 식별자는 v2.getSessionTrace입니다. OAuth2로 호출하는 타사 애플리케이션에는 api:aip-agents-read 권한 범위가 필요합니다. 각 요청에 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 |
sessionTraceId | string | 필수 | 추적의 고유 식별자입니다. | 12345678-1234-5678-1234-123456789abc |
쿼리 매개변수
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
preview | boolean | 선택 | 미리보기 기능 사용을 활성화합니다. | true |
요청 본문
요청 본문을 사용하지 않습니다.
응답
응답은 SessionTrace입니다. contexts는 생성이 끝나야 채워지므로 IN_PROGRESS 단계에서 이 필드가 없다는 이유로 컨텍스트 설정이 없다고 판단하지 않습니다. 도구 그룹은 호출 요청 순서로 반환하지만, 이 순서만으로 그룹 내부의 병렬 실행이나 완료 순서를 추정하지 않습니다.
toolMetadata.type은 도구 종류를, output.type은 success 또는 failure를 나타냅니다. 도구 입력값과 성공 출력값은 다시 type: string 또는 type: rid로 구분합니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
id | string | 필수 | 추적의 고유 식별자입니다. | 12345678-1234-5678-1234-123456789abc |
status | enum | 필수 | Agent가 최종 응답 생성을 마쳤는지를 나타냅니다. COMPLETE가 될 때까지 getSessionTrace로 진행 상태를 조회합니다. 허용값: IN_PROGRESS, COMPLETE. | IN_PROGRESS |
contexts | object | 선택 | 클라이언트가 제공했거나 Agent가 자동 검색한 추가 컨텍스트를 유형별로 묶습니다. 추가 컨텍스트를 제공하지 않았고 자동 검색도 구성하지 않았다면 비어 있습니다. 객체가 존재하면서 내부 목록이 비어 있으면 검색을 시도했으나 컨텍스트를 찾지 못했다는 뜻입니다. 응답 생성이 끝난 뒤에만 이 필드를 채웁니다. | |
toolCallGroups | list<ToolCallGroup> | 선택 | 같은 시점에 시작하도록 요청한 도구 호출을 그룹으로 묶습니다. 그룹 목록은 Agent가 호출을 요청한 순서로 반환합니다. |
contexts의 구조
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
objectContexts | list<ObjectContext> | 선택 | 사용자 메시지와 관련하여 Agent 프롬프트에 포함한 객체 컨텍스트입니다. | |
functionRetrievedContexts | list<FunctionRetrievedContext> | 선택 | 함수를 실행하여 얻은 뒤 Agent 프롬프트에 추가한 컨텍스트입니다. |
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 | 필수 | 컨텍스트 검색 함수가 반환한 문자열입니다. |
toolCallGroups의 구조
배열 항목은 ToolCallGroup이며 자료형은 object입니다.
응답 생성 과정의 같은 시점에 시작하도록 요청한 도구 호출 목록입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
toolCalls | list<ToolCall> | 선택 |
toolCalls의 구조
배열 항목은 ToolCall이며 자료형은 object입니다.
도구 호출과 그 입력 및 출력입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
toolMetadata | object | 필수 | 호출한 도구의 이름과 유형입니다. | 응답 예시 참조 |
input | object | 필수 | 도구 호출의 입력 매개변수입니다. | 응답 예시 참조 |
output | union<success, failure> | 선택 | 해당 도구 호출이 진행 중이면 비어 있습니다. |
toolMetadata의 구조
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
name | string | 필수 | Agent에 구성한 도구 이름입니다. | Object Query Tool |
type | enum | 필수 | 호출한 도구의 유형입니다. 허용값: FUNCTION, ACTION, ONTOLOGY_SEMANTIC_SEARCH, OBJECT_QUERY, UPDATE_APPLICATION_VARIABLE, REQUEST_CLARIFICATION, OBJECT_QUERY_WITH_SQL, CODE_EXECUTION. | FUNCTION |
input의 구조
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
thought | string | 선택 | Agent가 해당 도구를 선택한 이유에 관해 제공한 추가 메시지입니다. | I need to find the customer with the name 'Titan Technologies'. |
inputs | map<ToolInputName, ToolInputValue> | 선택 |
inputs의 구조
맵의 키는 ToolInputName(string), 값은 ToolInputValue(union<string, rid>)입니다.
키: 도구 입력 매개변수의 이름입니다.
문자열 또는 리소스 식별자(RID) 형태의 도구 입력값입니다.
분기 string
도구에 전달한 문자열 입력값입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
type | enum | 필수 | 분기를 구분하는 type 값입니다. 허용값: string. | string |
value | string | 필수 | Titan Technologies |
분기 rid
도구에 전달한 RID 입력값입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
type | enum | 필수 | 분기를 구분하는 type 값입니다. 허용값: rid. | rid |
rid | string | 필수 | ri.object-set.main.temporary-object-set.8b12d4a9-4cf5-43c4-a612-77e5fc015e02 |
output의 구조
분기 success
도구 호출이 성공했을 때의 출력입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
type | enum | 필수 | 분기를 구분하는 type 값입니다. 허용값: success. | success |
output | union<string, rid> | 필수 | 문자열 또는 리소스 식별자(RID) 형태의 도구 출력값입니다. |
output의 구조
분기 string
도구가 반환한 문자열입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
type | enum | 필수 | 분기를 구분하는 type 값입니다. 허용값: string. | string |
value | string | 필수 | Titan Technologies |
분기 rid
도구가 반환한 RID입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
type | enum | 필수 | 분기를 구분하는 type 값입니다. 허용값: rid. | rid |
rid | string | 필수 | ri.object-set.main.temporary-object-set.8b12d4a9-4cf5-43c4-a612-77e5fc015e02 |
분기 failure
도구 호출이 실패했을 때의 출력입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
type | enum | 필수 | 분기를 구분하는 type 값입니다. 허용값: failure. | failure |
correctionMessage | string | 필수 | 호출 실패 시 도구가 Agent에 반환한 수정 안내입니다. Agent가 도구 입력을 고치는 데 사용할 수 있습니다. | The order ID must be a string. |
가상의 주문 조회에 응답하는 중에 기록한 추적 예시입니다.
{
"toolCallGroups": [
{
"toolCalls": [
{
"toolMetadata": {
"name": "Object Query Tool",
"type": "FUNCTION"
},
"input": {
"thought": "I need to find the customer with the name 'Titan Technologies'."
}
}
]
}
],
"id": "12345678-1234-5678-1234-123456789abc",
"status": "IN_PROGRESS"
}
개별 오류
| 오류 이름 | 오류 코드 | HTTP | 의미와 조건 | 추가 매개변수 |
|---|---|---|---|---|
SessionTraceNotFound | NOT_FOUND | 404 | 지정한 세션 추적을 찾을 수 없습니다. | sessionTraceId, agentRid, sessionRid |
SessionNotFound | NOT_FOUND | 404 | 지정한 세션을 찾을 수 없습니다. | agentRid, sessionRid |
AgentNotFound | NOT_FOUND | 404 | 지정한 Agent를 찾을 수 없습니다. | agentRid |
요청 예제
FOUNDRY_HOST에는 https://를 제외한 Foundry 호스트를, FOUNDRY_TOKEN에는 유효한 토큰을 환경 변수로 제공합니다. 예시 식별자와 매개변수 값은 실제 작업 대상에 맞게 바꿉니다.
cURL
curl \
-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/sessionTraces/12345678-1234-5678-1234-123456789abc?preview=true"
Python
Requests 라이브러리가 설치된 Python 환경에서 사용합니다.
import os
import requests
HOSTNAME = os.environ["FOUNDRY_HOST"]
TOKEN = os.environ["FOUNDRY_TOKEN"]
headers = {
"authorization": "Bearer {}".format(TOKEN)
}
response = requests.get('https://{}/api/v2/aipAgents/agents/ri.aip-agents..agent.732cd5b4-7ca7-4219-aabb-6e976faf63b1/sessions/ri.aip-agents..session.292db3b2-b653-4de6-971c-7e97a7b881d6/sessionTraces/12345678-1234-5678-1234-123456789abc?preview=true'.format(HOSTNAME), headers=headers)
print(response)
Java
Apache HttpClient 4.5 API와 try-with-resources를 사용합니다. 클래스 이름에 맞는 GetSessionTraceExample.java 파일에서 사용합니다.
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
public class GetSessionTraceExample {
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()) {
HttpGet request = new HttpGet("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/sessionTraces/12345678-1234-5678-1234-123456789abc?preview=true");
request.addHeader("authorization", String.format("Bearer %s", TOKEN));
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/sessionTraces/12345678-1234-5678-1234-123456789abc?preview=true`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${TOKEN}`,
}
}).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/sessionTraces/12345678-1234-5678-1234-123456789abc?preview=true" `
-Headers $headers
$response.content