1. Cơ bản về Mô hình Sinh văn bản

Mô hình sinh văn bản của OpenAI, thường được gọi là Generative Pre-trained Transformer (GPT), dựa vào cơ chế tự-chú ý trong học sâu để hiểu và xử lý ngôn ngữ tự nhiên. Việc huấn luyện mô hình GPT bao gồm hai giai đoạn: tiền huấn luyện và điều chỉnh feinh.

Tiền Huấn luyện

Trong giai đoạn tiền huấn luyện, mô hình trải qua việc học không giám sát sử dụng tập dữ liệu văn bản quy mô lớn. Trong quá trình này, mô hình được huấn luyện bằng cách dự đoán từ tiếp theo. Ví dụ, với câu "Tôi có một cây bút," sau khi nhìn thấy một vài từ đầu tiên, nó cố gắng dự đoán từ "cây bút." Mục tiêu chính của tiền huấn luyện là để mô hình hiểu cấu trúc và ngữ nghĩa của ngôn ngữ.

Điều Chỉnh Feinh

Giai đoạn điều chỉnh feinh bao gồm việc học giám sát trên các nhiệm vụ cụ thể. Trong giai đoạn này, mô hình được điều chỉnh để thích ứng với các ứng dụng cụ thể như hệ thống trả lời câu hỏi và tóm tắt tài liệu. Điều chỉnh feinh bao gồm việc huấn luyện tiếp mô hình với các tập dữ liệu có chú thích dựa trên mô hình đã được tiền huấn luyện, giúp nó thích ứng tốt hơn với các nhiệm vụ cụ thể.

2. Các Kịch Bản Ứng Dụng

Mô hình sinh văn bản của OpenAI có thể được áp dụng trong một loạt các kịch bản khác nhau. Dưới đây là một số ứng dụng cụ thể:

  • Soạn Thảo Tài Liệu: Hỗ trợ người dùng trong việc nhanh chóng soạn thảo và chỉnh sửa tài liệu.
  • Viết Mã Máy Tính: Tạo ra đoạn mã để hỗ trợ lập trình.
  • Trả lời Câu Hỏi Về Cơ Sở Kiến Thức: Cung cấp câu trả lời dựa trên kiến thức đã lưu trữ.
  • Phân Tích Văn Bản: Trích xuất thông tin văn bản, phân tích tâm trạng, và nhiều hơn nữa.
  • Cung Cấp Giao Diện Ngôn Ngữ Tự Nhiên cho Phần Mềm: Cho phép người dùng tương tác với phần mềm bằng ngôn ngữ tự nhiên.
  • Dạy Học Trên Nhiều Môn Học: Cung cấp hướng dẫn giảng dạy qua nhiều môn học.
  • Dịch Ngôn Ngữ: Dịch văn bản giữa các ngôn ngữ khác nhau.
  • Mô Phỏng Nhân Vật cho Trò Chơi: Tạo đoạn hội thoại và câu chuyện nền cho trò chơi hoặc kịch bản nhập vai.

3. Giới Thiệu về Mô Hình Đối Thoại

Mô hình đối thoại là một dạng đặc biệt của mô hình sinh văn bản hiểu và tạo ra cuộc trò chuyện tự nhiên thông qua tiền huấn luyện. Mô hình này có thể mô phỏng một cuộc trò chuyện giữa người dùng và trợ lý ảo, phù hợp cho các ứng dụng tương tác thời gian thực.

Sử dụng mô hình đối thoại thường liên quan đến việc thực hiện các cuộc trò chuyện tương tác đa vòng. Ví dụ, khi người dùng đặt câu hỏi, mô hình có thể tạo ra các câu trả lời phù hợp dựa trên dữ liệu huấn luyện trước đó. Ngoài ra, mô hình đối thoại có thể duy trì thông tin bối cảnh, xem xét nội dung trò chuyện trước đó để tạo ra các phản ứng tự nhiên và mạch lạc hơn.

Các kịch bản ứng dụng của mô hình đối thoại:

  • Trợ Lý Dịch Vụ Khách Hàng: Tự động trả lời các câu hỏi thường gặp của người dùng, cung cấp trợ giúp và tư vấn.
  • Chatbot: Tham gia vào các tương tác trò chuyện tự nhiên với người dùng.
  • Trợ Lý Ảo: Thực hiện lệnh bằng giọng nói của người dùng, chẳng hạn như lập kế hoạch họp, thiết lập nhắc nhở, và nhiều hơn nữa.
  • Trò Chơi nhập vai: Làm phong phú trải nghiệm chơi game bằng cách cung cấp cho nhân vật trong game các đoạn hội thoại và tính cách độc đáo.

