Xem thêm: mua tài khoản Chat GPT Plus chính hãng giá rẻ
Năm ngoái tại DevDay, chúng tôi đã giới thiệu chế độ JSON—một khối xây dựng hữu ích cho các nhà phát triển muốn xây dựng các ứng dụng đáng tin cậy với các mô hình của chúng tôi. Mặc dù chế độ JSON cải thiện độ tin cậy của mô hình để tạo ra các đầu ra JSON hợp lệ, nhưng nó không đảm bảo rằng phản hồi của mô hình sẽ tuân thủ theo một lược đồ cụ thể. Hôm nay, chúng tôi giới thiệu Structured Outputs trong API, một tính năng mới được thiết kế để đảm bảo các đầu ra do mô hình tạo ra sẽ khớp chính xác với các lược đồ JSON do các nhà phát triển cung cấp.
Tạo dữ liệu có cấu trúc từ các đầu vào không có cấu trúc là một trong những trường hợp sử dụng cốt lõi của AI trong các ứng dụng ngày nay. Các nhà phát triển sử dụng API OpenAI để xây dựng các trợ lý mạnh mẽ có khả năng truy xuất dữ liệu và trả lời các câu hỏi thông qua lệnh gọi hàm (mở trong cửa sổ mới), trích xuất dữ liệu có cấu trúc để nhập dữ liệu và xây dựng quy trình làm việc tác nhân nhiều bước cho phép LLM thực hiện hành động. Các nhà phát triển từ lâu đã giải quyết các hạn chế của LLM trong lĩnh vực này thông qua công cụ nguồn mở, nhắc nhở và thử lại các yêu cầu nhiều lần để đảm bảo rằng đầu ra của mô hình khớp với các định dạng cần thiết để tương tác với hệ thống của họ. Structured Outputs giải quyết vấn đề này bằng cách hạn chế các mô hình OpenAI để khớp với các lược đồ do nhà phát triển cung cấp và bằng cách đào tạo các mô hình của chúng tôi để hiểu rõ hơn các lược đồ phức tạp.
Trong các đánh giá của chúng tôi về lược đồ JSON phức tạp sau đây, mô hình mới của chúng tôi gpt-4o-2024-08-06với Đầu ra có cấu trúc đạt điểm hoàn hảo 100%. Trong khi đó, gpt-4-0613điểm của mô hình này thấp hơn 40%.
.png)
Với Structured Outputs, gpt-4o-2024-08-06đạt được độ tin cậy 100% trong các đánh giá của chúng tôi, hoàn toàn khớp với các lược đồ đầu ra.
Cách sử dụng Đầu ra có cấu trúc
Sở hữu ngay tài khoản Chat GPT 4 chỉ với vài bước đơn giản
Chúng tôi đang giới thiệu Đầu ra có cấu trúc dưới hai hình thức trong API:
Gọi hàm: Structured Outputs via toolscó sẵn bằng cách thiết lập strict: truetrong định nghĩa hàm của bạn. Tính năng này hoạt động với tất cả các mô hình hỗ trợ công cụ, bao gồm tất cả các mô hình gpt-4-0613và gpt-3.5-turbo-0613sau đó. Khi Structured Outputs được bật, đầu ra mô hình sẽ khớp với định nghĩa công cụ được cung cấp.
JSON
1POST /v1/chat/completions23456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990911234567891011121314151617181920212223242526272829Một tùy chọn mới cho tham response_formatsố: các nhà phát triển hiện có thể cung cấp một JSON Schema thông qua json_schema, một tùy chọn mới cho tham response_formatsố. Điều này hữu ích khi mô hình không gọi một công cụ, mà thay vào đó, phản hồi cho người dùng theo cách có cấu trúc. Tính năng này hoạt động với các mô hình GPT-4o mới nhất của chúng tôi: gpt-4o-2024-08-06, được phát hành ngày hôm nay và gpt-4o-mini-2024-07-18. Khi a response_formatđược cung cấp với strict: true, đầu ra của mô hình sẽ khớp với lược đồ được cung cấp.
1POST /v1/chat/completions2{3: ,"model""gpt-4o-2024-08-06"4: ["messages"5{6: ,"role""system"7: "content""You are a helpful math tutor."8},9{10: ,"role""user"11: "content""solve 8x + 31 = 2"12}13],14: {"response_format"15: ,"type""json_schema"16: {"json_schema"17: ,"name""math_response"18: ,"strict"true19: {"schema"20: ,"type""object"21: {"properties"22: {"steps"23: ,"type""array"24: {"items"25: ,"type""object"26: {"properties"27: {"explanation"28: "type""string"29},30: {"output"31: "type""string"32}33},34: [, ],"required""explanation""output"35: "additionalProperties"false36}37},38: {"final_answer"39: "type""string"40}41},42: [, ],"required""steps""final_answer"43: "additionalProperties"false44}45}46}47}1234567891011121314151617Đầu ra có cấu trúc an toàn
An toàn là ưu tiên hàng đầu đối với OpenAI—chức năng Structured Outputs mới sẽ tuân thủ các chính sách an toàn hiện tại của chúng tôi và vẫn cho phép mô hình từ chối yêu cầu không an toàn. Để đơn giản hóa quá trình phát triển, có một refusalgiá trị chuỗi mới trên các phản hồi API cho phép các nhà phát triển phát hiện theo chương trình nếu mô hình đã tạo ra lệnh từ chối thay vì đầu ra khớp với lược đồ. Khi phản hồi không bao gồm lệnh từ chối và phản hồi của mô hình không bị gián đoạn sớm (như được chỉ ra bởi finish_reason), thì phản hồi của mô hình sẽ tạo ra JSON hợp lệ khớp với lược đồ được cung cấp một cách đáng tin cậy.
12345678910111213141516171819202122231{2"id": "chatcmpl-9nYAG9LPNonX8DAyrkwYfemr3C8HC",3"object": "chat.completion",4"created": 1721596428,5"model": "gpt-4o-2024-08-06",6"choices": [7{8"index": 0,9"message": {10"role": "assistant",11"refusal": "I'm sorry, I cannot assist with that request."12},13"logprobs": null,14"finish_reason": "stop"15}16],17"usage": {18"prompt_tokens": 81,19"completion_tokens": 11,20"total_tokens": 9221},22"system_fingerprint": "fp_3407719c7f"23}Hỗ trợ SDK gốc
SDK Python và Node của chúng tôi đã được cập nhật với hỗ trợ gốc cho Structured Outputs. Việc cung cấp lược đồ cho các công cụ hoặc dưới dạng định dạng phản hồi cũng dễ dàng như việc cung cấp đối tượng Pydantic hoặc Zod và SDK của chúng tôi sẽ xử lý việc chuyển đổi kiểu dữ liệu sang lược đồ JSON được hỗ trợ, tự động hủy tuần tự phản hồi JSON thành cấu trúc dữ liệu đã nhập và phân tích cú pháp các từ chối nếu chúng phát sinh.
Các ví dụ sau đây cho thấy sự hỗ trợ gốc cho Đầu ra có cấu trúc với lệnh gọi hàm.
1enum Enumfromimport2typing fromimportUnion34pydantic BaseModelfromimport56openaiimport7openai OpenAIfromimport8910(, Enum):classTablestr11orders = "orders"12customers = "customers"13products = "products"141516(, Enum):classColumnstr17= id"id"18status = "status"19expected_delivery_date = "expected_delivery_date"20delivered_at = "delivered_at"21shipped_at = "shipped_at"22ordered_at = "ordered_at"23canceled_at = "canceled_at"242526(, Enum):classOperatorstr27eq = "="28gt = ">"29lt = "<"30le = "<="31ge = ">="32ne = "!="333435(, Enum):classOrderBystr36asc = "asc"37desc = "desc"383940():classDynamicValueBaseModel41column_name: str424344():classConditionBaseModel45column: str46operator: Operator47value: [, , DynamicValue]Unionstrint484950():classQueryBaseModel51table_name: Table52columns: [Column]list53conditions: [Condition]list54order_by: OrderBy555657client = OpenAI()5859completion = client.beta.chat.completions.parse(60model=,"gpt-4o-2024-08-06"61messages=[62{63: ,"role""system"64: ,"content""You are a helpful assistant. The current date is August 6, 2024. You help users query for the data they are looking for by calling the query function."65},66{67: ,"role""user"68: ,"content""look up all my orders in may of last year that were fulfilled but not delivered on time"69},70],71tools=[72openai.pydantic_function_tool(Query),73],74)7576(completion.choices[].message.tool_calls[].function.parsed_arguments)print001;importOpenAIfrom'openai'2z ;importfrom'zod'3{ zodFunction } ;importfrom'openai/helpers/zod'45= z.([, , ]);constTableenum'orders''customers''products'6= z.([constColumnenum7,'id'8,'status'9,'expected_delivery_date'10,'delivered_at'11,'shipped_at'12,'ordered_at'13,'canceled_at'14]);15= z.([, , , , , ]);constOperatorenum'=''>''<''<=''>=''!='16= z.([, ]);constOrderByenum'asc''desc'1718= z.({constDynamicValueobject19: z.(),column_namestring20});2122= z.({constConditionobject23: z.(),columnstring24: ,operatorOperator25: z.([z.(), z.(), ]),valueunionstringnumberDynamicValue26});2728= z.({constQueryArgsobject29: ,table_nameTable30: z.(),columnsarrayColumn31: z.(),conditionsarrayCondition32: ,order_byOrderBy33});3435client = ();constnewOpenAI3637completion = client....({constawaitbetachatcompletionsparse38: ,model'gpt-4o-2024-08-06'39: [messages40{ : , : },role'system'content'You are a helpful assistant. The current date is August 6, 2024. You help users query for the data they are looking for by calling the query function.'41{ : , : }role'user'content'look up all my orders in may of last year that were fulfilled but not delivered on time'42],43: [({ : , : })],toolszodFunctionname'query'parametersQueryArgs44});45.(completion.[]..[]..);consolelogchoices0messagetool_calls0functionparsed_argumentsHỗ trợ Đầu ra có cấu trúc gốc cũng khả dụng cho response_format.
1pydantic BaseModelfromimport23openai OpenAIfromimport456():classStepBaseModel7explanation: str8output: str91011():classMathResponseBaseModel12steps: [Step]list13final_answer: str141516client = OpenAI()1718completion = client.beta.chat.completions.parse(19model=,"gpt-4o-2024-08-06"20messages=[21{: , : },"role""system""content""You are a helpful math tutor."22{: , : },"role""user""content""solve 8x + 31 = 2"23],24response_format=MathResponse,25)2627message = completion.choices[].message028message.parsed:if29(message.parsed.steps)print30(message.parsed.final_answer)print31:else32(message.refusal)print1;importOpenAIfrom'openai'2{ zodResponseFormat } ;importfrom'openai/helpers/zod'3{ z } ;importfrom'zod'456= z.({constStepobject7: z.(),explanationstring8: z.(),outputstring9})1011= z.({constMathResponseobject12: z.(),stepsarrayStep13: z.(),final_answerstring14})151617client = ();constnewOpenAI1819completion = client....({constawaitbetachatcompletionsparse20: ,model'gpt-4o-2024-08-06'21: [messages22{23: ,"role""system"24: ,"content""You are a helpful math tutor. Only use the schema for math responses."25},26{ : , : },"role""user""content""solve 8x + 3 = 21"27],28: (, ),response_formatzodResponseFormatMathResponse'mathResponse'29});3031message = completion.[]?.;constchoices0message32(message?.) {ifparsed33.(message..);consolelogparsedsteps34.(message..);consolelogparsedfinal_answer35} {else36.(message.);consolelogrefusal37}Các trường hợp sử dụng bổ sung
Các nhà phát triển thường sử dụng các mô hình của OpenAI để tạo dữ liệu có cấu trúc cho nhiều trường hợp sử dụng khác nhau. Một số ví dụ bổ sung bao gồm:
Tạo giao diện người dùng động dựa trên ý định của người dùng
Ví dụ, các nhà phát triển có thể sử dụng Structured Outputs để tạo các ứng dụng tạo mã hoặc UI. Tất cả các ví dụ sau đều sử dụng cùng một response_format, và có thể được sử dụng để tạo ra các UI khác nhau dựa trên đầu vào của người dùng.
You are a user interface assistant. Your job is to help users visualize their website and app ideas.
Cách đổi Mật khẩu Chat GPT - Hướng dẫn đổi Pass Chat GPT 100% Thành công
Hướng dẫn Cách đăng nhập Chat GPT Nhanh nhất | Có hỗ trợ Miễn phí qua Teamview-Ultraview
Chat GPT Plus là gì? So sánh Chat GPT Plus với Chat GPT Miễn phí
Chat GPT bị giới hạn giải thích vì sao và cách khắc phục
Chat GPT là gì ? Cách đăng Ký Chat GPT Miễn Phí tại Việt Nam