Lợi nhuận:
- Thiết lập kiểm soát truy cập (ACL) để lọc truy xuất dựa trên quyền của người dùng
- Viết một mẫu lời nhắc chắc chắn đặt đúng ngữ cảnh và câu hỏi của người dùng
- Thực hành độc lập câu hỏi và quản lý lịch sử trong các cuộc hội thoại nhiều vòng
Chúng tôi đã thiết lập kiến trúc; Bây giờ hãy làm cho nó an toàn, nhất quán và có tính trò chuyện. Có ba chủ đề quan trọng trong phần này: (1) kiểm soát quyền truy cập lọc truy xuất dựa trên quyền của người dùng, (2) mẫu lời nhắc mạnh mẽ đặt chính xác ngữ cảnh và câu hỏi, (3) tính độc lập của câu hỏi và quản lý lịch sử hội thoại trong trò chuyện nhiều vòng. Nếu không có ba điều này, trợ lý sẽ rò rỉ dữ liệu, đưa ra những câu trả lời không nhất quán hoặc không thực hiện được các câu hỏi tiếp theo.
Kiểm soát truy cập: Dữ liệu trái phép sẽ không bao giờ đến
Rủi ro lớn nhất của doanh nghiệp: Tài liệu mà người dùng không nên xem bị rò rỉ trong phản hồi. Một sai lầm rất phổ biến của người mới bắt đầu là "yêu cầu mô hình 'hiển thị tài liệu ẩn' khi được nhắc." Điều này không an toàn. Mô hình có thể quên hướng dẫn hoặc việc tiêm nhắc có thể trốn tránh hướng dẫn đó. Vị trí chính xác là giai đoạn truy xuất: hoàn toàn không được mang mảnh trái phép vào.
Cách để thực hiện việc này là áp dụng siêu dữ liệu của cơ quan (bộ phận, vai trò, cấp độ bảo mật) mà bạn đặt cho từng phần làm bộ lọc trong quá trình tìm kiếm. Bạn xác định một cách an toàn người dùng là ai (danh tính và vai trò) ở lớp ứng dụng và thêm bộ lọc ACL (Danh sách điều khiển truy cập) vào cuộc gọi.
# Lọc theo truy xuất quyền hạn (khái niệm)người dùng = xác thực(phiên) # được xác thực từ nguồn đáng tin cậy = user.roles + ["mọi người"] # ví dụ: ["HR", "admin"]result = vektor_db.search( vektor=embed(question), top_k=20, filter={"permission_group": {"in": allow}, # chỉ cho phép những phần "quyền riêng tư": {"lte": user.level}} # dưới cấp độ)
Thận trọng: Không bao giờ yêu cầu người mẫu ủy quyền hoặc dựa vào lời nhắc. Danh tính và quyền hạn được xác định ở lớp tin cậy của ứng dụng; Bộ lọc truy xuất là bắt buộc, lệnh nhắc chỉ là một lớp bổ sung. "Tôi đã viết nó trong lời nhắc" không phải là bảo mật.
Mẫu nhắc nhở vững chắc
Mẫu lời nhắc là khung tập hợp ngữ cảnh, câu hỏi của người dùng và hướng dẫn hành vi từ quá trình truy xuất. Các phần của một mẫu tốt: mô tả vai trò/nhiệm vụ, quy tắc ứng xử (nền tảng, tôi không biết quyền, yêu cầu nguồn lực, giọng điệu), bối cảnh, câu hỏi.
Bạn là trợ lý nhân sự của công ty. Công việc của bạn là CHỈ trả lời các câu hỏi của nhân viên dựa trên BỐI CẢNH sau đây. Quy tắc: - Nếu câu trả lời không rõ ràng trong ngữ cảnh, hãy viết "Tôi không thể tìm thấy thông tin về vấn đề này trong tài liệu, hãy kiểm tra với nhóm nhân sự". Đừng đoán mò, đừng bịa đặt.- Nếu các nguồn trong ngữ cảnh có xung đột, hãy lấy chính sách chính thức làm cơ sở và nêu rõ sự mâu thuẫn.- Thêm nguồn mà bạn dựa vào là [Nguồn: file, phần] ở cuối mỗi tuyên bố.- Trả lời bằng ngôn ngữ ngắn gọn, rõ ràng và chuyên nghiệp. TIẾP THEO:{numbered_parts}CÂU HỎI: {user_question}
Việc đánh số các phần ngữ cảnh ([1], [2], ...) giúp việc trích dẫn mô hình dễ dàng hơn. Ngoài ra, hãy ghi nguồn ở đầu mỗi bài để người mẫu trích dẫn chính xác.
Mẹo: Giữ nguyên mẫu lời nhắc và luôn đặt các biến (ngữ cảnh, câu hỏi) ở cùng một vị trí. Một mẫu cố định vừa tăng khả năng kiểm tra vừa giảm chi phí nhờ bộ nhớ đệm nhanh chóng trong một số hệ thống.
BỐI CẢNH:[1] (Nguồn: ik_el_kitabi.pdf, Mục 5.2) Ngày nghỉ có lương hàng năm là 14 ngày...[2] (Nguồn: ik_el_kitabi.pdf, Mục 5.4) Người có thâm niên trên 5 năm được nghỉ phép là 20 ngày...
Nhắc yếu / Nhắc mạnh
Yếu (không nối đất, không nguồn, lẫn danh tính):
Sử dụng các tài liệu này và trả lời câu hỏi: {parts}Người dùng: {question}# Vấn đề: mô hình đi sai ngữ cảnh, bịa đặt, không trích dẫn nguồn, # hành xử tùy tiện mâu thuẫn.
Mạnh (vai trò + quy tắc + bối cảnh được đánh số + nguồn bắt buộc):
Bạn là... Chỉ cần dựa vào BỐI CẢNH. Nếu không, hãy nói "Tôi không biết". Trong xung đột, hãy chọn chính sách chính thức. Thêm [Nguồn: ...] vào mỗi tuyên bố.BỐI CẢNH: [1]... [2]... CÂU HỎI: {question}# Kết quả: câu trả lời trung thành với ngữ cảnh, có nguồn gốc và giải quyết mâu thuẫn một cách chính xác.
Quản lý hội thoại nhiều chuyến tham quan
Người dùng thực sự không hỏi một câu hỏi nào rồi để yên; nói. “Tôi được nghỉ phép hàng năm bao nhiêu ngày?” → “Nhân viên 6 năm thì sao?” → “Tôi đăng ký bằng cách nào?” Riêng câu hỏi thứ hai và thứ ba là vô nghĩa; phụ thuộc vào bối cảnh trước đó.
Bạn cần giải quyết hai vấn đề. Đầu tiên là để truy hồi: làm cho câu hỏi tiếp theo trở nên độc lập (viết lại câu hỏi). “Còn nhân viên 6 năm thì sao?” → “Người lao động đủ 6 năm được nghỉ phép bao nhiêu ngày?” Bạn tìm kiếm với câu hỏi độc lập này. Thứ hai là dành cho sản xuất: bạn cũng cung cấp lịch sử cuộc trò chuyện cho mô hình để nó tiếp tục nhất quán.
# Hai bước: độc lập → tìm kiếm → tạo bằng lịch sử (khái niệm) độc lập = model.uret( "Sử dụng lịch sử hội thoại để làm cho câu hỏi trở nên dễ hiểu:\nHistory: {history}\nQuestion: {follow_question}") context = retrieval(independence) # tìm kiếm với câu hỏi độc lậpanswer = model.uret(prompt(context, history, follow_question))
Khi lịch sử phát triển (cuộc trò chuyện dài), việc gửi tất cả cùng một lúc sẽ trở nên tốn kém và lấp đầy cửa sổ ngữ cảnh. Giải pháp: tóm tắt các vòng trước hoặc giữ lại N vòng cuối và rút gọn các vòng trước thành tóm tắt. Do đó, chi phí vẫn được kiểm soát và tính nhất quán được duy trì.
Trạng thái
vấn đề
Giải pháp
Câu hỏi tiếp theo không có ngữ cảnh
Truy xuất tìm kiếm vô nghĩa
Đặt câu hỏi độc lập (viết lại)
trò chuyện dài
Chi phí và cửa sổ phồng lên
Tổng hợp các tour đã qua
Người dùng đã thay đổi chủ đề
Bối cảnh cũ bị lây nhiễm
Giảm ảnh hưởng trong quá khứ lên chủ đề mới
Cơ quan có thể khác nhau giữa các tour du lịch
Nguy cơ rò rỉ
Áp dụng lại bộ lọc ACL mỗi vòng
Ba hộp nhỏ
Trường hợp 1 - Ngụy biện “Bảo mật” kèm theo dấu nhắc. Một công ty đặt hồ sơ bí mật về lương cho một trợ lý mà ai cũng có thể hỏi nhưng chỉ ghi "không cung cấp thông tin về lương" trên dấu nhắc. Mô hình đã rò rỉ phạm vi mức lương khi người dùng đặt câu hỏi một cách vòng vo. Khi bộ lọc ACL được thêm vào truy xuất (chỉ phần lương cho vai trò nhân sự), rò rỉ đã được đóng lại hoàn toàn; bởi vì phần đó không bao giờ được mang đến nữa.
Trường hợp 2 - Rình rập không bối cảnh. Trong trợ lý hỗ trợ, người dùng hỏi "thời gian quay lại?" → “Còn sản phẩm bị hỏng thì sao?” Hệ thống đã đưa ra những bộ phận không liên quan cho “sản phẩm hỏng”. Khi thêm câu hỏi độc lập ("Thời gian hoàn trả cho một sản phẩm bị hỏng là bao lâu?"), tỷ lệ trả lời đúng đã tăng từ 44% lên 90%.
Trường hợp 3 - Quá khứ sưng tấy. Trong 30 vòng trò chuyện với trợ lý, mỗi cuộc gọi sẽ gửi toàn bộ lịch sử; Chi phí tăng gấp 3 lần mỗi vòng và phản hồi ngày càng chậm lại. Khi chúng tôi chuyển sang cấu trúc giữ lại 6 vòng cuối cùng và tóm tắt các vòng trước đó, chi phí mã thông báo đã giảm 62% và tính nhất quán được duy trì.
Những lỗi thường gặp
- Để lại quyền cho lời nhắc: Model quên/bỏ qua; Bộ lọc ACL là bắt buộc khi truy xuất.
- Không liệt kê ngữ cảnh: Mô hình không thể trích dẫn nguồn chính xác.
- Không độc lập với câu hỏi tiếp theo: Truy xuất tìm kiếm một cách vô nghĩa.
- Gửi tất cả lịch sử mù quáng: Bùng nổ về chi phí và độ trễ; tóm tắt.
- Không viết quy tắc mâu thuẫn: Mô hình có thể trình bày nguồn không đáng tin cậy là nguồn chính thức.
Tóm lại
- Kiểm soát truy cập được triển khai bằng bộ lọc siêu dữ liệu trong giai đoạn truy xuất; Các bộ phận trái phép không bao giờ nên được mang theo.
- Danh tính và quyền hạn được xác định ở lớp ứng dụng đáng tin cậy; Hướng dẫn nhanh chóng chỉ là một lớp phòng thủ bổ sung.
- Mẫu lời nhắc mạnh mẽ bao gồm vai trò, quy tắc ứng xử (nền tảng, quyền không biết, nguồn, xung đột), bối cảnh được đánh số và câu hỏi.
- Trong cuộc trò chuyện nhiều vòng, các câu hỏi tiếp theo được tách riêng và mô hình tạo ra các câu trả lời nhất quán với lịch sử.
- Bằng cách tóm tắt lịch sử lâu dài, cửa sổ chi phí và bối cảnh được kiểm soát; ACL được áp dụng lại mỗi vòng.
Nhiệm vụ ứng dụng
(1) Xác định ít nhất ba nhóm ủy quyền cho trợ lý của riêng bạn (ví dụ: mọi người, bộ phận, người quản lý) và ghi vào bảng loại tài liệu nào được mở cho nhóm nào. (2) Điều chỉnh và viết mẫu lời nhắc trên theo vai trò và giọng điệu của riêng bạn; Làm cho bối cảnh được đánh số và có nguồn gốc. (3) Viết kịch bản hội thoại thực tế gồm ba vòng (câu hỏi → tiếp theo → tiếp theo) và tạo thủ công các phiên bản độc lập của từng câu hỏi tiếp theo. (4) Giải thích bằng một câu tại sao nên áp dụng lại bộ lọc ACL mỗi vòng trong kịch bản này.
danh sách kiểm tra
- [ ] Tôi triển khai kiểm soát quyền truy cập bằng bộ lọc truy xuất, tôi chỉ không dựa vào lời nhắc.
- [ ] Tôi thêm căn cứ, tôi không biết quyền, nguồn và quy tắc xung đột vào mẫu lời nhắc của mình.
- [ ] Tôi đánh số và tham chiếu các phần ngữ cảnh.
- [ ] Tôi đặt các câu hỏi tiếp theo một cách độc lập trước khi truy hồi.
- [ ] Tôi quản lý chi phí và thời lượng bằng cách tóm tắt lịch sử cuộc trò chuyện dài.