4. Giao Diện Lập Trình Ứng Dụng Mô Hình Đối Thoại

Giao diện Lập trình ứng dụng Mô hình đối thoại cho phép các nhà phát triển tương tác với mô hình GPT bằng các yêu cầu HTTP. Phần này sẽ giới thiệu cách sử dụng curl để xây dựng các yêu cầu và phân tích các phản hồi được trả về bởi mô hình.

Xây dựng Yêu Cầu

Trước khi bắt đầu, bạn cần đăng ký và nhận một khóa API từ OpenAI, cần được xác thực thông qua header HTTP khi gửi yêu cầu.

Dưới đây là một ví dụ về việc sử dụng curl để gửi yêu cầu đến Giao diện Lập trình ứng dụng Mô hình Đối Thoại:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [
      {
        "role": "system",
        "content": "You are a helpful assistant."
      },
      {
        "role": "user",
        "content": "Which team won the 2020 World Series?"
      }
    ]
  }'

Ý Nghĩa của Các Tham Số Mô Hình Đối Thoại

Khi sử dụng Giao diện lập trình ứng dụng Mô hình Đối Thoại của OpenAI, các tham số chính bao gồm "model" và "messages," mỗi tham số mang một ý nghĩa cụ thể và ảnh hưởng đến kết quả được tạo ra.

Tham số của mô hình

Tham số mô hình được sử dụng để chỉ định phiên bản mô hình sẽ được sử dụng. Ví dụ, "model": "gpt-3.5-turbo" cho biết bạn đang yêu cầu mô hình GPT-3.5-Turbo. Phiên bản mô hình được chọn ở đây sẽ phản ứng với đầu vào của người dùng dựa trên khả năng, dữ liệu huấn luyện và tính năng giao diện của nó.

Dưới đây là các mô hình được hỗ trợ hiện tại:

Các Mô Hình Được Hỗ Trợ Ngữ cảnh Tối Đa Mô Tả Mô Hình
gpt-4-0125-preview 128,000 token Mô hình xem trước GPT-4 Turbo được thiết kế để giảm các trường hợp "lười biếng", nơi mà mô hình không thể hoàn thành các nhiệm vụ.
gpt-4-turbo-preview 128,000 token Hiện đang trỏ tới mô hình gpt-4-0125-preview.
gpt-4-1106-preview 128,000 token Mô hình GPT-4 Turbo với khả năng thực thi hướng dẫn cải tiến, chế độ JSON, đầu ra có thể tái tạo và các cuộc gọi chức năng song song.
gpt-4-vision-preview 128,000 token Mô hình GPT-4 có khả năng hiểu hình ảnh, ngoại trừ tất cả các tính năng GPT-4 Turbo khác.
gpt-4 8,192 token Hiện đang trỏ tới gpt-4-0613.
gpt-4-0613 8,192 token Bản snapshot GPT-4 từ ngày 13 tháng 6 năm 2023, cung cấp khả năng hỗ trợ cuộc gọi chức năng cải tiến.
gpt-4-32k 32,768 token Hiện đang trỏ tới gpt-4-32k-0613. Mô hình này không được quảng bá rộng rãi và ưa thích việc sử dụng GPT-4 Turbo.
gpt-4-32k-0613 32,768 token Bản snapshot GPT-4 32k từ ngày 13 tháng 6 năm 2023. Mô hình này không được quảng bá rộng rãi và ưa thích việc sử dụng GPT-4 Turbo.
gpt-3.5-turbo-1106 16,385 token Phiên bản GPT-3.5 Turbo mới nhất với khả năng thực thi hướng dẫn cải tiến, chế độ JSON, đầu ra có thể tái tạo và các cuộc gọi chức năng song song.
gpt-3.5-turbo 4,096 token Hiện đang trỏ tới gpt-3.5-turbo-0613.
gpt-3.5-turbo-16k 16,385 token Hiện đang trỏ tới gpt-3.5-turbo-16k-0613.
gpt-3.5-turbo-instruct 4,096 token Tương tự về chức năng với các mô hình thời kỳ GPT-3. Tương thích với các điểm cuối hoàn thành truyền thống, không phù hợp cho hoàn thành trò chuyện.
gpt-3.5-turbo-0613 4,096 token Bản snapshot của gpt-3.5-turbo từ ngày 13 tháng 6 năm 2023. Sẽ ngừng sử dụng vào ngày 13 tháng 6 năm 2024.
gpt-3.5-turbo-16k-0613 16,385 token Bản snapshot của gpt-3.5-16k-turbo từ ngày 13 tháng 6 năm 2023. Sẽ ngừng sử dụng vào ngày 13 tháng 6 năm 2024.
gpt-3.5-turbo-0301 4,096 token Bản snapshot của gpt-3.5-turbo từ ngày 1 tháng 3 năm 2023. Sẽ ngừng sử dụng vào ngày 13 tháng 6 năm 2024.

