Đầu ra có cấu trúc với Ollama
(ollama.com)Đầu ra có cấu trúc
6 tháng 12, 2024
Ollama giờ đây hỗ trợ đầu ra có cấu trúc, cho phép giới hạn đầu ra của mô hình vào một định dạng cụ thể được định nghĩa bằng lược đồ JSON. Thư viện Ollama Python và JavaScript cũng đã được cập nhật để hỗ trợ đầu ra có cấu trúc.
- Các trường hợp sử dụng của đầu ra có cấu trúc:
- Phân tích dữ liệu từ tài liệu
- Trích xuất dữ liệu từ hình ảnh
- Chuẩn hóa mọi phản hồi của mô hình ngôn ngữ
- Cung cấp độ tin cậy và tính nhất quán cao hơn so với chế độ JSON
Bắt đầu
- Tải phiên bản Ollama mới nhất
- Nâng cấp thư viện Ollama Python hoặc JavaScript lên phiên bản mới nhất
cURL
- Có thể truyền đầu ra có cấu trúc cho mô hình bằng tham số
format
Đầu ra
- Phản hồi sẽ được trả về theo định dạng được định nghĩa bởi lược đồ JSON của yêu cầu
Python
- Dùng thư viện Ollama Python để truyền lược đồ dưới dạng đối tượng JSON vào tham số
format - Khuyến nghị dùng Pydantic để tuần tự hóa lược đồ
Đầu ra
name='Canada' capital='Ottawa' languages=['English', 'French']
JavaScript
- Dùng thư viện Ollama JavaScript để truyền lược đồ dưới dạng đối tượng JSON vào tham số
format - Khuyến nghị dùng Zod để tuần tự hóa lược đồ
Đầu ra
{ name: "Canada", capital: "Ottawa", languages: [ "English", "French" ] }
Ví dụ
Trích xuất dữ liệu
- Định nghĩa một lược đồ biểu diễn thông tin để trích xuất dữ liệu có cấu trúc từ văn bản
- Mô hình sẽ trích xuất thông tin và trả về dữ liệu ở dạng JSON theo lược đồ đã định nghĩa
Ví dụ đầu ra
pets=[ Pet(name='Luna', animal='cat', age=5, color='grey', favorite_toy='yarn'), Pet(name='Loki', animal='cat', age=2, color='black', favorite_toy='tennis balls') ]
Mô tả hình ảnh
- Đầu ra có cấu trúc có thể được dùng cùng các mô hình thị giác
- Dùng
llama3.2-visionđể mô tả hình ảnh và trả về đầu ra có cấu trúc
Ví dụ đầu ra
summary='A palm tree on a sandy beach with blue water and sky.'objects=[ Object(name='tree', confidence=0.9, attributes='palm tree'), Object(name='beach', confidence=1.0, attributes='sand') ]scene='beach', colors=['blue', 'green', 'white'], time_of_day='Afternoon', setting='Outdoor', text_content=None
Tương thích OpenAI
- Tương thích với đầu ra có cấu trúc khi dùng client OpenAI
Mẹo
- Để dùng đầu ra có cấu trúc một cách đáng tin cậy:
- Dùng Pydantic (Python) hoặc Zod (JavaScript) để định nghĩa lược đồ phản hồi
- Thêm "trả về dưới dạng JSON" vào prompt để mô hình hiểu yêu cầu
- Đặt temperature về 0 để có đầu ra mang tính quyết định hơn
Bước tiếp theo
- Logit exposure cho khả năng sinh có kiểm soát
- Cải thiện hiệu năng và độ chính xác của đầu ra có cấu trúc
- Tăng tốc GPU cho sampling
- Hỗ trợ thêm các định dạng vượt ra ngoài JSON schema
1 bình luận
Bình luận trên Hacker News
Có thể đặt các ràng buộc đầu ra mạnh hơn thông qua tính năng gbnf của llama.cpp
Hữu ích khi chuyển đổi prompt thông thường thành dữ liệu csv có cấu trúc vì có thể loại bỏ văn bản không cần thiết
Có thể nhập văn bản bằng gemma2:2b để nhận được đầu ra ở định dạng JSON có cấu trúc
{"amount": 190, "balance": 5098, "category": "Shopping", "place": "Fresh Mart"}Có ý kiến thắc mắc việc các ràng buộc ảnh hưởng thế nào đến chất lượng đầu ra của LLM
Có câu hỏi liệu có thể dùng cùng các mô hình được hỗ trợ hay không
Có thắc mắc liệu llama.cpp và ollama có tận dụng tính năng đầu ra có cấu trúc của llama hay được triển khai theo cách khác
Có câu hỏi về giá trị gia tăng khi so với
outlinesLý do tiếp tục dùng oobabooga là vì hỗ trợ exlv2, cho suy luận hiệu quả hơn trên dual 3090s
Sẽ tốt hơn nếu ví dụ curl xuất hiện trước
Có câu hỏi về cách tối ưu để cung cấp đầu vào có cấu trúc cho LLM