# 대화 생성

## UI 소개

{% tabs %}
{% tab title="데이터플로우" %}

<figure><img src="https://1362923181-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5PH5ktGI0BWG6g9fvtcn%2Fuploads%2FaGroDQkooNDIDkaWBUHM%2Fcreate-completion.png?alt=media&#x26;token=34f36d8b-be8b-4d27-8630-b7cd6218ed1c" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

<table><thead><tr><th width="173" align="center">항목명</th><th width="288" align="center">항목소개</th><th align="center">비고</th></tr></thead><tbody><tr><td align="center">GPT 모델</td><td align="center">GPT 모델 선택</td><td align="center"></td></tr><tr><td align="center">메세지 입력</td><td align="center">대화 메세지 입력</td><td align="center">상세 내용 하단 참조</td></tr><tr><td align="center">응답 저장 여부 선택</td><td align="center">대화 생성 저장 여부 선택 (선택)</td><td align="center">기본값 : 끔</td></tr><tr><td align="center">추론 강도 지정</td><td align="center">추론에 대한 노력 수준을 조정 (선택)</td><td align="center">허용값 : low, medium, high<br>GPT o1, o3-mini 한정</td></tr><tr><td align="center">메타데이터</td><td align="center">최대 16개의 Key Value 쌍의 객체 추가 (선택)</td><td align="center">키의 길이은 최대 64자 제한,<br>값의 길이는 최대 512자 제한<br>상세 내용 하단 참조</td></tr><tr><td align="center">Frequency penalty</td><td align="center">동일한 단어나 구문이 반복되지 않도록 제어하는 매개변수 (선택)</td><td align="center">범위 : -2.0 ~ 2.0 (기본값 0)</td></tr><tr><td align="center">Logic bias</td><td align="center">특정 토큰을 배제하거나 우선 선택 조정  (선택)</td><td align="center">JSON 객체 형식<br>상세 내용 하단 참조</td></tr><tr><td align="center">생성 최대 토큰 수</td><td align="center"> 메세지 값을 반환할 최대 토큰 수 (선택)</td><td align="center">모델별 최소, 최대 토큰값 설정 확인</td></tr><tr><td align="center">N</td><td align="center">요청 시 생성할 응답의 수</td><td align="center">양의 정수 (기본값 1)</td></tr><tr><td align="center">Precense penalty</td><td align="center">이전에 언급되지 않은 주제를 모델이 탐색하도록 장려하는 매개변수값 지정</td><td align="center">범위 : -2.0 ~ 2.0 (기본값 0)</td></tr><tr><td align="center">데이터 반환 유형 선택</td><td align="center">응답 데이터 반환 형태 선택 (선택)</td><td align="center">선택안함<br>텍스트 : 응답값을 문자열로 반환<br>JSON Object : 응답값을 JSON Object 로 반환<br>JSON Schema : 응답값을 지정된 JSON 스키마 형태로 반환</td></tr><tr><td align="center">JSON Schema</td><td align="center">응답값을 원하는 JSON 객체로 받기 위한 설정 (선택)</td><td align="center">데이터 반환 유형을 JSON Schema 로 지정시 필수 지정<br>상세 내용 하단 참조</td></tr><tr><td align="center">서비스 등급 선택</td><td align="center">서비스 지연 시간 관련 설정  (선택)</td><td align="center">설정안함<br>Auto<br>Default</td></tr><tr><td align="center">응답 중단어 설정</td><td align="center">응답을 중단할 특정 단어 지정 (선택)</td><td align="center">다중 설정시 콤마(,) 로 구분 <br>예시) 중지,정지</td></tr><tr><td align="center">Temperature</td><td align="center">모델의 응답 생성 과정에서 무작위성 제어값 (선택)</td><td align="center">범위 : 0.0 ~ 2.0 (기본값 1)</td></tr><tr><td align="center">Top P</td><td align="center">응답 생성 시 확률분포 상위 p에 해당하는 단어만 샘플링에 포함하도록 제한하는 매개변수 값 (선택)</td><td align="center">범위 : 0.0 ~ 1.0 (기본값 1)</td></tr><tr><td align="center">외부 도구 설정</td><td align="center">모델이 호출 할 수 있는 함수 목록 지정 (선택)</td><td align="center">최대 128개까지 지원<br>상세 내용 하단 참조</td></tr><tr><td align="center">외부 도구 호출 여부 결정</td><td align="center">모델이 도구를 호출할 지 여부 결정 (선택)</td><td align="center">상세 내용 하단 참조</td></tr><tr><td align="center">다중 도구 실행 여부 선택</td><td align="center">병렬 도구 호출 활성화 여부 선택 (선택)</td><td align="center">설정안함<br>사용 <br>사용안함</td></tr><tr><td align="center">사용자명 입력</td><td align="center">엔드유저를 식별하는 고유 ID 설정 (선택)</td><td align="center"></td></tr></tbody></table>