Tham số Tin nhắn

Tham số tin nhắn là một mảng, trong đó mỗi phần tử đại diện cho một tin nhắn trong cuộc trò chuyện. Mỗi tin nhắn là một đối tượng chứa hai thuộc tính: vai trò (vai trò của người gửi) và nội dung (nội dung cụ thể của tin nhắn).

  • role: Chỉ định vai trò của người gửi tin nhắn. Các giá trị tùy chọn bao gồm "hệ thống", "người dùng" và "trợ lý".
  • content: Nội dung cụ thể của tin nhắn.

Loại và Chức năng của vai trò

Giá trị của tham số vai trò xác định loại và chức năng của tin nhắn. API Đối thoại sẽ thay đổi phản hồi của mô hình dựa trên các vai trò khác nhau.

Vai trò 'hệ thống'

Các tin nhắn hệ thống được sử dụng để chỉ ra hành vi của mô hình một cách toàn cầu. Ví dụ, nó có thể tường minh xác định vai trò mà mô hình đóng (như trợ lý, thông dịch viên, v.v.), hoặc cung cấp hướng dẫn cụ thể để tuân theo trong cuộc trò chuyện. Các thông điệp hệ thống có tác động lâu dài đến hành vi của mô hình trong suốt cuộc trò chuyện, nhưng thông thường chúng là tùy chọn.

Ví dụ, nếu bạn muốn mô hình tham gia cuộc trò chuyện dưới hình thức một trợ lý dịch vụ khách hàng, bạn có thể chỉ định trong thông điệp hệ thống:

{
  "role": "system",
  "content": "Bạn là một trợ lý dịch vụ khách hàng."
}

Vai trò 'người dùng'

Các tin nhắn người dùng đại diện cho các câu hỏi được người dùng nhập vào. Mô hình phản ứng với những tin nhắn này và cung cấp thông tin, câu trả lời hoặc các hình thức đầu ra khác. Các thông điệp này là một phần rất quan trọng của luồng làm việc của API Hội thoại và thường tương ứng với các yêu cầu thực tế của người dùng trong ứng dụng.

Ví dụ, trong yêu cầu của người dùng trong ví dụ curl ở trên:

{
  "role": "user",
  "content": "Đội nào đã giành chiến thắng tại World Series 2020?"
}

Vai trò 'trợ lý'

Các tin nhắn trợ lý thường chỉ đề cập đến những câu trả lời được tạo ra bởi mô hình và cũng có thể là một phần của các thông điệp lịch sử cuộc trò chuyện do nhà phát triển cung cấp, được sử dụng để mô phỏng định dạng của các thông điệp trả về của trí tuệ nhân tạo. Trong các yêu cầu API, các tin nhắn vai trò trợ lý thường không được cung cấp trừ khi cần thiết để thiết lập định dạng mà mô hình trả lời câu hỏi trong lịch sử trò chuyện để cung cấp ví dụ về đầu ra của mô hình.

Phân tích Phản hồi

Phản hồi của mô hình được trả về dưới dạng JSON. Dưới đây là một ví dụ về cách phân tích phản hồi:

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "Đội vô địch của World Series 2020 là Los Angeles Dodgers.",
        "role": "trợ lý"
      },
      "logprobs": null
    }
  ],
  "created": 1677664795,
  "id": "chatcmpl-7QyqpwdfhqwajicIEznoc6Q47XAyW",
  "model": "gpt-3.5-turbo-0613",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 17,
    "prompt_tokens": 57,
    "total_tokens": 74
  }
}

Trong phản hồi trên, bạn có thể lấy câu trả lời của mô hình từ choices[0].message.content.

Cách Triển Khai Chức Năng Lưu Trữ Trong Mô Hình Đối Thoại

Dưới đây là một ví dụ về việc sử dụng OpenAI's Chat Completions API để triển khai chức năng lưu trữ của mô hình GPT, giúp lưu trữ bối cảnh cuộc trò chuyện lịch sử (tức là nội dung của bộ nhớ) trong một yêu cầu API mới để đạt được cuộc đối thoại liên tục.

import requests

api_url = "https://api.openai.com/v1/chat/completions"
api_key = "Khóa API OpenAI của bạn"

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}"
}

