Hướng dẫn làm việc với các phiên bản GPT-3.5-Turbo và GPT-4
21 December, 2023

Hướng dẫn làm việc với các phiên bản GPT-3.5-Turbo và GPT-4

Với khả năng xử lý ngôn ngữ tự nhiên vượt trội, GPT-3.5-Turbo và GPT-4 đã trở thành công cụ hữu ích cho cộng đồng phát triển ứng dụng. Nắm rõ cách làm việc với các phiên bản GPT này giúp tạo ra nội dung chất lượng cao cũng như giảm gánh nặng sáng tạo với người dùng.

Trong thời đại công nghệ 4.0, việc sử dụng AI để tạo ra văn bản tự động đang trở nên phổ biến hơn bao giờ hết. Trong đó, GPT-3.5-Turbo và GPT-4 là hai mô hình được người dùng đánh giá cao về độ tin cậy và hiệu suất. Tuy nhiên, không phải ai cũng biết cách sử dụng các công cụ trên hiệu quả. Vì vậy, trong bài viết này, FPT Smart Cloud sẽ cung cấp hướng dẫn chi tiết cách làm việc với các phiên bản GPT-3.5-Turbo và GPT-4.

Phiên bản GPT-3.5-Turbo và GPT-4 là gì?

GPT-3.5-Turbo và GPT-4 là hai mô hình ngôn ngữ hoạt động theo mô hình trò chuyện. So với GPT-3 trước đây chỉ chấp nhận đầu vào sau đó trả về kết quả tương ứng thì hai phiên bản mới đã được nâng cấp hơn rất nhiều.

 

GPT-3.5-Turbo và GPT-4 hoạt động theo mô hình trò chuyện
GPT-3.5-Turbo và GPT-4 hoạt động theo mô hình trò chuyện

Có hai cách để tương tác với các mô hình này trong Azure OpenAI, đó là:

  • Chat Completion API (Mô hình trò chuyện).
  • Chat Markup Language (ChatML).

Làm việc với GPT-35-Turbo và GPT-4 qua Chat Completion API

Chat Completion API được phát triển dành riêng cho việc tương tác với GPT-3.5-Turbo và GPT-4. Đây cũng là cách duy nhất để truy cập các mô hình GPT-4 mới.

Định dạng làm việc

Các mô hình GPT-3.5-Turbo và GPT-4 do OpenAI phát triển có thể hiểu và xử lý các đoạn hội thoại giống như con người. Khi cung cấp cho GPT một đoạn hội thoại được định dạng bằng tham số messages, chúng sẽ có thể hiểu được ai đang nói gì và trả lời phù hợp. Khi sử dụng API Python, bạn có thể sử dụng một danh sách các từ điển để biết rõ cách đặt câu hỏi cho GPT.

Định dạng cơ bản của mô hình trò chuyện như sau:

{“role”: “system”, “content”: “Provide some context and/or instructions to the model”},

{“role”: “user”, “content”: “The users messages goes here”}

Tạo vòng lặp hội thoại cơ bản

Để tạo ra một vòng lặp hội thoại, người sử dụng hãy thực hiện theo các bước sau:

  • Nhận dữ liệu đầu vào từ bảng điều khiển và thêm vào danh sách tin nhắn với vai trò người dùng.
  • Gửi danh sách tin nhắn đến API và nhận phản hồi từ API với vai trò là trợ lý.
  • Thêm phản hồi vào danh sách tin nhắn.

Mục đích của việc này là duy trì ngữ cảnh của cuộc trò chuyện khi người dùng đặt câu hỏi mới. Bạn chỉ cần gửi toàn bộ lịch sử trò chuyện cùng câu hỏi mới khi sử dụng GPT vì API không lưu dữ liệu cho những câu hỏi trước đó.

Để tạo vòng lặp hội thoại, bạn có thể chạy đoạn mã dưới đây:

OpenAI Python 0.28.1

OpenAI Python 1.x

import os

import openai

openai.api_type = “azure”

openai.api_version = “2023-05-15” 

openai.api_base = os.getenv(“AZURE_OPENAI_ENDPOINT”)  # Your Azure OpenAI resource’s endpoint value.

openai.api_key = os.getenv(“AZURE_OPENAI_KEY”)

conversation=[{“role”: “system”, “content”: “You are a helpful assistant.”}]

while True:

    user_input = input()      

    conversation.append({“role”: “user”, “content”: user_input})

    response = openai.ChatCompletion.create(

        engine=”gpt-35-turbo”, # The deployment name you chose when you deployed the GPT-35-turbo or GPT-4 model.

        messages=conversation

    )

    conversation.append({“role”: “assistant”, “content”: response[“choices”][0][“message”][“content”]})

    print(“\n” + response[‘choices’][0][‘message’][‘content’] + “\n”)