## 메세지 내용 구성

메세지 내용은 메세지의 배열 형태로 구성되어 있으며 메세지의 구조는 다음과 같습니다.

<table><thead><tr><th width="173" align="center">항목명</th><th width="288" align="center">항목소개</th><th align="center">비고</th></tr></thead><tbody><tr><td align="center">content</td><td align="center">메세지 내용</td><td align="center"></td></tr><tr><td align="center">role</td><td align="center">메세지의 주체 또는 역할</td><td align="center"><ul><li>system: 대화를 생성할 AI 모델의 목적입니다.</li><li>user: 사용자가 AI에게 보내는 메시지나 질문을 나타냅니다. 이는 AI가 응답해야 할 실제 입력 내용입니다.</li><li>assistant: AI 모델이 생성한 응답을 나타냅니다. 이는 user의 입력에 대한 AI의 답변입니다.</li><li>developer : 개발자가 AI 모델에 전달하는 추가 정보입니다.</li></ul></td></tr></tbody></table>

### 메세지 내용 예시

```
[
  { 
    "role": "system",                          // 대화의 성격을 정의
    "content": "당신은 사용자에게 워크플로우 생성을 도와줍니다"
  },
  {
    "role": "assistant",                       // AI의 응답 예시
    "content": "반갑습니다 무엇을 도와드릴까요?"
  },
  {
    "role": "user",                             // AI 요청
    "content": "자동화 워크플로우에 대한 설명을 영어로 설명해줄래요?"
  },
  {
    "role": "developer",                        // 대화의 흐름 제어
    "content": "사용자가 워크플로우에 대한 설명을 영어로 해주길 원해. 번역을 부탁해."
  }
]
```

## 메타데이터&#x20;

사용자가 API 요청과 관련된 추가 정보를 저장할 수 있도록 제공되는 필드입니다.

### 메타데이터 예시

```
{
  "user_id": "c2453689-9888-4222-b870-fb36cbd8fa93" // 불투명 식별자로 구분 
}
```

## Logic Bias

특정 단어(또는 토큰)의 출현 확률을 강제적으로 조정할 수 있는 기능입니다.

### Logic Bias 예시

```
// Cat 이라는 단어를 더 많이 나오도록 설정할 때 
// Cat 의 토큰 ID 는 9240 
{
    "9240": 50 
}
// 값의 범위는 -100 ~ 100 이며 양수일 수록 단어 반복이 많아지며 음수일 경우 단어를 차단합니다.
```

## JSON Schema

모델이 특정 JSON 형식으로 응답하도록 강조하는 설정입니다.

```
{
  "type": "json_schema",
  "json_schema": {
  "type": "object",
  "properties": {  // 반환할 데이터 구조와 데이터 형태 지정 
    "temperature": { "type": "number" },
    "condition": { "type": "string" },
    "humidity": { "type": "integer" },
    "city": { "type": "string" }
  },
  "required": ["temperature", "condition", "city"] // 응답시 반드시 포함되어야 하는 값 지정 
}

// JSON Schema 지정 상태에서 응답 결과 예시 
{
  "temperature": 12.5,
  "condition": "맑음",
  "humidity": 60,
  "city": "서울"
}
```

## Tools

모델이 특정 기능(함수)을 호출하도록 허용하는 기능입니다.\
즉 모델이 직접 JSON 을 생성하여 API 를 호출하거나 외부 시스템과 상호작용이 가능합니다.

### Tools 예시

