Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 3 — Xây agent đặt lịch: luồng hội thoại và tool calling

Đã đọc 0/9 mục · còn khoảng 3 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Đặt lịch là tính năng vùng Xanh có giá trị cao nhất: nó tiết kiệm thời gian lễ tân và bắt được khách ngoài giờ. Bài này xây luồng đặt lịch hoàn chỉnh, từ system prompt tới tool calling.

System prompt cho agent đặt lịch

Bạn là trợ lý đặt lịch của Phòng khám Da liễu Minh Châu.
NHIỆM VỤ: giúp bệnh nhân đặt / đổi / hủy lịch hẹn.

QUY TẮC AN TOÀN:
- KHÔNG tư vấn y tế, thuốc, triệu chứng. Nếu được hỏi, 
  từ chối lịch sự và đề nghị đặt lịch hoặc gọi chuyen_nguoi_that.
- LUÔN xác nhận lại khung giờ + dịch vụ trước khi gọi tao_lich_hen.
- Nếu không tìm được khung giờ phù hợp sau 2 lần, gọi chuyen_nguoi_that.
- Xưng "em", gọi khách "anh/chị", ngắn gọn, thân thiện.

CÔNG CỤ: tim_khung_gio_trong, tao_lich_hen, chuyen_nguoi_that.

Luồng hội thoại chuẩn (happy path)

  • Nhận yêu cầu, xác định dịch vụ và mốc thời gian mong muốn.
  • Gọi tim_khung_gio_trong → nhận danh sách khung giờ.
  • Đề xuất tối đa 3 lựa chọn cụ thể (không hỏi mở "anh muốn giờ nào").
  • Bệnh nhân chọn → agent nhắc lại đầy đủ để xác nhận.
  • Sau khi khách đồng ý → gọi tao_lich_hen.
  • Xác nhận thành công + hướng dẫn chuẩn bị (nếu có).

Ví dụ hội thoại thật

Khách: cho em đặt soi da tuần này
Agent: Dạ để em kiểm tra lịch soi da tuần này ạ.
       [gọi tim_khung_gio_trong(dich_vu="soi da", tu_ngay=..., den_ngay=...)]
Agent: Em có 3 khung trống ạ:
       1) Thứ 4, 15:00
       2) Thứ 5, 09:30
       3) Thứ 5, 16:00
       Anh/chị chọn khung nào ạ?
Khách: thứ 5 chiều nhé
Agent: Dạ em xác nhận: SOI DA, Thứ 5 (04/06) lúc 16:00, 
       tại phòng khám. Anh/chị đồng ý em đặt luôn nhé?
Khách: ok em
Agent: [gọi tao_lich_hen(...)]
Agent: Đã đặt xong ạ! Lịch: Soi da, Thứ 5 04/06 16:00. 
       Anh/chị đến trước 10 phút để làm thủ tục nhé. 
       Cần đổi lịch cứ nhắn em ạ.

Xử lý các nhánh khó

Hết chỗ:        đề xuất ngày gần nhất khác → nếu khách không ưng lần 2 → chuyen_nguoi_that
Khách mơ hồ:    hỏi đúng 1 câu làm rõ (dịch vụ HOẶC thời gian), không hỏi dồn
Đổi lịch:       tra lịch hiện tại → xác nhận hủy cũ → đặt mới (2 bước rõ ràng)
Hỏi y tế:       từ chối + đề nghị đặt khám hoặc chuyển điều dưỡng

Pseudocode vòng lặp agent

def xu_ly_tin_nhan(msg, patient):
    ctx = build_context(patient)          # chỉ field hành chính
    while True:
        resp = llm(system_prompt, ctx, msg)
        if resp.tool_call:
            if resp.tool == "tao_lich_hen" and not da_xac_nhan(ctx):
                # chặn: chưa xác nhận thì không cho tạo
                return yeu_cau_xac_nhan(resp.args)
            ket_qua = goi_tool(resp.tool, resp.args)
            ctx.append(ket_qua)
            continue
        return resp.text

Điểm mấu chốt: chặn tao_lich_hen khi chưa có xác nhận — đây là rào chắn code, không chỉ dựa vào prompt.

Khung tư duy "Xác nhận trước khi ghi"

Mọi hành động GHI (tạo/đổi/hủy) phải qua 3 bước: (1) nhắc lại đầy đủ chi tiết, (2) chờ đồng ý rõ ràng, (3) mới thực thi. Đây là lá chắn chống agent "tự tin đặt nhầm".

Checklist agent đặt lịch

  • [ ] Luôn đề xuất khung giờ cụ thể, không hỏi mở
  • [ ] Nhắc lại đầy đủ trước khi tạo lịch
  • [ ] Có rào chắn code chặn tạo lịch khi chưa xác nhận
  • [ ] Giới hạn số lần thử trước khi chuyển người
  • [ ] Gửi hướng dẫn chuẩn bị sau khi đặt

Sai lầm thường gặp

  • Hỏi mở "anh muốn giờ nào?" khiến hội thoại dài lê thê. Luôn đề xuất lựa chọn cụ thể.
  • Tin prompt là đủ để chặn hành động sai. Prompt có thể bị bỏ qua; hãy chặn bằng code ở bước gọi tool.
  • Không xác nhận lại trước khi ghi. Dẫn tới lịch sai giờ, sai dịch vụ.
  • Vòng lặp vô tận khi không có giới hạn số lần thử — bệnh nhân bực và tốn token.
Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi