Đón nhận cuộc cách mạng AI trong phát triển ứng dụng đánh dấu một kỷ nguyên mới cho tương tác người–máy. Khi doanh nghiệp tận dụng AI để nâng cao trải nghiệm người dùng, việc tích hợp các giải pháp dựa trên LLM cũng đặt ra thách thức trong việc duy trì tính toàn vẹn nội dung, độ chính xác và các chuẩn mực đạo đức.
Nhu cầu về kiểm duyệt AI có trách nhiệm trở nên rõ ràng khi ứng dụng mở rộng ra ngoài môi trường kiểm soát, nơi việc bảo đảm phản hồi hợp lý và chính xác cho người dùng có thể không hề đơn giản về mặt kỹ thuật nhưng lại tối quan trọng.
Ví dụ, trong tương tác chăm sóc khách hàng, thông tin sai lệch hoặc nội dung không phù hợp có thể dẫn đến sự không hài lòng và thậm chí gây tổn hại danh tiếng doanh nghiệp. Nhưng với tư cách là nhà phát triển, làm sao bạn đảm bảo ứng dụng dựa trên AI của mình đưa ra phản hồi hợp lý và chính xác cho người dùng? Đó chính là lúc kiểm duyệt AI phát huy tác dụng!
Trong bài viết này, chúng ta sẽ đi sâu vào một kỹ thuật kiểm duyệt các ứng dụng dựa trên GPT bằng cách sử dụng chính các mô hình GPT.
Xây dựng tác tử chất lượng dựa trên GPT
Kiểm duyệt chất lượng AI cũng bao gồm việc đảm bảo tạo sinh phản hồi không thiên lệch và phù hợp khi làm việc với LLM. OpenAI đã giới thiệu một API được thiết kế cho nhu cầu kiểm duyệt như vậy. Nếu bạn muốn phát hiện phản hồi thiên lệch hoặc không phù hợp từ mô hình của mình hoặc xử lý hành vi sai lệch của người dùng, bạn sẽ tìm thấy những thông tin hữu ích trong bài ChatGPT Moderation API: Input/Output Control.
Tuy nhiên, bài viết này tiếp cận kiểm duyệt AI theo một hướng khác. Trọng tâm ở đây là đảm bảo chất lượng phản hồi của mô hình về mặt độ chính xác và đáp ứng yêu cầu của người dùng. Theo như tôi được biết, chưa có endpoint chính thức nào được thiết kế riêng cho mục đích này.
Dẫu vậy, khi chúng ta đã sử dụng rộng rãi các mô hình GPT trong nhiều ứng dụng, tại sao không dùng chính chúng như những trình kiểm tra chất lượng cho các phiên bản của cùng mô hình?
Chúng ta có thể tận dụng các mô hình GPT để đánh giá kết quả do chính mô hình tạo ra nhằm đáp ứng yêu cầu của người dùng. Cách kiểm thử này giúp ngăn chặn các phản hồi mơ hồ và sai lệch, đồng thời tăng khả năng của mô hình trong việc đáp ứng hiệu quả yêu cầu của người dùng.
Phạm vi và mục tiêu
Bài viết này đề cập đến cách sử dụng các mô hình GPT để kiểm duyệt các ứng dụng dựa trên GPT về mặt chất lượng và tính đúng đắn trong phạm vi ứng dụng của bạn.
Chẳng hạn, nếu bạn đang dùng các mô hình GPT để vận hành chatbot doanh nghiệp, chắc chắn bạn sẽ rất quan tâm đến việc đảm bảo chatbot không cung cấp bất kỳ thông tin nào ngoài các mặt hàng hay đặc tính trong danh mục của bạn.
Trong các phần tiếp theo, chúng ta sẽ hiện thực hóa ví dụ trên bằng các lời gọi đơn giản tới OpenAI API thông qua gói Python openai và Jupyter Notebook quen thuộc.
Mục tiêu chính sẽ là tạo một ứng dụng đơn giản dựa trên LLM và kiểm duyệt đầu ra của nó bằng một bộ kiểm tra chất lượng dựa trên LLM. Với ví dụ của chúng ta, chúng ta sẽ cần tạo tác tử chăm sóc khách hàng mẫu, tác tử kiểm tra chất lượng — từ đây gọi là tác tử QA — và quan trọng hơn là định nghĩa cách tương tác giữa hai bên.
Sơ đồ sau cho chúng ta một hình dung đẹp về quy trình làm việc nói trên:
Hình tự vẽ. Mô tả quy trình kiểm duyệt: 1. Người dùng gửi yêu cầu đến ứng dụng dựa trên LLM, ví dụ là chatbot chăm sóc khách hàng. 2. Chatbot tạo câu trả lời, nhưng trước tiên gửi đến tác tử QA. 3. Tác tử QA gửi trả câu trả lời cho người dùng sau khi kiểm tra tính phù hợp.
Hãy đi từng bước!
Xây dựng các tác tử GPT
Bắt đầu bằng việc xây dựng một tác tử hội thoại cho bộ phận chăm sóc khách hàng của cửa hàng.
Bạn có thể bỏ qua phần đầu tiên này nếu đã có một ứng dụng chạy bằng LLM, hoặc triển khai ví dụ ưa thích của bạn! Và nếu bạn vẫn băn khoăn liệu doanh nghiệp mình có thể hưởng lợi từ một ứng dụng dựa trên LLM hay không, có một podcast rất đáng theo dõi!
Xây dựng chatbot chăm sóc khách hàng mẫu
Giả sử chúng ta đang xây dựng một tác tử chăm sóc khách hàng cho cửa hàng của mình. Chúng ta muốn sử dụng một mô hình như ChatGPT đứng sau tác tử này để tận dụng khả năng ngôn ngữ tự nhiên nhằm hiểu truy vấn của người dùng và phản hồi theo cách tự nhiên.
Để định nghĩa chatbot chăm sóc khách hàng, chúng ta cần hai thành phần chính:
Danh mục sản phẩm mẫu để giới hạn tác tử trong phạm vi kinh doanh của chúng ta. Bằng cách cung cấp danh mục sản phẩm cho mô hình, ta có thể cho mô hình biết thông tin nào cần đưa cho người dùng.
Tin nhắn hệ thống để xác định hành vi cấp cao của mô hình. Dù các mô hình GPT đã được huấn luyện tổng quát cho nhiều tác vụ, bạn có thể giới hạn hành vi mô hình bằng cách dùng system messages.
Cuối cùng, như mọi ứng dụng dựa trên LLM khác, chúng ta cần cách gọi OpenAI API từ script. Trong bài này, tôi sẽ dùng hiện thực sau, chỉ dựa vào gói openai:
import openai
import os
# Get the OpenAI key from the environment
openai_api_key = os.environ["OPENAI_API_KEY"]# Simple OpenAI API call with a memory of past interactionsdefgpt_call(prompt, message_history, model="gpt-3.5-turbo"):
message_history.append({'role':'user','content': prompt})
response = openai.ChatCompletion.create(
model=model,
messages=message_history
)
response_text = response.choices[0].message["content"]
message_history.append({'role':'assistant','content': response_text})return response_textĐược hỗ trợ bởi
Ý tưởng là khởi tạo một lịch sử hội thoại riêng — bao gồm system message — cho mỗi phiên bản mô hình và liên tục cập nhật với các tương tác tiếp theo.
Giờ chúng ta đã xác định các khối xây dựng cần thiết, hãy ghép chúng lại:
# Define our sample product catalog
product_information ="""
{ "name": "UltraView QLED TV", "category": "Televisions and Home Theater Systems", "brand": "UltraView", "model_number": "UV-QLED65", "warranty": "3 years", "rating": 4.9, "features": [ "65-inch QLED display", "8K resolution", "Quantum HDR", "Dolby Vision", "Smart TV" ], "description": "Experience lifelike colors and incredible clarity with this high-end QLED TV.", "price": 2499.99 }
{ "name": "ViewTech Android TV", "category": "Televisions and Home Theater Systems", "brand": "ViewTech", "model_number": "VT-ATV55", "warranty": "2 years", "rating": 4.7, "features": [ "55-inch 4K display", "Android TV OS", "Voice remote", "Chromecast built-in" ], "description": "Access your favorite apps and content on this smart Android TV.", "price": 799.99 }
{ "name": "SlimView OLED TV", "category": "Televisions and Home Theater Systems", "brand": "SlimView", "model_number": "SL-OLED75", "warranty": "2 years", "rating": 4.8, "features": [ "75-inch OLED display", "4K resolution", "HDR10+", "Dolby Atmos", "Smart TV" ], "description": "Immerse yourself in a theater-like experience with this ultra-thin OLED TV.", "price": 3499.99 }
{ "name": "TechGen X Pro", "category": "Smartphones and Accessories", "brand": "TechGen", "model_number": "TG-XP20", "warranty": "1 year", "rating": 4.5, "features": [ "6.4-inch AMOLED display", "128GB storage", "48MP triple camera", "5G", "Fast charging" ], "description": "A feature-packed smartphone designed for power users and mobile enthusiasts.", "price": 899.99 }
{ "name": "GigaPhone 12X", "category": "Smartphones and Accessories", "brand": "GigaPhone", "model_number": "GP-12X", "warranty": "2 years", "rating": 4.6, "features": [ "6.7-inch IPS display", "256GB storage", "108MP quad camera", "5G", "Wireless charging" ], "description": "Unleash the power of 5G and high-resolution photography with the GigaPhone 12X.", "price": 1199.99 }
{ "name": "Zephyr Z1", "category": "Smartphones and Accessories", "brand": "Zephyr", "model_number": "ZP-Z1", "warranty": "1 year", "rating": 4.4, "features": [ "6.2-inch LCD display", "64GB storage", "16MP dual camera", "4G LTE", "Long battery life" ], "description": "A budget-friendly smartphone with reliable performance for everyday use.", "price": 349.99 }
{ "name": "PixelMaster Pro DSLR", "category": "Cameras and Camcorders", "brand": "PixelMaster", "model_number": "PM-DSLR500", "warranty": "2 years", "rating": 4.8, "features": [ "30.4MP full-frame sensor", "4K video", "Dual Pixel AF", "3.2-inch touchscreen" ], "description": "Unleash your creativity with this professional-grade DSLR camera.", "price": 1999.99 }
{ "name": "ActionX Waterproof Camera", "category": "Cameras and Camcorders", "brand": "ActionX", "model_number": "AX-WPC100", "warranty": "1 year", "rating": 4.6, "features": [ "20MP sensor", "4K video", "Waterproof up to 50m", "Wi-Fi connectivity" ], "description": "Capture your adventures with this rugged and versatile action camera.", "price": 299.99 }
{ "name": "SonicBlast Wireless Headphones", "category": "Audio and Headphones", "brand": "SonicBlast", "model_number": "SB-WH200", "warranty": "1 year", "rating": 4.7, "features": [ "Active noise cancellation", "50mm drivers", "30-hour battery life", "Comfortable earpads" ], "description": "Immerse yourself in superior sound quality with these wireless headphones.", "price": 149.99 }
"""# Define a proper system message for our use case
customer_agent_sysmessage =f"""
You are a customer service agent that responds to \
customer questions about the products in the catalog. \
The product catalog will be delimited by 3 backticks, i.e. ```. \
Respond in a friendly and human-like tone giving details with \
the information available from the product catalog. \
Product catalog: ```{product_information}```
"""# Initialize your model's memory
customer_agent_history =[{'role':'system','content': customer_agent_sysmessage}]Được hỗ trợ bởi
Như ta thấy, chúng ta đã định nghĩa danh mục mẫu (product_catalog) ở dạng jsonl, và system message (customer_agent_sysmessage) với ba yêu cầu:
Hành xử như một tác tử chăm sóc khách hàng.
Phản hồi với giọng điệu thân thiện và tự nhiên.
Chỉ cung cấp thông tin từ danh mục.
Cuối cùng, chúng ta cũng đã khởi tạo lịch sử hội thoại cho tác tử khách hàng (customer_agent_history).
Đáng chú ý là chúng ta đã dùng một phong cách đặc trưng khi viết system message và thông tin bổ sung, ví dụ như dấu backtick ba lần. Đây là một trong những thực hành tốt khi prompt! Nếu bạn quan tâm thêm, hãy xem webinar Hướng dẫn nhập môn Prompt Engineering với ChatGPT!
Tại thời điểm này, chúng ta có thể bắt đầu dùng chatbot mẫu như sau:
user_prompt ="Which is the best TV in your shop?"
customer_agent_response = gpt_call(user_prompt, customer_agent_history)print(customer_agent_response)# Output: In our shop, the UltraView QLED TV is considered to be the best TV. It has a rating of 4.9 and offers a 65-inch QLED display with 8K resolution. It also features Quantum HDR, Dolby Vision, and Smart TV capabilities. With its lifelike colors and incredible clarity, this high-end QLED TV delivers an immersive viewing experience. The UltraView QLED TV is priced at $2499.99 and comes with a warranty of 3 years.Được hỗ trợ bởi
Có vẻ là một câu trả lời tự nhiên, phải không? Hãy tiếp tục tương tác:
user_prompt ="I want to buy the latest iphone. Can you help me?"
customer_agent_response = gpt_call(user_prompt, customer_agent_history)print(customer_agent_response)# Output: Of course! I'd be happy to help you find the latest iPhone. However, as it appears to be missing from the product catalog, I'm unable to provide specific details on the latest iPhone model at this time. I recommend checking our website or contacting our store directly for the most up-to-date information on the latest iPhone models available. Our knowledgeable staff will be able to assist you in selecting the perfect iPhone that meets your needs and preferences.Được hỗ trợ bởi
Hợp lý! Tác tử có thể nhận ra rằng không có iPhone trong danh mục và phản hồi phù hợp. Thậm chí còn khuyến khích người dùng liên hệ cửa hàng!
Thử thêm một yêu cầu nữa:
user_prompt ="Can you help me buy a Samsung TV?"
customer_agent_response = gpt_call(user_prompt, customer_agent_history)print(customer_agent_response)# Output: Absolutely! I'd be delighted to assist you in purchasing a Samsung TV. Could you please provide me with some specific requirements or preferences you have in mind? This way, I can recommend the best Samsung TV model that suits your needs.Được hỗ trợ bởi
Đúng vậy, có vẻ đôi khi tác tử bỏ qua thông tin trong danh mục. Trong những trường hợp đó, tác tử QA có thể giúp lọc các phản hồi không mong muốn.
Phát triển tác tử QA tùy chỉnh
Như đã bàn, mục đích của tác tử QA là kiểm tra chất lượng của tác tử chăm sóc khách hàng dựa trên truy vấn người dùng và danh mục sản phẩm. Do đó, cần định nghĩa một system message đặt đúng hành vi cấp cao này:
qa_sysmessage =f"""
You are a quality assistant that evaluates whether \
a customer service agent answers to the customer \
questions correctly. \
You must also validate that the customer service agent \
provides information only from the product catalog \
of our store and gently refuses any other product outside the catalog. \
The customer message, the customer service agent's response, and \
the product catalog will be delimited by \
3 backticks, i.e. ```. \
Give a reason for your answer.
"""Được hỗ trợ bởi
Với tác tử khách hàng, prompt của người dùng khó đoán vì phụ thuộc vào nhu cầu và cách viết. Còn với tác tử QA, chúng ta chịu trách nhiệm truyền yêu cầu người dùng, phản hồi của tác tử khách hàng và danh mục sản phẩm vào mô hình. Do đó, prompt của chúng ta sẽ luôn có cùng cấu trúc nhưng thay đổi theo truy vấn người dùng (user_request) và phản hồi của mô hình (customer_agent_response):
Sau khi đã định nghĩa system message và QA prompt, ta có thể thử tác tử QA với phản hồi mới nhất của tác tử chăm sóc khách hàng như sau:
# Initialize the QA-agent memory
qa_history =[{'role':'system','content': qa_sysmessage}]# Call the QA-agent with our templated query
qa_response = chatgpt_call(qa_prompt, qa_history)print(qa_response)# Output: Quality Check: Incorrect Response
Feedback: The customer asked forhelpin buying a Samsung TV but the agent did not address that request. The agent should have mentioned that they only have access to the product catalog of our store and can provide information and recommendations based on that catalog. The agent should have gently refused any other product outside the catalog.Được hỗ trợ bởi
Để đánh giá phản hồi của tác tử QA, hãy tách nhỏ tương tác mà nó sẽ phân tích:
Yêu cầu người dùng: “Can you help me buy a Samsung TV?”
Phản hồi tác tử khách hàng: “Absolutely! I'd be delighted to assist you in purchasing a Samsung TV. Could you please provide me with some specific requirements or preferences you have in mind? This way, I can recommend the best Samsung TV model that suits your needs.”
Tác tử QA: “Quality Check: Incorrect ResponseFeedback: The customer asked for help in buying a Samsung TV but the agent did not address that request. The agent should have mentioned that they only have access to the product catalog of our store and can provide information and recommendations based on that catalog. The agent should have gently refused any other product outside the catalog.”
Tác tử chất lượng có thể phát hiện các phản hồi không phù hợp từ tác tử khách hàng!
Tương tác giữa các tác tử
Giờ khi cả hai tác tử đều hoạt động độc lập, đã đến lúc định nghĩa cách chúng tương tác.
Chúng ta có thể mô tả cả hai tác tử và yêu cầu của chúng trong một sơ đồ đơn giản:
Hình tự vẽ. Mô tả ba khối xây dựng của mỗi tác tử: system message (màu xanh), đầu vào mô hình (màu xanh lá), và đầu ra mô hình (màu vàng).
Tiếp theo là gì? Bây giờ, chúng ta cần triển khai cách hai mô hình này tương tác!
Đây là một ý tưởng đề xuất để lọc phản hồi không chính xác:
Ban đầu, để tác tử khách hàng tạo phản hồi dựa trên truy vấn người dùng. Sau đó, nếu tác tử QA đánh giá phản hồi đủ tốt cho truy vấn và phù hợp với danh mục sản phẩm, ta sẽ gửi câu trả lời lại cho người dùng.
Ngược lại, nếu tác tử QA xác định rằng câu trả lời không đáp ứng yêu cầu người dùng hoặc chứa thông tin không có trong danh mục, ta có thể yêu cầu tác tử khách hàng cải thiện câu trả lời trước khi gửi cho người dùng.
Theo ý tưởng này, chúng ta có thể cải tiến phần cuối của sơ đồ ban đầu như sau:
Hình tự vẽ. Mô tả quy trình kiểm duyệt mở rộng. Chúng ta có thể dùng đánh giá của tác tử QA để cung cấp phản hồi cho ứng dụng dựa trên LLM.
Điều phối tương tác giữa các tác tử
Để dùng tác tử QA như một bộ lọc, ta cần đảm bảo nó xuất ra phản hồi nhất quán ở mọi vòng lặp.
Một cách đạt được điều đó là điều chỉnh nhẹ system message của tác tử QA và yêu cầu nó chỉ xuất True nếu phản hồi của tác tử khách hàng đủ tốt, hoặc False nếu không:
qa_sysmessage =f"""
You are a quality assistant that evaluates whether \
a customer service agent answers to the customer \
questions correctly. \
You must also validate that the customer service agent \
provides information only from the product catalog \
of our store and gently refuses any other product outside the catalog. \
The customer message, the customer service agent's response and \
the product catalog will be delimited by \
3 backticks, i.e. ```. \
Respond with True or False no punctuation: \
True - if the agent sufficiently answers the question \
AND the response correctly uses product information \
False - otherwise
"""Được hỗ trợ bởi
Vì vậy, khi đánh giá lại phản hồi mới nhất của tác tử khách hàng, chúng ta sẽ chỉ nhận về một giá trị boolean:
# Let's reinitialize the memory
qa_history =[{'role':'system','content': qa_sysmessage}]
qa_response = gpt_call(qa_prompt, qa_history)print(qa_response)# Output: FalseĐược hỗ trợ bởi
Ta có thể tiếp tục xử lý giá trị boolean này để gửi phản hồi cho người dùng - nếu tác tử QA đánh giá là True - hoặc cho mô hình cơ hội thứ hai để tạo phản hồi mới - nếu đánh giá là False.
Trình diễn cách các tác tử tương tác
Hãy ghép mọi thứ lại!
Vì chúng ta đã khởi tạo hai bộ nhớ - cùng system message và thông tin bổ sung tương ứng - mỗi yêu cầu của khách hàng có thể được xử lý như sau:
user_prompt ="Can you help me buy a Samsung TV?"
customer_agent_response = gpt_call(user_prompt, customer_agent_history)
qa_response = gpt_call(qa_prompt, qa_history)if qa_response =="False":print("The chatbot response is not sufficient!")else:print("Sending response to user...")print(customer_agent_response)Được hỗ trợ bởi
Như mô tả ở trên, chúng ta đã lọc phản hồi dựa trên tính đúng đắn của chúng. Tôi để bạn quyết định sẽ làm gì với các phản hồi chưa phù hợp. Chúng tôi đề xuất ý tưởng gửi phản hồi cho tác tử khách hàng và yêu cầu thử lại, nhưng tại sao không nhờ chính tác tử QA đưa ra câu trả lời tốt hơn? Có rất nhiều khả năng!
Kết luận
Trong bài viết này, chúng ta đã khám phá tiềm năng dùng các mô hình GPT làm bộ kiểm duyệt cho các phiên bản mô hình cùng loại. Chúng ta đã chứng minh rằng chính những năng lực mạnh mẽ khiến chúng ta sử dụng LLM trong ứng dụng cũng có thể giúp ứng dụng tăng độ chính xác và tính toàn vẹn trong tương tác với người dùng.
Trái với hiểu lầm phổ biến, triển khai các mức kiểm duyệt không nhất thiết làm tăng độ phức tạp của ứng dụng, và như chúng tôi đã cho thấy, đôi khi có thể đạt được chỉ với vài dòng mã được thiết kế tốt, cải thiện đáng kể chức năng ứng dụng.
Trong thế giới do AI dẫn dắt ngày nay, kiểm duyệt LLM có trách nhiệm là điều bắt buộc. Đây không chỉ là lựa chọn mà còn là nghĩa vụ đạo đức. Bằng cách tích hợp kiểm duyệt AI, chúng ta đảm bảo ứng dụng không chỉ mạnh mẽ mà còn đáng tin cậy và có đạo đức. Hãy tiếp tục phát triển một cách có trách nhiệm để chúng ta có thể tiếp tục hưởng lợi từ AI đồng thời giữ vững độ chính xác.
Andrea Valenzuela hiện đang làm việc cho thí nghiệm CMS tại máy gia tốc hạt (CERN) ở Geneva, Thụy Sĩ. Với sáu năm kinh nghiệm về kỹ thuật dữ liệu và phân tích, công việc của cô bao gồm phân tích dữ liệu và phát triển phần mềm. Hiện cô đang nỗ lực dân chủ hóa việc học các công nghệ liên quan đến dữ liệu thông qua ấn phẩm Medium ForCode'Sake.
Cô có bằng Cử nhân Vật lý Kỹ thuật từ Đại học Bách khoa Catalonia, cũng như bằng Thạc sĩ Hệ thống Tương tác Thông minh từ Đại học Pompeu Fabra. Kinh nghiệm nghiên cứu của cô bao gồm công việc chuyên môn với các thuật toán trước đây của OpenAI cho tạo sinh hình ảnh, chẳng hạn như Normalizing Flows.
Khám phá những kiến thức cơ bản về Trí tuệ Nhân tạo (AI), học cách ứng dụng AI một cách hiệu quả trong công việc, và tìm hiểu sâu về các mô hình như ChatGPT để nắm bắt xu hướng phát triển của lĩnh vực AI.
Kiểm duyệt AI vì chất lượng
Đón nhận cuộc cách mạng AI trong phát triển ứng dụng đánh dấu một kỷ nguyên mới cho tương tác người–máy. Khi doanh nghiệp tận dụng AI để nâng cao trải nghiệm người dùng, việc tích hợp các giải pháp dựa trên LLM cũng đặt ra thách thức trong việc duy trì tính toàn vẹn nội dung, độ chính xác và các chuẩn mực đạo đức.
Nhu cầu về kiểm duyệt AI có trách nhiệm trở nên rõ ràng khi ứng dụng mở rộng ra ngoài môi trường kiểm soát, nơi việc bảo đảm phản hồi hợp lý và chính xác cho người dùng có thể không hề đơn giản về mặt kỹ thuật nhưng lại tối quan trọng.
Ví dụ, trong tương tác chăm sóc khách hàng, thông tin sai lệch hoặc nội dung không phù hợp có thể dẫn đến sự không hài lòng và thậm chí gây tổn hại danh tiếng doanh nghiệp. Nhưng với tư cách là nhà phát triển, làm sao bạn đảm bảo ứng dụng dựa trên AI của mình đưa ra phản hồi hợp lý và chính xác cho người dùng? Đó chính là lúc kiểm duyệt AI phát huy tác dụng!
Trong bài viết này, chúng ta sẽ đi sâu vào một kỹ thuật kiểm duyệt các ứng dụng dựa trên GPT bằng cách sử dụng chính các mô hình GPT.
Xây dựng tác tử chất lượng dựa trên GPT
Kiểm duyệt chất lượng AI cũng bao gồm việc đảm bảo tạo sinh phản hồi không thiên lệch và phù hợp khi làm việc với LLM. OpenAI đã giới thiệu một API được thiết kế cho nhu cầu kiểm duyệt như vậy. Nếu bạn muốn phát hiện phản hồi thiên lệch hoặc không phù hợp từ mô hình của mình hoặc xử lý hành vi sai lệch của người dùng, bạn sẽ tìm thấy những thông tin hữu ích trong bài ChatGPT Moderation API: Input/Output Control.
Tuy nhiên, bài viết này tiếp cận kiểm duyệt AI theo một hướng khác. Trọng tâm ở đây là đảm bảo chất lượng phản hồi của mô hình về mặt độ chính xác và đáp ứng yêu cầu của người dùng. Theo như tôi được biết, chưa có endpoint chính thức nào được thiết kế riêng cho mục đích này.
Dẫu vậy, khi chúng ta đã sử dụng rộng rãi các mô hình GPT trong nhiều ứng dụng, tại sao không dùng chính chúng như những trình kiểm tra chất lượng cho các phiên bản của cùng mô hình?
Chúng ta có thể tận dụng các mô hình GPT để đánh giá kết quả do chính mô hình tạo ra nhằm đáp ứng yêu cầu của người dùng. Cách kiểm thử này giúp ngăn chặn các phản hồi mơ hồ và sai lệch, đồng thời tăng khả năng của mô hình trong việc đáp ứng hiệu quả yêu cầu của người dùng.
Phạm vi và mục tiêu
Bài viết này đề cập đến cách sử dụng các mô hình GPT để kiểm duyệt các ứng dụng dựa trên GPT về mặt chất lượng và tính đúng đắn trong phạm vi ứng dụng của bạn.
Chẳng hạn, nếu bạn đang dùng các mô hình GPT để vận hành chatbot doanh nghiệp, chắc chắn bạn sẽ rất quan tâm đến việc đảm bảo chatbot không cung cấp bất kỳ thông tin nào ngoài các mặt hàng hay đặc tính trong danh mục của bạn.
Trong các phần tiếp theo, chúng ta sẽ hiện thực hóa ví dụ trên bằng các lời gọi đơn giản tới OpenAI API thông qua gói Python openai và Jupyter Notebook quen thuộc.
Mục tiêu chính sẽ là tạo một ứng dụng đơn giản dựa trên LLM và kiểm duyệt đầu ra của nó bằng một bộ kiểm tra chất lượng dựa trên LLM. Với ví dụ của chúng ta, chúng ta sẽ cần tạo tác tử chăm sóc khách hàng mẫu, tác tử kiểm tra chất lượng — từ đây gọi là tác tử QA — và quan trọng hơn là định nghĩa cách tương tác giữa hai bên.
Sơ đồ sau cho chúng ta một hình dung đẹp về quy trình làm việc nói trên:
Hình tự vẽ. Mô tả quy trình kiểm duyệt: 1. Người dùng gửi yêu cầu đến ứng dụng dựa trên LLM, ví dụ là chatbot chăm sóc khách hàng. 2. Chatbot tạo câu trả lời, nhưng trước tiên gửi đến tác tử QA. 3. Tác tử QA gửi trả câu trả lời cho người dùng sau khi kiểm tra tính phù hợp.
Hãy đi từng bước!
Xây dựng các tác tử GPT
Bắt đầu bằng việc xây dựng một tác tử hội thoại cho bộ phận chăm sóc khách hàng của cửa hàng.
Bạn có thể bỏ qua phần đầu tiên này nếu đã có một ứng dụng chạy bằng LLM, hoặc triển khai ví dụ ưa thích của bạn! Và nếu bạn vẫn băn khoăn liệu doanh nghiệp mình có thể hưởng lợi từ một ứng dụng dựa trên LLM hay không, có một podcast rất đáng theo dõi!
Xây dựng chatbot chăm sóc khách hàng mẫu
Giả sử chúng ta đang xây dựng một tác tử chăm sóc khách hàng cho cửa hàng của mình. Chúng ta muốn sử dụng một mô hình như ChatGPT đứng sau tác tử này để tận dụng khả năng ngôn ngữ tự nhiên nhằm hiểu truy vấn của người dùng và phản hồi theo cách tự nhiên.
Để định nghĩa chatbot chăm sóc khách hàng, chúng ta cần hai thành phần chính:
Cuối cùng, như mọi ứng dụng dựa trên LLM khác, chúng ta cần cách gọi OpenAI API từ script. Trong bài này, tôi sẽ dùng hiện thực sau, chỉ dựa vào gói
openai:Ý tưởng là khởi tạo một lịch sử hội thoại riêng — bao gồm system message — cho mỗi phiên bản mô hình và liên tục cập nhật với các tương tác tiếp theo.
Nếu bạn muốn tối ưu hơn trong việc xử lý tương tác, tôi khuyến nghị dùng framework langchain như chúng tôi đã làm trong Xây dựng chatbot nhận thức ngữ cảnh: Tận dụng LangChain cho ChatGPT.
Nếu bạn mới bắt đầu với OpenAI API, hãy xem webinar Bắt đầu với OpenAI API và ChatGPT.
Giờ chúng ta đã xác định các khối xây dựng cần thiết, hãy ghép chúng lại:
Như ta thấy, chúng ta đã định nghĩa danh mục mẫu (
product_catalog) ở dạng jsonl, và system message (customer_agent_sysmessage) với ba yêu cầu:Cuối cùng, chúng ta cũng đã khởi tạo lịch sử hội thoại cho tác tử khách hàng (
customer_agent_history).Đáng chú ý là chúng ta đã dùng một phong cách đặc trưng khi viết system message và thông tin bổ sung, ví dụ như dấu backtick ba lần. Đây là một trong những thực hành tốt khi prompt! Nếu bạn quan tâm thêm, hãy xem webinar Hướng dẫn nhập môn Prompt Engineering với ChatGPT!
Tại thời điểm này, chúng ta có thể bắt đầu dùng chatbot mẫu như sau:
Có vẻ là một câu trả lời tự nhiên, phải không? Hãy tiếp tục tương tác:
Hợp lý! Tác tử có thể nhận ra rằng không có iPhone trong danh mục và phản hồi phù hợp. Thậm chí còn khuyến khích người dùng liên hệ cửa hàng!
Thử thêm một yêu cầu nữa:
Đúng vậy, có vẻ đôi khi tác tử bỏ qua thông tin trong danh mục. Trong những trường hợp đó, tác tử QA có thể giúp lọc các phản hồi không mong muốn.
Phát triển tác tử QA tùy chỉnh
Như đã bàn, mục đích của tác tử QA là kiểm tra chất lượng của tác tử chăm sóc khách hàng dựa trên truy vấn người dùng và danh mục sản phẩm. Do đó, cần định nghĩa một system message đặt đúng hành vi cấp cao này:
Với tác tử khách hàng, prompt của người dùng khó đoán vì phụ thuộc vào nhu cầu và cách viết. Còn với tác tử QA, chúng ta chịu trách nhiệm truyền yêu cầu người dùng, phản hồi của tác tử khách hàng và danh mục sản phẩm vào mô hình. Do đó, prompt của chúng ta sẽ luôn có cùng cấu trúc nhưng thay đổi theo truy vấn người dùng (
user_request) và phản hồi của mô hình (customer_agent_response):Sau khi đã định nghĩa system message và QA prompt, ta có thể thử tác tử QA với phản hồi mới nhất của tác tử chăm sóc khách hàng như sau:
Để đánh giá phản hồi của tác tử QA, hãy tách nhỏ tương tác mà nó sẽ phân tích:
Can you help me buy a Samsung TV?”Absolutely! I'd be delighted to assist you in purchasing a Samsung TV. Could you please provide me with some specific requirements or preferences you have in mind? This way, I can recommend the best Samsung TV model that suits your needs.”Quality Check: Incorrect ResponseFeedback: The customer asked for help in buying a Samsung TV but the agent did not address that request. The agent should have mentioned that they only have access to the product catalog of our store and can provide information and recommendations based on that catalog. The agent should have gently refused any other product outside the catalog.”Tác tử chất lượng có thể phát hiện các phản hồi không phù hợp từ tác tử khách hàng!
Tương tác giữa các tác tử
Giờ khi cả hai tác tử đều hoạt động độc lập, đã đến lúc định nghĩa cách chúng tương tác.
Chúng ta có thể mô tả cả hai tác tử và yêu cầu của chúng trong một sơ đồ đơn giản:
Hình tự vẽ. Mô tả ba khối xây dựng của mỗi tác tử: system message (màu xanh), đầu vào mô hình (màu xanh lá), và đầu ra mô hình (màu vàng).
Tiếp theo là gì? Bây giờ, chúng ta cần triển khai cách hai mô hình này tương tác!
Đây là một ý tưởng đề xuất để lọc phản hồi không chính xác:
Ban đầu, để tác tử khách hàng tạo phản hồi dựa trên truy vấn người dùng. Sau đó, nếu tác tử QA đánh giá phản hồi đủ tốt cho truy vấn và phù hợp với danh mục sản phẩm, ta sẽ gửi câu trả lời lại cho người dùng.
Ngược lại, nếu tác tử QA xác định rằng câu trả lời không đáp ứng yêu cầu người dùng hoặc chứa thông tin không có trong danh mục, ta có thể yêu cầu tác tử khách hàng cải thiện câu trả lời trước khi gửi cho người dùng.
Theo ý tưởng này, chúng ta có thể cải tiến phần cuối của sơ đồ ban đầu như sau:
Hình tự vẽ. Mô tả quy trình kiểm duyệt mở rộng. Chúng ta có thể dùng đánh giá của tác tử QA để cung cấp phản hồi cho ứng dụng dựa trên LLM.
Điều phối tương tác giữa các tác tử
Để dùng tác tử QA như một bộ lọc, ta cần đảm bảo nó xuất ra phản hồi nhất quán ở mọi vòng lặp.
Một cách đạt được điều đó là điều chỉnh nhẹ system message của tác tử QA và yêu cầu nó chỉ xuất
Truenếu phản hồi của tác tử khách hàng đủ tốt, hoặcFalsenếu không:Vì vậy, khi đánh giá lại phản hồi mới nhất của tác tử khách hàng, chúng ta sẽ chỉ nhận về một giá trị boolean:
Ta có thể tiếp tục xử lý giá trị boolean này để gửi phản hồi cho người dùng - nếu tác tử QA đánh giá là
True- hoặc cho mô hình cơ hội thứ hai để tạo phản hồi mới - nếu đánh giá làFalse.Trình diễn cách các tác tử tương tác
Hãy ghép mọi thứ lại!
Vì chúng ta đã khởi tạo hai bộ nhớ - cùng system message và thông tin bổ sung tương ứng - mỗi yêu cầu của khách hàng có thể được xử lý như sau:
Như mô tả ở trên, chúng ta đã lọc phản hồi dựa trên tính đúng đắn của chúng. Tôi để bạn quyết định sẽ làm gì với các phản hồi chưa phù hợp. Chúng tôi đề xuất ý tưởng gửi phản hồi cho tác tử khách hàng và yêu cầu thử lại, nhưng tại sao không nhờ chính tác tử QA đưa ra câu trả lời tốt hơn? Có rất nhiều khả năng!
Kết luận
Trong bài viết này, chúng ta đã khám phá tiềm năng dùng các mô hình GPT làm bộ kiểm duyệt cho các phiên bản mô hình cùng loại. Chúng ta đã chứng minh rằng chính những năng lực mạnh mẽ khiến chúng ta sử dụng LLM trong ứng dụng cũng có thể giúp ứng dụng tăng độ chính xác và tính toàn vẹn trong tương tác với người dùng.
Trái với hiểu lầm phổ biến, triển khai các mức kiểm duyệt không nhất thiết làm tăng độ phức tạp của ứng dụng, và như chúng tôi đã cho thấy, đôi khi có thể đạt được chỉ với vài dòng mã được thiết kế tốt, cải thiện đáng kể chức năng ứng dụng.
Trong thế giới do AI dẫn dắt ngày nay, kiểm duyệt LLM có trách nhiệm là điều bắt buộc. Đây không chỉ là lựa chọn mà còn là nghĩa vụ đạo đức. Bằng cách tích hợp kiểm duyệt AI, chúng ta đảm bảo ứng dụng không chỉ mạnh mẽ mà còn đáng tin cậy và có đạo đức. Hãy tiếp tục phát triển một cách có trách nhiệm để chúng ta có thể tiếp tục hưởng lợi từ AI đồng thời giữ vững độ chính xác.
Xin cảm ơn đã đọc! Nếu bạn quan tâm chủ đề kiểm duyệt AI, tôi khuyến khích bạn đọc tiếp Thúc đẩy AI có trách nhiệm: Kiểm duyệt nội dung trong ChatGPT như tài liệu nối tiếp!