data = {
    "model": "gpt-3.5-turbo",  # Có thể thay thế bằng gpt-4 hoặc các mô hình khác có sẵn
    "messages": [
      {
        "role": "system",  # Tin nhắn hệ thống, được sử dụng để thiết lập hành vi của mô hình đối thoại
        "content": "Bạn là trợ giúp viên hỗ trợ."
      },
      {
        "role": "user",  # Tin nhắn của người dùng, mô hình sẽ phản hồi dựa trên điều này
        "content": "Bạn có thể cho tôi biết các nguyên nhân chính gây ra biến đổi khí hậu không?"
      },
      {
        "role": "assistant",  # Phản hồi của mô hình
        "content": "Các nguyên nhân chính gây ra biến đổi khí hậu bao gồm khí thải nhà kính, đốt nhiên liệu hóa thạch và phá rừng, v.v."
      },
      {
        "role": "user",  # Câu hỏi mới dựa trên giải thích của mô hình
        "content": "Làm thế nào để giảm thiểu khí thải nhà kính?"
      }
    ]
}

response = requests.post(api_url, headers=headers, json=data)

if response.status_code == 200:
    reply_content = response.json()['choices'][0]['message']['content']
    print(f"Phản hồi của mô hình => {reply_content}")
else:
    print(f"Lỗi yêu cầu: {response.status_code}")

Trong ví dụ này, chúng ta mô phỏng việc người dùng đầu tiên hỏi về các nguyên nhân chính gây ra biến đổi khí hậu, sau đó đặt một câu hỏi khác dựa trên giải thích của mô hình. Trong các yêu cầu tiếp theo, chúng ta giữ nội dung của cuộc trò chuyện trước đó để đảm bảo rằng mô hình có thể nhớ lịch sử của cuộc trò chuyện trước và tạo ra một phản hồi dựa trên nó. Phương pháp này đạt được việc truyền và lưu trữ trạng thái đối thoại bằng cách sử dụng đầu vào và đầu ra của cuộc trò chuyện trước làm các tin nhắn lịch sử của yêu cầu mới.

Mẹo: Để triển khai chức năng lưu trữ của đối thoại, vì mô hình có giới hạn mã thông báo tối đa, không khả thi để nhập tất cả các tin nhắn cuộc trò chuyện lịch sử cho mỗi yêu cầu. Thông thường, các tin nhắn liên quan đến các câu hỏi hiện tại được nhập dưới dạng tin nhắn lịch sử vào mô hình, và các phần tiếp theo sẽ giới thiệu cách tính năng nhúng đạt được tìm kiếm tương đồng văn bản.

5. JSON Schema

JSON Schema là một tính năng của API mô hình đối thoại cho phép người dùng chỉ định mô hình luôn phải trả về một đối tượng JSON, phù hợp cho các tình huống yêu cầu nhận phản hồi dưới dạng JSON.

Sử dụng JSON Schema

Để sử dụng JSON Schema, bạn cần đặt trường response_format thành { "type": "json_object" } trong phần thân yêu cầu HTTP và đảm bảo rằng tin nhắn hệ thống cho biết đầu ra của mô hình là dạng JSON. Dưới đây là một ví dụ yêu cầu curl để kích hoạt JSON Schema:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-3.5-turbo-1106",
    "response_format": { "type": "json_object" },
    "messages": [
      {
        "role": "system",
        "content": "Bạn là trợ giúp viên hỗ trợ được thiết kế để xuất đầu ra dưới dạng JSON."
      },
      {
        "role": "user",
        "content": "Đội nào đã chiến thắng World Series 2020?"
      }
    ]
  }'

Phân tích Phản hồi JSON Schema

Trong chế độ JSON Schema, phản hồi sẽ chứa một đối tượng JSON hoàn chỉnh và được phân tích hoàn hảo. Chế độ này đảm bảo rằng đầu ra của mô hình là một đối tượng JSON hợp lệ có thể được phân tích trực tiếp và sử dụng. Dưới đây là một ví dụ về phản hồi có thể được trả về bằng cách sử dụng JSON Schema:

{
  "choices": [
    {
      "finish_reason": "stop",
      "message": {
        "content": "{\"winner\": \"Los Angeles Dodgers\"}"
      }
    }
  ]
}

Trong Python, bạn có thể sử dụng đoạn mã sau để trích xuất nội dung từ phản hồi:

import json

response = {
  "choices": [
    {
      "finish_reason": "stop",
      "message": {
        "content": "{\"winner\": \"Los Angeles Dodgers\"}"
      }
    }
  ]
}

response_content = json.loads(response['choices'][0]['message']['content'])

print(response_content)

Kết quả sẽ là:

{'winner': 'Los Angeles Dodgers'}

JSON Schema cung cấp một phương pháp đáng tin cậy để đảm bảo định dạng chính xác của phản hồi cho các trường hợp sử dụng cụ thể. Do đó, nên kích hoạt JSON Schema trong các trường hợp có yêu cầu cụ thể về định dạng phản hồi của API.