Lời mở đầu
Chào các bạn, mình trở lại rồi đây. Sau một thời gian làm dự án về một hệt thống trợ lý ảo sử dụng các công nghệ bên thứ 3 như OpenAI, Azure thì hôm nay, mình sẽ chia sẻ cho các bạn một kiến thức khá hot dạo gần đầy liên quan đến lĩnh vực Prompt Engineering, đó là prompt sao cho hiệu quả ChatGPT xịn xò, nhưng nếu bạn không biết cách hỏi hay hướng dẫn nó trả lời sao cho đúng ý bạn, thì cẩn thận kẻo bạn lại điên tiết với nó đấy. Cùng tìm hiểu kỹ hơn việc "hỏi sao cho tốt" nhé. Gét gô!
Nội dung
Viết hướng dẫn một cách rõ ràng
Chứa các thông tin chi tiết vào trong query để câu trả lời liên quan hơn
- Chắc hẳn ai cũng biết, muốn người khác trả lời đúng ý mình thì câu hỏi mình đặt ra cũng cần rõ ràng, cụ thể để đối phương hiểu. ChatGPT mạnh, nhưng nó sẽ thực sự mạnh khi bạn nói rõ ràng cho nó hiểu. Nội dung cần rõ ràng, chi tiết hoặc có bối cảnh cụ thể\
- Ví dụ thay vì hỏi "Viết đoạn code tính dãy Fibonacci", bạn có thể yêu cầu nó cụ thể hơn như "Hãy viết cho tôi mọt đoạn mã Python tính dãy Fibonacci, đồng thời hãy thêm các comment để giải thích chức năng theo từng phần"
Yêu cầu model chấp nhận một nhân cách nào đó
- Thay vì trả lời một cách nghiêm túc hoặc dập khuôn, bạn có thể yêu cầu ChatGPT trả lời một cách hài hước, vui tươi. Chiến lược này sẽ khá phù hợp khi các bạn yêu cầu nó gợi ý một bài phát biểu hay một đoạn văn nào đó
Sử dụng các dấu phân cách để phân tách rõ các phần trong input
- Lúc mới sử dụng ChatGPT, mình có thiên hướng kiểu coi nó như một người bạn và hỏi nó khá là lộn xộn, mỗi câu lại hỏi nói một ý, nó trả lời không đúng thì hỏi lại nó. Điều này khá tốn thời gian và đôi khi không hiệu quả (Vì ChatGPT chỉ nhớ được một lượng chat trong quá khứ một cách giới hạn). Làm một vài dự án sử dụng ChatGPT, mình mới thấy việc phân cách trong prompt nó quan trọng thế nào
- Bạn nên sử dụng các dấu như ngoặc kép ba, thẻ XML, tiêu đề phần, ... để phân định rõ ràng các phần cần được xử lý. Ví dụ
1. Instruction
...
2. Rules
...
3. Input
"""Input here"""
4. Output format
...
- Tất nhiên với các task đơn giản thì các bạn sẽ chưa thấy rõ được ưu điểm của chiến lược này nhưng nếu làm các task phức tạp như đưa ra câu trả lời từ câu hỏi và các tài liệu đính kèm, hay phân loại hội thoại vào các nhóm chỉ định thì bạn sẽ thấy hiệu quả to lớn của chiến lược này
Xác định được các bước cụ thể cần có để có thể thực thi được yêu cầu
- Khi gặp một nhiệm vụ tương đối khó hoặc phức tạp, sẽ dễ dàng hơn khi chúng ta định hình được một chuỗi các bước để hướng dẫn ChatGPT
- ChatGPT mạnh nhưng đôi khi các bạn nên coi nó như một đứa trẻ rất thông minh, chỉ là nó cần người hướng dẫn/gợi ý để nó tìm ra lời giải
- Thay vì "Phân loại cho tôi đoạn hội thoại sau xem nó thuộc nhóm nào?", chúng ta có thể gợi ý nó như sau
Vui lòng làm theo các bước sau để phân loại đoạn hội thoại đầu vào
- Bước 1: Xác định ngôn ngữ được sử dụng trong đoạn hội thoại và hình thức hội thoại là Formal hay Informal - Bước 2: Xác định các keywords của đoạn hội thoại
- Bước 3: Đánh giá sự liên quan giữa các keywords với các nhóm được chỉ định
- Bước 4: Xếp hạng độ liên quan và lấy ra nhóm có độ liên quan cao nhất
Cung cấp thêm các ví dụ
- Có bao giờ các bạn nghe giảng cả 1-2 tiếng đồng hồ chưa hiểu nhưng khi nghe đến ví dụ thì chỉ 15p là hiểu bài chưa? Tất nhiên mình không đánh nhẹ việc nghe lý thuyết nhưng khi lý thuyết có kèm thêm ví dụ thì sẽ giúp người nghe hiểu rất nhanh kiến thức mà người nói muốn truyền tải
- ChatGPT cũng vậy, khi bạn truyền thêm cho nó ví dụ một cách rõ ràng, độ chính xác trong câu trả lời của nó sẽ tăng lên rất nhiều. Tất nhiên không phải Task nào cũng có thể đưa ra ví dụ, chúng ta cần đánh giá task xem ví dụ đưa vào có phù hợp hay không, kẻo lại gậy ông đập lưng ông nhé
Chỉ định format/đặc điểm mong muốn của output answer
- Bạn nên xác định rõ đầu ra mong muốn của mình có nhưng đặc điểm nào, ví dụ tóm tắt văn bản chỉ trong 2 câu, hay output đầu ra chỉ gồm nhãn dự đoán mà không giải thích gì thêm, ...
- Khi sử dụng ChatGPT cho các dự án thì chắc hẳn các bạn cũng biết cần đồng bộ hóa đầu ra sao cho chuẩn chỉnh để pipeline cả dự án hoạt động ổn định, không thể Output của prompt lúc thì là số, lúc thì là chữ, hoặc lúc thì format json, lúc lại format list được
- Vì vậy tùy vào mục đích thì chúng ta nên nhắc nhở rõ Output đầu ra mong muốn là như thế nào
- Theo quan điểm/kinh nghiệm của mình thì các bạn nên sử dụng Json output format của CHatGPT, vì từ bản 3.5 và 4.0 đã cho phép cấu hình để đầu ra luôn các định dạng Json hoặc 1 số định dạng khác, trong đó Json mình thấy đa năng nhất. Các bạn có thể đọc thêm tại đây
Cung cấp văn bản liên quan
Hướng dẫn model trả lời sử dụng văn bản liên quan
- Hiện nay ChatGPT được dùng khá nhiều trong việc xây dựng một trợ lý ảo, trợ lý này có thể tìm kiếm thông tin Internet, cũng có thể tìm kiếm thông tin trong một tài liệu cho trước
- Bạn cũng biết là Internet rất phong phú, một câu hỏi có thể có rất nhiều câu trả lời. Bỏ qua tính đúng sai của đống câu trả lời kia thì nếu bạn có một tài liệu nào đó bạn tin cậy thì sẽ thật tuyệt khi bạn đưa nó cho ChatGPT, và có nhắc nhở nó từ trước là hãy sử dụng thông tin trong văn bản sau để tìm kiếm câu trả lời. Lúc này câu hỏi của bạn sẽ sát với tài liệu bạn đưa vào hơn và ChatGPT cũng "biết phải trả lời thế nào"
- Tất nhiên việc đưa cả văn bản vào sẽ có nhiều điểm bất cập như nội dung quá dài, có nhiều nội dung không liên quan tới câu hỏi, hay vượt quá limit token của ChatGPT. Các bạn sẽ cần vận dung linh hoạt các chiến lược như phân nhỏ tài liệu ra, có thể sử dụng embedding để tìm kiếm các đoạn phân nhỏ liên quan đến câu hỏi, sau đó mới sử dụng ChatGPT để tìm câu trả lời, ....
Hướng dẫn model trả lời với việc trích dẫn từ các văn bản liên quan
- Đây cũng là một cách thức để chúng ta có thể biết rằng liệu ChatGPT trả lời có đúng hay không. Chúng ta sẽ yêu cầu ChatGPT sử dụng văn bản đưa vào để trả lời câu hỏi, nhưng bên cạnh đó cũng yêu cầu nó trích dẫn ra văn bản/đoạn văn bản mà nó sử dụng để trả lời cho câu hỏi đưa vào
- Việc này sẽ giúp ta quản lý được tốt hơn câu trả lời của CHatGPT, cũng như có những điều chỉnh phù hợp trong Prompt hay khi lần ngược xem tại sao câu trả lời không đúng
Chia task phức tạp thành các task con đơn giản hơn
Sử dụng phân loại mục đích (intent classification) để xác định các hướng dẫn phù hợp nhất đối với truy vấn đầu vào
- Phần này mình phải ngồi đọc một lúc mới hiểu ý đồ ở đây là gì. Cùng phân tích qua về lý thuyết của chiến lược này nhé.
- Đây là một chiến lược sử dụng phân loại ý định (intent classification) để xác định các hướng dẫn quan trọng nhất cho một câu truy vấn của người dùng. Ý định là ý đồ hoặc mục đích mà người dùng muốn diễn tả thông qua câu truy vấn của mình. Phân loại ý định là quá trình xác định loại ý định mà câu truy vấn thuộc về, chẳng hạn như yêu cầu, thông tin, phản hồi, hỗ trợ kỹ thuật, v.v.
- Bằng cách sử dụng phân loại ý định, ta có thể xác định một danh sách các hướng dẫn phù hợp nhất với ý định đó. Các hướng dẫn này có thể được chuẩn bị trước và được đưa vào mô hình để giúp nó hiểu và đáp ứng mục tiêu cụ thể của người dùng.
- Ví dụ, khi người dùng đặt câu hỏi "Làm thế nào để đặt lịch hẹn?", một mô hình phân loại ý định có thể xác định rằng ý định của câu truy vấn là yêu cầu, cụ thể là yêu cầu đặt lịch hẹn. Sau đó, các hướng dẫn liên quan đến quy trình đặt lịch hẹn có thể được áp dụng để trả lời câu truy vấn của người dùng một cách chính xác và hữu ích.
- Về bản chất thì trước khi nếu không có bước xác định ý định câu truy vấn, thì việc trả lời 1 câu hỏi bất kỳ sẽ khá mơ hồ và khó kiểm soát. Thay vào đó chúng ta sẽ phân rã một nhiệm vụ thành 1 chuỗi các giai đoạn, từ đó 1 truy vấn sẽ chỉ theo 1 luồng duy nhất.
- Việc sử dụng phân loại ý định trong Prompt engineering giúp tăng cường khả năng hiểu và tương tác của mô hình với người dùng. Nó cho phép mô hình tập trung vào các hướng dẫn cụ thể và phù hợp nhất để thực hiện mục tiêu của người dùng, đồng thời giảm thiểu thông tin không liên quan và cung cấp trải nghiệm tốt hơn cho người dùng.
Đối với các ứng dụng liên quan đến hội thoại thường có hội thoại rất dài, tóm tắt hoặc lọc các hội thoại trước đó
- Các ứng dụng liên quan đến hội thoại có đặc điểm chung là cuộc hội thoại rất dài, mà số lượng token đưa vào ChatGPT là có hạn. Bạn tưởng tượng khi bạn hỏi tới câu thứ 10 là giới hạn ghi nhớ của GPT rồi thì khi bạn hỏi câu 11 thì các nội dung ở câu 1 có thể sẽ bị mất, nhwung bạn lại muốn nó nhớ tất cả?
- Có nhiều cách giải quyết khác nhau nhưng một trong số đó là tóm tắt hoặc lọc các cuộc trò chuyện trước đó
- Tóm tắt cuộc trò chuyện là quá trình tạo ra một bản tóm tắt ngắn gọn của nội dung quan trọng trong cuộc trò chuyện. Điều này giúp người dùng và mô hình có cái nhìn tổng quan về cuộc trò chuyện mà không cần đọc toàn bộ nội dung chi tiết.
- Lọc cuộc trò chuyện là quá trình loại bỏ các phần không cần thiết hoặc không quan trọng trong cuộc trò chuyện. Việc loại bỏ những phần này giúp giữ lại chỉ những thông tin quan trọng và liên quan đến mục tiêu hiện tại của cuộc trò chuyện.
Tóm tắt các văn bản dài thành từng phần và xây dựng một bản tóm tắt đầy đủ theo cách đệ quy
- Đây là chiến lược được sử dụng đối với trường hợp bạn cần tóm tắt một văn bản rất dài, nhwung riêng cái nội dung văn bản đó đã vượt quá giới hạn token của CHatGPT
- Chiến lược đưa ra có thể nói đơn giản như sau
- Chia nhỏ văn bản thành từng phần
- Tóm tắt từng phần đó bằng prompt ChatGPT
- Kết quả tóm tắt từng phần có thể được ghép lại thành một bản tóm tắt đầy đủ.
- Nếu bản tóm tắt đầy đủ vẫn quá dài so với kỳ vọng thì ta có thể lặp lại quá trình chia nhỏ, tím tắt từng phần,..... đến khi nào thỏa mãn. Đây chính là lý do chiến lược nói theo cách đệ quy
Tóm tắt
Như vậy mình cũng đã chia sẻ cho các bạn về 3 chiến lược đầu tiên mà OpenAI đề cập tới trong việc Prompt sao cho hiệu quả. Nhìn chung thì với những người làm các dự án liên quan đến các API của OpenAI sẽ thấy nhưng chiến lược này vô cùng hiệu quả và nên dùng. Còn 3 chiến lược nữa mình xin phép để trong bài viết tiếp theo nha vì bài viết cũng lắm chữ quá rồi. Các bạn đọc nếu có góp ý gì cho mình xin dưới comment nhé. Nếu thấy hay và hứng thú hãy cho mình 1 Upvote và 1 đăng ký nha. Cảm ơn mọi người
Tài liệu tham khảo
Prompt engineering: Six strategies for getting better results