Một dòng duy nhất.
Nếu bạn đã từng tích hợp một mô hình ngôn ngữ lớn (LLM) bằng cách phân tích cú pháp đầu ra của nó với biểu thức chính quy (regex), có lẽ bạn đã trải qua khoảnh khắc mọi thứ đột ngột đổ vỡ. Một bản cập nhật nhỏ của mô hình, một thay đổi trong cách diễn đạt, và đột nhiên, bộ phân tích cú pháp được tạo ra cẩn thận của bạn trở nên vô dụng, dẫn đến việc chuyển nhầm các vấn đề khẩn cấp của khách hàng hoặc bỏ lỡ hoàn toàn dữ liệu quan trọng. Đây không chỉ là một vấn đề lý thuyết; nó là một thực tế đau lòng mà nhiều nhà phát triển AI sản xuất phải đối mặt.
Mục lục
Regex và Vòng Lặp Phản Hồi Đau Khổ trong AI
Hãy xem xét một kịch bản thực tế điển hình:
Ngày 1: Bộ phân loại hỗ trợ khách hàng của bạn hoạt động hoàn hảo. Một tin nhắn như “Bạn đã tính phí tôi hai lần! Tôi muốn hoàn tiền NGAY BÂY GIỜ” tạo ra đầu ra: “Người dùng rất khó chịu về việc bị tính phí trùng lặp. Đây là vấn đề thanh toán. Cảm xúc tiêu cực và có vẻ khẩn cấp.” Regex của bạn: const department = output.match(/billing issue/i) ? 'billing' : 'general';
định tuyến nó một cách chính xác đến phòng thanh toán.
Ngày 8: Cùng một đầu vào đó giờ đây trả về: “Đây là một vấn đề thanh toán. Khách hàng đã bị tính phí hai lần và đang yêu cầu hoàn tiền.” Bộ phân tích cú pháp dựa trên regex của bạn thất bại. Yêu cầu hỗ trợ bị chuyển nhầm. Các chỉ số hiệu suất của bạn tụt dốc thảm hại.
Nguyên nhân sâu xa không nằm ở mô hình. Nó nằm ở phương pháp tiếp cận. Văn bản không có cấu trúc được thiết kế cho con người. Các ứng dụng sản xuất cần dữ liệu có cấu trúc. Giải pháp bền vững là yêu cầu mô hình xuất dữ liệu JSON và cưỡng chế hình dạng của dữ liệu đó tại thời điểm tạo.
Tại Sao Dữ Liệu Có Cấu Trúc Lại Quan Trọng Đối Với AI Sản Xuất?
Văn bản dạng tự do, dù mạnh mẽ đến đâu, vẫn luôn tiềm ẩn sự mơ hồ và biến động. Đối với các hệ thống tự động, sự mơ hồ này là một thảm họa. Khi một LLM tạo ra văn bản, có vô số cách để nó diễn đạt cùng một ý nghĩa, khiến việc trích xuất thông tin cụ thể trở nên cực kỳ khó khăn với các công cụ dựa trên mẫu như regex. Điều này dẫn đến:
- Tính dễ vỡ: Các bộ phân tích cú pháp dễ bị hỏng bởi những thay đổi nhỏ trong lời văn của mô hình.
- Chi phí bảo trì cao: Cần liên tục cập nhật và điều chỉnh regex khi mô hình thay đổi hoặc khi các trường hợp Edge Case mới xuất hiện.
- Thiếu độ tin cậy: Khó có thể tin cậy vào việc hệ thống sẽ luôn xử lý dữ liệu đúng cách, đặc biệt trong các tình huống quan trọng như hỗ trợ khách hàng hoặc xử lý tài chính.
- Khó mở rộng: Việc quản lý nhiều bộ phân tích cú pháp regex cho các tính năng AI khác nhau nhanh chóng trở thành một cơn ác mộng.
Giải pháp hiệu quả là yêu cầu LLM “nói” ngôn ngữ mà máy móc hiểu được: JSON, được xác định rõ ràng bởi một schema. Điều này biến LLM từ một “hộp đen” tạo văn bản thành một “bộ chuyển đổi” đáng tin cậy, biến văn bản tự do thành dữ liệu có cấu trúc, sẵn sàng cho ứng dụng của bạn.
Đầu Ra Cưỡng Chế Schema: Nền Tảng Của AI Đáng Tin Cậy
Đầu ra cưỡng chế schema (Schema-Enforced Outputs) là một khả năng then chốt của hầu hết các API LLM hiện đại. Thay vì chỉ nhận văn bản hoặc JSON cơ bản, bạn cung cấp một JSON Schema định nghĩa hình dạng, các trường bắt buộc, kiểu dữ liệu, và thậm chí cả các giá trị enum cho đầu ra mong muốn. Mô hình sau đó bị ràng buộc để tạo ra đầu ra chính xác khớp với schema đó.
Không Chỉ Là “Chế Độ JSON” Thông Thường
Điều quan trọng là phải phân biệt “Đầu ra có cấu trúc” (Structured Outputs) với “Chế độ JSON” (JSON mode) cũ hơn. Chế độ JSON chỉ đảm bảo rằng đầu ra sẽ là cú pháp JSON hợp lệ, nhưng không đảm bảo nội dung bên trong JSON sẽ tuân thủ một cấu trúc cụ thể. Ngược lại, Đầu ra có cấu trúc (như OpenAI gọi) hoặc tính năng tương tự từ các nhà cung cấp khác, thực thi schema của bạn ở cấp độ API, bao gồm các thuộc tính bắt buộc và các giá trị enum cụ thể. Nền tảng OpenAI mô tả chi tiết cách thức hoạt động của tính năng này.
Sự Đồng Điệu Từ Các Nhà Cung Cấp Lớn
Các tài liệu của Azure cũng phản ánh cách tiếp cận này và liệt kê tập con của JSON Schema được hỗ trợ. Ví dụ, có thể có những giới hạn về việc sử dụng mệnh đề anyOf
ở cấp độ cao nhất trong một quy tắc Azure Policy. Điều quan trọng là phải thiết kế schema của bạn trong phạm vi tập con được công bố để đảm bảo tuân thủ tối ưu. Microsoft Learn cung cấp hướng dẫn chi tiết.
Nếu bạn đã quen thuộc với GraphQL, mô hình tư duy sẽ rất quen thuộc: xác định hình dạng dữ liệu bạn cần ngay từ đầu, sau đó nhận được chính xác hình dạng đó. Không cần phân tích cú pháp thủ công. Không cần đoán mò.
Tứ Đại Lợi Ích Của Đầu Ra Có Cấu Trúc
Việc chuyển sang đầu ra cưỡng chế schema mang lại bốn lợi ích tổng hợp, nâng cao đáng kể chất lượng và độ bền của các tính năng AI trong sản xuất:
1. Loại Bỏ Logic Phân Tích Cú Pháp Phức Tạp
Bạn không cần phải “cạo” thông tin từ các đoạn văn bản dài dòng nữa. API sẽ ràng buộc mô hình tạo ra nội dung theo các khóa và kiểu dữ liệu mà bạn đã định nghĩa trong schema. Mục tiêu của đầu ra có cấu trúc là tạo ra nội dung khớp chính xác với schema của bạn, loại bỏ hoàn toàn nhu cầu về regex hoặc các bộ phân tích cú pháp tùy chỉnh dễ vỡ. Nền tảng OpenAI xác nhận điều này.
2. Đảm Bảo An Toàn Kiểu Dữ Liệu Từ Đầu Đến Cuối
Với các công cụ như Zod, bạn có thể định nghĩa schema của mình một lần duy nhất, từ đó suy ra các kiểu TypeScript và sau đó xác thực dữ liệu tại thời điểm chạy bằng phương thức .parse()
. TypeScript cung cấp an toàn kiểu dữ liệu tại thời điểm biên dịch, nhưng Zod lấp đầy khoảng trống ở thời điểm chạy, đảm bảo rằng dữ liệu thực tế tuân thủ các kiểu đã định nghĩa, với các thông báo lỗi chính xác nếu có vấn đề.
3. Nâng Cao Độ Tin Cậy Trong Vận Hành
Việc tuân thủ schema làm giảm đáng kể số lần thử lại (retries) và tình trạng “trôi dạt định dạng” (format drift), nơi đầu ra của mô hình thay đổi nhẹ theo thời gian. Hướng dẫn về tập con schema của Azure tồn tại để giúp bạn thiết kế các hình dạng dữ liệu tuân thủ đáng tin cậy trong môi trường sản xuất. Điều này dẫn đến một hệ thống ổn định và ít gây ra sự cố hơn. Microsoft Learn cung cấp chi tiết.
4. Mã Nguồn Dễ Bảo Trì
Khi mỗi phản hồi từ LLM đều có cùng các khóa và kiểu dữ liệu, ứng dụng của bạn trở nên dễ đoán hơn rất nhiều. Các bảng điều khiển (dashboards) ổn định hơn, các cảnh báo mang tính xác định. Việc tích hợp AI của bạn trở nên đáng tin cậy như bất kỳ API có kiểu dữ liệu (typed API) nào khác, giảm gánh nặng bảo trì và cho phép các nhóm tập trung vào việc xây dựng tính năng thay vì khắc phục sự cố phân tích cú pháp.
Hướng Dẫn Triển Khai: Mô Hình Độc Lập Với Nhà Cung Cấp
Mô hình triển khai dưới đây hoạt động với bất kỳ API nào chấp nhận schema phản hồi. Chúng ta sẽ sử dụng TypeScript và Zod làm nguồn chân lý duy nhất.
Bước 1: Định Nghĩa Schema Của Bạn với Zod
Sử dụng Zod để định nghĩa schema, kiểu dữ liệu và hướng dẫn trong một nơi duy nhất. Các chú thích .describe()
không chỉ dùng để tài liệu hóa; chúng còn định hướng mô hình tạo ra các giá trị chính xác.
import { z } from "zod";
import { zodToJsonSchema } from "zod-to-json-schema";
export const SupportTicketSchema = z.object({
schemaVersion: z.literal("v1")
.describe("Schema version for analytics and migrations"),
language: z.string()
.describe("BCP-47 language code of the input, for example en-US"),
sentiment: z.enum(["positive", "neutral", "negative"])
.describe("Overall sentiment of the customer's message"),
department: z.enum([
"customer_support",
"online_ordering",
"product_quality",
"shipping_and_delivery",
"other_off_topic"
]).describe("Primary routing category for this ticket"),
priority: z.enum(["low", "medium", "high"])
.describe("Urgency level based on content and tone"),
confidence: z.number().min(0).max(1)
.describe("Model confidence in this classification from 0 to 1"),
suggestedReply: z.string().min(1).max(500).describe(
"Friendly, professional tone. 60 to 120 words. Acknowledge the issue. " +
"Give the next step and a contact. No emojis. No internal policy text. " +
"Write in the same language as the user."
)
});
export type SupportTicket = z.infer<typeof SupportTicketSchema>;
export const SupportJSONSchema = zodToJsonSchema(SupportTicketSchema);
Zod ưu tiên TypeScript. Phương thức .parse()
không chỉ xác thực mà còn trả về một giá trị đã được gõ kiểu (typed value). Nếu hình dạng hoặc giá trị không chính xác, nó sẽ ném lỗi với thông báo rõ ràng.
Bước 2: Cấu Hình Cuộc Gọi LLM
Truyền JSON Schema cho API bằng cách sử dụng tham số đầu ra có cấu trúc của nó. Tên tham số có thể khác nhau tùy theo nhà cung cấp, nhưng ý tưởng là như nhau.
import OpenAI from "openai";
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
export async function classifyMessage(message: string): Promise<SupportTicket> {
const completion = await openai.chat.completions.create({
model: "gpt-4o-2024-08-06",
messages: [
{
role: "system",
content: "Classify customer support messages and suggest appropriate replies. Return structured JSON only."
},
{ role: "user", content: message }
],
response_format: {
type: "json_schema",
json_schema: {
name: "support_ticket_classification",
schema: SupportJSONSchema
}
}
});
const content = completion.choices[0]?.message?.content ?? "";
let parsed: unknown;
try {
parsed = JSON.parse(content);
} catch (err) {
throw new Error("Model returned non JSON. Verify response_format and schema.", { cause: err });
}
return SupportTicketSchema.parse(parsed);
}
Đây là một chiến lược “phòng thủ chuyên sâu”: API thực thi cấu trúc của bạn tại thời điểm tạo, trong khi Zod thực thi các quy tắc nghiệp vụ của bạn tại thời điểm chạy. OpenAI rất rõ ràng về việc thực thi schema trong đầu ra có cấu trúc, và Azure xuất bản tập con được hỗ trợ để bạn có thể thiết kế các hình dạng tuân thủ tốt.
Bước 3: Sử Dụng Dữ Liệu Đã Gõ Kiểu Trong Ứng Dụng Của Bạn
const result = await classifyMessage("Order #8841 is two weeks late!");
console.log(result.sentiment); // "negative"
console.log(result.department); // "shipping_and_delivery"
console.log(result.priority); // "high"
console.log(result.confidence); // 0.94
console.log(result.suggestedReply); // Ready to use
if (result.confidence >= 0.8) {
await sendAutomatedReply(result.suggestedReply);
} else {
await flagForHumanReview(result);
}
Với dữ liệu đã được xác thực và gõ kiểu, bạn có thể tự tin sử dụng nó trong toàn bộ ứng dụng của mình, từ logic nghiệp vụ đến hiển thị giao diện người dùng, giảm thiểu lỗi và tăng tốc độ phát triển.
Độ Bền và Khả Năng Phục Hồi Trong Ứng Dụng AI
Để củng cố việc tích hợp AI của bạn, điều cần thiết là phải thêm các cơ chế xử lý lỗi và phục hồi. Một cơ chế thử lại tối thiểu với độ trễ lũy thừa (backoff) và thời gian chờ yêu cầu (request timeout) có thể cải thiện đáng kể độ bền:
async function withRetry<T>(op: () => Promise<T>, tries = 3, baseMs = 300): Promise<T> {
let last: unknown;
for (let i = 1; i <= tries; i++) {
try { return await op(); }
catch (e) {
last = e;
if (i < tries) await new Promise(r => setTimeout(r, baseMs * i));
}
}
throw last;
}
// Usage
const safeResult = await withRetry(() => classifyMessage(msg));
Ngoài ra, nếu HTTP client của bạn hỗ trợ, hãy thêm khóa idempotency và request timeout để tránh các hoạt động trùng lặp và đảm bảo các yêu cầu không bị treo vô thời hạn.
Tích Hợp Với Kiến Trúc Dữ Liệu Hiện Đại
Đối với các nhóm sử dụng GraphQL, hãy coi LLM như một nguồn dữ liệu “upstream” có kiểu dữ liệu rõ ràng. Điều này biến LLM thành một bộ chuyển đổi đáng tin cậy, chuyển đổi văn bản tự do thành dữ liệu đồ thị có kiểu dữ liệu phù hợp với hệ thống của bạn.
type Mutation {
enrichLead(rawInquiry: String!): EnrichedLead!
}
type EnrichedLead {
companyName: String!
inquiryType: InquiryType!
urgency: Urgency!
potentialValue: DealSize!
}
const resolvers = {
Mutation: {
enrichLead: async (_: unknown, { rawInquiry }: { rawInquiry: string }) => {
const structured = await llmService.enrichWithSchema(rawInquiry);
return {
companyName: structured.companyName,
inquiryType: structured.inquiryType,
urgency: structured.urgency,
potentialValue: structured.potentialValue
};
}
}
};
LLM không còn là một hộp đen bí ẩn; nó là một thành phần tích hợp liền mạch, đáng tin cậy trong kiến trúc dữ liệu của bạn.
Lựa Chọn Framework Để Mở Rộng Quy Mô
Mặc dù phương pháp trực tiếp sử dụng Zod với schema native của nhà cung cấp LLM rất mạnh mẽ và linh hoạt, nhưng các nhóm quản lý nhiều tích hợp LLM hoặc yêu cầu tính độc lập với nhà cung cấp có thể hưởng lợi từ một mức độ trừu tượng hóa cao hơn.
Các framework như BAML (Boundary AI Markup Language) được thiết kế cho mục đích này. BAML sử dụng một ngôn ngữ chuyên dụng (các tệp .baml
) để định nghĩa, tạo phiên bản và kiểm tra các chức năng LLM của bạn một cách riêng biệt khỏi mã ứng dụng. Cách tiếp cận này cho phép bạn hoán đổi các nhà cung cấp LLM cơ bản (ví dụ: từ OpenAI sang Anthropic) chỉ bằng một thay đổi cấu hình và cung cấp quy trình làm việc có cấu trúc để cộng tác giữa các kỹ sư và nhà thiết kế prompt. Việc áp dụng một framework sẽ thêm một bộ công cụ vào dự án của bạn nhưng có thể vô giá để mở rộng và duy trì các hệ thống AI phức tạp.
Trải Nghiệm Người Dùng Livestreaming Mà Vẫn Đảm Bảo JSON
Trải nghiệm người dùng với tính năng streaming (truyền phát từng phần) có thể rất tuyệt vời cho giao diện người dùng, nhưng có một cạm bẫy phổ biến: cố gắng phân tích cú pháp JSON từng phần. JSON từng phần thường không hợp lệ và việc này sẽ dẫn đến lỗi. Thay vào đó, hãy tích lũy toàn bộ luồng dữ liệu vào một bộ đệm và chỉ phân tích cú pháp một lần khi quá trình streaming hoàn tất.
Nếu bạn sử dụng một framework như LangChain, các trợ giúp như .withStructuredOutput()
của nó sẽ trừu tượng hóa các chi tiết cụ thể của nhà cung cấp và trả về các đối tượng đã gõ kiểu trong khi vẫn cho phép streaming, giúp bạn dễ dàng xây dựng các giao diện người dùng phản hồi nhanh mà không ảnh hưởng đến tính toàn vẹn của dữ liệu.
Ứng Dụng Thực Tế Trong Doanh Nghiệp
Đầu ra có cấu trúc mở ra cánh cửa cho nhiều ứng dụng AI mạnh mẽ trong thế giới thực:
- Phân loại hỗ trợ khách hàng: Phân loại cảm xúc, bộ phận, mức độ ưu tiên và độ tin cậy. Tải trước một câu trả lời an toàn. Tự động định tuyến các kết quả có độ tin cậy cao. Xếp hàng các trường hợp còn lại để con người xem xét.
- Làm giàu thông tin khách hàng tiềm năng: Chuyển đổi văn bản tự do từ các yêu cầu thành tên công ty, ý định, mức độ khẩn cấp và giá trị tiềm năng. Đưa các trường dữ liệu sạch vào CRM của bạn để phân tích và theo dõi hiệu quả hơn.
- Xử lý tài liệu: Lấy đầu ra OCR từ các tệp PDF hoặc email và chuyển đổi nó thành các bản ghi sẵn sàng cho cơ sở dữ liệu, sử dụng một schema khớp với các bảng của bạn. Điều này đặc biệt hữu ích cho việc tự động hóa quy trình nhập dữ liệu và xử lý hóa đơn, hợp đồng.
Các Thực Hành Tốt Nhất Trong Sản Xuất
Để tối đa hóa lợi ích của đầu ra cưỡng chế schema, hãy tuân thủ các thực hành tốt nhất sau:
- Ràng buộc các trường phân nhánh bằng enum: Không chấp nhận văn bản tự do cho việc định tuyến hoặc phân loại. Thiết kế trong phạm vi tập con schema được công bố của nhà cung cấp để tuân thủ tốt hơn. Microsoft Learn cung cấp hướng dẫn.
- Thêm mô tả (
.describe()
) ngắn gọn, cụ thể vào các trường: Các nhà cung cấp LLM thường coi các mô tả này là hướng dẫn hữu ích cho việc tạo ra nội dung. Nền tảng OpenAI nhấn mạnh tầm quan trọng của chúng. - Giữ cho schema tương đối phẳng: Lồng ghép quá sâu có xu hướng làm giảm khả năng tuân thủ. Bắt đầu đơn giản và chỉ thêm lồng ghép khi nó thực sự cần thiết. LangChain cũng gợi ý điều này.
- Xác thực tại thời điểm chạy bằng Zod: Ngay cả khi API đã thực thi schema của bạn,
.parse()
của Zod sẽ cung cấp các đối tượng an toàn hoặc các lỗi có thể xử lý được, bổ sung thêm một lớp bảo vệ. Zod là công cụ không thể thiếu. - Bao gồm điểm tự tin (confidence score): Sử dụng điểm này để đưa ra ngưỡng tự động hóa. Chỉ tự động hóa khi đạt đến một ngưỡng tự tin nhất định.
- Tạo phiên bản schema của bạn: Thêm một trường
schemaVersion
và thực hiện di chuyển (migrations) một cách có chủ đích khi schema thay đổi. - Đối với streaming, tích lũy rồi mới phân tích cú pháp: Không bao giờ phân tích cú pháp JSON từng phần để tránh lỗi.
- Cân nhắc một framework trừu tượng hóa: Nếu bạn muốn mã độc lập với nhà cung cấp,
.withStructuredOutput()
của LangChain là một ví dụ tuyệt vời để ràng buộc schema và xử lý các quirks của API.
Lưu Ý Về An Ninh Và An Toàn
Khi xây dựng các tính năng AI sẵn sàng cho sản xuất, an ninh và an toàn là tối quan trọng:
- Phân tách đầu vào người dùng bằng các dấu hiệu rõ ràng: Ví dụ, sử dụng ba dấu ngoặc kép () để giảm thiểu rủi ro tấn công prompt injection bên trong các template của bạn.
- Lặp lại các “hàng rào bảo vệ” chính sau văn bản động: Điều này giúp các hướng dẫn mới nhất khẳng định lại các ràng buộc, đặc biệt khi có các phần văn bản được tạo động.
- Nếu yêu cầu hỗ trợ có thể chứa thông tin nhận dạng cá nhân (PII): Thêm một trường
containsPii: boolean
vào schema của bạn và che giấu thông tin này trước khi ghi nhật ký hoặc phân tích. - Sử dụng cổng tin cậy (confidence gating): Chỉ tự động hóa khi độ tin cậy trên một ngưỡng nhất định. Xếp hàng các trường hợp còn lại để con người xem xét và đánh giá.
Đánh Giá Hiệu Suất: Micro-Benchmark Đơn Giản, Lặp Lại Được
Để chứng minh giá trị của đầu ra cưỡng chế schema, hãy mời nhóm của bạn đo lường thay vì đoán mò:
- Nhiệm vụ: Phân loại 100 yêu cầu hỗ trợ thực tế vào schema của bạn.
- Các chỉ số: Tỷ lệ schema hợp lệ sử dụng Zod, độ trễ trung bình, số lượng token, và kiểm tra độ chính xác thủ công (manual spot check).
- Cài đặt: Nhiệt độ (temperature) bằng 0, cùng một prompt, cùng một schema.
- Mục tiêu: Chứng minh rằng việc cưỡng chế schema mang lại tỷ lệ đầu ra hợp lệ cao hơn và ít lần thử lại hơn so với việc phân tích cú pháp văn bản tự do.
Ví Dụ Hoàn Chỉnh Thực Tế
Dưới đây là một ví dụ hoạt động hoàn chỉnh để phân tích đánh giá sản phẩm, minh họa cách kết hợp Zod và OpenAI để tạo ra đầu ra có cấu trúc đáng tin cậy:
// npm install zod zod-to-json-schema openai
import { z } from "zod";
import { zodToJsonSchema } from "zod-to-json-schema";
import OpenAI from "openai";
// 1. Define schema and types
const ProductReviewSchema = z.object({
rating: z.number().min(1).max(5)
.describe("Star rating from 1 to 5"),
pros: z.array(z.string())
.describe("List of positive aspects mentioned"),
cons: z.array(z.string())
.describe("List of negative aspects mentioned"),
wouldRecommend: z.boolean()
.describe("Whether the reviewer would recommend this product"),
summary: z.string().max(200)
.describe("Brief summary suitable for display in UI")
});
type ProductReview = z.infer<typeof ProductReviewSchema>;
const ReviewJSONSchema = zodToJsonSchema(ProductReviewSchema);
// 2. Create API function with robust parsing and validation
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
async function analyzeReview(reviewText: string): Promise<ProductReview> {
const completion = await openai.chat.completions.create({
model: "gpt-4o-2024-08-06",
messages: [
{
role: "system",
content: "Extract structured insights from product reviews. Return JSON only."
},
{ role: "user", content: reviewText }
],
response_format: {
type: "json_schema",
json_schema: {
name: "product_review_analysis",
schema: ReviewJSONSchema,
strict: true
}
}
});
const content = completion.choices[0]?.message?.content ?? "";
let data: unknown;
try {
data = JSON.parse(content);
} catch (err) {
throw new Error("Model returned non JSON. Verify response_format and schema.", { cause: err });
}
return ProductReviewSchema.parse(data);
}
// 3. Use it
const result = await analyzeReview(
"Battery life is incredible, easily lasts two days. The screen is crisp and bright. " +
"The camera sometimes hunts for focus in low light. Overall, very happy. 4/5 stars."
);
console.log(result);
// {
// rating: 4,
// pros: ["Long battery life", "High-quality display"],
// cons: ["Camera autofocus issues in low light"],
// wouldRecommend: true,
// summary: "Excellent battery and screen, minor camera issues"
// }
Lời Kết: Hướng Tới Tương Lai AI Đáng Tin Cậy
Đầu ra JSON có cấu trúc đã biến việc tích hợp LLM từ một quá trình phân tích văn bản dễ vỡ thành một quá trình xử lý dữ liệu có kiểu dữ liệu, đáng tin cậy. Nó giúp giảm thiểu sự cố, cải thiện khả năng bảo trì và làm cho các tính năng AI trở nên tự nhiên hơn trong ứng dụng của bạn. Đây là bước tiến quan trọng để xây dựng các hệ thống AI ổn định, mạnh mẽ và sẵn sàng cho môi trường sản xuất.
Hãy bắt đầu với điểm cuối (endpoint) dễ gãy nhất của bạn. Thay thế việc phân tích cú pháp văn bản tự do bằng cách cưỡng chế schema kết hợp với xác thực Zod. Đo lường tỷ lệ lỗi và thời gian khắc phục trong hai tuần, và để các con số hướng dẫn quá trình triển khai rộng rãi của bạn.
Tài Liệu Tham Khảo
- Hướng dẫn đầu ra có cấu trúc của OpenAI và chi tiết thực thi schema.
- Hướng dẫn đầu ra có cấu trúc của Azure và tập con JSON Schema được hỗ trợ.
- Tài liệu Zod về
.parse()
và xác thực thời gian chạy cho TypeScript. - Các khái niệm của LangChain JS và cách trả về dữ liệu có cấu trúc với
.withStructuredOutput()
.