11 điểm bởi GN⁺ 2024-08-07 | 2 bình luận | Chia sẻ qua WhatsApp
  • Giới thiệu "Structured Outputs" cho API
    • Tính năng mới giúp đầu ra của mô hình khớp chính xác với JSON schema do nhà phát triển cung cấp
    • OpenAI đã giới thiệu chế độ JSON tại DevDay năm ngoái, nhưng không đảm bảo phản hồi sẽ tuân theo một schema cụ thể
    • Structured Outputs giới hạn đầu ra của mô hình theo schema do nhà phát triển cung cấp và huấn luyện mô hình để hiểu tốt hơn các schema phức tạp
  • Sự cần thiết của Structured Outputs
    • Tạo dữ liệu có cấu trúc từ đầu vào phi cấu trúc là một trong những trường hợp sử dụng cốt lõi của AI
    • Có thể dùng OpenAI API để thực hiện nhiều tác vụ như truy xuất dữ liệu, hỏi đáp, trích xuất dữ liệu và xây dựng quy trình làm việc nhiều bước
    • Trước đây, cần dùng công cụ mã nguồn mở, prompt, cơ chế thử lại, v.v. để điều chỉnh đầu ra của mô hình sang định dạng có thể tương tác với hệ thống
    • Structured Outputs giải quyết vấn đề này bằng cách giới hạn đầu ra của mô hình theo schema do nhà phát triển cung cấp
  • Đánh giá hiệu năng
    • Trong bài đánh giá tuân theo JSON schema phức tạp, mô hình gpt-4o-2024-08-06 đạt điểm 100%
    • Mô hình gpt-4-0613 đạt dưới 40%
  • Cách sử dụng Structured Outputs
    • Structured Outputs thông qua function calling: đặt strict: true trong phần định nghĩa hàm
      • Có thể dùng trên các mô hình hỗ trợ đầy đủ công cụ
  • Structured Outputs an toàn
    • Tuân thủ các chính sách an toàn hiện có của OpenAI
    • Mô hình có thể từ chối các yêu cầu không an toàn
    • Phản hồi API bao gồm giá trị chuỗi từ chối để có thể phát hiện bằng lập trình việc mô hình đã tạo ra từ chối hay chưa
  • Hỗ trợ SDK gốc
    • SDK Python và Node hỗ trợ Structured Outputs ở mức native
    • Có thể cung cấp đối tượng Pydantic hoặc Zod để chuyển thành JSON schema, đồng thời tự động tuần tự hóa và phân tích cú pháp phản hồi JSON
  • Các hạn chế
    • Chỉ hỗ trợ một phần của JSON schema
    • Có thêm độ trễ ở phản hồi API đầu tiên với schema mới
    • Mô hình có thể từ chối các yêu cầu không an toàn
    • Không tương thích với function calling song song
    • Structured Outputs không thuộc diện Zero Data Retention (ZDR)
  • Khả dụng
    • Structured Outputs hiện đã khả dụng rộng rãi trong API
    • Structured Outputs thông qua function calling có thể dùng trên mọi mô hình hỗ trợ function calling
    • Tùy chọn định dạng phản hồi khả dụng trên các mô hình mới nhất

Tóm tắt của GN⁺

  • Structured Outputs, tính năng mới của OpenAI, cung cấp khả năng khiến đầu ra của mô hình khớp chính xác với JSON schema
  • Nhờ đó, nhà phát triển có thể thực hiện đáng tin cậy hơn nhiều tác vụ như truy xuất dữ liệu, hỏi đáp và trích xuất dữ liệu
  • Tính năng này được hỗ trợ native trong SDK Python và Node, giúp việc phát triển trở nên dễ dàng hơn
  • Có thêm nhiều trường hợp sử dụng khác như trích xuất dữ liệu có cấu trúc từ dữ liệu phi cấu trúc
  • Sử dụng kỹ thuật giải mã có ràng buộc để giới hạn đầu ra của mô hình và chỉ tạo JSON hợp lệ

2 bình luận

 
bluejoyq 2024-08-08

Tính năng này khá thú vị.

 
GN⁺ 2024-08-07
Ý kiến trên Hacker News
  • Dùng GPT-4o để xây dựng UI động và mã

    • Hoạt động ổn định khi dùng chế độ JSON
    • Sẽ giúp giải quyết các vấn đề về định dạng trên GPT-4o-mini
    • Ở chế độ gọi hàm, tỷ lệ thành công thấp hơn so với chế độ JSON
    • Rất kỳ vọng vào tính năng này
  • Những thay đổi chính của gpt-4o-2024-08-06

    • Số token đầu ra tăng từ 4k lên 16k
    • Chi phí đầu vào giảm 50%, chi phí đầu ra giảm 33%
    • Đây là thay đổi quan trọng với người dùng API
  • Trải nghiệm dùng Outlines Structured Output của vLLM

    • Cung cấp tính năng tiến bộ hơn Structured Output của OpenAI
    • Hỗ trợ kiểu trường còn hạn chế
      • OpenAI chỉ hỗ trợ các kiểu cơ bản như String, Number, Boolean
      • Outlines có thể định nghĩa pattern bằng biểu thức chính quy
    • Chi phí thiết lập schema cao và độ trễ lớn
      • vLLM và Outlines gần như không tốn chi phí
      • OpenAI mất thời gian để tạo ngữ pháp không phụ thuộc ngữ cảnh
    • Đây là khởi đầu tốt cho bước đầu tiên của OpenAI, nhưng vẫn cần phát triển thêm
  • Ý kiến về hiệu năng AI

    • Việc AI chỉ định định dạng đầu ra là cách giải quyết một vấn đề cũ
    • Khả năng xử lý ngôn ngữ tự nhiên và giải quyết vấn đề đã tiến bộ đáng kinh ngạc
    • Tuy nhiên, để có được kết quả này cần lượng tính toán khổng lồ
  • Ý kiến về cách tiếp cận của OpenAI

    • Từ bỏ cách tiếp cận fine-tuning cho đầu ra có cấu trúc
    • llama.cpp đã triển khai tính năng này từ 1,5 năm trước
  • Sự bối rối về tùy chọn "strict: true"

    • Đây luôn là hành vi mong muốn nên đáng ra phải là mặc định
    • Tìm hiểu về kỹ thuật constrained decoding
      • Có thể tăng độ tin cậy và giảm độ trễ
  • Có ý kiến cho rằng việc hardcode JSON vào mô hình đi ngược lại mục tiêu AGI

  • Lo ngại về hiệu ứng khóa chặt khi dùng tính năng của OpenAI

    • Không thể dễ dàng chuyển sang LLM khác
    • Chỉ nên dùng khi prompt văn bản là chưa đủ
  • Chỉ ra lỗi về định dạng JSON

    • {“val{“:2} là JSON hợp lệ
  • Thắc mắc vì sao cấp cao nhất phải là object

    • Bất tiện khi phải bọc mảng bên trong object