```
// 모델이 특정 도시의 현재 날씨를 가져오게 하는 도구 예시입니다. 

[
  {
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "특정 도시의 현재 날씨를 가져옵니다.",
      "parameters": {
        "type": "object",
        "properties": {  // 도구 속성 및 데이터타입을 지정합니다. 
          "city": { "type": "string", "description": "날씨를 조회할 도시 이름" },
          "unit": { "type": "string", "enum": ["metric", "imperial"], "description": "온도 단위 (metric = 섭씨, imperial = 화씨)" }
        },
        "required": ["city"] // 꼭 포함해야 할 속성값을 지정합니다. 
      }
    }
  }
]

// 대화 생성시 나오는 값 
{
  "model": "gpt-4-turbo",
  "messages": [
    { "role": "system", "content": "당신은 날씨 정보를 제공하는 AI입니다." },
    { "role": "user", "content": "서울의 날씨 알려줘" },
    {
      "role": "tool",                // 설정한 도구 호출 결과 값 반환 
      "tool_call_id": "123456",
      "name": "get_weather",
      "arguments": {
        "city": "서울",
        "unit": "metric"
      }
    },
    {
      "role": "assistant",
      "content": "현재 서울의 날씨는 맑고, 기온은 12°C입니다."
    }
  ]
}
```

## Tool Choice

모델이 어떤 방식으로 도구를 사용할지 결정하는 옵션입니다.

### Tool choice 옵션

| 옵션값                                                                                                   | 옵션값 설명                                               |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| auto                                                                                                  | <p>모델이 필요하면 툴을 호출하고, <br>필요 없으면 호출하지 않습니다. (기본값)</p> |
| none                                                                                                  | <p>모델이 절대 툴을 호출하지 않습니다. <br>(텍스트 응답만 가능)</p>         |
| required                                                                                              | 모델이 반드시 하나 이상의 툴을 호출해야 합니다.                          |
| <p>{<br>  "type": "function", <br>   "function": {<br>        "name": "my\_function"<br>   }<br>}</p> | 특정 툴 (my\_function)을 강제로 호출하도록 지정합니다.                |

***

## 실행 결과

| id                                                             | 응답 요청의 고유 식별자                                   |
| -------------------------------------------------------------- | ----------------------------------------------- |
| object                                                         | 응답 객체의 타입으로, GPT의 대화형 응답                        |
| created                                                        | 응답이 생성된 Unix 타임스탬프(초 단위)                        |
| model                                                          | 응답을 생성하는 데 사용된 GPT 모델의 이름                       |
| system\_fingerprint                                            | 시스템의 고유 지문(fingerprint)으로, 시스템 내부 로깅 및 추적을 위한 값 |
| choices\[].index                                               | 응답의 순서(index). 하나의 요청에 여러 응답이 있을 경우를 구분합니다      |
| choices\[].message.role                                        | 메시지를 생성한 주체의 역할(role)                           |
| choices\[].message.content                                     | 생성된 응답 내용                                       |
| choices\[].message.refusal                                     | 요청 거부 여부                                        |
| choices\[].logprobs                                            | 응답 생성 중 사용된 로그 확률 정보(log probabilities)         |
| choices\[].finish\_reason                                      | 응답 생성을 중단한 이유                                   |
| usage.prompt\_tokens                                           | 입력 프롬프트(prompt)에 사용된 토큰의 개수                     |
| usage.completion\_tokens                                       | 생성된 응답(completion)에 사용된 토큰의 개수                  |
| usage.total\_tokens                                            | 입력 프롬프트와 응답을 합한 총 토큰의 개수                        |
| usage.prompt\_tokens\_details.cached\_tokens                   | 캐시된 프롬프트 토큰 개수                                  |
| usage.completion\_tokens\_details.reasoning\_tokens            | 응답 생성 중 추론(reasoning)에 사용된 토큰 수                 |
| usage.completion\_tokens\_details.accepted\_prediction\_tokens | 모델이 예측한 결과 중 수락된 예측 토큰 수                        |
| usage.completion\_tokens\_details.rejected\_prediction\_tokens | 모델이 예측한 결과 중 거부된 예측 토큰 수                        |
