Khám phá Kỹ thuật Prompt trong LLM

1 Kỹ thuật Prompt là gì

1.1 Prompt là gì?

Mô hình ngôn ngữ lớn (LLM) cuối cùng cũng chỉ là một công cụ. Chúng ta không thể ai cũng huấn luyện một mô hình lớn, nhưng chúng ta có thể suy nghĩ về cách tận dụng tốt mô hình lớn để nâng cao hiệu suất công việc. Giống như công cụ máy tính, khi bạn cần tính 10 nhân 10, bạn có thể nhấn 10 lần "10+", hoặc chỉ cần "10*10". Cách bạn sử dụng công cụ quyết định bạn có thể về nhà sớm hay muộn.

Prompt (lời nhắc) là đầu vào chỉ thị bạn đưa cho mô hình lớn, nó bao gồm các yếu tố sau:

Chỉ thị: Nhiệm vụ hoặc chỉ thị cụ thể mà bạn muốn mô hình thực hiện.

Bối cảnh: Bao gồm thông tin bên ngoài hoặc thông tin bối cảnh bổ sung, hướng dẫn mô hình ngôn ngữ để phản hồi tốt hơn.

Dữ liệu đầu vào: Nội dung hoặc câu hỏi do người dùng nhập.

Chỉ dẫn đầu ra: Chỉ định loại hoặc định dạng đầu ra.

1.2 Kỹ thuật Prompt là gì?

Kỹ thuật Prompt là quá trình phát triển và tối ưu hóa các Prompt, một kỹ thuật được sử dụng trong mô hình lớn, bằng cách cung cấp các chỉ thị rõ ràng, súc tích hoặc câu hỏi, phát huy tối đa khả năng của mô hình lớn, giúp mô hình hiểu rõ hơn nhu cầu của chúng ta, từ đó có được đầu ra tốt hơn từ mô hình.

Khi đưa ra Prompt cho mô hình lớn, bạn giống như một nhà quản lý sản phẩm:

  • Bạn đưa ra yêu cầu tùy tiện, mô hình sẽ trả lời một cách tùy tiện;
  • Bạn đưa ra yêu cầu chi tiết, cung cấp đầy đủ bối cảnh yêu cầu, dữ liệu đầu ra, định nghĩa rõ định dạng đầu ra, một mô hình tốt giống như một lập trình viên giỏi, sẽ đưa ra câu trả lời thỏa đáng.

2 Nguyên tắc cơ bản của kỹ thuật Prompt

Chúng ta hãy xem lại hai nguyên tắc cơ bản trong khóa học kỹ thuật Prompt:

2.1 Cung cấp chỉ thị rõ ràng, chi tiết

Chiến lược 1: Sử dụng dấu phân cách để tách biệt các phần khác nhau của đầu ra, ví dụ như "", , và các dấu phân cách khác.

Chiến lược 2: Chỉ định một đầu ra có cấu trúc, ví dụ như json, html, v.v.

Chiến lược 3: Yêu cầu mô hình tự kiểm tra xem có đáp ứng điều kiện hay không.

Chiến lược 4: Cung cấp một vài ví dụ.

2.2 Cho mô hình thời gian để suy nghĩ

Chúng ta không nhất thiết phải có câu trả lời trong một bước, có thể để mô hình thực hiện một loạt các bước suy luận, cho nó thời gian suy nghĩ, sau đó mới đưa ra câu trả lời cuối cùng.

Chiến lược 1: Chỉ định các bước cần thiết để hoàn thành nhiệm vụ

Thông báo cho mô hình cần thực hiện bao nhiêu bước để hoàn thành chỉ thị, các bước chi tiết của mỗi bước.

Chiến lược 2: Yêu cầu mô hình suy luận ra giải pháp của riêng mình trước khi đưa ra kết luận

Để mô hình tự suy luận, viết ra từng bước, cho đủ thời gian (token - tiền) để suy nghĩ và thực hiện.

3 Tư duy lặp trong kỹ thuật Prompt

Tư duy lặp không gian everywhere, kỹ thuật Prompt và kỹ thuật phần mềm, mô hình thuật toán cũng là một quá trình lặp.

4 Phương pháp kỹ thuật Prompt

Các nguyên tắc và phương pháp Prompt được giáo sư Andrew Ng giải thích rất chi tiết trong khóa học của ông, ở đây chúng ta sẽ giới thiệu một số phương pháp nâng cao.

4.1 Chain of Thought (Suy luận chuỗi)

Khái niệm Chain of Thought được đề xuất lần đầu tiên trong bài báo của Google "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models". Chain of Thought là một chuỗi các câu ngắn, mô phỏng quá trình suy nghĩ và suy luận có thể xảy ra khi con người trả lời câu hỏi.

Tác giả trong bài báo cũng chỉ ra rằng như một phương pháp thúc đẩy suy luận của mô hình ngôn ngữ, Prompt chuỗi suy luận có một số đặc điểm hấp dẫn:

  • Thứ nhất, chuỗi suy luận cho phép mô hình phân chia các vấn đề nhiều bước thành nhiều bước trung gian.
  • Thứ hai, chuỗi suy luận làm cho quá trình trả lời của mô hình có tính giải thích tốt, đồng thời đặc điểm này cung cấp khả năng định vị lỗi suy luận và sửa lỗi.
  • Thứ ba, chuỗi suy luận có thể được sử dụng cho các nhiệm vụ toán học, suy luận kiến thức phổ thông và thao tác ký hiệu, và về lý thuyết, nó phù hợp với bất kỳ nhiệm vụ nào có thể được giải quyết bằng ngôn ngữ.
  • Cuối cùng, chỉ cần bao gồm các ví dụ chuỗi suy luận vào các ví dụ của Prompt ít mẫu, có thể dễ dàng kích hoạt chuỗi suy luận trong các mô hình ngôn ngữ hiện có đủ lớn.

Hình dưới đây giới thiệu lần lượt Prompt ít mẫu (a), Prompt ít mẫu với chuỗi suy luận (b), Prompt không mẫu (c), Prompt không mẫu với chuỗi suy luận (d).

4.2 Tree of Thoughts (Cây suy luận)

Tree of Thoughts (ToT) là sự mở rộng của Chain of Thought, chủ yếu nhằm giải quyết hai vấn đề sau trong quá trình suy luận của LM:

  • Không thể khám phá các nhánh lựa chọn khác nhau
  • Không thể khám phá trước và sau tại các nút

ToT mô hình hóa vấn đề như một quá trình tìm kiếm theo cây, bao gồm bốn bước: phân tích vấn đề, tạo ý tưởng, đánh giá trạng thái và lựa chọn thuật toán tìm kiếm.

4.3 Viết Prompt bằng Prompt

Các phương pháp trên đều khá phức tạp, có một số phương pháp lười biếng. Sử dụng plugin ChatGPT hoặc tự viết một Prompt để giúp bạn viết Prompt, dùng ma thuật để đánh bại ma thuật.

Ví dụ, https://github.com/minghaochen/universal-prompt/blob/master/universal-prompt.txt cung cấp một mẫu để tối ưu hóa Prompt.

message = [
            {"content": """
            I want you to act as an AI prompt engineer. You are expert at writing ChatGPT Prompts to get the best results.

            To create efficient prompts that yield high-quality responses, consider the following principles and strategies: \
            1. Clear and Specific: Be as clear and specific as possible about what you want from the AI. If you want a certain type of response, outline that in your prompt. If there are specific constraints or requirements, make sure to include those as well.
            2. Open-ended vs. Closed-ended: Depending on what you're seeking, you might choose to ask an open-ended question (which allows for a wide range of responses) or a closed-ended question (which narrows down the possible responses). Both have their uses, so choose according to your needs.
            3. Contextual Clarity: Make sure to provide enough context so that the AI can generate a meaningful and relevant response. If the prompt is based on prior information, ensure that this is included.
            4. Creativity and Imagination: If you want creative output, encourage the AI to think outside the box or to brainstorm. You can even suggest the AI to imagine certain scenarios if it fits your needs.

            There is a well-written prompt delimited by <> for your reference: <Your task is to be my brainstorming partner and provide creative ideas and suggestions for a given topic or problem. Your response should include original, unique, and relevant ideas that could help solve the problem or further explore the topic in an interesting way. Please note that your response should also take into account any specific requirements or constraints of the task.>

            Your task is to write an effective ChatGPT Prompt based on given keywords or to modify the given prompts. Answer in the same language as me.
            """,
            "role": "system"}
        ]
message.append(
            {"content": "Please help me to write an effective ChatGPT Prompt based on the following keywords or prompt: {}".format(prompt),
             "role": "user"}
        )

Khi gọi API ChatGPT, sử dụng message như trên, bạn có thể tối ưu hóa Prompt của mình.

Before:
translate the following English content into Chinese, and polish it
After:
<Please translate the following English text into Chinese, ensuring not only accuracy in translation but also enhancing the prose to flow naturally and elegantly in Chinese. The translation should read as if originally written by a native speaker, with attention to cultural nuances and idiomatic expressions.>

5 Thực hành

Đã nói nhiều về các khái niệm và phương pháp lý thuyết, có cách nào tốt hơn không, để nhanh chóng biết cách viết Prompt tốt?

Có! Hãy sử dụng kinh nghiệm của người khác!

Một đồng nghiệp cũ của công ty trước đây đã chia sẻ, một bậc thầy đã nói một câu: "Cách tốt nhất để viết Prompt tốt là biết dữ liệu huấn luyện của nó trông như thế nào." Thật tiếc, rất ít mô hình lớn hoàn toàn mở nguồn dữ liệu của họ.

Tuy nhiên, nhiều mô hình lớn sẽ mở một nền tảng cho mọi người trải nghiệm, và mọi người cũng sẽ chia sẻ các trường hợp sử dụng tốt.

Ví dụ, Zhipu AI, chúng ta hãy xem "Programmer's Inspiration"

Đây là một số Prompt xuất sắc, kinh nghiệm này chúng ta có thể sử dụng trực tiếp.

Có thể tóm tắt thành mẫu: trước tiên cho mô hình một vai trò (Bạn là một ***), sau đó đưa ra yêu cầu cụ thể (Vui lòng viết mã cho yêu cầu ***).

Một ví dụ:

Bạn là một kỹ sư phần mềm giàu kinh nghiệm chuyên về việc viết các chương trình, tôi cần bạn tạo một đoạn mã Python dựa trên các yêu cầu sau:
Mục đích mã: Thiết kế một kịch bản tự động mua sắm trong ngày 11/11
Chức năng mã: Đăng nhập tự động vào trang web mua sắm vào ngày 11/11, đặt hàng hàng hóa đã đặt trước
Yêu cầu mã: Sử dụng lập trình hướng đối tượng, sử dụng thư viện selenium để thao tác trang web
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

class OnlineShopper:
    def __init__(self, site_url, user_id, password, product_url):
        self.site_url = site_url
        self.user_id = user_id
        self.password = password
        self.product_url = product_url
        self.browser = webdriver.Firefox()  # Sử dụng trình duyệt Firefox
    
    def login(self):
        self.browser.get(self.site_url)
        username_field = self.browser.find_element(By.NAME, "username")  # Cần điều chỉnh theo biểu mẫu đăng nhập của trang web mục tiêu
        password_field = self.browser.find_element(By.NAME, "password")
        username_field.send_keys(self.user_id)
        password_field.send_keys(self.password)
        password_field.send_keys(Keys.RETURN)
        time.sleep(5)  # Chờ đăng nhập hoàn tất
    
    def purchase_item(self):
        self.browser.get(self.product_url)
        buy_button = self.browser.find_element(By.ID, "purchase_button")  # Cần điều chỉnh theo nút mua hàng của sản phẩm mục tiêu
        buy_button.click()
    
    def execute(self):
        self.login()
        self.purchase_item()
        self.browser.quit()

if __name__ == "__main__":
    shopper = OnlineShopper(
        site_url="https://www.example.com",
        user_id="your_user",
        password="your_password",
        product_url="https://www.example.com/product"
    )
    shopper.execute()

Lưu ý:

  1. Cần cài đặt Firefox và geckodriver.
  2. Phần tử định vị đăng nhập và nút mua hàng cần được điều chỉnh theo trang web mua sắm cụ thể.
  3. Mã này là ví dụ đơn giản, sử dụng thực tế có thể cần xử lý nhiều trường hợp ngoại lệ hơn.

Cài đặt selenium và geckodriver:

pip install selenium

Tải geckodriver và thêm đường dẫn vào biến môi trường.

Cuối cùng, hãy tham khảo hướng dẫn Prompt đầy đủ nhất: https://github.com/dair-ai/Prompt-Engineering-Guide

Thẻ: LLM prompt engineering Chain of Thought Tree of Thoughts AI

Đăng vào ngày 3 tháng 6 lúc 00:04