muhammad.sutariya commited on
Commit
3945ef3
Β·
1 Parent(s): 3769fe6

improve search similarity

Browse files
Files changed (1) hide show
  1. app_gradio.py +21 -26
app_gradio.py CHANGED
@@ -65,18 +65,36 @@ class BPJSService:
65
  return SequenceMatcher(None, a.lower(), b.lower()).ratio()
66
 
67
  def search_faq(self, question: str, threshold: float = 0.3):
68
- """Search for relevant FAQ based on question"""
 
 
 
 
 
 
 
 
69
  best_match = None
70
  best_score = 0
 
71
 
72
  for faq in self.faq_data.get("data", []):
73
  question_text = faq.get("pertanyaan", "")
74
  title_text = faq.get("title", "")
75
 
 
76
  question_score = self.similarity(question, question_text)
77
  title_score = self.similarity(question, title_text)
78
 
79
- score = max(question_score, title_score)
 
 
 
 
 
 
 
 
80
 
81
  if score > best_score and score >= threshold:
82
  best_score = score
@@ -314,13 +332,10 @@ class BPJSService:
314
  state["step"] = "tanggal_lahir"
315
 
316
  response = f"""βœ… Nama: **{data['nama']}**
317
-
318
  **Langkah 2 dari 4**
319
  Sekarang masukkan **tanggal lahir** Anda:
320
-
321
  Format: DD/MM/YYYY
322
  _Contoh: 15/08/1990_
323
-
324
  _(Ketik 'batal' jika ingin membatalkan registrasi)_"""
325
 
326
  elif current_step == "tanggal_lahir":
@@ -334,14 +349,11 @@ _(Ketik 'batal' jika ingin membatalkan registrasi)_"""
334
  state["step"] = "jenis_kelamin"
335
 
336
  response = f"""βœ… Tanggal Lahir: **{data['tanggal_lahir']}**
337
-
338
  **Langkah 3 dari 4**
339
  Pilih **jenis kelamin** Anda:
340
-
341
  Ketik:
342
  - **L** atau **Laki-laki**
343
  - **P** atau **Perempuan**
344
-
345
  _(Ketik 'batal' jika ingin membatalkan registrasi)_"""
346
 
347
  elif current_step == "jenis_kelamin":
@@ -357,12 +369,9 @@ _(Ketik 'batal' jika ingin membatalkan registrasi)_"""
357
  state["step"] = "provinsi"
358
 
359
  response = f"""βœ… Jenis Kelamin: **{data['jenis_kelamin']}**
360
-
361
  **Langkah 4 dari 4 (Terakhir!)**
362
  Masukkan **provinsi** tempat tinggal Anda:
363
-
364
  _Contoh: DKI Jakarta, Jawa Barat, Jawa Timur, dll._
365
-
366
  _(Ketik 'batal' jika ingin membatalkan registrasi)_"""
367
 
368
  elif current_step == "provinsi":
@@ -373,20 +382,16 @@ _(Ketik 'batal' jika ingin membatalkan registrasi)_"""
373
  state["step"] = "konfirmasi"
374
 
375
  response = f"""## πŸ“‹ Konfirmasi Data Registrasi
376
-
377
  Mohon periksa data Anda:
378
-
379
  | Field | Value |
380
  |-------|-------|
381
  | **Nama** | {data['nama']} |
382
  | **Tanggal Lahir** | {data['tanggal_lahir']} |
383
  | **Jenis Kelamin** | {data['jenis_kelamin']} |
384
  | **Provinsi** | {data['provinsi']} |
385
-
386
  Apakah data sudah benar?
387
  - Ketik **YA** untuk melanjutkan registrasi
388
  - Ketik **TIDAK** atau **BATAL** untuk membatalkan
389
-
390
  _(Data ini akan disimpan ke database)_"""
391
 
392
  elif current_step == "konfirmasi":
@@ -406,23 +411,18 @@ _(Data ini akan disimpan ke database)_"""
406
 
407
  if success:
