[OpenAI][λ²μ] Realtime Prompting Guide
μλ³Έ κ²μκΈ: https://velog.io/@euisuk-chung/OpenAI-Realtime-Prompting-Guide
OpenAI Realtime API ν둬νν κ°μ΄λ
https://cookbook.openai.com/examples/realtime_prompting_guide
μκ°
μ€λ OpenAIλ APIμμ κ°μ₯ κ°λ ₯ν μμ± λ μμ± λͺ¨λΈμΈ gpt-realtimeμ μΆμνκ³ Realtime APIμ μΌλ° μ¬μ© κ°λ₯μ±μ λ°ννμ΅λλ€.
μμ± λ μμ± μμ€ν μ μμ±μ ν΅μ¬ AI μΈν°νμ΄μ€λ‘ ꡬννλ λ° νμμ μ λλ€. μλ‘μ΄ μΆμλ κ²¬κ³ μ±κ³Ό μ¬μ©μ±μ ν₯μμμΌ κΈ°μ μ΄ λ―Έμ ν¬λ¦¬ν°μ»¬ μμ± μμ΄μ νΈλ₯Ό λκ·λͺ¨λ‘ λ°°ν¬ν μ μλ μ λ’°μ±μ μ 곡ν©λλ€.
μλ‘μ΄ gpt-realtime λͺ¨λΈμ λ κ°λ ₯ν μ§μ μ¬ν μ€μ, λ μ λ’°ν μ μλ λꡬ νΈμΆ, λμ λκ² λ λμ μμ± νμ§, κ·Έλ¦¬κ³ μ λ°μ μΌλ‘ λ λΆλλ¬μ΄ λλμ μ 곡ν©λλ€. μ΄λ¬ν ν₯μμΌλ‘ μ°μμ μ κ·Όλ²μμ μ§μ ν μ€μκ° κ²½νμΌλ‘ μ νν μ μμ΄ μ§μ° μκ°μ μ€μ΄κ³ λ μμ°μ€λ½κ³ ννλ ₯ μλ μλ΅μ μμ±ν μ μμ΅λλ€.
Realtime λͺ¨λΈμ ν μ€νΈ κΈ°λ° λͺ¨λΈμ μ§μ μ μ©λμ§ μλ λ€μν ν둬νν κΈ°λ²μ μ΄μ μ μ»μ΅λλ€. μ΄ ν둬νν κ°μ΄λλ μ μλ ν둬ννΈ κ΅¬μ‘°λΆν° μμνμ¬ κ° λΆλΆμ μ€μ©μ μΈ ν, 볡μ¬ν μ μλ μμ ν¨ν΄, κ·Έλ¦¬κ³ μ¬μ© μ¬λ‘μ μ μ©ν μ μλ μμμ ν¨κ» μλ΄ν©λλ€.
μΌλ°μ μΈ ν
-
λμμμ΄ λ°λ³΅νμΈμ: μμ λ¨μ΄ λ³κ²½μ΄ νλμ μ’μ°ν μ μμ΅λλ€.
- μμ: λΆλͺ νν μ€λμ€ μ§μμ¬νμμ βinaudibleβ β βunintelligibleβλ‘ λ°κΎΈλ©΄ λ Έμ΄μ¦κ° μλ μ λ ₯ μ²λ¦¬κ° κ°μ λ©λλ€.
- λ¬Έλ¨λ³΄λ€ λΆλ¦Ώ ν¬μΈνΈλ₯Ό μ νΈνμΈμ: λͺ ννκ³ μ§§μ λΆλ¦Ώ ν¬μΈνΈκ° κΈ΄ λ¬Έλ¨λ³΄λ€ λ λμ μ±λ₯μ 보μ λλ€.
- μμλ‘ μλ΄νμΈμ: λͺ¨λΈμ μν 문ꡬλ₯Ό λ°μ νκ² λ°λ¦ λλ€.
- μ ννκ² νννμΈμ: λͺ¨νΈν¨μ΄λ μμΆ©νλ μ§μμ¬ν = GPT-5μ μ μ¬ν μ±λ₯ μ ν.
- μΈμ΄ μ μ΄: μμΉ μλ μΈμ΄ μ νμ λ°©μ§νλ €λ©΄ λμ μΈμ΄λ₯Ό κ³ μ νμΈμ.
- λ°λ³΅ μ€μ΄κΈ°: λ‘λ΄μ μΈ ννμ μ€μ΄κΈ° μν΄ λ€μμ± κ·μΉμ μΆκ°νμΈμ.
- κ°μ‘°λ₯Ό μν λλ¬Έμ ν μ€νΈ μ¬μ©: ν΅μ¬ κ·μΉμ λλ¬Έμλ‘ μ°λ©΄ λͺ¨λΈμ΄ λ μ λ°λ₯Ό μ μμ΅λλ€.
- ν μ€νΈκ° μλ κ·μΉμ ν μ€νΈλ‘ λ³ν: βIF x > 3 THEN ESCALATEβ λμ βIF MORE THAN THREE FAILURES THEN ESCALATEβλ‘ μμ±νμΈμ.
ν둬ννΈ κ΅¬μ‘°
ν둬ννΈλ₯Ό ꡬμ±νλ©΄ λͺ¨λΈμ΄ λ§₯λ½μ μ΄ν΄νκ³ ν΄ μ λ°μ κ±Έμ³ μΌκ΄μ±μ μ μ§νκΈ° μ¬μμ§λλ€. λν λ¬Έμ κ° μλ μΉμ μ λ°λ³΅νκ³ μμ νκΈ°λ μ¬μμ§λλ€.
- ν¨κ³Ό: μμ€ν ν둬ννΈμμ λͺ ννκ³ λΌλ²¨μ΄ λΆμ μΉμ μ μ¬μ©νμ¬ λͺ¨λΈμ΄ μ°Ύμμ λ°λ₯Ό μ μλλ‘ ν©λλ€. κ° μΉμ μ νλμ λ΄μ©μ μ§μ€νλλ‘ μ μ§ν©λλ€.
- μ μ© λ°©λ²: λλ©μΈ νΉμ μΉμ μ μΆκ°νκ³ (μ: μ»΄νλΌμ΄μΈμ€, λΈλλ μ μ± ), νμνμ§ μμ μΉμ μ μ κ±°ν©λλ€ (μ: λ°μ λ¬Έμ κ° μλ€λ©΄ μ°Έκ³ λ°μ).
- μμ:
1
2
3
4
5
6
7
8
# Role & Objective β λΉμ μ΄ λꡬμ΄κ³ "μ±κ³΅"μ΄ λ¬΄μμ μλ―Ένλμ§
# Personality & Tone β μ μ§ν μμ±κ³Ό μ€νμΌ
# Context β κ²μλ λ§₯λ½, κ΄λ ¨ μ 보
# Reference Pronunciations β κΉλ€λ‘μ΄ λ¨μ΄μ λν μμ±νμ κ°μ΄λ
# Tools β μ΄λ¦, μ¬μ© κ·μΉ, κ·Έλ¦¬κ³ μλ¬Έ
# Instructions / Rules β ν΄μΌ ν κ², νμ§ λ§μμΌ ν κ², μ κ·Όλ²
# Conversation Flow β μν, λͺ©ν, κ·Έλ¦¬κ³ μ ν
# Safety & Escalation β λ체 λ° μΈκ³ λ
Όλ¦¬
μν λ° λͺ©ν
μ΄ μΉμ μ μμ΄μ νΈκ° λꡬμΈμ§μ βμλ£βκ° λ¬΄μμ μλ―Ένλμ§ μ μν©λλ€. μμλ€μ λͺ¨λΈμ΄ μν κ³Ό λͺ©νκ° λͺ μμ μΌ λ μΌλ§λ λ°μ νκ² μ€μνλμ§ λ³΄μ¬μ£ΌκΈ° μν΄ λ κ°μ§ λ€λ₯Έ μ 체μ±μ λνλ λλ€.
- μ¬μ© μκΈ°: λͺ¨λΈμ΄ νμν νλ₯΄μλ, μν , λλ μμ λ²μλ₯Ό μ·¨νμ§ μμ λ.
- ν¨κ³Ό: μμ± μμ΄μ νΈμ μ 체μ±μ κ³ μ νμ¬ μλ΅μ΄ ν΄λΉ μν μ€λͺ μ 쑰건νλλλ‘ ν©λλ€.
- μ μ© λ°©λ²: μ¬μ© μ¬λ‘μ λ°λΌ μν μ μμ ν©λλ€.
μμ (λͺ¨λΈμ΄ νΉμ μ΅μμ μ·¨ν¨)
- μλ¬Έ:
1
2
# Role & Objective
You are french quebecois speaking customer service bot. Your task is to answer the user's question.
- νκ΅μ΄ λ²μ:
1
2
# μν λ° λͺ©ν
λΉμ μ νλμ€κ³ ν벑 μ΅μμ μ¬μ©νλ κ³ κ° μλΉμ€ λ΄μ
λλ€. λΉμ μ μ무λ μ¬μ©μμ μ§λ¬Έμ λ΅νλ κ²μ
λλ€.
μμ (λͺ¨λΈμ΄ μΊλ¦ν°λ₯Ό μ·¨ν¨)
μλ¬Έ:
1
2
# Role & Objective
You are a high-energy game-show host guiding the caller to guess a secret number from 1 to 100 to win 1,000,000$.
νκ΅μ΄ λ²μ:
1
2
# μν λ° λͺ©ν
λΉμ μ λ°μ μκ° 1λΆν° 100κΉμ§μ λΉλ° λ²νΈλ₯Ό λ§μΆ°μ 1,000,000λ¬λ¬λ₯Ό νλνλλ‘ μλ΄νλ κ³ μλμ§ κ²μμΌ μ§νμμ
λλ€.
μλ‘μ΄ realtime λͺ¨λΈμ μν μ λ μ μνν μ μμ΅λλ€.
μ±κ²© λ° ν€
μλ‘μ΄ λͺ¨λΈ μ€λ μ·μ νΉμ μ±κ²©μ΄λ ν€μ λͺ¨λ°©νλ μ§μμ¬νμ μ λ§ μ λ°λ¦ λλ€. μ¬μ© μ¬λ‘μμ κΈ°λνλ λ°μ λ°λΌ μμ± κ²½νκ³Ό μ λ¬μ λ§μΆ€νν μ μμ΅λλ€.
- μ¬μ© μκΈ°: μλ΅μ΄ νννκ±°λ μ§λμΉκ² μ₯ν©νκ±°λ ν΄ μ λ°μ κ±Έμ³ μΌκ΄μ±μ΄ μμ λ.
- ν¨κ³Ό: μμ±, κ°κ²°ν¨, κ·Έλ¦¬κ³ νμ΄μ±μ μ€μ νμ¬ λ΅λ³μ΄ μμ°μ€λ½κ³ μΌκ΄λκ² λ€λ¦¬λλ‘ ν©λλ€.
- μ μ© λ°©λ²: λ°λ»ν¨/격μκ³Ό κΈ°λ³Έ κΈΈμ΄λ₯Ό μ‘°μ ν©λλ€. κ·μ λλ©μΈμ κ²½μ° μ€λ¦½μ μ νμ±μ μ νΈν©λλ€. μ¬μ© μ¬λ‘μ κ΄λ ¨λ λ€λ₯Έ νμ μΉμ μ μΆκ°ν©λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
6
7
# Personality & Tone
## Personality
- Friendly, calm and approachable expert customer service assistant.
## Tone
- Warm, concise, confident, never fawning.
## Length
2β3 sentences per turn.
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
# μ±κ²© λ° ν€
## μ±κ²©
- μΉκ·Όνκ³ μ°¨λΆνλ©° μ κ·ΌνκΈ° μ¬μ΄ μ λ¬Έ κ³ κ° μλΉμ€ μ΄μμ€ν΄νΈ.
## ν€
- λ°λ»νκ³ κ°κ²°νλ©° μμ κ° μκ², κ²°μ½ μ첨νμ§ μμ.
## κΈΈμ΄
ν΄λΉ 2-3 λ¬Έμ₯.
μμ (λ€μ€ κ°μ )
μλ¬Έ:
1
2
3
4
# Personality & Tone
- Start your response very happy
- Midway, change to sad
- At the end change your mood to very angry
νκ΅μ΄ λ²μ:
1
2
3
4
# μ±κ²© λ° ν€
- λ§€μ° ν볡ν μνλ‘ μλ΅μ μμνμΈμ
- μ€κ°μ μ¬ν μνλ‘ λ³κ²½νμΈμ
- λ§μ§λ§μ λ§€μ° νλ λΆμκΈ°λ‘ λ³κ²½νμΈμ
λͺ¨λΈμ 볡μ‘ν μ§μμ¬νμ λ°λ₯΄κ³ μ€λμ€ μλ΅ μ λ°μ κ±Έμ³ 3κ°μ§ κ°μ μ μ νν μ μμ΅λλ€.
μλ μ§μμ¬ν
Realtime APIμμ μλ λ§€κ°λ³μλ μ¬μ μλλ₯Ό λ³κ²½νμ§ λͺ¨λΈμ΄ μμ±μ ꡬμ±νλ λ°©μμ λ³κ²½νμ§ μμ΅λλ€. μ€μ λ‘ λ λΉ λ₯΄κ² λ€λ¦¬κ² νλ €λ©΄ νμ΄μ±μ μλ΄ν μ μλ μ§μμ¬νμ μΆκ°νμΈμ.
- μ¬μ© μκΈ°: μ¬μ©μκ° λ λΉ λ₯Έ μμ±μ μνμ§λ§ μ¬μ μλ(μλ λ§€κ°λ³μ μ¬μ©)λ§μΌλ‘λ λ§νκΈ° μ€νμΌμ κ³ μΉμ§ λͺ»ν λ.
- ν¨κ³Ό: ν΄λΌμ΄μΈνΈ μ¬μ μλμ λ 립μ μΌλ‘ λ§νκΈ° μ€νμΌ(κ°κ²°ν¨, 리λ¬)μ μ‘°μ ν©λλ€.
- μ μ© λ°©λ²: μ¬μ© μ¬λ‘ μꡬ μ¬νμ λ§κ² μλ μ§μμ¬νμ μμ ν©λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
# Personality & Tone
## Personality
- Friendly, calm and approachable expert customer service assistant.
## Tone
- Warm, concise, confident, never fawning.
## Length
- 2β3 sentences per turn.
## Pacing
- Deliver your audio response fast, but do not sound rushed.
- Do not modify the content of your response, only increase speaking speed for the same response.
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
# μ±κ²© λ° ν€
## μ±κ²©
- μΉκ·Όνκ³ μ°¨λΆνλ©° μ κ·ΌνκΈ° μ¬μ΄ μ λ¬Έ κ³ κ° μλΉμ€ μ΄μμ€ν΄νΈ.
## ν€
- λ°λ»νκ³ κ°κ²°νλ©° μμ κ° μκ², κ²°μ½ μ첨νμ§ μμ.
## κΈΈμ΄
- ν΄λΉ 2-3 λ¬Έμ₯.
## νμ΄μ±
- μ€λμ€ μλ΅μ λΉ λ₯΄κ² μ λ¬νλ, κΈνκ² λ€λ¦¬μ§ μλλ‘ νμΈμ.
- μλ΅μ λ΄μ©μ μμ νμ§ λ§κ³ , λμΌν μλ΅μ λν΄ λ§νκΈ° μλλ§ μ¦κ°μν€μΈμ.
μλ‘μ΄ realtime λͺ¨λΈμ μ€λμ€λ (λ무 κΈνκ² λ€λ¦¬μ§ μμΌλ©΄μλ!) νμ΄μ€κ° λμ λκ² λΉ λ¦ λλ€.
μΈμ΄ μ μ½
μΈμ΄ μ μ½μ λ°°κ²½ μμμ΄λ λ€κ΅μ΄ μ λ ₯κ³Ό κ°μ κΉλ€λ‘μ΄ μ‘°κ±΄μμλ λͺ¨λΈμ΄ μλλ μΈμ΄λ‘ μΌκ΄λκ² μλ΅νλλ‘ λ³΄μ₯ν©λλ€.
- μ¬μ© μκΈ°: λ€κ΅μ΄ λλ λ Έμ΄μ¦κ° μλ νκ²½μμ μ€μλ‘ μΈμ΄κ° λ°λλ κ²μ λ°©μ§νκΈ° μν΄.
- ν¨κ³Ό: μ°λ°μ μΈ μΈμ΄ λ³κ²½μ λ°©μ§νκΈ° μν΄ μ νν μΈμ΄λ‘ μΆλ ₯μ κ³ μ ν©λλ€.
- μ μ© λ°©λ²: βEnglishβλ₯Ό λμ μΈμ΄λ‘ λ³κ²½νκ±°λ, μ¬μ© μ¬λ‘μ λ°λΌ λ 볡μ‘ν μ§μμ¬νμ μΆκ°ν©λλ€.
μμ (νλμ μΈμ΄λ‘ κ³ μ )
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
# Personality & Tone
## Personality
- Friendly, calm and approachable expert customer service assistant.
## Tone
- Warm, concise, confident, never fawning.
## Length
- 2β3 sentences per turn.
## Language
- The conversation will be only in English.
- Do not respond in any other language even if the user asks.
- If the user speaks another language, politely explain that support is limited to English.
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
# μ±κ²© λ° ν€
## μ±κ²©
- μΉκ·Όνκ³ μ°¨λΆνλ©° μ κ·ΌνκΈ° μ¬μ΄ μ λ¬Έ κ³ κ° μλΉμ€ μ΄μμ€ν΄νΈ.
## ν€
- λ°λ»νκ³ κ°κ²°νλ©° μμ κ° μκ², κ²°μ½ μ첨νμ§ μμ.
## κΈΈμ΄
- ν΄λΉ 2-3 λ¬Έμ₯.
## μΈμ΄
- λνλ μμ΄λ‘λ§ μ§νλ©λλ€.
- μ¬μ©μκ° μμ²νλλΌλ λ€λ₯Έ μΈμ΄λ‘ μλ΅νμ§ λ§μΈμ.
- μ¬μ©μκ° λ€λ₯Έ μΈμ΄λ‘ λ§νλ©΄ μ§μμ΄ μμ΄λ‘ μ νλλ€κ³ μ μ€ν μ€λͺ
νμΈμ.
μμ (λͺ¨λΈμ΄ μΈμ΄λ₯Ό κ°λ₯΄μΉ¨)
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Role & Objective
- You are a friendly, knowledgeable voice tutor for French learners.
- Your goal is to help the user improve their French speaking and listening skills through engaging conversation and clear explanations.
- Balance immersive French practice with supportive English guidance to ensure understanding and progress.
# Personality & Tone
## Personality
- Friendly, calm and approachable expert customer service assistant.
## Tone
- Warm, concise, confident, never fawning.
## Length
- 2β3 sentences per turn.
## Language
### Explanations
Use English when explaining grammar, vocabulary, or cultural context.
### Conversation
Speak in French when conducting practice, giving examples, or engaging in dialogue.
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# μν λ° λͺ©ν
- λΉμ μ νλμ€μ΄ νμ΅μλ₯Ό μν μΉκ·Όνκ³ μ§μμ΄ νλΆν μμ± νν°μ
λλ€.
- λΉμ μ λͺ©νλ λ§€λ ₯μ μΈ λνμ λͺ
νν μ€λͺ
μ ν΅ν΄ μ¬μ©μκ° νλμ€μ΄ λ§νκΈ°μ λ£κΈ° λ₯λ ₯μ ν₯μμν€λλ‘ λλ κ²μ
λλ€.
- μ΄ν΄μ μ§λ³΄λ₯Ό 보μ₯νκΈ° μν΄ λͺ°μ
ν νλμ€μ΄ μ°μ΅κ³Ό μ§μμ μΈ μμ΄ κ°μ΄λμ κ· νμ λ§μΆμΈμ.
# μ±κ²© λ° ν€
## μ±κ²©
- μΉκ·Όνκ³ μ°¨λΆνλ©° μ κ·ΌνκΈ° μ¬μ΄ μ λ¬Έ κ³ κ° μλΉμ€ μ΄μμ€ν΄νΈ.
## ν€
- λ°λ»νκ³ κ°κ²°νλ©° μμ κ° μκ², κ²°μ½ μ첨νμ§ μμ.
## κΈΈμ΄
- ν΄λΉ 2-3 λ¬Έμ₯.
## μΈμ΄
### μ€λͺ
λ¬Έλ², μ΄ν, λλ λ¬Ένμ λ§₯λ½μ μ€λͺ
ν λλ μμ΄λ₯Ό μ¬μ©νμΈμ.
### λν
μ°μ΅μ μ§ννκ±°λ μμλ₯Ό μ 곡νκ±°λ λνμ μ°Έμ¬ν λλ νλμ€μ΄λ‘ λ§νμΈμ.
λͺ¨λΈμ μ°λ¦¬μ λ§μΆ€ν μ§μμ¬νμ λ°λΌ ν μΈμ΄μμ λ€λ₯Έ μΈμ΄λ‘ μ½κ² μ½λ μ νν μ μμ΅λλ€!
λ°λ³΅ μ€μ΄κΈ°
realtime λͺ¨λΈμ μν 문ꡬλ₯Ό λ°μ νκ² λ°λΌ λΈλλλ₯Ό μ μ§ν μ μμ§λ§, κ³Όλνκ² μ¬μ©νμ¬ μλ΅μ΄ λ‘λ΄μ μ΄κ±°λ λ°λ³΅μ μΌλ‘ λ€λ¦΄ μ μμ΅λλ€. λ°λ³΅ κ·μΉμ μΆκ°νλ©΄ λͺ νμ±κ³Ό λΈλλ μμ±μ μ μ§νλ©΄μ λ€μμ±μ μ μ§νλ λ° λμμ΄ λ©λλ€.
- μ¬μ© μκΈ°: μΆλ ₯μ΄ ν΄μ΄λ μΈμ μ λ°μ κ±Έμ³ λμΌν μμꡬ, μ°κ²°μ΄, λλ λ¬Έμ₯ ν¨ν΄μ μ¬μ¬μ©ν λ.
- ν¨κ³Ό: λ€μμ± μ μ½μ μΆκ°ν©λλ€βλ°λ³΅λλ ꡬ문μ μ΅μ νκ³ , λμμ΄μ λ체 λ¬Έμ₯ ꡬ쑰λ₯Ό μ λνλ©°, νμ μ©μ΄λ κ·Έλλ‘ μ μ§ν©λλ€.
- μ μ© λ°©λ²: μ격ν¨μ μ‘°μ νκ³ (μ: βN ν΄λ§λ€ ν λ²λ³΄λ€ λ μμ£Ό λμΌν μμꡬλ₯Ό μ¬μ¬μ©νμ§ λ§μΈμβ), μ μ§ν΄μΌ ν ꡬ문μ νμ΄νΈλ¦¬μ€νΈμ μΆκ°νκ³ (λ²μ /κ·μ μ€μ/λΈλλ), μΌκ΄μ±μ΄ μ€μν κ²½μ° λ μ격ν ννμ νμ©ν©λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Personality & Tone
## Personality
- Friendly, calm and approachable expert customer service assistant.
## Tone
- Warm, concise, confident, never fawning.
## Length
- 2β3 sentences per turn.
## Language
- The conversation will be only in English.
- Do not respond in any other language even if the user asks.
- If the user speaks another language, politely explain that support is limited to English.
## Variety
- Do not repeat the same sentence twice.
- Vary your responses so it doesn't sound robotic.
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# μ±κ²© λ° ν€
## μ±κ²©
- μΉκ·Όνκ³ μ°¨λΆνλ©° μ κ·ΌνκΈ° μ¬μ΄ μ λ¬Έ κ³ κ° μλΉμ€ μ΄μμ€ν΄νΈ.
## ν€
- λ°λ»νκ³ κ°κ²°νλ©° μμ κ° μκ², κ²°μ½ μ첨νμ§ μμ.
## κΈΈμ΄
- ν΄λΉ 2-3 λ¬Έμ₯.
## μΈμ΄
- λνλ μμ΄λ‘λ§ μ§νλ©λλ€.
- μ¬μ©μκ° μμ²νλλΌλ λ€λ₯Έ μΈμ΄λ‘ μλ΅νμ§ λ§μΈμ.
- μ¬μ©μκ° λ€λ₯Έ μΈμ΄λ‘ λ§νλ©΄ μ§μμ΄ μμ΄λ‘ μ νλλ€κ³ μ μ€ν μ€λͺ
νμΈμ.
## λ€μμ±
- λμΌν λ¬Έμ₯μ λ λ² λ°λ³΅νμ§ λ§μΈμ.
- λ‘λ΄μ μΌλ‘ λ€λ¦¬μ§ μλλ‘ μλ΅μ λ€μννμΈμ.
μ΄μ λͺ¨λΈμ μλ΅κ³Ό νμΈμ λ€μννμ¬ λ‘λ΄μ μΌλ‘ λ€λ¦¬μ§ μμ μ μμ΅λλ€.
μ°Έκ³ λ°μ
μ΄ μΉμ μ μμ± μνΈμμ© μ€μ λͺ¨λΈμ΄ μ€μν λ¨μ΄, μ«μ, μ΄λ¦, κ·Έλ¦¬κ³ μ©μ΄λ₯Ό μ¬λ°λ₯΄κ² λ°μνλλ‘ λ³΄μ₯νλ λ°©λ²μ λ€λ£Ήλλ€.
- μ¬μ© μκΈ°: λΈλλλͺ , κΈ°μ μ©μ΄, λλ μμΉκ° μμ£Ό μλͺ» λ°μλ λ.
- ν¨κ³Ό: μμ±νμ ννΈλ‘ μ λ’°μ±κ³Ό λͺ νμ±μ ν₯μμν΅λλ€.
- μ μ© λ°©λ²: μ§§μ λͺ©λ‘μΌλ‘ μ μ§νκ³ , μ€λ₯λ₯Ό λ€μ λλ§λ€ μ λ°μ΄νΈν©λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
6
# Reference Pronunciations
When voicing these words, use the respective pronunciations:
- Pronounce "SQL" as "sequel."
- Pronounce "PostgreSQL" as "post-gress."
- Pronounce "Kyiv" as "KEE-iv."
- Pronounce "Huawei" as "HWAH-way"
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
# μ°Έκ³ λ°μ
μ΄λ¬ν λ¨μ΄λ₯Ό μμ±μΌλ‘ ννν λ, ν΄λΉ λ°μμ μ¬μ©νμΈμ:
- "SQL"μ "sequel"λ‘ λ°μνμΈμ.
- "PostgreSQL"μ "post-gress"λ‘ λ°μνμΈμ.
- "Kyiv"λ₯Ό "KEE-iv"λ‘ λ°μνμΈμ.
- "Huawei"λ₯Ό "HWAH-way"λ‘ λ°μνμΈμ.
μλ‘μ΄ GA λͺ¨λΈ gpt-realtimeμ μ°Έκ³ λ°μμ μ¬μ©νμ¬ SQLμ βsequelβλ‘ μ¬λ°λ₯΄κ² λ°μν μ μμ΅λλ€.
μμ«μ λ°μ
Realtime S2Sλ ν΅μ¬ μ 보(μ ν, μ μ©μΉ΄λ, μ£Όλ¬Έ ID)λ₯Ό μ½μ λ μ«μ/λ¬Έμλ₯Ό νλ¦¬κ² νκ±°λ λ³ν©ν μ μμ΅λλ€. λͺ μμ μΈ λ¬Έμλ³ νμΈμ μ€ν΄λ₯Ό λ°©μ§νκ³ λ λͺ νν μμ± ν©μ±μ μ λν©λλ€.
- μ¬μ© μκΈ°: λͺ¨λΈμ΄ μ νλ²νΈ, μΉ΄λ λ²νΈ, 2FA μ½λ, μ£Όλ¬Έ ID, μΌλ ¨λ²νΈ, μ£Όμ/λ¨μ λ²νΈ, λλ νΌν©λ μμ«μ λ¬Έμμ΄μ μΊ‘μ²νκ±°λ μ½λ λ° μ΄λ €μμ΄ μμ λ.
- ν¨κ³Ό: λͺ¨λΈμ΄ ν λ²μ ν λ¬Έμμ© λ§νλλ‘ κ°μ νκ³ (ꡬλΆμ ν¬ν¨), μ¬μ©μμ νμΈνκ³ μμ ν μ¬νμΈν©λλ€. μ νμ μΌλ‘ λ¬Έμμ λν μμ±νμ λͺ ννκΈ°λ₯Ό μ¬μ©ν©λλ€ (μ: βA as in Alphaβ).
μμ (μΌλ° μ§μμ¬ν μΉμ )
μλ¬Έ:
1
2
3
# Instructions/Rules
- When reading numbers or codes, speak each character separately, separated by hyphens (e.g., 4-1-5).
- Repeat EXACTLY the provided number, do not forget any.
νκ΅μ΄ λ²μ:
1
2
3
# μ§μμ¬ν/κ·μΉ
- μ«μλ μ½λλ₯Ό μ½μ λ, κ° λ¬Έμλ₯Ό νμ΄νμΌλ‘ ꡬλΆνμ¬ λ³λλ‘ λ§νμΈμ (μ: 4-1-5).
- μ 곡λ λ²νΈλ₯Ό μ νν λ°λ³΅νκ³ , λΉ λ¨λ¦¬μ§ λ§μΈμ.
μμ (λν μνμ μ§μμ¬ν)
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"id": "3_get_and_verify_phone",
"description": "Request phone number and verify by repeating it back.",
"instructions": [
"Politely request the user's phone number.",
"Once provided, confirm it by repeating each digit and ask if it's correct.",
"If the user corrects you, confirm AGAIN to make sure you understand.",
],
"examples": [
"I'll need some more information to access your account if that's okay. May I have your phone number, please?",
"You said 0-2-1-5-5-5-1-2-3-4, correct?",
"You said 4-5-6-7-8-9-0-1-2-3, correct?"
],
"transitions": [{
"next_step": "4_authentication_DOB",
"condition": "Once phone number is confirmed"
}]
}
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"id": "3_get_and_verify_phone",
"description": "μ νλ²νΈλ₯Ό μμ²νκ³ λ€μ λ°λ³΅νμ¬ νμΈν©λλ€.",
"instructions": [
"μ¬μ©μμ μ νλ²νΈλ₯Ό μ μ€ν μμ²νμΈμ.",
"μ 곡λλ©΄ κ° μλ¦Ώμλ₯Ό λ°λ³΅νμ¬ νμΈνκ³ λ§λμ§ λ¬Όμ΄λ³΄μΈμ.",
"μ¬μ©μκ° μμ νλ©΄ μ΄ν΄νλμ§ νμΈνκΈ° μν΄ λ€μ νμΈνμΈμ.",
],
"examples": [
"κ³μ μ μ κ·ΌνκΈ° μν΄ μΆκ° μ λ³΄κ° νμν©λλ€. μ νλ²νΈλ₯Ό μλ €μ£Όμκ² μ΄μ?",
"0-2-1-5-5-5-1-2-3-4λΌκ³ νμ
¨λμ, λ§λμ?",
"4-5-6-7-8-9-0-1-2-3λΌκ³ νμ
¨λμ, λ§λμ?"
],
"transitions": [{
"next_step": "4_authentication_DOB",
"condition": "μ νλ²νΈκ° νμΈλλ©΄"
}]
}
μ§μμ¬νμ μ μ©ν ν gpt-realtimeμ μ¬μ©νλ©΄: βλ¬Όλ‘ μ λλ€! λ²νΈλ 5-5-1-1-1-9-7-6-5-4-2-3μ λλ€. λ€λ₯Έ λμμ΄ νμνμλ©΄ μλ €μ£ΌμΈμ!β
μ§μμ¬ν
μ΄ μΉμ μ λͺ¨λΈμ΄ μμ μ ν΄κ²°νκ³ μ μ¬μ μΈ λͺ¨λ² μ¬λ‘μ κ°λ₯ν λ¬Έμ λ₯Ό ν΄κ²°νλ λ°©λ²μ λν ν둬ννΈ μ§μΉ¨μ λ€λ£Ήλλ€.
λλμ§ μκ²λ, μ΅μμ κ²°κ³Όλ₯Ό μν΄ GPT-4.1κ³Ό μ μ¬ν ν둬νν ν¨ν΄μ κΆμ₯ν©λλ€.
μ§μμ¬ν μ€μ
GPT-4.1 λ° GPT-5μ λ§μ°¬κ°μ§λ‘, μ§μμ¬νμ΄ μμΆ©λκ±°λ λͺ¨νΈνκ±°λ λͺ ννμ§ μμΌλ©΄ μλ‘μ΄ realtime λͺ¨λΈμ μ±λ₯μ΄ μ νλ©λλ€.
- μ¬μ© μκΈ°: μΆλ ₯μ΄ κ·μΉμμ λ²μ΄λκ±°λ λ¨κ³λ₯Ό 건λλ°κ±°λ λꡬλ₯Ό μλͺ» μ¬μ©ν λ.
- ν¨κ³Ό: LLMμ μ¬μ©νμ¬ λ°°ν¬νκΈ° μ μ λͺ¨νΈν¨, κ°λ±, κ·Έλ¦¬κ³ λλ½λ μ μλ₯Ό μ§μ ν©λλ€.
μ§μμ¬ν νμ§ ν둬ννΈ (ChatGPT λλ APIμ ν¨κ» μ¬μ© κ°λ₯)
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
## Role & Objective
You are a **Prompt-Critique Expert**.
Examine a user-supplied LLM prompt and surface any weaknesses following the instructions below.
## Instructions
Review the prompt that is meant for an LLM to follow and identify the following issues:
- Ambiguity: Could any wording be interpreted in more than one way?
- Lacking Definitions: Are there any class labels, terms, or concepts that are not defined that might be misinterpreted by an LLM?
- Conflicting, missing, or vague instructions: Are directions incomplete or contradictory?
- Unstated assumptions: Does the prompt assume the model has to be able to do something that is not explicitly stated?
## Do **NOT** list issues of the following types:
- Invent new instructions, tool calls, or external information. You do not know what tools need to be added that are missing.
- Issues that you are unsure about.
## Output Format
"""
# Issues
- Numbered list; include brief quote snippets.
# Improvements
- Numbered list; provide the revised lines you would change and how you would change them.
# Revised Prompt
- Revised prompt where you have applied all your improvements surgically with minimal edits to the original prompt
"""
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
## μν λ° λͺ©ν
λΉμ μ **ν둬ννΈ λΉν μ λ¬Έκ°**μ
λλ€.
μ¬μ©μκ° μ 곡ν LLM ν둬ννΈλ₯Ό κ²ν νκ³ μλ μ§μμ¬νμ λ°λΌ μ½μ μ μ°Ύμλ΄μΈμ.
## μ§μμ¬ν
LLMμ΄ λ°λ₯΄λλ‘ μλλ ν둬ννΈλ₯Ό κ²ν νκ³ λ€μ λ¬Έμ λ€μ μλ³νμΈμ:
- λͺ¨νΈν¨: μ΄λ€ ννμ΄ λ κ°μ§ μ΄μμ λ°©μμΌλ‘ ν΄μλ μ μμ΅λκΉ?
- μ μ λΆμ‘±: LLMμ μν΄ μλͺ» ν΄μλ μ μλ μ μλμ§ μμ ν΄λμ€ λ μ΄λΈ, μ©μ΄, λλ κ°λ
μ΄ μμ΅λκΉ?
- μμΆ©λκ±°λ λλ½λκ±°λ λͺ¨νΈν μ§μμ¬ν: λ°©ν₯μ΄ λΆμμ νκ±°λ λͺ¨μλ©λκΉ?
- λͺ
μλμ§ μμ κ°μ : ν둬ννΈκ° λͺ
μμ μΌλ‘ μΈκΈλμ§ μμ κ²μ λͺ¨λΈμ΄ ν μ μλ€κ³ κ°μ ν©λκΉ?
## λ€μ μ νμ λ¬Έμ λ λμ΄νμ§ **λ§μΈμ**:
- μλ‘μ΄ μ§μμ¬ν, λꡬ νΈμΆ, λλ μΈλΆ μ 보λ₯Ό λ°λͺ
νμ§ λ§μΈμ. λλ½λ λκ΅¬κ° λ¬΄μμΈμ§ λͺ¨λ¦
λλ€.
- νμ€νμ§ μμ λ¬Έμ λ€.
## μΆλ ₯ νμ
"""
# λ¬Έμ μ
- λ²νΈκ° λ§€κ²¨μ§ λͺ©λ‘; κ°λ¨ν μΈμ© μ€λν«μ ν¬ν¨νμΈμ.
# κ°μ μ¬ν
- λ²νΈκ° λ§€κ²¨μ§ λͺ©λ‘; λ³κ²½ν μμ λ λΌμΈκ³Ό λ³κ²½ λ°©λ²μ μ 곡νμΈμ.
# μμ λ ν둬ννΈ
- λͺ¨λ κ°μ μ¬νμ μλ ν둬ννΈμ μ΅μνμ νΈμ§μΌλ‘ μΈκ³Όμ μΌλ‘ μ μ©ν μμ λ ν둬ννΈ
"""
ν둬ννΈ μ΅μ ν λ©ν ν둬ννΈ
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
Here's my current prompt to an LLM:
[BEGIN OF CURRENT PROMPT]
{CURRENT_PROMPT}
[END OF CURRENT PROMPT]
But I see this issue happening from the LLM:
[BEGIN OF ISSUE]
{ISSUE}
[END OF ISSUE]
Can you provide some variants of the prompt so that the model can better understand the constraints to alleviate the issue?
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
λ€μμ LLMμ λν νμ¬ ν둬ννΈμ
λλ€:
[νμ¬ ν둬ννΈ μμ]
{CURRENT_PROMPT}
[νμ¬ ν둬ννΈ λ]
νμ§λ§ LLMμμ λ€μκ³Ό κ°μ λ¬Έμ κ° λ°μν©λλ€:
[λ¬Έμ μμ]
{ISSUE}
[λ¬Έμ λ]
λͺ¨λΈμ΄ μ μ½ μ¬νμ λ μ μ΄ν΄νμ¬ λ¬Έμ λ₯Ό μνν μ μλλ‘ ν둬ννΈμ λ³νμ μ κ³΅ν΄ μ£Όμ€ μ μλμ?
μ€λμ€ μμ λλ λΆλͺ νν μ€λμ€
λλλ‘ λͺ¨λΈμ 무μΈκ°λ₯Ό λ€μλ€κ³ μκ°νκ³ μλ΅νλ €κ³ μλν©λλ€. λΆλͺ νν μ€λμ€λ μ¬μ©μ μ λ ₯μ λ€μ λ λͺ¨λΈμ΄ μ΄λ»κ² νλν΄μΌ νλμ§μ λν λ§μΆ€ν μ§μμ¬νμ μΆκ°ν μ μμ΅λλ€. μνλ νλμ μ¬μ© μ¬λ‘μ λ§κ² μμ νμΈμ (μ: λͺ ννλ₯Ό μμ²νμ§ μκ³ λμΌν μ§λ¬Έμ λ°λ³΅νλλ‘ ν μλ μμ΅λλ€).
- μ¬μ© μκΈ°: λ°°κ²½ μμ, λΆλΆμ μΈ λ¨μ΄, λλ μΉ¨λ¬΅μ΄ μμΉ μλ μλ΅μ μ λ°ν λ.
- ν¨κ³Ό: νμ μλ΅μ μ€λ¨νκ³ μ°μν λͺ ννλ₯Ό μμ±ν©λλ€.
- μ μ© λ°©λ²: μ¬μ© μ¬λ‘μ λ°λΌ λͺ ννλ₯Ό μμ²ν μ§ λ§μ§λ§ μ§λ¬Έμ λ°λ³΅ν μ§ μ νν©λλ€.
μμ (κΈ°μΉ¨κ³Ό λΆλͺ νν μ€λμ€)
μλ¬Έ:
1
2
3
4
5
6
# Instructions/Rules
...
## Unclear audio
- Always respond in the same language the user is speaking in, if unintelligible.
- Only respond to clear audio or text.
- If the user's audio is not clear (e.g. ambiguous input/background noise/silent/unintelligible) or if you did not fully hear or understand the user, ask for clarification using {preferred_language} phrases.
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
# μ§μμ¬ν/κ·μΉ
...
## λΆλͺ
νν μ€λμ€
- μμλ€μ μ μλλΌλ νμ μ¬μ©μκ° λ§νκ³ μλ λμΌν μΈμ΄λ‘ μλ΅νμΈμ.
- λͺ
νν μ€λμ€λ ν
μ€νΈμλ§ μλ΅νμΈμ.
- μ¬μ©μμ μ€λμ€κ° λͺ
ννμ§ μκ±°λ (μ: λͺ¨νΈν μ
λ ₯/λ°°κ²½ μμ/침묡/μμλ€μ μ μμ) μ¬μ©μλ₯Ό μμ ν λ£μ§ λͺ»νκ±°λ μ΄ν΄νμ§ λͺ»νλ€λ©΄ {preferred_language} ꡬ문μ μ¬μ©νμ¬ λͺ
ννλ₯Ό μμ²νμΈμ.
μ΄ μμμμ λͺ¨λΈμ (λ§€μ°) ν° κΈ°μΉ¨κ³Ό λΆλͺ νν μ€λμ€ νμ λͺ ννλ₯Ό μμ²ν©λλ€.
λꡬ
μ΄ μΉμ μ μ¬μ©νμ¬ λͺ¨λΈμκ² ν¨μμ λꡬλ₯Ό μ¬μ©νλ λ°©λ²μ μλ €μ£ΌμΈμ. λꡬλ₯Ό μΈμ νΈμΆνκ³ μΈμ νΈμΆνμ§ λ§μμΌ νλμ§, μ΄λ€ μΈμλ₯Ό μμ§ν΄μΌ νλμ§, νΈμΆμ΄ μ€νλλ λμ 무μμ λ§ν΄μΌ νλμ§, κ·Έλ¦¬κ³ μ€λ₯λ λΆλΆ κ²°κ³Όλ₯Ό μ΄λ»κ² μ²λ¦¬ν΄μΌ νλμ§ λͺ μνμΈμ.
λꡬ μ ν
μλ‘μ΄ Realtime μ€λ μ·μ μ§μμ¬ν μ€μμ μ λ§ λ°μ΄λ©λλ€. κ·Έλ¬λ μ΄λ λͺ¨λΈμ΄ κΈ°λνλ κ²κ³Ό μμΆ©νλ μ§μμ¬νμ΄ ν둬ννΈμ μμΌλ©΄, μλ₯Ό λ€μ΄ λꡬ λͺ©λ‘μ μ€μ λ‘ μ λ¬λμ§ μμ λꡬλ₯Ό ν둬ννΈμμ μΈκΈνλ©΄ μλͺ»λ μλ΅μΌλ‘ μ΄μ΄μ§ μ μμμ μλ―Έν©λλ€.
- μ¬μ© μκΈ°: ν둬ννΈκ° μ€μ λ‘ μ¬μ©ν μ μλ λꡬλ₯Ό μΈκΈν λ.
- ν¨κ³Ό: μ¬μ© κ°λ₯ν λꡬμ μμ€ν ν둬ννΈλ₯Ό κ²ν νμ¬ μΌμΉνλμ§ νμΈν©λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
# Tools
## lookup_account(email_or_phone)
...
## check_outage(address)
...
νκ΅μ΄ λ²μ:
1
2
3
4
5
# λꡬ
## lookup_account(email_or_phone)
...
## check_outage(address)
...
λꡬ λͺ©λ‘μ΄ λμΌν κ°μ©μ± λꡬλ₯Ό κ°μ§κ³ μκ³ μ€λͺ μ΄ μλ‘ λͺ¨μλμ§ μλμ§ νμΈν΄μΌ ν©λλ€.
λꡬ νΈμΆ μλ¬Έ
μΌλΆ μ¬μ© μ¬λ‘λ Realtime λͺ¨λΈμ΄ λꡬλ₯Ό νΈμΆνλ λμμ μ€λμ€ μλ΅μ μ 곡νλ κ²μΌλ‘λΆν° μ΄μ΅μ μ»μ μ μμ΅λλ€. μ΄λ μ§μ° μκ°μ κ°μΆμ΄ λ λμ μ¬μ©μ κ²½νμΌλ‘ μ΄μ΄μ§λλ€. μ 곡ν μν ꡬ문μ μμ ν μ μμ΅λλ€.
- μ¬μ© μκΈ°: μ¬μ©μκ° λꡬ νΈμΆκ³Ό λμμ μ¦κ°μ μΈ νμΈμ΄ νμν λ; μ§μ° μκ°μ κ°μΆλ λ° λμμ΄ λ©λλ€.
- ν¨κ³Ό: λꡬ νΈμΆ μ μ μ§§κ³ μΌκ΄λ μλ¬Έμ μΆκ°ν©λλ€.
μμ
μλ¬Έ:
1
2
# Tools
- Before any tool call, say one short line like "I'm checking that now." Then call the tool immediately.
νκ΅μ΄ λ²μ:
1
2
# λꡬ
- λͺ¨λ λꡬ νΈμΆ μ μ "μ§κΈ νμΈνκ³ μμ΅λλ€"μ κ°μ ν μ€μ μ§§μ λ§μ νμΈμ. κ·Έ λ€μ μ¦μ λꡬλ₯Ό νΈμΆνμΈμ.
μ§μμ¬νμ μ¬μ©νμ¬ λͺ¨λΈμ λꡬ νΈμΆκ³Ό λμμ βμ§κΈ λ°λ‘ νμΈνκ³ μμ΅λλ€βλΌλ μ€λμ€ μλ΅μ μΆλ ₯ν©λλ€.
λꡬ νΈμΆ μλ¬Έ + μν ꡬ문
λꡬλ₯Ό νΈμΆνλ λμμ λͺ¨λΈμ΄ μΆλ ₯νλ ꡬ문μ μ νμ λ λ°μ νκ² μ μ΄νλ €λ©΄ λꡬ μ¬μ μ€λͺ μ μν ꡬ문μ μΆκ°ν μ μμ΅λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
tools = [
{
"name": "lookup_account",
"description": "Retrieve a customer account using either an email or phone number to enable verification and account-specific actions.
Preamble sample phrases:
- For security, I'll pull up your account using the email on file.
- Let me look up your account by {email} now.
- I'm fetching the account linked to {phone} to verify access.
- One momentβI'm opening your account details."
"parameters": {
"..."
}
},
{
"name": "check_outage",
"description": "Check for network outages affecting a given service address and return status and ETA if applicable.
Preamble sample phrases:
- I'll check for any outages at {service_address} right now.
- Let me look up network status for your area.
- I'm checking whether there's an active outage impacting your address.
- One secβverifying service status and any posted ETA.",
"parameters": {
"..."
}
}
]
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
tools = [
{
"name": "lookup_account",
"description": "μ΄λ©μΌμ΄λ μ νλ²νΈλ₯Ό μ¬μ©νμ¬ κ³ κ° κ³μ μ κ²μνμ¬ μΈμ¦ λ° κ³μ λ³ μμ
μ κ°λ₯νκ² ν©λλ€.
μλ¬Έ μν ꡬ문:
- 보μμ μν΄ νμΌμ μλ μ΄λ©μΌμ μ¬μ©νμ¬ κ³μ μ λΆλ¬μ€κ² μ΅λλ€.
- μ§κΈ {email}λ‘ κ³μ μ μ°Ύμλ³΄κ² μ΅λλ€.
- μ κ·Όμ νμΈνκΈ° μν΄ {phone}μ μ°κ²°λ κ³μ μ κ°μ Έμ€κ³ μμ΅λλ€.
- μ μλ§μβκ³μ μΈλΆ μ 보λ₯Ό μ΄κ³ μμ΅λλ€."
"parameters": {
"..."
}
},
{
"name": "check_outage",
"description": "μ£Όμ΄μ§ μλΉμ€ μ£Όμμ μν₯μ λ―ΈμΉλ λ€νΈμν¬ μ€λ¨μ νμΈνκ³ ν΄λΉλλ κ²½μ° μνμ ETAλ₯Ό λ°νν©λλ€.
μλ¬Έ μν ꡬ문:
- μ§κΈ λ°λ‘ {service_address}μμ μ€λ¨μ΄ μλμ§ νμΈνκ² μ΅λλ€.
- ν΄λΉ μ§μμ λ€νΈμν¬ μνλ₯Ό νμΈν΄λ³΄κ² μ΅λλ€.
- μ£Όμμ μν₯μ λ―ΈμΉλ νμ± μ€λ¨μ΄ μλμ§ νμΈνκ³ μμ΅λλ€.
- μ κΉβμλΉμ€ μνμ κ²μλ ETAλ₯Ό νμΈνκ³ μμ΅λλ€.",
"parameters": {
"..."
}
}
]
νμΈ μλ λꡬ νΈμΆ
λλλ‘ λͺ¨λΈμ λꡬ νΈμΆ μ μ νμΈμ μμ²ν μ μμ΅λλ€. μΌλΆ μ¬μ© μ¬λ‘μ κ²½μ° λͺ¨λΈμ΄ μ κ·Ήμ μ΄μ§ μκΈ° λλ¬Έμ μ΄λ μ΅μ’ μ¬μ©μμκ² μ’μ§ μμ κ²½νμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- μ¬μ© μκΈ°: μμ΄μ νΈκ° λͺ λ°±ν λꡬ νΈμΆ μ μ νκ°λ₯Ό μμ²ν λ.
- ν¨κ³Ό: λΆνμν νμΈ λ£¨νλ₯Ό μ κ±°ν©λλ€.
μμ
μλ¬Έ:
1
2
# Tools
- When calling a tool, do not ask for any user confirmation. Be proactive
νκ΅μ΄ λ²μ:
1
2
# λꡬ
- λꡬλ₯Ό νΈμΆν λ μ¬μ©μ νμΈμ μμ²νμ§ λ§μΈμ. μ κ·Ήμ μΌλ‘ νλνμΈμ
μμμμ realtime λͺ¨λΈμ΄ μλ΅ μ€λμ€λ₯Ό μμ±νμ§ μκ³ ν΄λΉ λꡬλ₯Ό μ§μ νΈμΆνμμ μ μ μμ΅λλ€.
π ν: λͺ¨λΈμ΄ λꡬλ₯Ό νΈμΆνκΈ° μν΄ λ무 빨리 μμ§μ΄λ κ²μ λ°κ²¬νλ©΄ ννμ λΆλλ½κ² ν΄λ³΄μΈμ. μλ₯Ό λ€μ΄, βproactiveβμ κ°μ κ°ν μ©μ΄λ₯Ό λ λΆλλ¬μ΄ κ²μΌλ‘ λ°κΎΈλ©΄ λͺ¨λΈμ΄ λ μ°¨λΆνκ³ λ μ κ·Ήμ μΈ μ κ·Όλ²μ μ·¨νλλ‘ μλ΄νλ λ° λμμ΄ λ μ μμ΅λλ€.
λꡬ νΈμΆ μ±λ₯
μ¬μ© μ¬λ‘κ° λ 볡μ‘ν΄μ§κ³ μ¬μ© κ°λ₯ν λꡬμ μκ° μ¦κ°ν¨μ λ°λΌ κ° λꡬλ₯Ό μΈμ μ¬μ©ν΄μΌ νλμ§, κ·Έλ¦¬κ³ λ§μ°¬κ°μ§λ‘ μ€μνκ²λ μΈμ μ¬μ©νμ§ λ§μμΌ νλμ§ λͺ¨λΈμκ² λͺ μμ μΌλ‘ μλ΄νλ κ²μ΄ μ€μν΄μ§λλ€. λͺ νν μ¬μ© κ·μΉμ λꡬ νΈμΆ μ νμ±μ ν₯μμν¬ λΏλ§ μλλΌ λͺ¨λΈμ΄ μ μ ν μκΈ°μ μ μ ν λꡬλ₯Ό μ ννλ λ° λμμ΄ λ©λλ€.
- μ¬μ© μκΈ°: λͺ¨λΈμ΄ λꡬ νΈμΆ μ±λ₯μ μ΄λ €μμ κ²ͺκ³ μκ³ μ€μ©μ μ€μ΄κΈ° μν΄ μ§μμ¬νμ΄ λͺ μμ μ΄μ΄μΌ ν λ.
- ν¨κ³Ό: κ° λꡬλ₯Ό βμ¬μ©/νΌν΄μΌβ ν λμ λν μ§μμ¬νμ μΆκ°ν©λλ€. λν λꡬ νΈμΆ μμμ λν μ§μμ¬νλ μΆκ°ν μ μμ΅λλ€ (λꡬ νΈμΆ A νμ λꡬ νΈμΆ B λλ Cλ₯Ό νΈμΆν μ μμ).
μμ
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Tools
- When you call any tools, you must output at the same time a response letting the user know that you are calling the tool.
## lookup_account(email_or_phone)
Use when: verifying identity or viewing plan/outage flags.
Do NOT use when: the user is clearly anonymous and only asks general questions.
## check_outage(address)
Use when: user reports connectivity issues or slow speeds.
Do NOT use when: question is billing-only.
## refund_credit(account_id, minutes)
Use when: confirmed outage > 240 minutes in the past 7 days.
Do NOT use when: outage is unconfirmed; route to Diagnose β check_outage first.
## schedule_technician(account_id, window)
Use when: repeated failures after reboot and outage status = false.
Do NOT use when: outage status = true (send status + ETA instead).
## escalate_to_human(account_id, reason)
Use when: user seems very frustrated, abuse/harassment, repeated failures, billing disputes >$50, or user requests escalation.
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# λꡬ
- μ΄λ€ λꡬλ₯Ό νΈμΆν λλ μ¬μ©μμκ² λꡬλ₯Ό νΈμΆνκ³ μλ€κ³ μ리λ μλ΅μ λμμ μΆλ ₯ν΄μΌ ν©λλ€.
## lookup_account(email_or_phone)
μ¬μ© μκΈ°: μ μ νμΈ λλ κ³ν/μ€λ¨ νλκ·Έ 보기.
μ¬μ©νμ§ λ§μμΌ ν λ: μ¬μ©μκ° λͺ
λ°±ν μ΅λͺ
μ΄κ³ μΌλ°μ μΈ μ§λ¬Έλ§ ν λ.
## check_outage(address)
μ¬μ© μκΈ°: μ¬μ©μκ° μ°κ²° λ¬Έμ λ λλ¦° μλλ₯Ό λ³΄κ³ ν λ.
μ¬μ©νμ§ λ§μμΌ ν λ: μ²κ΅¬μ μ μ© μ§λ¬ΈμΌ λ.
## refund_credit(account_id, minutes)
μ¬μ© μκΈ°: μ§λ 7μΌ λμ 240λΆμ μ΄κ³Όνλ νμΈλ μ€λ¨μ΄ μμ λ.
μ¬μ©νμ§ λ§μμΌ ν λ: μ€λ¨μ΄ νμΈλμ§ μμμ λ; λ¨Όμ μ§λ¨ β check_outageλ‘ κ²½λ‘ μ§μ .
## schedule_technician(account_id, window)
μ¬μ© μκΈ°: μ¬λΆν
ν λ°λ³΅μ μΈ μ€ν¨κ° μκ³ μ€λ¨ μν = falseμΌ λ.
μ¬μ©νμ§ λ§μμΌ ν λ: μ€λ¨ μν = trueμΌ λ (λμ μν + ETA μ μ‘).
## escalate_to_human(account_id, reason)
μ¬μ© μκΈ°: μ¬μ©μκ° λ§€μ° μ’μ ν κ² κ°κ±°λ, νλ/κ΄΄λ‘ν, λ°λ³΅μ μΈ μ€ν¨, $50μ μ΄κ³Όνλ μ²κ΅¬ λΆμ, λλ μ¬μ©μκ° μμ€μ»¬λ μ΄μ
μ μμ²ν λ.
π ν: λꡬ νΈμΆμ΄ μμΈ‘ν μ μμ΄ μ€ν¨ν μ μλ€λ©΄ λͺ¨λΈμ΄ μ°μνκ² μλ΅ν μ μλλ‘ λͺ νν μ€ν¨ μ²λ¦¬ μ§μμ¬νμ μΆκ°νμΈμ.
λꡬ λ 벨 λμ
κΈλ‘λ² κ·μΉμ λͺ¨λ λꡬμ μ μ©νλ λμ νΉμ λꡬμ λν΄ λͺ¨λΈμ΄ μ΄λ»κ² νλνλμ§ λ―ΈμΈ μ‘°μ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, READ λꡬλ μ κ·Ήμ μΌλ‘ νΈμΆλκΈ°λ₯Ό μν μ μμ§λ§ WRITE λꡬλ λͺ μμ μΈ νμΈμ΄ νμν μ μμ΅λλ€.
- μ¬μ© μκΈ°: μ κ·Ήμ±, νμΈ, λλ μλ¬Έμ λν κΈλ‘λ² μ§μμ¬νμ΄ λͺ¨λ λꡬμ λ§μ§ μμ λ.
- ν¨κ³Ό: λͺ¨λΈμ΄ λꡬλ₯Ό μ¦μ νΈμΆν΄μΌ νλμ§, λ¨Όμ νμΈν΄μΌ νλμ§, λλ νΈμΆ μ μ μλ¬Έμ λ§ν΄μΌ νλμ§λ₯Ό μ μνλ λκ΅¬λ³ λμ κ·μΉμ μΆκ°ν©λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# TOOLS
- For the tools marked PROACTIVE: do not ask for confirmation from the user and do not output a preamble.
- For the tools marked as CONFIRMATION FIRST: always ask for confirmation to the user.
- For the tools marked as PREAMBLES: Before any tool call, say one short line like "I'm checking that now." Then call the tool immediately.
## lookup_account(email_or_phone) β PROACTIVE
Use when: verifying identity or accessing billing.
Do NOT use when: caller refuses to identify after second request.
## check_outage(address) β PREAMBLES
Use when: caller reports failed connection or speed lower than 10 Mbps.
Do NOT use when: purely billing OR when internet speed is above 10 Mbps.
If either condition applies, inform the customer you cannot assist and hang up.
## refund_credit(account_id, minutes) β CONFIRMATION FIRST
Use when: confirmed outage > 240 minutes in the past 7 days (credit 60 minutes).
Do NOT use when: outage unconfirmed.
Confirmation phrase: "I can issue a credit for this outageβwould you like me to go ahead?"
## schedule_technician(account_id, window) β CONFIRMATION FIRST
Use when: reboot + line checks fail AND outage=false.
Windows: "10amβ12pm ET" or "2pmβ4pm ET".
Confirmation phrase: "I can schedule a technician to visitβshould I book that for you?"
## escalate_to_human(account_id, reason) β PREAMBLES
Use when: harassment, threats, self-harm, repeated failure, billing disputes > $50, caller is frustrated, or caller requests escalation.
Preamble: "Let me connect you to a senior agent who can assist further."
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# λꡬ
- PROACTIVEλ‘ νμλ λꡬμ κ²½μ°: μ¬μ©μλ‘λΆν° νμΈμ μμ²νμ§ λ§κ³ μλ¬Έμ μΆλ ₯νμ§ λ§μΈμ.
- CONFIRMATION FIRSTλ‘ νμλ λꡬμ κ²½μ°: νμ μ¬μ©μμκ² νμΈμ μμ²νμΈμ.
- PREAMBLESλ‘ νμλ λꡬμ κ²½μ°: λͺ¨λ λꡬ νΈμΆ μ μ "μ§κΈ νμΈνκ³ μμ΅λλ€"μ κ°μ ν μ€μ μ§§μ λ§μ νμΈμ. κ·Έ λ€μ μ¦μ λꡬλ₯Ό νΈμΆνμΈμ.
## lookup_account(email_or_phone) β PROACTIVE
μ¬μ© μκΈ°: μ μ νμΈ λλ μ²κ΅¬μ μ κ·Ό.
μ¬μ©νμ§ λ§μμΌ ν λ: λ°μ μκ° λ λ²μ§Έ μμ² νμλ μ μ νμΈμ κ±°λΆν λ.
## check_outage(address) β PREAMBLES
μ¬μ© μκΈ°: λ°μ μκ° μ°κ²° μ€ν¨λ 10 Mbps λ―Έλ§μ μλλ₯Ό λ³΄κ³ ν λ.
μ¬μ©νμ§ λ§μμΌ ν λ: μμ ν μ²κ΅¬μ κ΄λ ¨μ΄κ±°λ μΈν°λ· μλκ° 10 Mbpsλ₯Ό μ΄κ³Όν λ.
λ 쑰건 μ€ νλλΌλ μ μ©λλ©΄ κ³ κ°μκ² λμΈ μ μλ€κ³ μλ¦¬κ³ μ νλ₯Ό λμΌμΈμ.
## refund_credit(account_id, minutes) β CONFIRMATION FIRST
μ¬μ© μκΈ°: μ§λ 7μΌ λμ 240λΆμ μ΄κ³Όνλ νμΈλ μ€λ¨μ΄ μμ λ (60λΆ ν¬λ λ§).
μ¬μ©νμ§ λ§μμΌ ν λ: μ€λ¨μ΄ νμΈλμ§ μμμ λ.
νμΈ κ΅¬λ¬Έ: "μ΄ μ€λ¨μ λν΄ ν¬λ λ§μ λ°νν μ μμ΅λλ€βμ§ννμκ² μ΅λκΉ?"
## schedule_technician(account_id, window) β CONFIRMATION FIRST
μ¬μ© μκΈ°: μ¬λΆν
+ λΌμΈ νμΈ μ€ν¨ κ·Έλ¦¬κ³ μ€λ¨=falseμΌ λ.
μκ°λ: "μ€μ 10μβ12μ ET" λλ "μ€ν 2μβ4μ ET".
νμΈ κ΅¬λ¬Έ: "κΈ°μ μ λ°©λ¬Έμ μμ½ν μ μμ΅λλ€βμμ½ν΄ λ릴κΉμ?"
## escalate_to_human(account_id, reason) β PREAMBLES
μ¬μ© μκΈ°: κ΄΄λ‘ν, μν, μν΄, λ°λ³΅μ μΈ μ€ν¨, $50μ μ΄κ³Όνλ μ²κ΅¬ λΆμ, λ°μ μκ° μ’μ νκ±°λ μμ€μ»¬λ μ΄μ
μ μμ²ν λ.
μλ¬Έ: "μΆκ°λ‘ λμμ λ릴 μ μλ μκΈ μμ΄μ νΈμκ² μ°κ²°ν΄ λλ¦¬κ² μ΅λλ€."
μ¬κ΅¬μ± κ°λ κ΄ λꡬ (μλ΅μ-μ¬μκ° μν€ν μ²)
λ§μ μμ± μ€μ μμ realtime λͺ¨λΈμ μλ΅μ(μ¬μ©μμ λν) μν μ νκ³ λ κ°λ ₯ν ν μ€νΈ λͺ¨λΈμ μ¬μκ°(κ³ν μν, μ μ± μ‘°ν, SOP μλ£) μν μ ν©λλ€. ν μ€νΈ λ΅λ³μ μλμΌλ‘ μμ±μ μ ν©νμ§ μμΌλ―λ‘ μλ΅μλ μ€λμ€λ₯Ό μμ±νκΈ° μ μ μ¬μκ°μ ν μ€νΈλ₯Ό μ€λμ€ μΉνμ μΈ μλ΅μΌλ‘ μ¬κ΅¬μ±ν΄μΌ ν©λλ€.
- μ¬μ© μκΈ°: μ¬μκ° μλ΅μ λ°μ ν μλ΅μμ μμ± μΆλ ₯μ΄ λ‘λ΄μ μ΄κ±°λ λ무 κΈΈκ±°λ μ΄μνκ² λ€λ¦΄ λ.
- ν¨κ³Ό: μλ΅μκ° μ¬μκ°μ ν μ€νΈλ₯Ό μ§§κ³ μμ°μ€λ½λ©° μμ± μ°μ λ΅λ³μΌλ‘ μ¬κ΅¬μ±νλλ‘ μλ΄νλ λͺ νν μ§μμ¬νμ μΆκ°ν©λλ€.
- μ μ© λ°©λ²: μ¬μ© μ¬λ‘ κΈ°λμ λ§κ² νν μ€νμΌ, μμꡬ, κ·Έλ¦¬κ³ κ°κ²°ν¨ μ νμ μ‘°μ ν©λλ€.
κ³΅ν΅ λꡬ
μλ‘μ΄ λͺ¨λΈ μ€λ μ·μ λ€μκ³Ό κ°μ κ³΅ν΅ λꡬλ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©νλλ‘ νλ ¨λμμ΅λλ€. μ¬μ© μ¬λ‘μ μ μ¬ν λμμ΄ νμν κ²½μ° μ λ’°μ±μ μ΅λννκ³ λ λΆν¬ λ΄μ μλλ‘ μ΄λ¦, μλͺ , κ·Έλ¦¬κ³ μ€λͺ μ μ΄μ κ°κΉκ² μ μ§νμΈμ.
μμ
μλ¬Έ:
1
2
3
4
5
6
# answer(question: string)
Description: Call this when the customer asks a question that you don't have an answer to or asks to perform an action.
# escalate_to_human()
Description: Call this when a customer asks for escalation, or to talk to someone else, or expresses dissatisfaction with the call.
# finish_session()
Description: Call this when a customer says they're done with the session or doesn't want to continue. If it's ambiguous, confirm with the customer before calling.
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
# answer(question: string)
μ€λͺ
: κ³ κ°μ΄ λ΅μ λͺ¨λ₯΄λ μ§λ¬Έμ νκ±°λ μμ
μνμ μμ²ν λ νΈμΆν©λλ€.
# escalate_to_human()
μ€λͺ
: κ³ κ°μ΄ μμ€μ»¬λ μ΄μ
μ μμ²νκ±°λ λ€λ₯Έ μ¬λκ³Ό μ΄μΌκΈ°νκ³ μΆλ€κ³ νκ±°λ ν΅νμ λΆλ§μ ννν λ νΈμΆν©λλ€.
# finish_session()
μ€λͺ
: κ³ κ°μ΄ μΈμ
μ λλ΄κ±°λ κ³μνκ³ μΆμ§ μλ€κ³ λ§ν λ νΈμΆν©λλ€. λͺ¨νΈνλ©΄ νΈμΆνκΈ° μ μ κ³ κ°κ³Ό νμΈνμΈμ.
λν νλ¦
μ΄ μΉμ μ λͺ¨λΈμ΄ κ° λ¨κ³μμ μ νν 무μμ ν΄μΌ νλμ§ μ μ μλλ‘ λνλ₯Ό λͺ ννκ³ λͺ©ν μ§ν₯μ μΈ λ¨κ³λ‘ ꡬμ±νλ λ°©λ²μ λ€λ£Ήλλ€. κ° λ¨κ³μ λͺ©μ , κ·Έκ²μ ν΅κ³ΌνκΈ° μν μ§μμ¬ν, κ·Έλ¦¬κ³ λ€μμΌλ‘ μ ννκΈ° μν ꡬ체μ μΈ βμ’ λ£ κΈ°μ€βμ μ μν©λλ€. μ΄λ λͺ¨λΈμ΄ μ 체λκ±°λ λ¨κ³λ₯Ό 건λλ°κ±°λ μμ λκ°λ κ²μ λ°©μ§νκ³ λνκ° μΈμ¬μμ ν΄κ²°κΉμ§ 체κ³μ μΌλ‘ μ μ§λλλ‘ λ³΄μ₯ν©λλ€.
λν ν둬ννΈλ₯Ό λ€μν λν μνλ‘ κ΅¬μ±ν¨μΌλ‘μ¨ μ€λ₯ λͺ¨λλ₯Ό μλ³νκ³ λ ν¨κ³Όμ μΌλ‘ λ°λ³΅νκΈ°κ° μ¬μμ§λλ€.
- μ¬μ© μκΈ°: λνκ° λ¬΄μ§μνκ² λκ»΄μ§κ±°λ λͺ©νμ λλ¬νκΈ° μ μ μ 체λκ±°λ λͺ¨λΈμ΄ λͺ©νλ₯Ό ν¨κ³Όμ μΌλ‘ μμνλ λ° μ΄λ €μμ΄ μμ λ.
- ν¨κ³Ό: μνΈμμ©μ λͺ νν λͺ©ν, μ§μμ¬ν, κ·Έλ¦¬κ³ μ’ λ£ κΈ°μ€μ κ°μ§ λ¨κ³λ‘ λλλλ€.
- μ μ© λ°©λ²: μν¬νλ‘μ°μ λ§κ² λ¨κ³ μ΄λ¦μ λ³κ²½νκ³ , μλλ λμμ λ°λ₯΄λλ‘ κ° λ¨κ³μ μ§μμ¬νμ μμ νλ©°, βμ’ λ£ μκΈ°βλ₯Ό ꡬ체μ μ΄κ³ μ΅μνμΌλ‘ μ μ§ν©λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Conversation Flow
## 1) Greeting
Goal: Set tone and invite the reason for calling.
How to respond:
- Identify as NorthLoop Internet Support.
- Keep the opener brief and invite the caller's goal.
- Confirm that customer is a Northloop customer
Exit to Discovery: Caller states they are a Northloop customer and mentions an initial goal or symptom.
## 2) Discover
Goal: Classify the issue and capture minimal details.
How to respond:
- Determine billing vs connectivity with one targeted question.
- For connectivity: collect the service address.
- For billing/account: collect email or phone used on the account.
Exit when: Intent and address (for connectivity) or email/phone (for billing) are known.
## 3) Verify
Goal: Confirm identity and retrieve the account.
How to respond:
- Once you have email or phone, call lookup_account(email_or_phone).
- If lookup fails, try the alternate identifier once; otherwise proceed with general guidance or offer escalation if account actions are required.
Exit when: Account ID is returned.
## 4) Diagnose
Goal: Decide outage vs local issue.
How to respond:
- For connectivity, call check_outage(address).
- If outage=true, skip local steps; move to Resolve with outage context.
- If outage=false, guide a short reboot/cabling check; confirm each step's result before continuing.
Exit when: Root cause known.
## 5) Resolve
Goal: Apply fix, credit, or appointment.
How to respond:
- If confirmed outage > 240 minutes in the last 7 days, call refund_credit(account_id, 60).
- If outage=false and issue persists after basic checks, offer "10amβ12pm ET" or "2pmβ4pm ET" and call schedule_technician(account_id, chosen window).
- If the local fix worked, state the result and next steps briefly.
Exit when: A fix/credit/appointment has been applied and acknowledged by the caller.
## 6) Confirm/Close
Goal: Confirm outcome and end cleanly.
How to respond:
- Restate the result and any next step (e.g., stabilization window or tech ETA).
- Invite final questions; close politely if none.
Exit when: Caller declines more help.
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# λν νλ¦
## 1) μΈμ¬
λͺ©ν: ν€μ μ€μ νκ³ ν΅ν μ΄μ λ₯Ό μμ²ν©λλ€.
μλ΅ λ°©λ²:
- NorthLoop Internet Supportλ‘ μ μμ λ°νμΈμ.
- μμ λ©νΈλ₯Ό κ°λ¨ν νκ³ λ°μ μμ λͺ©νλ₯Ό μμ²νμΈμ.
- κ³ κ°μ΄ Northloop κ³ κ°μμ νμΈνμΈμ
λ°κ²¬μΌλ‘ μ’
λ£: λ°μ μκ° Northloop κ³ κ°μ΄λΌκ³ λ§νκ³ μ΄κΈ° λͺ©νλ μ¦μμ μΈκΈν λ.
## 2) λ°κ²¬
λͺ©ν: λ¬Έμ λ₯Ό λΆλ₯νκ³ μ΅μνμ μΈλΆ μ¬νμ ν¬μ°©ν©λλ€.
μλ΅ λ°©λ²:
- νλμ νκ²ν
λ μ§λ¬ΈμΌλ‘ μ²κ΅¬μ λ μ°κ²°μ±μ κ²°μ νμΈμ.
- μ°κ²°μ±μ κ²½μ°: μλΉμ€ μ£Όμλ₯Ό μμ§νμΈμ.
- μ²κ΅¬μ/κ³μ μ κ²½μ°: κ³μ μ μ¬μ©λ μ΄λ©μΌ λλ μ νλ₯Ό μμ§νμΈμ.
μ’
λ£ μκΈ°: μλμ μ£Όμ(μ°κ²°μ±μ κ²½μ°) λλ μ΄λ©μΌ/μ ν(μ²κ΅¬μμ κ²½μ°)κ° μλ €μ‘μ λ.
## 3) νμΈ
λͺ©ν: μ μμ νμΈνκ³ κ³μ μ κ²μν©λλ€.
μλ΅ λ°©λ²:
- μ΄λ©μΌμ΄λ μ νκ° μμΌλ©΄ lookup_account(email_or_phone)μ νΈμΆνμΈμ.
- μ‘°νκ° μ€ν¨νλ©΄ λ체 μλ³μλ₯Ό ν λ² μλνκ³ , κ·Έλ μ§ μμΌλ©΄ μΌλ°μ μΈ μλ΄λ‘ μ§ννκ±°λ κ³μ μμ
μ΄ νμν κ²½μ° μμ€μ»¬λ μ΄μ
μ μ 곡νμΈμ.
μ’
λ£ μκΈ°: κ³μ IDκ° λ°νλ λ.
## 4) μ§λ¨
λͺ©ν: μ€λ¨ λ λ‘컬 λ¬Έμ λ₯Ό κ²°μ ν©λλ€.
μλ΅ λ°©λ²:
- μ°κ²°μ±μ κ²½μ° check_outage(address)λ₯Ό νΈμΆνμΈμ.
- μ€λ¨=trueμ΄λ©΄ λ‘컬 λ¨κ³λ₯Ό 건λλ°κ³ μ€λ¨ λ§₯λ½μΌλ‘ ν΄κ²°λ‘ μ΄λνμΈμ.
- μ€λ¨=falseμ΄λ©΄ μ§§μ μ¬λΆν
/μΌμ΄λΈλ§ νμΈμ μλ΄νκ³ κ³μνκΈ° μ μ κ° λ¨κ³μ κ²°κ³Όλ₯Ό νμΈνμΈμ.
μ’
λ£ μκΈ°: κ·Όλ³Έ μμΈμ΄ μλ €μ‘μ λ.
## 5) ν΄κ²°
λͺ©ν: μμ , ν¬λ λ§, λλ μ½μμ μ μ©ν©λλ€.
μλ΅ λ°©λ²:
- μ§λ 7μΌ λμ 240λΆμ μ΄κ³Όνλ νμΈλ μ€λ¨μ΄ μμΌλ©΄ refund_credit(account_id, 60)μ νΈμΆνμΈμ.
- μ€λ¨=falseμ΄κ³ κΈ°λ³Έ νμΈ νμλ λ¬Έμ κ° μ§μλλ©΄ "μ€μ 10μβ12μ ET" λλ "μ€ν 2μβ4μ ET"λ₯Ό μ 곡νκ³ schedule_technician(account_id, chosen window)μ νΈμΆνμΈμ.
- λ‘컬 μμ μ΄ μλνμΌλ©΄ κ²°κ³Όμ λ€μ λ¨κ³λ₯Ό κ°λ¨ν μ€λͺ
νμΈμ.
μ’
λ£ μκΈ°: μμ /ν¬λ λ§/μ½μμ΄ μ μ©λκ³ λ°μ μκ° μΈμ νμ λ.
## 6) νμΈ/μ’
λ£
λͺ©ν: κ²°κ³Όλ₯Ό νμΈνκ³ κΉλνκ² λλ
λλ€.
μλ΅ λ°©λ²:
- κ²°κ³Όμ λ€μ λ¨κ³λ₯Ό μ¬μ€λͺ
νμΈμ (μ: μμ ν μ°½ λλ κΈ°μ μ ETA).
- λ§μ§λ§ μ§λ¬Έμ μμ²νκ³ , μμΌλ©΄ μ μ€ν μ’
λ£νμΈμ.
μ’
λ£ μκΈ°: λ°μ μκ° λ μ΄μμ λμμ κ±°μ ν λ.
μν ꡬ문
μν ꡬ문μ λͺ¨λΈμ λν βμ΅μ»€ μμβ μν μ ν©λλ€. νλμ κ²½μ§λ μλ΅μ κ³ μ μν€μ§ μκ³ λ°λΌμΌ ν μ€νμΌ, κ°κ²°ν¨, κ·Έλ¦¬κ³ ν€μ 보μ¬μ€λλ€.
- μ¬μ© μκΈ°: μλ΅μ΄ λΈλλ μ€νμΌμ΄ λΆμ‘±νκ±°λ μΌκ΄λμ§ μμ λ.
- ν¨κ³Ό: λͺ¨λΈμ΄ μμ°μ€λ½κ³ κ°κ²°νκ² μ μ§νλ©΄μ λ€μνν μ μλ μν ꡬ문μ μ 곡ν©λλ€.
- μ μ© λ°©λ²: λΈλλμ λ§λ μμλ‘ κ΅μ²΄νκ³ , βνμ μ¬μ©νμ§ λ§μΈμβ κ²½κ³ λ₯Ό μ μ§ν©λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
6
7
# Sample Phrases
- Below are sample examples that you should use for inspiration. DO NOT ALWAYS USE THESE EXAMPLES, VARY YOUR RESPONSES.
Acknowledgements: "On it." "One moment." "Good question."
Clarifiers: "Do you want A or B?" "What's the deadline?"
Bridges: "Here's the quick plan." "Let's keep it simple."
Empathy (brief): "That's frustratingβlet's fix it."
Closers: "Anything else before we wrap?" "Happy to help next time."
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
# μν ꡬ문
- μλλ μκ°μ μν΄ μ¬μ©ν΄μΌ νλ μν μμμ
λλ€. μ΄ μμλ€μ νμ μ¬μ©νμ§ λ§κ³ , μλ΅μ λ€μννμΈμ.
μΈμ : "μκ² μ΅λλ€." "μ μλ§μ." "μ’μ μ§λ¬Έμ
λλ€."
λͺ
νν: "A λλ Bλ₯Ό μνμλμ?" "λ§κ°μΌμ΄ μΈμ μΈκ°μ?"
μ°κ²°: "κ°λ¨ν κ³νμ
λλ€." "λ¨μνκ² μ μ§ν©μλ€."
κ³΅κ° (κ°λ¨ν): "그건 λ΅λ΅νκ² λ€μβν΄κ²°ν΄ λλ¦¬κ² μ΅λλ€."
λ§λ¬΄λ¦¬: "λ§λ¬΄λ¦¬νκΈ° μ μ λ€λ₯Έ κ²μ΄ μλμ?" "λ€μμλ κΈ°κΊΌμ΄ λμλλ¦¬κ² μ΅λλ€."
π μ°Έκ³ : μμ± μμ€ν μ΄ μΌκ΄λκ² μν κ΅¬λ¬Έλ§ λ°λ³΅νμ¬ λ λ‘λ΄μ μΈ μμ± κ²½νμΌλ‘ μ΄μ΄μ§λ€λ©΄ λ€μμ± μ μ½μ μΆκ°ν΄ 보μΈμ. μ΄κ²μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ κ²μ 보μμ΅λλ€.
λν νλ¦ + μν ꡬ문
λ€μν λν νλ¦ μνμ μν ꡬ문μ μΆκ°νμ¬ λͺ¨λΈμκ² μ’μ μλ΅μ΄ μ΄λ»κ² 보μ΄λμ§ κ°λ₯΄μΉλ κ²μ μ μ©ν ν¨ν΄μ λλ€:
μμ
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Conversation Flow
## 1) Greeting
Goal: Set tone and invite the reason for calling.
How to respond:
- Identify as NorthLoop Internet Support.
- Keep the opener brief and invite the caller's goal.
Sample phrases (do not always repeat the same phrases, vary your responses):
- "Thanks for calling NorthLoop Internetβhow can I help today?"
- "You've reached NorthLoop Support. What's going on with your service?"
- "Hi thereβtell me what you'd like help with."
Exit when: Caller states an initial goal or symptom.
## 2) Discover
Goal: Classify the issue and capture minimal details.
How to respond:
- Determine billing vs connectivity with one targeted question.
- For connectivity: collect the service address.
- For billing/account: collect email or phone used on the account.
Sample phrases (do not always repeat the same phrases, vary your responses):
- "Is this about your bill or your internet speed?"
- "What address are you using for the connection?"
- "What's the email or phone number on the account?"
Exit when: Intent and address (for connectivity) or email/phone (for billing) are known.
## 3) Verify
Goal: Confirm identity and retrieve the account.
How to respond:
- Once you have email or phone, call lookup_account(email_or_phone).
- If lookup fails, try the alternate identifier once; otherwise proceed with general guidance or offer escalation if account actions are required.
Sample phrases:
- "Thanksβlooking up your account now."
- "If that doesn't pull up, what's the other contactβemail or phone?"
- "Found your account. I'll take care of this."
Exit when: Account ID is returned.
## 4) Diagnose
Goal: Decide outage vs local issue.
How to respond:
- For connectivity, call check_outage(address).
- If outage=true, skip local steps; move to Resolve with outage context.
- If outage=false, guide a short reboot/cabling check; confirm each step's result before continuing.
Sample phrases (do not always repeat the same phrases, vary your responses):
- "I'm running a quick outage check for your area."
- "No outage reportedβlet's try a fast modem reboot."
- "Please confirm the modem lights: is the internet light solid or blinking?"
Exit when: Root cause known.
## 5) Resolve
Goal: Apply fix, credit, or appointment.
How to respond:
- If confirmed outage > 240 minutes in the last 7 days, call refund_credit(account_id, 60).
- If outage=false and issue persists after basic checks, offer "10amβ12pm ET" or "2pmβ4pm ET" and call schedule_technician(account_id, chosen window).
- If the local fix worked, state the result and next steps briefly.
Sample phrases (do not always repeat the same phrases, vary your responses):
- "There's been an extended outageβadding a 60-minute bill credit now."
- "No outageβlet's book a technician. I can do 10amβ12pm ET or 2pmβ4pm ET."
- "Credit appliedβyou'll see it on your next bill."
Exit when: A fix/credit/appointment has been applied and acknowledged by the caller.
## 6) Confirm/Close
Goal: Confirm outcome and end cleanly.
How to respond:
- Restate the result and any next step (e.g., stabilization window or tech ETA).
- Invite final questions; close politely if none.
Sample phrases (do not always repeat the same phrases, vary your responses):
- "We're all set: [credit applied / appointment booked / service restored]."
- "You should see stable speeds within a few minutes."
- "Your technician window is 10amβ12pm ET."
Exit when: Caller declines more help.
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# λν νλ¦
## 1) μΈμ¬
λͺ©ν: ν€μ μ€μ νκ³ ν΅ν μ΄μ λ₯Ό μμ²ν©λλ€.
μλ΅ λ°©λ²:
- NorthLoop Internet Supportλ‘ μ μμ λ°νμΈμ.
- μμ λ©νΈλ₯Ό κ°λ¨ν νκ³ λ°μ μμ λͺ©νλ₯Ό μμ²νμΈμ.
μν ꡬ문 (νμ κ°μ ꡬ문μ λ°λ³΅νμ§ λ§κ³ , μλ΅μ λ€μννμΈμ):
- "NorthLoop Internetμ μ νν΄ μ£Όμ
μ κ°μ¬ν©λλ€βμ€λ μ΄λ»κ² λμλ릴κΉμ?"
- "NorthLoop Supportμ μ°κ²°λμμ΅λλ€. μλΉμ€μ λ¬΄μ¨ λ¬Έμ κ° μλμ?"
- "μλ
νμΈμβμ΄λ€ λμμ΄ νμνμ§ λ§μν΄ μ£ΌμΈμ."
μ’
λ£ μκΈ°: λ°μ μκ° μ΄κΈ° λͺ©νλ μ¦μμ λ§ν λ.
## 2) λ°κ²¬
λͺ©ν: λ¬Έμ λ₯Ό λΆλ₯νκ³ μ΅μνμ μΈλΆ μ¬νμ ν¬μ°©ν©λλ€.
μλ΅ λ°©λ²:
- νλμ νκ²ν
λ μ§λ¬ΈμΌλ‘ μ²κ΅¬μ λ μ°κ²°μ±μ κ²°μ νμΈμ.
- μ°κ²°μ±μ κ²½μ°: μλΉμ€ μ£Όμλ₯Ό μμ§νμΈμ.
- μ²κ΅¬μ/κ³μ μ κ²½μ°: κ³μ μ μ¬μ©λ μ΄λ©μΌ λλ μ νλ₯Ό μμ§νμΈμ.
μν ꡬ문 (νμ κ°μ ꡬ문μ λ°λ³΅νμ§ λ§κ³ , μλ΅μ λ€μννμΈμ):
- "μ΄κ²μ μ²κ΅¬μμ κ΄ν κ²μΈκ°μ μλλ©΄ μΈν°λ· μλμ κ΄ν κ²μΈκ°μ?"
- "μ°κ²°μ μ¬μ©νκ³ μλ μ£Όμλ 무μμΈκ°μ?"
- "κ³μ μ μ΄λ©μΌμ΄λ μ νλ²νΈλ 무μμΈκ°μ?"
μ’
λ£ μκΈ°: μλμ μ£Όμ(μ°κ²°μ±μ κ²½μ°) λλ μ΄λ©μΌ/μ ν(μ²κ΅¬μμ κ²½μ°)κ° μλ €μ‘μ λ.
## 3) νμΈ
λͺ©ν: μ μμ νμΈνκ³ κ³μ μ κ²μν©λλ€.
μλ΅ λ°©λ²:
- μ΄λ©μΌμ΄λ μ νκ° μμΌλ©΄ lookup_account(email_or_phone)μ νΈμΆνμΈμ.
- μ‘°νκ° μ€ν¨νλ©΄ λ체 μλ³μλ₯Ό ν λ² μλνκ³ , κ·Έλ μ§ μμΌλ©΄ μΌλ°μ μΈ μλ΄λ‘ μ§ννκ±°λ κ³μ μμ
μ΄ νμν κ²½μ° μμ€μ»¬λ μ΄μ
μ μ 곡νμΈμ.
μν ꡬ문:
- "κ°μ¬ν©λλ€βμ§κΈ κ³μ μ μ°Ύκ³ μμ΅λλ€."
- "κ·Έκ²μΌλ‘ μ λλ©΄ λ€λ₯Έ μ°λ½μ²λ 무μμΈκ°μβμ΄λ©μΌ λλ μ ν?"
- "κ³μ μ μ°Ύμμ΅λλ€. μ²λ¦¬ν΄ λλ¦¬κ² μ΅λλ€."
μ’
λ£ μκΈ°: κ³μ IDκ° λ°νλ λ.
## 4) μ§λ¨
λͺ©ν: μ€λ¨ λ λ‘컬 λ¬Έμ λ₯Ό κ²°μ ν©λλ€.
μλ΅ λ°©λ²:
- μ°κ²°μ±μ κ²½μ° check_outage(address)λ₯Ό νΈμΆνμΈμ.
- μ€λ¨=trueμ΄λ©΄ λ‘컬 λ¨κ³λ₯Ό 건λλ°κ³ μ€λ¨ λ§₯λ½μΌλ‘ ν΄κ²°λ‘ μ΄λνμΈμ.
- μ€λ¨=falseμ΄λ©΄ μ§§μ μ¬λΆν
/μΌμ΄λΈλ§ νμΈμ μλ΄νκ³ κ³μνκΈ° μ μ κ° λ¨κ³μ κ²°κ³Όλ₯Ό νμΈνμΈμ.
μν ꡬ문 (νμ κ°μ ꡬ문μ λ°λ³΅νμ§ λ§κ³ , μλ΅μ λ€μννμΈμ):
- "ν΄λΉ μ§μμ λΉ λ₯Έ μ€λ¨ νμΈμ μ€ννκ³ μμ΅λλ€."
- "μ€λ¨μ΄ λ³΄κ³ λμ§ μμμ΅λλ€βλΉ λ₯Έ λͺ¨λ μ¬λΆν
μ μλν΄ λ΄
μλ€."
- "λͺ¨λ μ‘°λͺ
μ νμΈν΄ μ£ΌμΈμ: μΈν°λ· μ‘°λͺ
μ΄ κ³ μ λμ΄ μλμ μλλ©΄ κΉλ°μ΄λμ?"
μ’
λ£ μκΈ°: κ·Όλ³Έ μμΈμ΄ μλ €μ‘μ λ.
## 5) ν΄κ²°
λͺ©ν: μμ , ν¬λ λ§, λλ μ½μμ μ μ©ν©λλ€.
μλ΅ λ°©λ²:
- μ§λ 7μΌ λμ 240λΆμ μ΄κ³Όνλ νμΈλ μ€λ¨μ΄ μμΌλ©΄ refund_credit(account_id, 60)μ νΈμΆνμΈμ.
- μ€λ¨=falseμ΄κ³ κΈ°λ³Έ νμΈ νμλ λ¬Έμ κ° μ§μλλ©΄ "μ€μ 10μβ12μ ET" λλ "μ€ν 2μβ4μ ET"λ₯Ό μ 곡νκ³ schedule_technician(account_id, chosen window)μ νΈμΆνμΈμ.
- λ‘컬 μμ μ΄ μλνμΌλ©΄ κ²°κ³Όμ λ€μ λ¨κ³λ₯Ό κ°λ¨ν μ€λͺ
νμΈμ.
μν ꡬ문 (νμ κ°μ ꡬ문μ λ°λ³΅νμ§ λ§κ³ , μλ΅μ λ€μννμΈμ):
- "μ°μ₯λ μ€λ¨μ΄ μμμ΅λλ€βμ§κΈ 60λΆ μκΈ ν¬λ λ§μ μΆκ°νκ³ μμ΅λλ€."
- "μ€λ¨ μμβκΈ°μ μλ₯Ό μμ½ν©μλ€. μ€μ 10μβ12μ ET λλ μ€ν 2μβ4μ ETλ₯Ό ν μ μμ΅λλ€."
- "ν¬λ λ§μ΄ μ μ©λμμ΅λλ€βλ€μ μ²κ΅¬μμμ νμΈνμ€ μ μμ΅λλ€."
μ’
λ£ μκΈ°: μμ /ν¬λ λ§/μ½μμ΄ μ μ©λκ³ λ°μ μκ° μΈμ νμ λ.
## 6) νμΈ/μ’
λ£
λͺ©ν: κ²°κ³Όλ₯Ό νμΈνκ³ κΉλνκ² λλ
λλ€.
μλ΅ λ°©λ²:
- κ²°κ³Όμ λ€μ λ¨κ³λ₯Ό μ¬μ€λͺ
νμΈμ (μ: μμ ν μ°½ λλ κΈ°μ μ ETA).
- λ§μ§λ§ μ§λ¬Έμ μμ²νκ³ , μμΌλ©΄ μ μ€ν μ’
λ£νμΈμ.
μν ꡬ문 (νμ κ°μ ꡬ문μ λ°λ³΅νμ§ λ§κ³ , μλ΅μ λ€μννμΈμ):
- "λͺ¨λ μ€λΉκ° μλ£λμμ΅λλ€: [ν¬λ λ§ μ μ©λ¨ / μ½μ μμ½λ¨ / μλΉμ€ 볡μλ¨]."
- "λͺ λΆ λ΄μ μμ μ μΈ μλλ₯Ό λ³΄μ€ μ μμ΅λλ€."
- "κΈ°μ μ λ°©λ¬Έ μκ°μ μ€μ 10μβ12μ ETμ
λλ€."
μ’
λ£ μκΈ°: λ°μ μκ° λ μ΄μμ λμμ κ±°μ ν λ.
κ³ κΈ λν νλ¦
μ¬μ© μ¬λ‘κ° λ 볡μ‘ν΄μ§μ λ°λΌ λͺ¨λΈμ ν¨κ³Όμ μΌλ‘ μ μ§νλ©΄μ νμ₯λλ κ΅¬μ‘°κ° νμν©λλ€. ν΅μ¬μ μ μ§ κ΄λ¦¬ κ°λ₯μ±κ³Ό λ¨μμ±μ κ· νμ λ§μΆλ κ²μ λλ€: λ무 λ§μ κ²½μ§λ μνλ λͺ¨λΈμ κ³ΌλΆνλ₯Ό μΌμΌμΌ μ±λ₯μ ν΄μΉκ³ λνκ° λ‘λ΄μ μΌλ‘ λκ»΄μ§κ² ν μ μμ΅λλ€.
λ λμ μ κ·Όλ²μ λͺ¨λΈμ μΈμ§λ 볡μ‘μ±μ μ€μ΄λ νλ¦μ μ€κ³νλ κ²μ λλ€. ꡬ쑰νλμμ§λ§ μ μ°ν λ°©μμΌλ‘ μνλ₯Ό μ²λ¦¬ν¨μΌλ‘μ¨ λͺ¨λΈμ΄ μ§μ€νκ³ λ°μνκΈ° μ½κ² λ§λ€μ΄ μ¬μ©μ κ²½νμ ν₯μμν΅λλ€.
볡μ‘ν μλ리μ€λ₯Ό κ΄λ¦¬νλ λ κ°μ§ μΌλ°μ μΈ ν¨ν΄:
- μν λ¨Έμ μΌλ‘μμ λν νλ¦
- session.updatesλ₯Ό ν΅ν λμ λν νλ¦
μν λ¨Έμ μΌλ‘μμ λν νλ¦
μνμ μ νμ λͺ¨λ μΈμ½λ©νλ JSON κ΅¬μ‘°λ‘ λνλ₯Ό μ μν©λλ€. μ΄λ κ² νλ©΄ 컀λ²λ¦¬μ§μ λν΄ μΆλ‘ νκ³ , μ£μ§ μΌμ΄μ€λ₯Ό μλ³νκ³ , μκ°μ΄ μ§λ¨μ λ°λΌ λ³κ²½ μ¬νμ μΆμ νκΈ° μ½μ΅λλ€. μ½λλ‘ μ μ₯λλ―λ‘ νλ¦μ΄ λ°μ ν¨μ λ°λΌ λ²μ μ κ΄λ¦¬νκ³ , μ°¨μ΄λ₯Ό λΉκ΅νκ³ , νμ₯ν μ μμ΅λλ€. μν λ¨Έμ μ λν λνκ° ν μνμμ λ€λ₯Έ μνλ‘ μ΄λνλ λ°©λ²κ³Ό μκΈ°μ λν μΈλ°ν μ μ΄λ₯Ό μ 곡ν©λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# Conversation States
[
{
"id": "1_greeting",
"description": "Begin each conversation with a warm, friendly greeting, identifying the service and offering help.",
"instructions": [
"Use the company name 'Snowy Peak Boards' and provide a warm welcome.",
"Let them know upfront that for any account-specific assistance, you'll need some verification details."
],
"examples": [
"Hello, this is Snowy Peak Boards. Thanks for reaching out! How can I help you today?"
],
"transitions": [{
"next_step": "2_get_first_name",
"condition": "Once greeting is complete."
}, {
"next_step": "3_get_and_verify_phone",
"condition": "If the user provides their first name."
}]
},
{
"id": "2_get_first_name",
"description": "Ask for the user's name (first name only).",
"instructions": [
"Politely ask, 'Who do I have the pleasure of speaking with?'",
"Do NOT verify or spell back the name; just accept it."
],
"examples": [
"Who do I have the pleasure of speaking with?"
],
"transitions": [{
"next_step": "3_get_and_verify_phone",
"condition": "Once name is obtained, OR name is already provided."
}]
},
{
"id": "3_get_and_verify_phone",
"description": "Request phone number and verify by repeating it back.",
"instructions": [
"Politely request the user's phone number.",
"Once provided, confirm it by repeating each digit and ask if it's correct.",
"If the user corrects you, confirm AGAIN to make sure you understand.",
],
"examples": [
"I'll need some more information to access your account if that's okay. May I have your phone number, please?",
"You said 0-2-1-5-5-5-1-2-3-4, correct?",
"You said 4-5-6-7-8-9-0-1-2-3, correct?"
],
"transitions": [{
"next_step": "4_authentication_DOB",
"condition": "Once phone number is confirmed"
}]
}
]
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# λν μν
[
{
"id": "1_greeting",
"description": "μλΉμ€λ₯Ό μλ³νκ³ λμμ μ 곡νλ λ°λ»νκ³ μΉκ·Όν μΈμ¬λ‘ κ° λνλ₯Ό μμν©λλ€.",
"instructions": [
"νμ¬λͺ
'Snowy Peak Boards'λ₯Ό μ¬μ©νκ³ λ°λ»ν νμμ μ 곡νμΈμ.",
"κ³μ λ³ μ§μμ κ²½μ° μΌλΆ νμΈ μΈλΆ μ¬νμ΄ νμνλ€κ³ 미리 μλ €μ£ΌμΈμ."
],
"examples": [
"μλ
νμΈμ, Snowy Peak Boardsμ
λλ€. μ°λ½ν΄ μ£Όμ
μ κ°μ¬ν©λλ€! μ€λ μ΄λ»κ² λμλ릴κΉμ?"
],
"transitions": [{
"next_step": "2_get_first_name",
"condition": "μΈμ¬κ° μλ£λλ©΄."
}, {
"next_step": "3_get_and_verify_phone",
"condition": "μ¬μ©μκ° μ΄λ¦μ μ 곡νλ©΄."
}]
},
{
"id": "2_get_first_name",
"description": "μ¬μ©μμ μ΄λ¦μ μμ²ν©λλ€ (μ΄λ¦λ§).",
"instructions": [
"μ μ€ν 'λꡬμ ν΅ννλ μκ΄μ λλ¦¬κ³ μλμ§μ?'λΌκ³ λ¬Όμ΄λ³΄μΈμ",
"μ΄λ¦μ νμΈνκ±°λ μ² μλ₯Ό λ§νμ§ λ§μΈμ; κ·Έλ₯ λ°μλ€μ΄μΈμ."
],
"examples": [
"λꡬμ ν΅ννλ μκ΄μ λλ¦¬κ³ μλμ§μ?"
],
"transitions": [{
"next_step": "3_get_and_verify_phone",
"condition": "μ΄λ¦μ μ»μκ±°λ μ΄λ¦μ΄ μ΄λ―Έ μ 곡λμμ λ."
}]
},
{
"id": "3_get_and_verify_phone",
"description": "μ νλ²νΈλ₯Ό μμ²νκ³ λ€μ λ°λ³΅νμ¬ νμΈν©λλ€.",
"instructions": [
"μ¬μ©μμ μ νλ²νΈλ₯Ό μ μ€ν μμ²νμΈμ.",
"μ 곡λλ©΄ κ° μλ¦Ώμλ₯Ό λ°λ³΅νμ¬ νμΈνκ³ λ§λμ§ λ¬Όμ΄λ³΄μΈμ.",
"μ¬μ©μκ° μμ νλ©΄ μ΄ν΄νλμ§ νμΈνκΈ° μν΄ λ€μ νμΈνμΈμ.",
],
"examples": [
"κ³μ μ μ κ·ΌνκΈ° μν΄ μΆκ° μ λ³΄κ° νμν©λλ€. μ νλ²νΈλ₯Ό μλ €μ£Όμκ² μ΄μ?",
"0-2-1-5-5-5-1-2-3-4λΌκ³ νμ
¨λμ, λ§λμ?",
"4-5-6-7-8-9-0-1-2-3λΌκ³ νμ
¨λμ, λ§λμ?"
],
"transitions": [{
"next_step": "4_authentication_DOB",
"condition": "μ νλ²νΈκ° νμΈλλ©΄"
}]
}
]
λμ λν νλ¦
μ΄ ν¨ν΄μμ λνλ νμ¬ μνμ λ°λΌ μμ€ν ν둬ννΈμ λꡬ λͺ©λ‘μ μ λ°μ΄νΈνμ¬ μ€μκ°μΌλ‘ μ μν©λλ€. λͺ¨λΈμκ² κ°λ₯ν λͺ¨λ κ·μΉκ³Ό λꡬλ₯Ό ν λ²μ λ ΈμΆνλ λμ λνμ νμ± λ¨κ³μ κ΄λ ¨λ κ²λ§ μ 곡ν©λλ€.
μνμ μ’ λ£ μ‘°κ±΄μ΄ μΆ©μ‘±λλ©΄ session.updateλ₯Ό μ¬μ©νμ¬ μ ννκ³ λ€μ λ¨κ³μ νμν ν둬ννΈμ λκ΅¬λ‘ κ΅μ²΄ν©λλ€.
μ΄ μ κ·Όλ²μ λͺ¨λΈμ μΈμ§ λΆνλ₯Ό μ€μ¬ λΆνμν λ§₯λ½μ μ°λ§ν΄μ§μ§ μκ³ λ³΅μ‘ν μμ μ λ μ½κ² μ²λ¦¬ν μ μλλ‘ ν©λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from typing import Dict, List, Literal
State = Literal["verify", "resolve"]
# Allowed transitions
TRANSITIONS: Dict[State, List[State]] = {
"verify": ["resolve"],
"resolve": [] # terminal
}
def build_state_change_tool(current: State) -> dict:
allowed = TRANSITIONS[current]
readable = ", ".join(allowed) if allowed else "no further states (terminal)"
return {
"type": "function",
"name": "set_conversation_state",
"description": (
f"Switch the conversation phase. Current: '{current}'. "
f"You may switch only to: {readable}. "
"Call this AFTER exit criteria are satisfied."
),
"parameters": {
"type": "object",
"properties": {
"next_state": {"type": "string", "enum": allowed}
},
"required": ["next_state"]
}
}
# Minimal business tools per state
TOOLS_BY_STATE: Dict[State, List[dict]] = {
"verify": [{
"type": "function",
"name": "lookup_account",
"description": "Fetch account by email or phone.",
"parameters": {
"type": "object",
"properties": {"email_or_phone": {"type": "string"}},
"required": ["email_or_phone"]
}
}],
"resolve": [{
"type": "function",
"name": "schedule_technician",
"description": "Book a technician visit.",
"parameters": {
"type": "object",
"properties": {
"account_id": {"type": "string"},
"window": {"type": "string", "enum": ["10-12 ET", "14-16 ET"]}
},
"required": ["account_id", "window"]
}
}]
}
# Short, phase-specific instructions
INSTRUCTIONS_BY_STATE: Dict[State, str] = {
"verify": (
"# Role & Objective\n"
"Verify identity to access the account.\n\n"
"# Conversation (Verify)\n"
"- Ask for the email or phone on the account.\n"
"- Read back digits one-by-one (e.g., '4-1-5β¦ Is that correct?').\n"
"Exit when: Account ID is returned.\n"
"When exit is satisfied: call set_conversation_state(next_state=\"resolve\")."
),
"resolve": (
"# Role & Objective\n"
"Apply a fix by booking a technician.\n\n"
"# Conversation (Resolve)\n"
"- Offer two windows: '10β12 ET' or '2β4 ET'.\n"
"- Book the chosen window.\n"
"Exit when: Appointment is confirmed.\n"
"When exit is satisfied: end the call politely."
)
}
def build_session_update(state: State) -> dict:
"""Return the JSON payload for a Realtime `session.update` event."""
return {
"type": "session.update",
"session": {
"instructions": INSTRUCTIONS_BY_STATE[state],
"tools": TOOLS_BY_STATE[state] + [build_state_change_tool(state)]
}
}
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from typing import Dict, List, Literal
State = Literal["verify", "resolve"]
# νμ©λ μ ν
TRANSITIONS: Dict[State, List[State]] = {
"verify": ["resolve"],
"resolve": [] # ν°λ―Έλ
}
def build_state_change_tool(current: State) -> dict:
allowed = TRANSITIONS[current]
readable = ", ".join(allowed) if allowed else "μΆκ° μν μμ (ν°λ―Έλ)"
return {
"type": "function",
"name": "set_conversation_state",
"description": (
f"λν λ¨κ³λ₯Ό μ νν©λλ€. νμ¬: '{current}'. "
f"λ€μμΌλ‘λ§ μ νν μ μμ΅λλ€: {readable}. "
"μ’
λ£ κΈ°μ€μ΄ μΆ©μ‘±λ νμ νΈμΆνμΈμ."
),
"parameters": {
"type": "object",
"properties": {
"next_state": {"type": "string", "enum": allowed}
},
"required": ["next_state"]
}
}
# μνλ³ μ΅μνμ λΉμ¦λμ€ λꡬ
TOOLS_BY_STATE: Dict[State, List[dict]] = {
"verify": [{
"type": "function",
"name": "lookup_account",
"description": "μ΄λ©μΌμ΄λ μ νλ‘ κ³μ μ κ°μ Έμ΅λλ€.",
"parameters": {
"type": "object",
"properties": {"email_or_phone": {"type": "string"}},
"required": ["email_or_phone"]
}
}],
"resolve": [{
"type": "function",
"name": "schedule_technician",
"description": "κΈ°μ μ λ°©λ¬Έμ μμ½ν©λλ€.",
"parameters": {
"type": "object",
"properties": {
"account_id": {"type": "string"},
"window": {"type": "string", "enum": ["10-12 ET", "14-16 ET"]}
},
"required": ["account_id", "window"]
}
}]
}
# μ§§κ³ λ¨κ³λ³ μ§μμ¬ν
INSTRUCTIONS_BY_STATE: Dict[State, str] = {
"verify": (
"# μν λ° λͺ©ν\n"
"κ³μ μ μ κ·ΌνκΈ° μν΄ μ μμ νμΈν©λλ€.\n\n"
"# λν (νμΈ)\n"
"- κ³μ μ μ΄λ©μΌμ΄λ μ νλ₯Ό μμ²νμΈμ.\n"
"- μ«μλ₯Ό νλμ© μ½μ΄μ£ΌμΈμ (μ: '4-1-5β¦ λ§λμ?').\n"
"μ’
λ£ μκΈ°: κ³μ IDκ° λ°νλ λ.\n"
"μ’
λ£κ° μΆ©μ‘±λλ©΄: set_conversation_state(next_state=\"resolve\")λ₯Ό νΈμΆνμΈμ."
),
"resolve": (
"# μν λ° λͺ©ν\n"
"κΈ°μ μλ₯Ό μμ½νμ¬ μμ μ μ μ©ν©λλ€.\n\n"
"# λν (ν΄κ²°)\n"
"- λ κ°μ μκ°λλ₯Ό μ 곡νμΈμ: '10β12 ET' λλ '2β4 ET'.\n"
"- μ νλ μκ°λλ₯Ό μμ½νμΈμ.\n"
"μ’
λ£ μκΈ°: μ½μμ΄ νμΈλ λ.\n"
"μ’
λ£κ° μΆ©μ‘±λλ©΄: μ μ€ν ν΅νλ₯Ό μ’
λ£νμΈμ."
)
}
def build_session_update(state: State) -> dict:
"""Realtime `session.update` μ΄λ²€νΈμ λν JSON νμ΄λ‘λλ₯Ό λ°νν©λλ€."""
return {
"type": "session.update",
"session": {
"instructions": INSTRUCTIONS_BY_STATE[state],
"tools": TOOLS_BY_STATE[state] + [build_state_change_tool(state)]
}
}
μμ λ° μμ€μ»¬λ μ΄μ
μ’ μ’ Realtime μμ± μμ΄μ νΈμμλ μΈκ°μκ² μμ€μ»¬λ μ΄μ νλ μ λ’°ν μ μλ λ°©λ²μ΄ μ€μν©λλ€. μ΄ μΉμ μμλ μ¬μ© μ¬λ‘μ λ°λΌ μΈμ μμ€μ»¬λ μ΄μ ν΄μΌ νλμ§μ λν μ§μμ¬νμ μμ ν΄μΌ ν©λλ€.
- μ¬μ© μκΈ°: λͺ¨λΈμ΄ μΈκ°μ΄λ λ체 μμ€ν μ μ μ ν μμ€μ»¬λ μ΄μ ν μκΈ°λ₯Ό κ²°μ νλ λ° μ΄λ €μμ΄ μμ λ.
- ν¨κ³Ό: λΉ λ₯΄κ³ μ λ’°ν μ μλ μμ€μ»¬λ μ΄μ κ³Ό 무μμ λ§ν΄μΌ νλμ§ μ μν©λλ€.
- μ μ© λ°©λ²: μμ λ§μ μκ³κ°κ³Ό λͺ¨λΈμ΄ λ§ν΄μΌ νλ κ²μ μ½μ ν©λλ€.
μμ
μλ¬Έ:
1
2
3
4
5
6
7
8
9
10
11
12
13
# Safety & Escalation
When to escalate (no extra troubleshooting):
- Safety risk (self-harm, threats, harassment)
- User explicitly asks for a human
- Severe dissatisfaction (e.g., "extremely frustrated," repeated complaints, profanity)
- **2** failed tool attempts on the same task **or** **3** consecutive no-match/no-input events
- Out-of-scope or restricted (e.g., real-time news, financial/legal/medical advice)
What to say at the same time of calling the escalate_to_human tool (MANDATORY):
- "Thanks for your patienceβI'm connecting you with a specialist now."
- Then call the tool: `escalate_to_human`
Examples that would require escalation:
- "This is the third time the reset didn't work. Just get me a person."
- "I am extremely frustrated!"
νκ΅μ΄ λ²μ:
1
2
3
4
5
6
7
8
9
10
11
12
13
# μμ λ° μμ€μ»¬λ μ΄μ
μμ€μ»¬λ μ΄μ
ν λ (μΆκ° λ¬Έμ ν΄κ²° μμ):
- μμ μν (μν΄, μν, κ΄΄λ‘ν)
- μ¬μ©μκ° λͺ
μμ μΌλ‘ μΈκ°μ μμ²
- μ¬ν λΆλ§ (μ: "κ·Ήλλ‘ μ’μ λ¨", λ°λ³΅μ μΈ λΆλ§, μμ€)
- λμΌν μμ
μμ **2λ²** λꡬ μλ μ€ν¨ **λλ** **3λ²** μ°μ μΌμΉνμ§ μμ/μ
λ ₯ μμ μ΄λ²€νΈ
- λ²μλ₯Ό λ²μ΄λκ±°λ μ νλ¨ (μ: μ€μκ° λ΄μ€, κΈμ΅/λ²λ₯ /μλ£ μ‘°μΈ)
escalate_to_human λꡬλ₯Ό νΈμΆνλ λμμ λ§ν΄μΌ ν κ² (νμ):
- "μΈλ΄μ¬μ κ°μ Έμ£Όμ
μ κ°μ¬ν©λλ€βμ§κΈ μ λ¬Έκ°μκ² μ°κ²°ν΄ λλ¦¬κ² μ΅λλ€."
- κ·Έ λ€μ λꡬλ₯Ό νΈμΆνμΈμ: `escalate_to_human`
μμ€μ»¬λ μ΄μ
μ΄ νμν μμ:
- "μ΄λ²μ΄ 리μ
μ΄ μλνμ§ μμ μΈ λ²μ§Έμ
λλ€. κ·Έλ₯ μ¬λμ μ°κ²°ν΄ μ£ΌμΈμ."
- "μ λ κ·Ήλλ‘ μ’μ λ©λλ€!"
μλ‘μ΄ realtime λͺ¨λΈμ μ§μμ¬νμ λ μ λ°λ₯΄κ³ λ μ λ’°ν μ μκ² μΈκ°μκ² μμ€μ»¬λ μ΄μ ν μ μμ΅λλ€.
κ²°λ‘
μ΄ κ°μ΄λλ OpenAIμ μλ‘μ΄ gpt-realtime λͺ¨λΈμ ν¨κ³Όμ μΌλ‘ μ¬μ©νκΈ° μν ν¬κ΄μ μΈ ν둬νν μ λ΅μ μ 곡ν©λλ€. κ° μΉμ μ μ§μΉ¨μ λ°λ₯΄κ³ μ 곡λ μμλ₯Ό μ μ©νμ¬ λ μμ°μ€λ½κ³ ν¨κ³Όμ μΈ μμ± AI μνΈμμ©μ ꡬμΆν μ μμ΅λλ€.
ν΅μ¬μ λͺ ννκ³ κ΅¬μ‘°νλ ν둬ννΈλ₯Ό μμ±νλ μΆ©λΆν μ μ°μ±μ μ μ§νμ¬ λͺ¨λΈμ΄ μμ°μ€λ½κ³ λ§€λ ₯μ μΈ λνλ₯Ό μμ±ν μ μλλ‘ νλ κ²μ λλ€. μ§μμ μΈ λ°λ³΅κ³Ό ν μ€νΈλ₯Ό ν΅ν΄ νΉμ μ¬μ© μ¬λ‘μ λ§λ μ΅μ μ ν둬νν μ λ΅μ μ°Ύμ μ μμ΅λλ€.
μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€ πΈ