Pengelolaan Konteks dan Riwayat Pelanggan
Respons yang dipersonalisasi menggunakan pembelian, tiket, dan preferensi sebelumnya.
Pengelolaan Konteks dan Riwayat Pelanggan adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Mengapa Konteks Membuat Agen Terasa Manusiawi
Perbedaan antara agen layanan pelanggan yang biasa-biasa saja dan yang unggul terletak pada konteks. Saat agen berkata, 'Saya melihat langganan Anda diperpanjang minggu depan — apakah Anda ingin menjedanya sebelum itu?', pelanggan merasa dikenali, bukan sekadar diproses.
Pelajaran ini membahas cara membangun lapisan konteks pelanggan yang kaya untuk agen Anda.
Skema Profil Pelanggan
Tentukan profil pelanggan standar yang menggabungkan data dari berbagai sumber. Agen menerima kamus ini di awal setiap percakapan.
from dataclasses import dataclass, field
from datetime import date
@dataclass
class CustomerProfile:
customer_id: str
name: str
email: str
join_date: date
subscription_tier: str # 'free', 'pro', 'enterprise'
account_age_days: int
lifetime_value_usd: float
previous_tickets: list[dict] = field(default_factory=list)
recent_purchases: list[dict] = field(default_factory=list)
preferences: dict = field(default_factory=dict)
@property
def is_long_term_customer(self) -> bool:
return self.account_age_days > 365
if __name__ == '__main__':
from datetime import date
profile = CustomerProfile(
customer_id='cust_1', name='Jane Doe', email='jane@example.com',
join_date=date(2023, 1, 15), subscription_tier='pro',
account_age_days=400, lifetime_value_usd=1250.50,
)
print(f'{profile.name} ({profile.subscription_tier}) - long-term customer: {profile.is_long_term_customer}')
Mengambil Riwayat Pembelian
Ambil N pesanan terakhir dari backend e-commerce Anda. Sertakan tanggal pesanan, item, total, dan status. Dengan demikian, agen dapat mengetahui apa yang telah dibeli pelanggan dan apakah ada pesanan terbaru yang bermasalah.
import requests
SHOP_API = 'https://api.yourshop.com'
SHOP_KEY = 'YOUR_SHOP_API_KEY'
def get_purchase_history(customer_id: str, limit: int = 10) -> list[dict]:
resp = requests.get(
f'{SHOP_API}/customers/{customer_id}/orders',
headers={'Authorization': f'Bearer {SHOP_KEY}'},
params={'limit': limit, 'sort': '-created_at'}
)
resp.raise_for_status()
orders = resp.json()['orders']
return [
{
'order_id': o['id'],
'date': o['created_at'][:10],
'total_usd': o['total'],
'status': o['status'],
'items': [i['name'] for i in o['line_items']]
}
for o in orders
]Mengambil Tiket Dukungan Sebelumnya
Ambil N tiket dukungan terakhir untuk memahami masalah yang berulang. Jika masalah yang sama pada pelanggan telah diselesaikan tiga kali, berarti masalah tersebut terkait produk — eskalasikan dan tandai sebagaimana mestinya.
def get_support_history(customer_id: str, limit: int = 5) -> list[dict]:
resp = requests.get(
f'{SHOP_API}/customers/{customer_id}/tickets',
headers={'Authorization': f'Bearer {SHOP_KEY}'},
params={'limit': limit, 'sort': '-created_at'}
)
resp.raise_for_status()
tickets = resp.json()['tickets']
return [
{
'ticket_id': t['id'],
'subject': t['subject'],
'status': t['status'],
'resolved': t.get('resolved_at', ''),
'category': t.get('category', 'general')
}
for t in tickets
]
def has_recurring_issue(tickets: list[dict], category: str) -> bool:
return sum(1 for t in tickets if t['category'] == category) >= 3Membaca Tingkat dan Status Langganan
Tingkat langganan menentukan hak yang dimiliki pelanggan. Pelanggan Pro yang menanyakan fitur yang tidak tersedia dalam paketnya memerlukan respons yang berbeda dari pelanggan Enterprise dengan pertanyaan yang sama.
def get_subscription_info(customer_id: str) -> dict:
resp = requests.get(
f'{SHOP_API}/customers/{customer_id}/subscription',
headers={'Authorization': f'Bearer {SHOP_KEY}'}
)
if resp.status_code == 404:
return {'tier': 'free', 'status': 'active', 'renewal_date': None}
resp.raise_for_status()
sub = resp.json()
return {
'tier': sub['plan'],
'status': sub['status'], # active / past_due / canceled
'renewal_date': sub.get('current_period_end', '')[:10],
'cancel_at': sub.get('cancel_at_period_end', False)
}Menghitung Usia Akun
Usia akun menunjukkan loyalitas pelanggan. Pelanggan yang telah bersama Anda sejak 2021 seharusnya diperlakukan berbeda dari seseorang yang baru mendaftar kemarin. Sebutkan lamanya hubungan tersebut jika sesuai untuk membangun kedekatan.
from datetime import datetime, timezone
def calculate_account_age(join_date_str: str) -> dict:
join = datetime.fromisoformat(join_date_str.replace('Z', '+00:00'))
now = datetime.now(timezone.utc)
delta = now - join
years = delta.days // 365
months = (delta.days % 365) // 30
return {
'days': delta.days,
'years': years,
'months': months,
'label': f'{years} year(s) and {months} month(s)' if years else f'{months} month(s)'
}
age = calculate_account_age('2021-03-15T00:00:00Z')
print(age['label']) # e.g. '5 year(s) and 2 month(s)'Membangun String Konteks untuk LLM
Ubah profil pelanggan menjadi blok konteks ringkas yang disisipkan ke dalam prompt sistem. Buatlah singkat — hanya sertakan fakta yang secara langsung relevan dengan sesi saat ini.
def build_context_block(profile: CustomerProfile) -> str:
recent_order = profile.recent_purchases[0] if profile.recent_purchases else None
last_ticket = profile.previous_tickets[0] if profile.previous_tickets else None
parts = [
f'Customer: {profile.name} ({profile.email})',
f'Account age: {profile.account_age_days} days | Tier: {profile.subscription_tier}',
f'Lifetime value: USD {profile.lifetime_value_usd:.0f}',
]
if recent_order:
parts.append(
f'Last order: {recent_order["date"]} — '
f'{', '.join(recent_order["items"][:2])} ({recent_order["status"]})'
)
if last_ticket:
parts.append(f'Last ticket: "{last_ticket["subject"]}" ({last_ticket["status"]})')
return '\n'.join(parts)Mempersonalisasi Respons dengan Konteks
Sisipkan blok konteks ke dalam prompt sistem agar LLM secara alami merujuknya dalam respons tanpa perlu diberi tahu secara eksplisit.
import openai
client = openai.OpenAI(api_key='YOUR_OPENAI_KEY')
def respond_with_context(user_message: str, profile: CustomerProfile) -> str:
context = build_context_block(profile)
system_prompt = (
f'You are a helpful customer service agent for ShopCo.\n'
f'Customer context:\n{context}\n\n'
f'Be warm and personal. Reference their history when relevant. '
f'Address the customer by first name.'
)
resp = client.chat.completions.create(
model='gpt-4o',
messages=[
{'role': 'system', 'content': system_prompt},
{'role': 'user', 'content': user_message}
]
)
return resp.choices[0].message.contentMenyimpan Konteks Pelanggan dalam Tembolok
Mengambil data profil dari beberapa API pada setiap pesan berjalan lambat dan mahal. Simpan profil dalam tembolok saat percakapan dimulai dan perbarui hanya kolom yang mungkin berubah (status pesanan, status tiket).
import time
profile_cache: dict[str, dict] = {} # customer_id -> {profile, fetched_at}
CACHE_TTL = 300 # 5 minutes
def get_cached_profile(customer_id: str) -> CustomerProfile | None:
entry = profile_cache.get(customer_id)
if entry and time.time() - entry['fetched_at'] < CACHE_TTL:
return entry['profile']
return None
def set_cached_profile(customer_id: str, profile: CustomerProfile):
profile_cache[customer_id] = {
'profile': profile,
'fetched_at': time.time()
}Mendeteksi Situasi Sensitif dari Riwayat
Riwayat dapat mengungkap pola yang memerlukan penanganan khusus: pelanggan yang tiga pesanan terakhirnya rusak, seseorang yang mengancam akan membatalkan langganan bulan lalu, atau pengguna yang telah bersama Anda selama 7 tahun.
def assess_risk_flags(profile: CustomerProfile) -> list[str]:
flags = []
# Check for cancellation risk
cancel_keywords = ['cancel', 'unsubscribe', 'quit', 'competitor']
for ticket in profile.previous_tickets:
if any(kw in ticket.get('subject', '').lower() for kw in cancel_keywords):
flags.append('cancellation_risk')
break
# Defective product pattern
defective = sum(1 for o in profile.recent_purchases if o.get('status') == 'refunded')
if defective >= 2:
flags.append('product_quality_issue')
# High-value customer
if profile.lifetime_value_usd > 5000:
flags.append('high_value_customer')
return flagsAlur Perakitan Konteks Lengkap
Gabungkan semua sumber data ke dalam satu fungsi assemble_context() yang dipanggil sekali saat percakapan dimulai.
from datetime import date
def assemble_context(email: str) -> CustomerProfile:
# Try cache first
# In production: look up customer_id from email in your user DB
customer_id = 'CUST_123'
cached = get_cached_profile(customer_id)
if cached:
return cached
# Fetch from all sources
sub = get_subscription_info(customer_id)
orders = get_purchase_history(customer_id)
tickets = get_support_history(customer_id)
profile = CustomerProfile(
customer_id=customer_id,
name='Alice Smith',
email=email,
join_date=date(2021, 3, 15),
subscription_tier=sub['tier'],
account_age_days=calculate_account_age('2021-03-15T00:00:00Z')['days'],
lifetime_value_usd=1240.00,
previous_tickets=tickets,
recent_purchases=orders
)
set_cached_profile(customer_id, profile)
return profileBagian konteks pelanggan mana yang paling memungkinkan agen mengatakan 'Saya melihat Anda telah bersama kami sejak 2021'?
Memersonalisasi respons memerlukan rujukan ke titik data tertentu dari profil pelanggan. Mengidentifikasi kolom yang memungkinkan pernyataan ini merupakan pertanyaan pengingatan praktis.
Ringkasan Konteks Pelanggan
Agen layanan pelanggan yang hebat membangun profil yang kaya dari riwayat pembelian, tiket dukungan, tingkat langganan, dan usia akun. Sisipkan blok konteks ringkas ke dalam prompt sistem, simpan dalam tembolok selama sesi, dan gunakan tanda risiko untuk mendeteksi situasi sensitif sebelum meningkat.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengelolaan Konteks dan Riwayat Pelanggan” gratis?
Ya — teks lengkap “Pengelolaan Konteks dan Riwayat Pelanggan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengelolaan Konteks dan Riwayat Pelanggan”?
Respons yang dipersonalisasi menggunakan pembelian, tiket, dan preferensi sebelumnya. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pengelolaan Konteks dan Riwayat Pelanggan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?
Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Perutean Tiket dan Logika Eskalasi
- Integrasi CRM: Salesforce dan HubSpot
- Protokol Pengalihan ke Manusia
- Pengelolaan Konteks dan Riwayat Pelanggan