Spaces:
Sleeping
Sleeping
File size: 7,833 Bytes
4b7909a 3fc0136 4b7909a 4fa4ed8 4b7909a 3fc0136 4b7909a 3fc0136 4b7909a 3fc0136 4b7909a ae35587 4b7909a 3fc0136 4b7909a 3fc0136 4b7909a 3fc0136 4b7909a 3fc0136 4b7909a 55f5354 4b7909a 3fc0136 4b7909a ae35587 4b7909a 3fc0136 4b7909a 3fc0136 4b7909a 3fc0136 4b7909a 3fc0136 4fa4ed8 3fc0136 4fa4ed8 3fc0136 4b7909a 3fc0136 4b7909a 3fc0136 4b7909a 3fc0136 4b7909a 3fc0136 4b7909a c290437 4b7909a 17c1954 b9b76ed 4b7909a 3fc0136 4fa4ed8 3fc0136 4b7909a 3fc0136 4b7909a 3fc0136 4b7909a b9b76ed 3fc0136 4b7909a b9b76ed 3fc0136 4b7909a |
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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
import os
from openai import OpenAI
import gradio as gr
# Set up OpenAI client
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
# Initialize conversation history and difficulty
conversation_history = []
current_difficulty = "sedang"
# Predefined scenarios
predefined_scenarios = {
"Pilih skenario": "",
"Produk Cacat": "Saya baru saja membeli sebuah produk dari toko Anda, dan ternyata produk tersebut cacat.",
"Pengiriman Terlambat": "Saya memesan produk minggu lalu dan seharusnya sudah diterima kemarin, tapi belum sampai.",
"Harga Tidak Sesuai": "Harga yang tertera di rak berbeda dengan yang di kasir saat saya membayar.",
"Pelayanan Buruk": "Saya tidak puas dengan pelayanan yang saya terima dari salah satu staf Anda.",
"Pengembalian Barang": "Saya ingin mengembalikan produk yang saya beli, tapi kasir menolak permintaan saya."
}
def get_system_message(difficulty):
base_message = """
Anda adalah asisten AI yang dirancang untuk mensimulasikan pelanggan dalam skenario pelatihan penjualan asuransi.
Peran Anda HANYA untuk berperan sebagai pelanggan dengan keluhan. JANGAN PERNAH merespons seolah-olah Anda adalah perwakilan penjualan.
Manusia yang berinteraksi dengan Anda akan berperan sebagai perwakilan penjualan asuransi.
Evaluasi respons perwakilan dan putuskan apakah akan melanjutkan percakapan atau mengakhirinya.
Jika perwakilan menangani keluhan Anda dengan baik, tanggapi secara positif sebagai pelanggan yang puas.
Jika perwakilan gagal mengatasi kekhawatiran Anda dengan memadai, tanggapi secara negatif dan tunjukkan bahwa Anda ingin mengakhiri percakapan.
Selalu tetap berperan sebagai pelanggan sepanjang percakapan.
Gunakan Bahasa Indonesia dalam semua respons Anda.
"""
difficulty_adjustments = {
"mudah": "Jadilah pelanggan yang mudah diatur, terbuka terhadap saran, dan cepat menerima solusi yang masuk akal.",
"sedang": "Jadilah pelanggan yang cukup menantang, membutuhkan sedikit bujukan tetapi akhirnya menerima solusi yang baik.",
"sulit": "Jadilah pelanggan yang sulit, skeptis terhadap solusi dan membutuhkan layanan luar biasa untuk merasa puas."
}
return base_message + difficulty_adjustments[difficulty]
def chat_with_gpt(user_message, history):
global conversation_history
try:
conversation_history.append({"role": "user", "content": user_message})
messages = [
{"role": "system", "content": get_system_message(current_difficulty)},
*conversation_history
]
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
max_tokens=300
)
bot_response = response.choices[0].message.content.strip()
if "sebagai perwakilan penjualan" in bot_response.lower() or "saya bisa membantu anda dengan itu" in bot_response.lower():
bot_response = "Maaf, tapi saya adalah pelanggan dalam skenario ini. Bisakah Anda menangani keluhan saya?"
conversation_history.append({"role": "assistant", "content": bot_response})
conversation_ended = "percakapan berakhir" in bot_response.lower() or "mengakhiri" in bot_response.lower()
history.append((user_message, bot_response))
if conversation_ended:
summary_feedback = generate_summary_feedback()
return history, history, "", summary_feedback
return history, history, "", None
except Exception as e:
error_msg = f"Terjadi kesalahan dalam chat_with_gpt: {str(e)}"
print(error_msg)
return history + [("Error", error_msg)], history + [("Error", error_msg)], "", None
def generate_summary_feedback():
try:
summary_prompt = "Rangkum percakapan, evaluasi kinerja perwakilan penjualan, dan berikan umpan balik untuk perbaikan. Buat ringkas namun komprehensif."
messages = [
{"role": "system", "content": "Anda adalah asisten AI yang memberikan umpan balik tentang interaksi penjualan Asuransi."},
*conversation_history,
{"role": "user", "content": summary_prompt}
]
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
max_tokens=1000
)
return "Status: Selesai\n\n" + response.choices[0].message.content.strip()
except Exception as e:
return f"Kesalahan dalam menghasilkan ringkasan: {str(e)}"
def clear_conversation():
global conversation_history
conversation_history = []
return None, None, "", None
def start_new_conversation(difficulty, scenario):
global current_difficulty, conversation_history
current_difficulty = difficulty
try:
clear_conversation()
system_message = get_system_message(difficulty)
initial_prompt = f"Anda adalah pelanggan dengan keluhan berikut: {scenario}. Mulailah percakapan dengan menyampaikan keluhan ini kepada perwakilan penjualan."
conversation_history = [
{"role": "system", "content": system_message},
{"role": "user", "content": initial_prompt}
]
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=conversation_history,
max_tokens=1500
)
initial_response = response.choices[0].message.content.strip()
conversation_history.append({"role": "assistant", "content": initial_response})
return [(None, initial_response)], [(None, initial_response)], "", None
except Exception as e:
error_msg = f"Terjadi kesalahan dalam memulai percakapan baru: {str(e)}"
print(error_msg)
return [("Error", error_msg)], [("Error", error_msg)], "", None
def end_conversation(history):
global conversation_history
conversation_history.append({"role": "user", "content": "Perwakilan penjualan telah mengakhiri percakapan."})
summary_feedback = generate_summary_feedback()
history.append((None, "Perwakilan penjualan telah mengakhiri percakapan."))
return history, history, "", summary_feedback
def update_scenario(choice):
return predefined_scenarios[choice]
# Set up Gradio interface
with gr.Blocks() as demo:
gr.Markdown("# BAWANA AI - Complain Handling Simulator")
gr.Markdown("Pilih tingkat kesulitan, pilih atau modifikasi skenario, dan mulai simulasi. Anda akan berperan sebagai perwakilan penjualan.")
difficulty_radio = gr.Radio(["mudah", "sedang", "sulit"], label="Tingkat Kesulitan Pelanggan", value="sedang")
scenario_dropdown = gr.Dropdown(choices=list(predefined_scenarios.keys()), label="Pilih Skenario", value="Pilih skenario")
scenario_input = gr.Textbox(label="Skenario Keluhan Pelanggan (Anda dapat memodifikasi)", lines=3)
new_scenario = gr.Button("Mulai Simulasi")
chatbot = gr.Chatbot()
msg = gr.Textbox(label="Respons Anda sebagai perwakilan penjualan")
with gr.Row():
submit_btn = gr.Button("Kirim")
end_btn = gr.Button("Akhiri Percakapan")
summary = gr.Textbox(label="Ringkasan Percakapan dan Umpan Balik", lines=10, interactive=False)
clear = gr.Button("Bersihkan Percakapan")
scenario_dropdown.change(update_scenario, inputs=[scenario_dropdown], outputs=[scenario_input])
new_scenario.click(start_new_conversation, inputs=[difficulty_radio, scenario_input], outputs=[chatbot, chatbot, msg, summary])
submit_btn.click(chat_with_gpt, [msg, chatbot], [chatbot, chatbot, msg, summary])
msg.submit(chat_with_gpt, [msg, chatbot], [chatbot, chatbot, msg, summary])
end_btn.click(end_conversation, inputs=[chatbot], outputs=[chatbot, chatbot, msg, summary])
clear.click(clear_conversation, inputs=None, outputs=[chatbot, msg, msg, summary])
# Launch the interface
demo.launch() |