Ứng dụng Thực tế Đầu ra Có cấu trúc với Ollama

Chạy các LLM cục bộ thường dẫn đến lỗi phân tích cú pháp JSON. Bạn yêu cầu mô hình chỉ trả về JSON, nhưng nó vẫn thêm các khối mã markdown hoặc văn bản thừa. Điều này làm hỏng mã nguồn của bạn.

Kể từ phiên bản Ollama 0.3.0, bạn có thể khắc phục điều này bằng cách sử dụng tham số format. Điều này buộc mô hình phải tuân theo một JSON schema. Nó khiến mô hình không thể thêm văn bản thừa hoặc markdown về mặt vật lý.

Tôi đã thử nghiệm điều này với Gemma4 và Ollama 0.30.7. Dưới đây là kết quả.

Vấn đề với Văn bản Tự nhiên

Các mô hình được huấn luyện để hội thoại. Chúng muốn nói "Đây là JSON của bạn." Ngay cả với các prompt nghiêm ngặt, chúng thường bao bọc phản hồi trong các khối mã. Hàm json.loads() của Python sẽ thất bại khi gặp các khối này.

Lợi thế về Tốc độ

Sử dụng tham số format nhanh hơn nhiều.

  • Không có đầu ra có cấu trúc: 32 giây
  • Có đầu ra có cấu trúc: 5 giây

Đây là sự cải thiện tốc độ gấp 6,4 lần. Mô hình không lãng phí thời gian để quyết định cách định dạng văn bản. Nó chỉ tạo ra các token phù hợp với schema của bạn.

Sử dụng Pydantic để Đảm bảo An toàn Kiểu dữ liệu

Bạn không cần phải viết JSON schema bằng tay. Hãy sử dụng các mô hình Pydantic để tạo chúng một cách tự động.

  1. Định nghĩa mô hình Pydantic của bạn.
  2. Sử dụng model_json_schema() để tạo schema.
  3. Truyền schema đó vào Ollama.
  4. Sử dụng model_validate_json() để phân tích và xác thực dữ liệu cùng một lúc.

Cách tiếp cận này hoàn hảo cho các AI agent. Bạn có thể sử dụng nó để quyết định agent nên gọi công cụ nào tiếp theo. Nếu mô hình cố gắng tự tạo ra một tên công cụ không tồn tại, Pydantic sẽ phát hiện ra ngay lập tức.

Các Hạn chế Hiện tại

  • Các schema lồng nhau sâu đôi khi có thể trả về mảng rỗng trong các mô hình nhỏ hơn.
  • Các trường tùy chọn (optional fields) có thể trả về chuỗi rỗng thay vì null.
  • Các schema lớn sẽ chiếm nhiều cửa sổ ngữ cảnh (context window) hơn.

Các Thực hành Tốt nhất

  • Sử dụng trích xuất đơn giản cho các mô hình nhỏ.
  • Sử dụng Pydantic để xác thực và lựa chọn công cụ cho agent.
  • Sử dụng các mô hình lớn hơn cho dữ liệu phức tạp và lồng nhau.
  • Thêm logic thử lại (retry logic) khi Pydantic ném ra lỗi xác thực.

Đừng chỉ hy vọng các prompt của bạn hoạt động hiệu quả. Hãy sử dụng đầu ra có cấu trúc để làm cho các pipeline LLM cục bộ của bạn trở nên đáng tin cậy.

Source: https://dev.to/jangwook_kim_e31e7291ad98/ollama-structured-outputs-in-practice-getting-type-safe-json-from-local-llms-with-pydantic-m38

Optional learning community: https://t.me/GyaanSetuAi