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.
Mục lục
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.
Có hai cách để tương tác với các mô hình này trong Azure OpenAI, đó là:
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.
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 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:
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”) |
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.
Đ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”) |
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.
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 |
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|> và <|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.
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 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] |
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: