Kỹ thuật kỹ sư hướng dẫn

Guide này chia sẻ các chiến lược và chiến thuật để đạt kết quả tốt hơn từ các mô hình ngôn ngữ lớn (đôi khi được gọi là mô hình GPT) như GPT-4. Các phương pháp mô tả ở đây đôi khi có thể được triển khai kết hợp để hiệu quả cao hơn. Chúng tôi khuyến khích thử nghiệm để tìm ra các phương pháp hoạt động tốt nhất cho bạn.

Một số ví dụ được thể hiện ở đây hiện tại chỉ hoạt động với mô hình có khả năng mạnh nhất của chúng tôi, gpt-4. Nói chung, nếu bạn thấy rằng một mô hình không hoạt động trong một nhiệm vụ và có sẵn một mô hình mạnh hơn, thì thường đáng thử lại với mô hình mạnh hơn.

Mô tả ví dụ từ prompt word

Tất cả chúng ta đều biết rằng API Chat Model gọi OpenAI có ba loại tin nhắn, SYSTEM, USER và ASSISTANT, và các chức năng của ba loại tin nhắn này như sau:

Loại tin nhắn (tương ứng với tham số vai trò của api) Mô tả
SYSTEM Tin nhắn hệ thống giúp đặt hành vi của trợ lý. Ví dụ, bạn có thể sửa đổi tính cách của trợ lý hoặc cung cấp hướng dẫn cụ thể về cách nó nên hoạt động trong suốt cuộc trò chuyện. Tuy nhiên, hãy lưu ý rằng tin nhắn hệ thống là tùy chọn và hành vi của mô hình mà không có tin nhắn hệ thống có khả năng tương tự như khi sử dụng một tin nhắn chung như "Bạn là một trợ lý hữu ích."
USER Một tin nhắn người dùng là vấn đề đầu vào của người dùng.
ASSISTANT Tin nhắn trợ lý đại diện cho những gì GPT trả về.

Các ví dụ từ prompt word trong hướng dẫn này sẽ được giải thích theo định dạng sau:

// Tin nhắn SYSTEM
Đây là cách thiết lập từ khóa của tin nhắn SYSTEM.

// Tin nhắn USER
Đây là cách thiết lập từ khóa của tin nhắn USER.

// Tin nhắn ASSISTANT
Đây là cách mà GPT có thể trả về.

Chiến lược: Viết hướng dẫn rõ ràng

Chiến thuật: Bao gồm chi tiết trong truy vấn để nhận được câu trả lời liên quan hơn

Để nhận được một câu trả lời có liên quan cao, hãy đảm bảo rằng các yêu cầu cung cấp bất kỳ chi tiết hoặc bối cảnh quan trọng nào. Nếu không, bạn đang để cho mô hình phải đoán những gì bạn muốn nói.

Tệ hơn Tốt hơn
Làm thế nào để thêm số trong Excel? Làm thế nào để cộng tổng một dãy số tiền trong Excel? Tôi muốn làm điều này tự động cho một bảng tính với tất cả các tổng cuối cùng ở bên phải trong một cột có tên là "Tổng cộng".
Ai là người đang tổng thống? Ai là tổng thống của Mexico trong năm 2021 và bầu cử được tổ chức tần suất như thế nào?
Viết mã để tính dãy Fibonacci. Viết một hàm TypeScript để tính dãy Fibonacci một cách hiệu quả. Bình luận mã một cách rộng rãi để giải thích từng phần làm gì và tại sao nó được viết như vậy.
Tóm lược ghi chú cuộc họp. Tóm lược ghi chú cuộc họp trong một đoạn văn. Sau đó viết một danh sách dạng markdown về người nói và các điểm then chốt của họ. Cuối cùng, liệt kê các bước tiếp theo hoặc công việc được đề xuất bởi người nói, nếu có.

Chiến thuật: Yêu cầu mô hình áp dụng một nhân vật nhất định

Tin nhắn hệ thống có thể được sử dụng để chỉ định nhân vật được sử dụng bởi mô hình trong các phản hồi của nó.

// Tin nhắn SYSTEM
Khi tôi yêu cầu giúp đỡ để viết cái gì đó, bạn sẽ trả lời với một tài liệu chứa ít nhất một câu đùa hoặc bình luận đùa mỗi đoạn văn. 

// Tin nhắn USER
Viết một lá thư cảm ơn đến nhà cung cấp ốc vít thép của tôi vì giao hàng đúng hạn và trong thời gian ngắn. Điều này đã làm cho chúng tôi có thể giao một đơn đặt hàng quan trọng.

Chiến thuật: Sử dụng dấu phân cách để chỉ rõ các phần riêng biệt trong đầu vào

Dấu phân tách như dấu ngoặc kép ba lần, thẻ XML, tiêu đề phần, v.v. có thể giúp phân biệt các phần của văn bản để xử lý khác nhau.

// Tin nhắn USER
Tóm lược văn bản được giới hạn bởi dấu ngoặc kép ba lần với một bài thơ Haiku.

"""chèn văn bản vào đây"""
// Tin nhắn SYSTEM
Bạn sẽ được cung cấp một cặp bài báo (được giới hạn bởi thẻ XML) về cùng một chủ đề. Đầu tiên tóm lược các luận điểm của mỗi bài báo. Sau đó, chỉ ra bài nào đưa ra một luận điểm tốt hơn và giải thích tại sao.

// Tin nhắn USER
<article> chèn bài báo đầu tiên ở đây </article>
<article> chèn bài báo thứ hai ở đây </article>
// Tin nhắn SYSTEM
Bạn sẽ được cung cấp một tóm tắt luận án và một tiêu đề được đề xuất cho nó. Tiêu đề luận án nên cung cấp cho độc giả một ý tưởng tốt về chủ đề của luận án nhưng cũng nên làm cho mắt lạ. Nếu tiêu đề không đáp ứng các tiêu chí này, hãy đề xuất 5 lựa chọn khác.

// Tin nhắn USER
Tóm tắt: chèn tóm tắt ở đây

Tiêu đề: chèn tiêu đề ở đây

Chiến lược: Chia nhỏ công việc phức tạp thành các công việc đơn giản hơn

Theo chiến lược này, chúng ta có thể hướng dẫn mô hình thực hiện một nhiệm vụ phức tạp thông qua việc phân chia chúng thành các bước nhỏ hơn, dễ dàng hơn để hiểu và thực hiện.

// THÔNG ĐIỆP HỆ THỐNG

Thực hiện theo các hướng dẫn từng bước sau để đáp ứng yêu cầu của người dùng.

Bước 1 - Người dùng sẽ cung cấp cho bạn văn bản trong ba dấu ngoặc kép. Tóm tắt văn bản này trong một câu với tiền tố "Tóm lược: ".

Bước 2 - Dịch tóm lược từ Bước 1 sang tiếng Tây Ban Nha, với tiền tố là "Dịch: ".

// THÔNG ĐIỆP NGƯỜI DÙNG
"""nhập văn bản ở đây"""

Chiến lược: Cung cấp ví dụ

Việc cung cấp hướng dẫn tổng quát áp dụng cho tất cả các ví dụ thường hiệu quả hơn so với việc thể hiện tất cả các biến thể của một nhiệm vụ thông qua ví dụ, nhưng trong một số trường hợp, việc cung cấp ví dụ có thể dễ dàng hơn. Ví dụ, nếu bạn muốn mô hình sao chép một phong cách cụ thể để phản hồi các truy vấn người dùng, điều này khó mô tả một cách rõ ràng. Điều này được gọi là "few-shot" prompting.

// THÔNG ĐIỆP HỆ THỐNG
Trả lời một cách nhất quán.

// THÔNG ĐIỆP NGƯỜI DÙNG
Cho tôi biết về sự kiên nhẫn.

// THÔNG ĐIỆP TRỢ LÝ
Dòng sông đào sâu nhất thung lũng đến từ một nguồn nước khiêm tốn; bản giao hưởng lớn nhất bắt nguồn từ một nốt nhạc đơn giản; bức tranh tinh xảo nhất bắt đầu từ một sợi chỉ đơn độc.

// THÔNG ĐIỆP NGƯỜI DÙNG
Cho tôi biết về đại dương.

Chiến lược: Xác định độ dài đích đến của kết quả

Bạn có thể yêu cầu mô hình tạo ra các đầu ra có độ dài cụ thể. Độ dài đích đến có thể được chỉ định dưới dạng số từ, câu, đoạn văn, mục điểm, v.v. Tuy nhiên, lưu ý rằng chỉ đạo mô hình tạo ra một số từ cụ thể không hoạt động với độ chính xác cao. Mô hình có thể tạo ra các đầu ra cụ thể hơn với số đoạn văn hoặc mục điểm cụ thể.

// THÔNG ĐIỆP NGƯỜI DÙNG

Tóm lược văn bản được giới hạn bởi ba dấu ngoặc kép vào khoảng 50 từ.

"""nhập văn bản ở đây"""
// THÔNG ĐIỆP NGƯỜI DÙNG

Tóm lược văn bản được giới hạn bởi ba dấu ngoặc kép trong 2 đoạn văn.

"""nhập văn bản ở đây"""
// THÔNG ĐIỆP NGƯỜI DÙNG

Tóm lược văn bản được giới hạn bởi ba dấu ngoặc kép trong 3 mục điểm.

"""nhập văn bản ở đây"""

Chiến lược: Cung cấp văn bản tham chiếu

Chiến lược: Hướng dẫn mô hình trả lời sử dụng văn bản tham chiếu

Nếu chúng ta có thể cung cấp cho một mô hình thông tin đáng tin cậy liên quan đến câu hỏi hiện tại, chúng ta có thể hướng dẫn mô hình sử dụng thông tin cung cấp để soạn thảo câu trả lời.

// THÔNG ĐIỆP HỆ THỐNG
Sử dụng các bài viết được giới hạn bởi ba dấu ngoặc kép để trả lời các câu hỏi. Nếu không thể tìm thấy câu trả lời trong các bài viết, hãy viết "Tôi không thể tìm thấy câu trả lời."

// THÔNG ĐIỆP NGƯỜI DÙNG
<chèn các bài viết, mỗi bài viết được giới hạn bởi ba dấu ngoặc kép>

Câu hỏi: <chèn câu hỏi ở đây>

Xét đến việc tất cả các mô hình đều có cửa sổ ngữ cảnh hạn chế, chúng ta cần một cách để tìm thông tin động đến việc câu hỏi đang được đặt. Nhúng có thể được sử dụng để thực hiện tìm kiếm thông tin hiệu quả. Xem chiến lược "Sử dụng tìm kiếm dựa trên nhúng để thực hiện kiểm tra thông tin hiệu quả" để biết thêm chi tiết về cách thực hiện điều này.

Chiến lược: Hướng dẫn mô hình trả lời với việc trích dẫn từ văn bản tham chiếu

Nếu thông tin đầu vào đã được bổ sung với kiến thức có liên quan, dễ dàng yêu cầu mô hình thêm các trích dẫn vào câu trả lời bằng cách tham khảo các đoạn văn từ tài liệu cung cấp. Lưu ý rằng các trích dẫn trong kết quả có thể được xác minh một cách tự động bằng cách so sánh chuỗi với tài liệu cung cấp.

// THÔNG ĐIỆP HỆ THỐNG
Bạn sẽ được cung cấp một tài liệu giới hạn bởi ba dấu ngoặc kép và một câu hỏi. Nhiệm vụ của bạn là trả lời câu hỏi chỉ bằng việc sử dụng tài liệu cung cấp và đưa ra trích dẫn từ đoạn văn của tài liệu đã sử dụng để trả lời câu hỏi. Nếu tài liệu không chứa thông tin cần thiết để trả lời câu hỏi này, hãy đơn giản viết: "Thông tin không đủ." Nếu có câu trả lời cho câu hỏi, nó phải được chú thích bằng một trích dẫn. Sử dụng định dạng sau để trích dẫn đoạn văn liên quan ({"trích dẫn": …}).

// THÔNG ĐIỆP NGƯỜI DÙNG

"""<chèn tài liệu ở đây>"""

Câu hỏi: <chèn câu hỏi ở đây>

Chiến lược: Sử dụng phân loại ý định để xác định hướng dẫn phù hợp nhất cho truy vấn của người dùng

Các công việc mà cần sử dụng nhiều bộ hướng dẫn độc lập để xử lý các trường hợp khác nhau, việc phân loại loại truy vấn trước và sử dụng phân loại đó để xác định hướng dẫn cần thiết có thể mang lại lợi ích. Điều này có thể đạt được bằng cách xác định các danh mục cố định và cố định các hướng dẫn có liên quan cho việc xử lý nhiệm vụ trong một danh mục cố định. Quá trình này cũng có thể được áp dụng đệ quy để phân rã một nhiệm vụ thành một chuỗi các giai đoạn. Ưu điểm của cách tiếp cận này là mỗi truy vấn sẽ chỉ chứa những hướng dẫn cần thiết để thực hiện giai đoạn tiếp theo của một nhiệm vụ, điều này có thể dẫn đến tỷ lệ lỗi thấp hơn so với việc sử dụng một truy vấn duy nhất để thực hiện toàn bộ nhiệm vụ. Điều này cũng có thể dẫn đến chi phí thấp hơn vì các đoạn nhập lớn có chi phí cao hơn để chạy.

Giả sử ví dụ rằng cho một ứng dụng dịch vụ khách hàng, các truy vấn có thể được phân loại như sau:

// Hệ thống thông báo
Bạn sẽ được cung cấp các truy vấn dịch vụ khách hàng. Phân loại mỗi truy vấn vào một danh mục chính và một danh mục phụ. Cung cấp đầu ra của bạn dưới định dạng json với các key: primary và secondary.

Các danh mục chính: Thanh toán, Hỗ trợ kỹ thuật, Quản lý tài khoản, hoặc Thông tin chung.

Các danh mục phụ của Thanh toán:
- Hủy đăng ký hoặc nâng cấp
- Thêm phương thức thanh toán
- Giải thích cho lệ phí
- Khiếu nại về lệ phí

Các danh mục phụ của Hỗ trợ kỹ thuật:
- Sửa lỗi
- Tương thích thiết bị
- Cập nhật phần mềm

Các danh mục phụ của Quản lý tài khoản:
- Đặt lại mật khẩu
- Cập nhật thông tin cá nhân
- Đóng tài khoản
- Bảo mật tài khoản

Các danh mục phụ của Thông tin chung:
- Thông tin sản phẩm
- Giá cả
- Phản hồi
- Nói chuyện với một người

// Truy vấn của người dùng
Tôi cần kết nối mạng internet của tôi hoạt động lại.

Dựa trên việc phân loại của truy vấn của khách hàng, một tập hướng dẫn cụ thể hơn có thể được cung cấp cho một mô hình để xử lý các bước tiếp theo. Ví dụ, giả sử khách hàng cần trợ giúp với "sửa lỗi".

// Hệ thống thông báo
Bạn sẽ được cung cấp các yêu cầu dịch vụ khách hàng yêu cầu sự trợ giúp trong bối cảnh hỗ trợ kỹ thuật. Giúp người dùng bằng:

- Yêu cầu họ kiểm tra tất cả dây cáp đến / từ bộ định tuyến kết nối. Lưu ý rằng việc dây cáp bị lỏng là điều thông thường theo thời gian.
- Nếu tất cả các dây cáp được kết nối và vấn đề vẫn tiếp tục, hỏi họ xem họ đang sử dụng model định tuyến nào
- Bây giờ bạn sẽ hướng dẫn họ cách khởi động lại thiết bị của họ:
-- Nếu số model là MTD-327J, hướng dẫn họ nhấn nút đỏ và giữ nó trong 5 giây, sau đó đợi 5 phút trước khi kiểm tra kết nối.
-- Nếu số model là MTD-327S, hướng dẫn họ rút đi và cắm lại, sau đó đợi 5 phút trước khi kiểm tra kết nối.
- Nếu vấn đề của khách hàng vẫn tiếp tục sau khi khởi động lại thiết bị và đợi 5 phút, kết nối họ với hỗ trợ IT bằng cách đưa ra đầu ra {"Yêu cầu hỗ trợ IT"}.
- Nếu người dùng bắt đầu đặt câu hỏi không liên quan đến chủ đề này thì xác nhận xem họ có muốn kết thúc trò chuyện hiện tại về sửa lỗi và phân loại yêu cầu của họ theo lược đề sau:

<chèn lược đề phân loại chính / phụ ở trên vào đây>

// Truy vấn của người dùng
Tôi cần kết nối mạng internet của tôi hoạt động lại.

Chú ý rằng mô hình đã được chỉ đạo phát ra các chuỗi đặc biệt để cho biết khi trạng thái của cuộc trò chuyện thay đổi. Điều này cho phép chúng ta biến hệ thống của mình thành một máy trạng thái trong đó trạng thái xác định các hướng dẫn được chèn vào. Bằng cách theo dõi trạng thái, những hướng dẫn nào là phù hợp ở trạng thái đó, và cũng tùy chọn là những chuyển đổi trạng thái nào được phép từ trạng thái đó, chúng ta có thể đặt rào cản xung quanh trải nghiệm người dùng mà sẽ khó để đạt được với một cách tiếp cận ít có cấu trúc hơn.

Chiến lược: Đối với ứng dụng trò chuyện yêu cầu cuộc trò chuyện rất dài, tóm tắt hoặc lọc các cuộc trò chuyện trước

Vì các mô hình có độ dài ngữ cảnh cố định, cuộc trò chuyện giữa người dùng và trợ lý trong đó toàn bộ cuộc trò chuyện được bao gồm trong cửa sổ ngữ cảnh không thể tiếp tục vô tận.

Có nhiều phương pháp tạm thời cho vấn đề này, một trong số đó là tóm tắt lượt trò chuyện trước trong cuộc trò chuyện. Khi kích thước của đầu vào đạt đến một chiều dài ngưỡng được quy định trước, điều này có thể gây ra một truy vấn tóm tắt một phần của cuộc trò chuyện và tóm tắt của cuộc trò chuyện trước có thể được bao gồm như là một phần của thông báo hệ thống. Hoặc có thể tóm tắt cuộc trò chuyện trước không đồng bộ nền trong suốt toàn bộ cuộc trò chuyện.

Một giải pháp thay thế khác là chọn động các phần trước của cuộc trò chuyện mà có liên quan nhất đến truy vấn hiện tại. Xem chiến lược "Sử dụng tìm kiếm dựa trên nhúng để triển khai tìm kiếm thông tin hiệu quả".

Chiến lược: Cho phép mô hình "suy nghĩ"

Chiến thuật: Hướng dẫn mô hình tìm ra giải pháp trước khi kết luận

Đôi khi chúng ta có kết quả tốt hơn khi mô hình được hướng dẫn rõ ràng để suy luận từ nguyên tắc cơ bản trước khi đưa ra kết luận. Giả sử chẳng hạn chúng ta muốn một mô hình đánh giá giải pháp của một học sinh cho một bài toán toán học. Cách tiếp cận rõ ràng nhất trong trường hợp này là đơn giản là hỏi mô hình xem giải pháp của học sinh có đúng hay không.

// Hệ thống thông báo
Xác định xem giải pháp của học sinh có đúng hay không.

// Tin nhắn của NGƯỜI DÙNG
Tuyên bố bài toán: Tôi đang xây dựng một hệ thống điện năng lượng mặt trời và cần sự trợ giúp tính toán tài chính.
- Chi phí đất là $100 / foot vuông
- Tôi có thể mua tấm pin năng lượng mặt trời với giá $250 / foot vuông
- Tôi đã thương lượng một hợp đồng bảo dưỡng với chi phí cố định là $100k mỗi năm, và thêm $10 / foot vuông
Tính tổng chi phí cho năm đầu tiên vận hành dưới dạng một hàm của diện tích.

Giải pháp của học sinh: Đặt x là kích thước của hệ thống trong foot vuông.
1. Chi phí đất: 100x
2. Chi phí tấm pin năng lượng mặt trời: 250x
3. Chi phí bảo dưỡng: 100,000 + 100x
Tổng chi phí: 100x + 250x + 100,000 + 100x = 450x + 100,000

// Tin nhắn của TRỢ LÝ
Giải pháp của học sinh là đúng.

Tuy nhiên, giải pháp của học sinh thực sự không chính xác! Chúng ta có thể khiến cho mô hình nhận ra điều này bằng cách hướng dẫn mô hình tạo ra giải pháp riêng trước tiên.

// Hệ thống thông báo
Trước hết hãy tự tính toán ra giải pháp cho bài toán. Sau đó so sánh giải pháp của bạn với giải pháp của học sinh và đánh giá xem giải pháp của học sinh có đúng hay không. Đừng quyết định xem giải pháp của học sinh có đúng cho đến khi bạn đã làm bài toán của bạn.

// Tin nhắn của NGƯỜI DÙNG
Tuyên bố bài toán: Tôi đang xây dựng một hệ thống điện năng lượng mặt trời và cần sự trợ giúp tính toán tài chính.
- Chi phí đất là $100 / foot vuông
- Tôi có thể mua tấm pin năng lượng mặt trời với giá $250 / foot vuông
- Tôi đã thương lượng một hợp đồng bảo dưỡng với chi phí cố định là $100k mỗi năm, và thêm $10 / foot vuông
Tính tổng chi phí cho năm đầu tiên vận hành dưới dạng một hàm của diện tích.

Giải pháp của học sinh: Đặt x là kích thước của hệ thống trong foot vuông.
1. Chi phí đất: 100x
2. Chi phí tấm pin năng lượng mặt trời: 250x
3. Chi phí bảo dưỡng: 100,000 + 100x
Tổng chi phí: 100x + 250x + 100,000 + 100x = 450x + 100,000

// Tin nhắn của TRỢ LÝ
Đặt x là kích thước của hệ thống trong foot vuông.
1. Chi phí đất: 100x
2. Chi phí tấm pin năng lượng mặt trời: 250x
3. Chi phí bảo dưỡng: 100,000 + 10x
Tổng chi phí: 100x + 250x + 100,000 + 10x = 360x + 100,000

Giải pháp của học sinh không chính xác. Họ đã mắc lỗi trong việc tính toán chi phí bảo dưỡng, sử dụng 100x thay vì 10x. Tổng chi phí chính xác cho năm đầu tiên vận hành là 360x + 100,000.

Chiến thuật: Sử dụng nội tâm hoặc một chuỗi câu hỏi để che giấu quá trình suy luận của mô hình

Chiến thuật trước đó đã chứng minh rằng đôi khi quá trình suy luận chi tiết về một vấn đề trước khi trả lời một câu hỏi cụ thể là quan trọng. Đối với một số ứng dụng, quá trình suy luận mà một mô hình sử dụng để đạt được một câu trả lời cuối cùng sẽ không phù hợp để chia sẻ với người dùng. Ví dụ, trong các ứng dụng hướng dẫn, chúng ta có thể muốn khuyến khích học sinh tự giải quyết vấn đề của họ, nhưng quá trình suy luận của một mô hình về giải pháp của học sinh có thể tiết lộ đáp án cho học sinh.

Nội tâm là một chiến thuật có thể được sử dụng để giảm thiểu điều này. Ý tưởng của nội tâm là hướng dẫn mô hình đưa các phần của đầu ra mà được ẩn khỏi người dùng vào một định dạng cấu trúc dễ dàng phân tích chúng. Sau đó, trước khi trình bày đầu ra cho người dùng, đầu ra được phân tích và chỉ có một phần của đầu ra được hiển thị.

// Tin nhắn HỆ THỐNG
Theo dõi các bước sau để trả lời các truy vấn của người dùng.

Bước 1 - Đầu tiên, tự giải quyết vấn đề của bạn. Đừng phụ thuộc vào giải pháp của học sinh vì nó có thể không đúng. Bao gồm tất cả công việc của bạn cho bước này trong ba dấu ngoặc ba (`"""`).

Bước 2 - So sánh giải pháp của bạn với giải pháp của học sinh và đánh giá xem giải pháp của học sinh có đúng hay không. Bao gồm tất cả công việc của bạn cho bước này trong ba dấu ngoặc ba (`"""`).

Bước 3 - Nếu học sinh mắc phải một lỗi, xác định gợi ý bạn có thể đưa cho học sinh mà không tiết lộ đáp án. Bao gồm tất cả công việc của bạn cho bước này trong ba dấu ngoặc ba (`"""`).

Bước 4 - Nếu học sinh mắc phải một lỗi, cung cấp gợi ý từ bước trước cho học sinh (ngoài khỏi ba dấu ngoặc ba). Thay vì viết "Bước 4 - ..." viết "Gợi ý:".

// Tin nhắn NGƯỜI DÙNG
Tuyên bố vấn đề: <insert tuyên bố vấn đề>

Giải pháp của học sinh: <insert giải pháp của học sinh>

Một cách khác, điều này có thể được thực hiện với một chuỗi các câu hỏi trong đó tất cả trừ câu cuối cùng đều bị che giấu khỏi người dùng.

Đầu tiên, chúng ta có thể yêu cầu mô hình tự giải quyết vấn đề. Vì câu truy vấn ban đầu này không yêu cầu giải pháp của học sinh, nó có thể được bỏ qua. Điều này cung cấp lợi ích bổ sung rằng không có cơ hội nào mà giải pháp của mô hình sẽ bị ảnh hưởng bởi giải pháp của học sinh.

// Tin nhắn NGƯỜI DÙNG
<insert tuyên bố vấn đề>

Tiếp theo, chúng ta có thể yêu cầu mô hình sử dụng tất cả thông tin có sẵn để đánh giá tính chính xác của giải pháp của học sinh.

// Tin nhắn HỆ THỐNG
So sánh giải pháp của bạn với giải pháp của học sinh và đánh giá xem giải pháp của học sinh là đúng hay không.

// Tin nhắn NGƯỜI DÙNG
Tuyên bố vấn đề: """<insert tuyên bố vấn đề>"""

Giải pháp của bạn: """<insert giải pháp được tạo ra bởi mô hình>"""

Giải pháp của học sinh: """<insert giải pháp của học sinh>"""

Cuối cùng, chúng ta có thể để mô hình sử dụng phân tích của chính mình để xây dựng một phản hồi dưới hình ảnh của một giáo viên giỏi giang.

// Tin nhắn HỆ THỐNG
Bạn là một gia sư toán. Nếu học sinh mắc lỗi, hãy đưa ra một gợi ý cho học sinh mà không tiết lộ đáp án. Nếu học sinh không mắc lỗi, đơn giản chỉ cần đưa ra một lời nhận xét ôn hòa cho họ.

// Tin nhắn NGƯỜI DÙNG
Tuyên bố vấn đề: """<insert tuyên bố vấn đề>"""

Giải pháp của bạn: """<insert giải pháp được tạo ra bởi mô hình>"""

Giải pháp của học sinh: """<insert giải pháp của học sinh>"""

Phân tích: """<insert phân tích được tạo ra bởi mô hình từ bước trước>"""

Chiến thuật: Hỏi mô hình xem nó đã bỏ sót điều gì trong các lần truy vấn trước đó

Giả sử chúng ta đang sử dụng một mô hình để liệt kê các đoạn trích từ một nguồn mà liên quan đến một câu hỏi cụ thể. Sau khi liệt kê mỗi đoạn trích, mô hình cần xác định xem nó có nên bắt đầu viết thêm hoặc nên dừng lại không. Nếu tài liệu nguồn lớn, thì việc mô hình kết thúc quá sớm và không liệt kê tất cả các đoạn trích liên quan là điều phổ biến. Trường hợp đó, hiệu suất tốt hơn thường có thể được đạt được bằng cách yêu cầu mô hình với các truy vấn theo dõi để tìm bất kỳ đoạn trích nào mà nó đã bỏ sót trong các lần truy vấn trước đó.

// Tin nhắn HỆ THỐNG
Bạn sẽ được cung cấp một tài liệu được giới hạn bởi ba dấu ngoặc ba. Nhiệm vụ của bạn là chọn các đoạn trích có liên quan đến câu hỏi sau: "Có những cách tiếp cận cách mạng quan trọng nào đã xảy ra trong lịch sử của trí tuệ nhân tạo."

Đảm bảo rằng các đoạn trích chứa tất cả ngữ cảnh liên quan cần thiết để diễn giải chúng - nói cách khác đừng trích xuất những đoạn nhỏ bỏ mất ngữ cảnh quan trọng. Cung cấp đầu ra dưới dạng JSON như sau:

[{"đoạn trích": "..."},
...
{"đoạn trích": "..."}]

// Tin nhắn NGƯỜI DÙNG
"""<insert tài liệu ở đây>"""

// Tin nhắn TRỢ LÝ
[{"đoạn trích": "mô hình viết một đoạn trích ở đây"},
...
{"đoạn trích": "mô hình viết một đoạn trích khác ở đây"}]

// Tin nhắn NGƯỜI DÙNG
Có thêm đoạn trích liên quan không? Chắc chắn không lặp lại đoạn trích. Đồng thời đảm bảo rằng đoạn trích có chứa tất cả ngữ cảnh liên quan cần thiết để diễn giải - nói cách khác đừng trích xuất những đoạn nhỏ bỏ mất ngữ cảnh quan trọng.

Chiến lược: Sử dụng công cụ bên ngoài

Chiến thuật: Sử dụng tìm kiếm dựa trên nhúng để thực hiện lấy thông tin hiệu quả

Một mô hình có thể tận dụng các nguồn thông tin bên ngoài nếu chúng được cung cấp như một phần của đầu vào của mô hình. Điều này có thể giúp mô hình tạo ra phản hồi thông tin thông minh và cập nhật hơn. Ví dụ, nếu người dùng đặt một câu hỏi về một bộ phim cụ thể, việc thêm thông tin chất lượng cao về bộ phim đó (ví dụ: diễn viên, đạo diễn, v.v.) vào đầu vào của mô hình có thể rất hữu ích. Các nhúng văn bản có thể được sử dụng để thực hiện lấy thông tin hiệu quả, để thông tin liên quan có thể được thêm vào đầu vào của mô hình một cách linh hoạt vào thời gian chạy.

Một nhúng văn bản là một vector có thể đo lường sự liên quan giữa chuỗi văn bản. Chuỗi tương tự hoặc liên quan sẽ gần nhau hơn so với chuỗi không liên quan. Điều này, cùng với việc tồn tại các thuật toán tìm kiếm vector nhanh, có nghĩa là nhúng có thể được sử dụng để thực hiện lấy thông tin hiệu quả. Cụ thể, một ngữ liệu văn bản có thể được chia thành các phần, và mỗi phần có thể được nhúng và lưu trữ. Sau đó, một truy vấn cụ thể có thể được nhúng và tìm kiếm vector để tìm các phần văn bản nhúng từ ngữ liệu có liên quan nhất với truy vấn (tức là gần nhau nhất trong không gian nhúng).

Chiến thuật: Sử dụng thực thi mã để thực hiện tính toán chính xác hơn hoặc gọi các API bên ngoài

Các mô hình ngôn ngữ không thể được tin cậy để thực hiện tính toán số hoặc tính toán dài một cách chính xác mà không cần giúp đỡ bên ngoài. Trong những trường hợp cần thiết này, một mô hình có thể được hướng dẫn để viết và thực thi mã thay vì thực hiện các tính toán của mình. Cụ thể, một mô hình có thể được hướng dẫn để đặt mã cần được thực thi vào một định dạng cụ thể như ba dấu nháy ngược. Sau khi có kết quả đầu ra, mã có thể được trích xuất và thực thi. Cuối cùng, nếu cần thiết, kết quả từ trình thực thi mã (tức là trình thông dịch Python) có thể được cung cấp như một đầu vào cho mô hình cho truy vấn tiếp theo.

// Tin nhắn từ HỆ THỐNG

Bạn có thể viết và thực thi mã Python bằng cách bao bọc nó trong ba dấu nháy ngược, ví dụ: ```mã ở đây```. Sử dụng điều này để thực hiện các phép tính.

// Tin nhắn từ NGƯỜI DÙNG

Tìm tất cả các nghiệm có giá trị thực của đa thức sau: 3*x**5 - 5*x**4 - 3*x**3 - 7*x - 10.

Một trường hợp sử dụng mã khác là gọi các API bên ngoài. Nếu một mô hình được hướng dẫn cách sử dụng một API một cách chính xác, nó có thể viết mã để sử dụng API đó. Một mô hình có thể được hướng dẫn cách sử dụng một API bằng cách cung cấp tài liệu và/hoặc mẫu mã để chỉ ra cách sử dụng API đó.