import os

from openai import AzureOpenAI

client = AzureOpenAI(

  api_key = os.getenv(“AZURE_OPENAI_KEY”),  

  api_version = “2023-05-15”,

  azure_endpoint = os.getenv(“AZURE_OPENAI_ENDPOINT”)  # Your Azure OpenAI resource’s endpoint value.

)

conversation=[{“role”: “system”, “content”: “You are a helpful assistant.”}]

while True:

    user_input = input(“Q:”)      

    conversation.append({“role”: “user”, “content”: user_input})

    response = client.chat.completions.create(

        model=”gpt-35-turbo”, # model = “deployment_name”.

        messages=conversation

    )

    conversation.append({“role”: “assistant”, “content”: response.choices[0].message.content})

    print(“\n” + response.choices[0].message.content + “\n”)

Quản lý cuộc trò chuyện

Mỗi mô hình chỉ có thể xử lý một số lượng mã thông báo nhất định trong một lần gọi API. Số lượng mã thông báo này bao gồm cả lời nhắc và phản hồi của mô hình. 

Ví dụ, GPT-3.5-Turbo chỉ có thể xử lý tối đa 4096 mã thông báo, trong khi phiên bản GPT-4 và GPT-4-32k có thể xử lý tối đa 8192 và 32768 mã thông báo.

 

Mỗi phiên bản GPT đều có giới hạn xử lý mã thông báo
Mỗi phiên bản GPT đều có giới hạn xử lý mã thông báo

Điều này có nghĩa là người dùng không thể gửi cho mô hình những yêu cầu quá dài. Bạn cần kiểm tra số lượng mã thông báo trong lời nhắc và tham số max_tokens trước khi gọi API. Nếu số lượng mã thông báo vượt quá giới hạn, hệ thống sẽ tự báo lỗi. 

Dưới đây là đoạn mã tạo vòng lặp hội thoại với API hoàn thành trò chuyện bằng thư viện tiktoken của OpenAI để giải quyết giới hạn mã thông báo 4096.

Lưu ý: Đoạn mã yêu cầu tiktoken phiên bản 0.5.1. Nếu đang sử dụng phiên bản cũ hơn, hãy cập nhật nó bằng lệnh pip install tiktoken –upgrade.

OpenAI Python 0.28.1

OpenAI Python 1.x

import tiktoken

import openai

import os

openai.api_type = “azure”

openai.api_version = “2023-05-15” 

openai.api_base = os.getenv(“AZURE_OPENAI_ENDPOINT”)  # Your Azure OpenAI resource’s endpoint value.

openai.api_key = os.getenv(“AZURE_OPENAI_KEY”)

system_message = {“role”: “system”, “content”: “You are a helpful assistant.”}

max_response_tokens = 250

token_limit = 4096

conversation = []

conversation.append(system_message)

def num_tokens_from_messages(messages, model=”gpt-3.5-turbo-0613″):

    “””Return the number of tokens used by a list of messages.”””

    try:

        encoding = tiktoken.encoding_for_model(model)

    except KeyError:

        print(“Warning: model not found. Using cl100k_base encoding.”)

        encoding = tiktoken.get_encoding(“cl100k_base”)

    if model in {

        “gpt-3.5-turbo-0613”,

        “gpt-3.5-turbo-16k-0613”,

        “gpt-4-0314”,

        “gpt-4-32k-0314”,

        “gpt-4-0613”,

        “gpt-4-32k-0613”,

        }:

        tokens_per_message = 3

        tokens_per_name = 1

    elif model == “gpt-3.5-turbo-0301”:

        tokens_per_message = 4  # every message follows <|start|>{role/name}\n{content}<|end|>\n

        tokens_per_name = -1  # if there’s a name, the role is omitted

    elif “gpt-3.5-turbo” in model:

        print(“Warning: gpt-3.5-turbo may update over time. Returning num tokens assuming gpt-3.5-turbo-0613.”)

        return num_tokens_from_messages(messages, model=”gpt-3.5-turbo-0613″)

    elif “gpt-4” in model:

        print(“Warning: gpt-4 may update over time. Returning num tokens assuming gpt-4-0613.”)

        return num_tokens_from_messages(messages, model=”gpt-4-0613″)

    else:

        raise NotImplementedError(

            f”””num_tokens_from_messages() is not implemented for model {model}. See https://github.com/openai/openai-python/blob/main/chatml.md for information on how messages are converted to tokens.”””

        )

    num_tokens = 0

    for message in messages:

        num_tokens += tokens_per_message

        for key, value in message.items():

            num_tokens += len(encoding.encode(value))

            if key == “name”:

                num_tokens += tokens_per_name

    num_tokens += 3  # every reply is primed with <|start|>assistant<|message|>

    return num_tokens

while True:

    user_input = input(“”)     

    conversation.append({“role”: “user”, “content”: user_input})

    conv_history_tokens = num_tokens_from_messages(conversation)

    while conv_history_tokens + max_response_tokens >= token_limit:

        del conversation[1] 

        conv_history_tokens = num_tokens_from_messages(conversation)

    response = openai.ChatCompletion.create(

        engine=”gpt-35-turbo”, # The deployment name you chose when you deployed the GPT-35-Turbo or GPT-4 model.

        messages=conversation,

        temperature=0.7,

        max_tokens=max_response_tokens,

    )

    conversation.append({“role”: “assistant”, “content”: response[‘choices’][0][‘message’][‘content’]})

    print(“\n” + response[‘choices’][0][‘message’][‘content’] + “\n”)

import tiktoken

import os

from openai import AzureOpenAI

client = AzureOpenAI(

  api_key = os.getenv(“AZURE_OPENAI_KEY”),  

  api_version = “2023-05-15”,

  azure_endpoint = os.getenv(“AZURE_OPENAI_ENDPOINT”)  # Your Azure OpenAI resource’s endpoint value.

)

system_message = {“role”: “system”, “content”: “You are a helpful assistant.”}

max_response_tokens = 250

token_limit = 4096

conversation = []

conversation.append(system_message)

def num_tokens_from_messages(messages, model=”gpt-3.5-turbo-0613″):

    “””Return the number of tokens used by a list of messages.”””

    try:

        encoding = tiktoken.encoding_for_model(model)

    except KeyError:

        print(“Warning: model not found. Using cl100k_base encoding.”)

        encoding = tiktoken.get_encoding(“cl100k_base”)

    if model in {

        “gpt-3.5-turbo-0613”,

        “gpt-3.5-turbo-16k-0613”,

        “gpt-4-0314”,

        “gpt-4-32k-0314”,

        “gpt-4-0613”,

        “gpt-4-32k-0613”,

        }:

        tokens_per_message = 3

        tokens_per_name = 1

    elif model == “gpt-3.5-turbo-0301”:

        tokens_per_message = 4  # every message follows <|start|>{role/name}\n{content}<|end|>\n

        tokens_per_name = -1  # if there’s a name, the role is omitted

    elif “gpt-3.5-turbo” in model:

        print(“Warning: gpt-3.5-turbo may update over time. Returning num tokens assuming gpt-3.5-turbo-0613.”)

        return num_tokens_from_messages(messages, model=”gpt-3.5-turbo-0613″)

    elif “gpt-4” in model:

        print(“Warning: gpt-4 may update over time. Returning num tokens assuming gpt-4-0613.”)

        return num_tokens_from_messages(messages, model=”gpt-4-0613″)

    else:

        raise NotImplementedError(

            f”””num_tokens_from_messages() is not implemented for model {model}. See https://github.com/openai/openai-python/blob/main/chatml.md for information on how messages are converted to tokens.”””

        )

    num_tokens = 0

    for message in messages:

        num_tokens += tokens_per_message

        for key, value in message.items():

            num_tokens += len(encoding.encode(value))

            if key == “name”:

                num_tokens += tokens_per_name

    num_tokens += 3  # every reply is primed with <|start|>assistant<|message|>

    return num_tokens

while True:

    user_input = input(“Q:”)      

    conversation.append({“role”: “user”, “content”: user_input})

    conv_history_tokens = num_tokens_from_messages(conversation)

    while conv_history_tokens + max_response_tokens >= token_limit:

        del conversation[1] 

        conv_history_tokens = num_tokens_from_messages(conversation)

    response = client.chat.completions.create(

        model=”gpt-35-turbo”, # model = “deployment_name”.

        messages=conversation,

        temperature=0.7,

        max_tokens=max_response_tokens

    )

    conversation.append({“role”: “assistant”, “content”: response.choices[0].message.content})

    print(“\n” + response.choices[0].message.content + “\n”)

Làm việc với GPT-3.5-Turbo và GPT-4 qua ChatML

Cả ChatML và Chat Completion API đều có thể được sử dụng để cung cấp đầu vào cho các mô hình ngôn ngữ như GPT-3.5-Turbo. Tuy nhiên, ChatML nhắc nhở dựa trên “unique token”, trong khi Chat Completion API sử dụng định dạng đơn giản. Điều này khiến ChatML linh hoạt hơn, nhưng cũng đòi hỏi nhiều nỗ lực hơn để sử dụng chính xác.