408
  response = f"""## πŸŽ‰ Registrasi BPJS Berhasil!
409
-
410
  **NOMOR PESERTA ANDA:** `{nomor_peserta}`
411
-
412
  ### πŸ“‹ Data yang Tersimpan:
413
  - **Nama:** {data['nama']}
414
  - **Tanggal Lahir:** {data['tanggal_lahir']}
415
  - **Jenis Kelamin:** {data['jenis_kelamin']}
416
  - **Provinsi:** {data['provinsi']}
417
  - **Status:** AKTIF βœ…
418
-
419
  ⚠️ **PENTING:** Simpan nomor peserta Anda dengan baik!
420
-
421
  Anda sekarang bisa:
422
  - Mengecek status dengan: "Cek peserta {nomor_peserta}"
423
  - Bertanya tentang FAQ BPJS
424
  - Bertanya tentang layanan kesehatan
425
-
426
  Ada yang bisa saya bantu lagi? 😊"""
427
  else:
428
  response = f"❌ **Error:** {msg}\n\nSilakan coba daftar lagi dengan ketik 'daftar BPJS'."
@@ -492,13 +492,10 @@ Ada yang bisa saya bantu lagi? 😊"""
492
  "data": {}
493
  }
494
  response = """## πŸ“ Registrasi Peserta BPJS Baru
495
-
496
  Baik! Saya akan membantu Anda mendaftar sebagai peserta BPJS.
497
  Prosesnya akan saya tanyakan satu per satu ya.
498
-
499
  **Langkah 1 dari 4**
500
  Silakan masukkan **nama lengkap** Anda:
501
-
502
  _Contoh: Budi Santoso_"""
503
 
504
  elif question_type == "status_check":
@@ -618,13 +615,11 @@ demo = gr.ChatInterface(
618
  title="πŸ₯ BPJS Chatbot",
619
  description="""
620
  Chatbot untuk FAQ BPJS dan layanan kepesertaan menggunakan Groq LLM.
621
-
622
  **Features:**
623
  - πŸ“‹ FAQ BPJS dengan pencarian cerdas
624
  - πŸ‘€ Cek status kepesertaan dari database
625
  - πŸ“ Registrasi peserta baru (step-by-step)
626
  - πŸ’¬ Conversational AI dengan context awareness
627
-
628
  **Contoh pertanyaan:**
629
  - "Bagaimana cara bayar iuran BPJS?"
630
  - "Cek peserta 12345678"
@@ -657,4 +652,4 @@ if __name__ == "__main__":
657
  server_name="0.0.0.0",
658
  server_port=7860,
659
  share=False
660
- )
 
65
  return SequenceMatcher(None, a.lower(), b.lower()).ratio()
66
 
67
  def search_faq(self, question: str, threshold: float = 0.3):
68
+ """
69
+ Search for relevant FAQ based on question
70
+
71
+ Args:
72
+ question: User's question
73
+ threshold: Minimum similarity score (0.0-1.0). Default 0.3.
74
+ - Lower = more results but less accurate (e.g., 0.2)
75
+ - Higher = fewer but more accurate results (e.g., 0.5)
76
+ """
77
  best_match = None
78
  best_score = 0
79
+ question_lower = question.lower()
80
 
81
  for faq in self.faq_data.get("data", []):
82
  question_text = faq.get("pertanyaan", "")
83
  title_text = faq.get("title", "")
84
 
85
+ # Calculate base similarity scores
86
  question_score = self.similarity(question, question_text)
87
  title_score = self.similarity(question, title_text)
88
 
89
+ # Bonus score for exact keyword matches (helps find specific FAQs)
90
+ keywords = ['denda', 'iuran', 'bayar', 'keterlambatan', 'rawat inap', 'phk', 'klaim']
91
+ keyword_bonus = 0
92
+ for keyword in keywords:
93
+ if keyword in question_lower and keyword in question_text.lower():
94
+ keyword_bonus += 0.1
95
+
96
+ # Combine scores
97
+ score = max(question_score, title_score) + keyword_bonus
98
 
99
  if score > best_score and score >= threshold:
100
  best_score = score
 
332
  state["step"] = "tanggal_lahir"
333
 
334
  response = f"""βœ… Nama: **{data['nama']}**
 
335
  **Langkah 2 dari 4**
336
  Sekarang masukkan **tanggal lahir** Anda:
 
337
  Format: DD/MM/YYYY
338
  _Contoh: 15/08/1990_
 
339
  _(Ketik 'batal' jika ingin membatalkan registrasi)_"""
340
 