// Tin nhắn từ HỆ THỐNG

Bạn có thể viết và thực thi mã Python bằng cách bao bọc nó trong ba dấu nháy ngược. Đồng thời lưu ý rằng bạn có quyền truy cập vào mô-đun sau để giúp người dùng gửi tin nhắn cho bạn bè của họ:

\`\`\`python
import message
message.write(to="John", message="Hey, muốn gặp sau giờ làm việc không?")\`\`\`

CẢNH BÁO: Thực thi mã được tạo ra bởi mô hình không an toàn theo bản chất và cần phải thực hiện các biện pháp cẩn trọng trong bất kỳ ứng dụng nào muốn làm điều này. Cụ thể, một môi trường thực thi mã bảo vệ phải được sử dụng để giới hạn thiệt hại mà mã không tin cậy có thể gây ra.

Chiến thuật: Cho mô hình truy cập vào các hàm cụ thể

API Hoàn chỉnh Trò chuyện cho phép truyền một danh sách các mô tả hàm trong các yêu cầu. Điều này cho phép mô hình tạo ra các đối số hàm theo các lược đồ được cung cấp. Các đối số hàm tạo ra sẽ được trả về bởi API dưới dạng JSON và có thể được sử dụng để thực thi các cuộc gọi hàm. Kết quả được cung cấp bởi các cuộc gọi hàm sau đó có thể được đưa trở lại mô hình trong yêu cầu tiếp theo để đóng vòng lặp. Đây là cách được khuyến nghị để sử dụng các mô hình OpenAI để gọi các hàm bên ngoài.

Chiến lược: Kiểm tra thay đổi một cách có hệ thống

Đôi khi việc xác định xem một thay đổi — ví dụ, một hướng dẫn mới hoặc một thiết kế mới — có làm cho hệ thống của bạn tốt hơn hay tồi hơn không phải lúc nào cũng dễ dàng. Nhìn vào một vài ví dụ có thể sẽ gợi ý xem cái nào tốt hơn, nhưng với kích thước mẫu nhỏ thì việc phân biệt giữa một cải thiện thực sự và sự may mắn ngẫu nhiên có thể khó khăn. Có thể thay đổi giúp cải thiện hiệu suất trên một số input nhất định, nhưng làm giảm hiệu suất trên các input khác.

Các thủ tục đánh giá (hay "kiểm tra") rất hữu ích để tối ưu hóa thiết kế hệ thống. Các kiểm tra tốt là:

  • Đại diện cho việc sử dụng trong thế giới thực (hoặc ít nhất đa dạng)
  • Bao gồm nhiều trường hợp kiểm tra để có sức mạnh thống kê cao hơn (xem bảng dưới đây để biết hướng dẫn)
  • Dễ dàng tự động hóa hoặc lặp lại
Sự khác biệt cần phát hiện Số lượng mẫu cần thiết cho sự tự tin 95%
30% ~10
10% ~100
3% ~1,000
1% ~10,000

Việc đánh giá các kết quả có thể được thực hiện bởi máy tính, con người, hoặc sự kết hợp cả hai. Máy tính có thể tự động hóa việc đánh giá với các tiêu chí khách quan (ví dụ, câu hỏi có một đáp án đúng) cũng như một số tiêu chí chủ quan hoặc mơ hồ, trong đó kết quả mô hình được đánh giá bởi các truy vấn từ mô hình khác. OpenAI Evals là một framework phần mềm nguồn mở cung cấp các công cụ để tạo ra các thủ tục đánh giá tự động.

Các đánh giá dựa trên mô hình có thể hữu ích khi có một loạt các kết quả có thể được coi là chất lượng cao một cách tương đương (ví dụ, cho các câu hỏi có câu trả lời dài). Đường ranh giới giữa những gì có thể được đánh giá một cách hiện thực với đánh giá dựa trên mô hình và những gì đòi hỏi sự đánh giá từ con người là mơ hồ và liên tục thay đổi khi các mô hình trở nên mạnh mẽ hơn. Chúng tôi khuyến khích thử nghiệm để tìm ra mức độ mà đánh giá dựa trên mô hình có thể hoạt động tốt cho trường hợp sử dụng của bạn.

Chiến thuật: Đánh giá kết quả mô hình so với câu trả lời chuẩn mực

Giả sử ta biết rằng câu trả lời đúng cho một câu hỏi nên liên quan đến một tập hợp cụ thể các sự kiện đã biết. Khi đoạn mã có thể sử dụng để đếm xem câu trả lời có bao gồm bao nhiêu sự kiện cần thiết.

Ví dụ, sử dụng tin nhắn hệ thống sau:

// Tin nhắn hệ thống
Bạn sẽ được cung cấp văn bản được phân cách bởi ba dấu ngoặc kép mô tả câu trả lời cho một câu hỏi. Kiểm tra xem các thông tin sau có trực tiếp xuất hiện trong câu trả lời hay không:

- Neil Armstrong là người đầu tiên bước chân lên mặt trăng.
- Ngày Neil Armstrong bước chân lên mặt trăng là ngày 21 tháng 7 năm 1969.

Đối với mỗi điểm này, thực hiện các bước sau:

1 - Trình bày lại điểm đó.
2 - Cung cấp một nguồn trích dẫn từ câu trả lời gần với điểm này.
3 - Xem xét liệu người đọc trích dẫn mà không biết chủ đề có thể suy luận trực tiếp điểm đó hay không. Giải thích tại sao hoặc tại sao không trước khi đưa ra quyết định.
4 - Viết "yes" nếu câu trả lời cho 3 là có, nếu không viết "no".

Cuối cùng, cung cấp số lượng "yes" có trong đó. Cung cấp số liệu dưới dạng {"count": <số lượng ở đây>}.

Dưới đây là một câu trả lời mẫu đáp ứng cả hai điểm:

// Tin nhắn hệ thống
<chèn tin nhắn hệ thống ở trên>

// Tin nhắn người dùng
"""Neil Armstrong nổi tiếng vì là người đầu tiên bước chân lên mặt trăng. Sự kiện lịch sử này diễn ra vào ngày 21 tháng 7 năm 1969, trong suốt nhiệm vụ Apollo 11."""

Dưới đây là một ví dụ khi chỉ có một điểm được đáp ứng:

// Tin nhắn hệ thống

<chèn tin nhắn hệ thống ở trên>

// Tin nhắn người dùng

"""Neil Armstrong đã tạo ra lịch sử khi bước ra khỏi module lên mặt trăng, trở thành người đầu tiên bước chân lên mặt trăng."""

Dưới đây là một ví dụ khi không có điểm nào được đáp ứng:

// Tin nhắn hệ thống

<chèn tin nhắn hệ thống ở trên>

// Tin nhắn người dùng

"""Trong mùa hè năm '69, một cuộc hành trình lịch sử, Apollo 11, mạnh mẽ như bàn tay huyền thoại. Armstrong đã bước một bước, lịch sử mở ra, 'Một bước nhỏ,' anh nói, cho một thế giới mới."""

Có nhiều biến thể khả dĩ trong việc đánh giá dựa trên mô hình. Hãy xem xét biến thể sau, theo dõi sự trùng lặp giữa câu trả lời ứng viên và câu trả lời chuẩn mực, và cũng theo dõi xem câu trả lời ứng viên có mâu thuẫn với bất kỳ phần nào của câu trả lời chuẩn mực hay không.

// Tin nhắn hệ thống
Sử dụng các bước sau để phản hồi các đầu vào của người dùng. Trình bày rõ mỗi bước trước khi tiến hành. Ví dụ: "Bước 1: Lý do...".

Bước 1: Lý do từng bước về việc thông tin trong câu trả lời được nộp so với câu trả lời chuyên gia có thể là: không giao nhau, bằng nhau, một tập con, một tập siêu, hoặc trùng nhau (tức là có sự giao nhau nhưng không phải tập con/tập siêu).
  
Bước 2: Lý do từng bước về việc xem xét liệu câu trả lời được nộp mâu thuẫn với bất kỳ khía cạnh nào của câu trả lời chuyên gia.

Bước 3: Đầu ra một đối tượng JSON có cấu trúc như sau: {"type_of_overlap": "không giao nhau" hoặc "bằng nhau" hoặc "tập con" hoặc "tập siêu" hoặc "trùng nhau", "mâu thuẫn": true hoặc false}

Dưới đây là một ví dụ với một câu trả lời không chất lượng nhưng không mâu thuẫn với câu trả lời chuyên gia:

// Tin nhắn hệ thống

<chèn tin nhắn hệ thống ở trên>

// Tin nhắn người dùng

Câu hỏi: """Sự kiện nào là sự kiện nổi tiếng nhất của Neil Armstrong và vào ngày nào nó diễn ra? Giả sử giờ UTC."""

Câu trả lời được nộp: """Anh ta có bước lên mặt trăng hay sao?"""

Câu trả lời chuyên gia: """Neil Armstrong nổi tiếng nhất vì là người đầu tiên bước chân lên mặt trăng. Sự kiện lịch sử này diễn ra vào ngày 21 tháng 7 năm 1969."""

Dưới đây là một ví dụ với một câu trả lời trực tiếp mâu thuẫn với câu trả lời chuyên gia:

// Tin nhắn hệ thống

<chèn tin nhắn hệ thống ở trên>

// Tin nhắn người dùng
Câu hỏi: """Sự kiện nào là sự kiện nổi tiếng nhất của Neil Armstrong và vào ngày nào nó diễn ra? Giả sử giờ UTC."""

Câu trả lời được nộp: """Vào ngày 21 tháng 7 năm 1969, Neil Armstrong trở thành người thứ hai bước chân lên mặt trăng, sau Buzz Aldrin."""

Câu trả lời chuyên gia: """Neil Armstrong nổi tiếng nhất vì là người đầu tiên bước chân lên mặt trăng. Sự kiện lịch sử này diễn ra vào ngày 21 tháng 7 năm 1969."""

Dưới đây là một ví dụ với một câu trả lời đúng và cung cấp thêm một chút thông tin không cần thiết:

// Tin nhắn HỆ THỐNG
<chèn tin nhắn hệ thống ở trên>

// Tin nhắn NGƯỜI DÙNG

Câu hỏi: """Neil Armstrong nổi tiếng vì sự kiện gì nhất và vào ngày nào sự kiện đó diễn ra? Giả sử theo giờ UTC."""

Câu trả lời gửi đi: """Vào khoảng 02:56 UTC ngày 21 tháng 7 năm 1969, Neil Armstrong trở thành người đầu tiên đặt chân lên bề mặt mặt trăng, đánh dấu một thành tựu vĩ đại trong lịch sử nhân loại."""

Câu trả lời của chuyên gia: """Neil Armstrong nổi tiếng vì là người đầu tiên bước chân lên mặt trăng. Sự kiện lịch sử này diễn ra vào ngày 21 tháng 7 năm 1969."""