Định dạng làm việc

GPT-3.5-Turbo được OpenAI sử dụng các mã thông báo đặc biệt để phân biệt các phần khác nhau của lời nhắc. Lời nhắc bao gồm một thông báo hệ thống khởi động mô hình, theo sau là một chuỗi các thông báo giữa người dùng và trợ lý.

Định dạng làm việc của một lời nhắc ChatML cơ bản sẽ như sau:

<|im_start|>system 

Provide some context and/or instructions to the model.

<|im_end|> 

<|im_start|>user 

The user’s message goes here

<|im_end|> 

<|im_start|>assistant

Ngăn chặn đầu vào không an toàn của người dùng

Hệ thống nên được cài đặt để ngăn người dùng cuối thêm các mã đặc biệt như <|im_start|> <|im_end|> khi nhập yêu cầu. Đồng thời, để đảm bảo lời nhắc được gửi tới mô hình đúng định dạng và tuân theo ngôn ngữ đánh dấu trò chuyện, người sử dụng nên tích hợp xác thực bổ sung. 

Bên cạnh đó, bạn cũng có thể tham khảo các hướng dẫn trong thông báo của hệ thống để đưa ra yêu cầu đúng về các chủ đề được cho phép.

 

Nên tham khảo hướng dẫn trước khi sử dụng GPT
Nên tham khảo hướng dẫn trước khi sử dụng GPT

Xem thêm: Kỷ nguyên của AI: Microsoft Cloud đang đẩy nhanh quá trình chuyển đổi AI trong các ngành như thế nào? 

Quản lý cuộc trò chuyện

Tương tự như khi làm việc qua mô hình trò chuyện, số mã thông báo tối đa cho mô hình GPT-3.5-Turbo là 4096. Để tránh gặp lỗi, tổng số mã thông báo từ lời nhắc và giá trị của tham số max_tokens không được vượt quá 4096.

Do đó, người sử dụng phải đảm bảo rằng cả lời nhắc và mức độ hoàn thành đều nằm trong giới hạn số mã thông báo.

Giới hạn mã thông báo

Để giới hạn số mã thông báo, cách đơn giản nhất là loại bỏ các tin nhắn cũ nhất trong cuộc trò chuyện.

Bạn có thể chọn nhiều mã thông báo trong vùng giới hạn của hệ thống hoặc theo cài đặt cá nhân. Tuy nhiên, hệ thống sẽ cần nhiều thời gian để đưa ra phản hồi cho những yêu cầu dài hơn. Để ước tính số lượng mã thông báo trong một chuỗi, bạn có thể sử dụng thư viện tiktoken Python như sau:

import tiktoken 

cl100k_base = tiktoken.get_encoding(“cl100k_base”) 

enc = tiktoken.Encoding( 

    name=”gpt-35-turbo”,  

    pat_str=cl100k_base._pat_str, 

    mergeable_ranks=cl100k_base._mergeable_ranks, 

    special_tokens={ 

        **cl100k_base._special_tokens, 

        “<|im_start|>”: 100264, 

        “<|im_end|>”: 100265

    } 

tokens = enc.encode( 

    “<|im_start|>user\nHello<|im_end|><|im_start|>assistant”,  

    allowed_special={“<|im_start|>”, “<|im_end|>”} 

assert len(tokens) == 7 

assert tokens == [100264, 882, 198, 9906, 100265, 100264, 78191]

Lời kết

Mặc dù GPT-3.5-Turbo và GPT-4 là các mô hình ngôn ngữ lớn (LLM) được phát triển bởi OpenAI nhưng Microsoft vẫn cung cấp quyền truy cập vào GPT thông qua Azure OpenAI Service.

Hiện nay, một số ứng dụng thuộc gói Microsoft 365 Business như Teams hay Word cũng bắt đầu tích hợp với dịch vụ Azure OpenAI. Điều đó có nghĩa người dùng có thể sử dụng các tính năng GPT-3.5-Turbo hoặc GPT-4 nhanh hơn. Chính vì vậy, gói Microsoft 365 cho doanh nghiệp ngày càng được nhiều đơn vị tin tưởng và lựa chọn.

Để được hỗ trợ và tư vấn chi tiết hơn về các dịch vụ tiện ích, quý khách hàng có thể liên hệ với FPT Smart Cloud: 

0/5 (0 Reviews)

Liên hệ FPT Smart Cloud

Liên hệ ngay với chúng tôi để nhận sự tư vấn và hỗ trợ từ những chuyên gia hàng đầu.
Trang web này được bảo vệ bởi reCAPTCHA Chính sách quyền riêng tư và Điều khoản dịch vụ của Google sẽ được áp dụng
DMCA compliant image