341
  elif current_step == "tanggal_lahir":
 
349
  state["step"] = "jenis_kelamin"
350
 
351
  response = f"""βœ… Tanggal Lahir: **{data['tanggal_lahir']}**
 
352
  **Langkah 3 dari 4**
353
  Pilih **jenis kelamin** Anda:
 
354
  Ketik:
355
  - **L** atau **Laki-laki**
356
  - **P** atau **Perempuan**
 
357
  _(Ketik 'batal' jika ingin membatalkan registrasi)_"""
358
 
359
  elif current_step == "jenis_kelamin":
 
369
  state["step"] = "provinsi"
370
 
371
  response = f"""βœ… Jenis Kelamin: **{data['jenis_kelamin']}**
 
372
  **Langkah 4 dari 4 (Terakhir!)**
373
  Masukkan **provinsi** tempat tinggal Anda:
 
374
  _Contoh: DKI Jakarta, Jawa Barat, Jawa Timur, dll._
 
375
  _(Ketik 'batal' jika ingin membatalkan registrasi)_"""
376
 
377
  elif current_step == "provinsi":
 
382
  state["step"] = "konfirmasi"
383
 
384
  response = f"""## πŸ“‹ Konfirmasi Data Registrasi
 
385
  Mohon periksa data Anda:
 
386
  | Field | Value |
387
  |-------|-------|
388
  | **Nama** | {data['nama']} |
389
  | **Tanggal Lahir** | {data['tanggal_lahir']} |
390
  | **Jenis Kelamin** | {data['jenis_kelamin']} |
391
  | **Provinsi** | {data['provinsi']} |
 
392
  Apakah data sudah benar?
393
  - Ketik **YA** untuk melanjutkan registrasi
394
  - Ketik **TIDAK** atau **BATAL** untuk membatalkan
 
395
  _(Data ini akan disimpan ke database)_"""
396
 
397
  elif current_step == "konfirmasi":
 
411
 
412
  if success:
413
  response = f"""## πŸŽ‰ Registrasi BPJS Berhasil!
 
414
  **NOMOR PESERTA ANDA:** `{nomor_peserta}`
 
415
  ### πŸ“‹ Data yang Tersimpan:
416
  - **Nama:** {data['nama']}
417
  - **Tanggal Lahir:** {data['tanggal_lahir']}
418
  - **Jenis Kelamin:** {data['jenis_kelamin']}
419
  - **Provinsi:** {data['provinsi']}
420
  - **Status:** AKTIF βœ…
 
421
  ⚠️ **PENTING:** Simpan nomor peserta Anda dengan baik!
 
422
  Anda sekarang bisa:
423
  - Mengecek status dengan: "Cek peserta {nomor_peserta}"
424
  - Bertanya tentang FAQ BPJS
425
  - Bertanya tentang layanan kesehatan
 
426
  Ada yang bisa saya bantu lagi? 😊"""
427
  else:
428
  response = f"❌ **Error:** {msg}\n\nSilakan coba daftar lagi dengan ketik 'daftar BPJS'."
 
492
  "data": {}
493
  }
494
  response = """## πŸ“ Registrasi Peserta BPJS Baru
 
495
  Baik! Saya akan membantu Anda mendaftar sebagai peserta BPJS.
496
  Prosesnya akan saya tanyakan satu per satu ya.
 
497
  **Langkah 1 dari 4**
498
  Silakan masukkan **nama lengkap** Anda:
 
499
  _Contoh: Budi Santoso_"""
500
 
501
  elif question_type == "status_check":
 
615
  title="πŸ₯ BPJS Chatbot",
616
  description="""
617
  Chatbot untuk FAQ BPJS dan layanan kepesertaan menggunakan Groq LLM.
 
618
  **Features:**
619
  - πŸ“‹ FAQ BPJS dengan pencarian cerdas
620
  - πŸ‘€ Cek status kepesertaan dari database
621
  - πŸ“ Registrasi peserta baru (step-by-step)
622
  - πŸ’¬ Conversational AI dengan context awareness
 
623
  **Contoh pertanyaan:**
624
  - "Bagaimana cara bayar iuran BPJS?"
625
  - "Cek peserta 12345678"
 
652
  server_name="0.0.0.0",
653
  server_port=7860,
654
  share=False
655
+ )