Hướng dẫn
Hình ảnh, âm thanh và video
Oloproof đánh giá các hệ thống nhận vào hoặc tạo ra hình ảnh, âm thanh và video, và các tệp không bao giờ rời khỏi nơi hệ thống của bạn lưu giữ chúng. Một lần chạy ghi lại mỗi tệp theo tham chiếu; các kiểm tra tất định đo các byte; một giám khảo có thể thấy hình ảnh, khung hình video và âm thanh; workbench hiển thị chúng bên cạnh mỗi phán quyết. Bài hướng dẫn đi qua phần hình ảnh trên một ví dụ có thể chạy được.
Ghi lại đa phương tiện
Hệ thống của bạn ghi lại các tệp mà một trường hợp đã nhận hoặc đã tạo ra bằng current_case().media(...), dưới dạng một artifact media/v1 cho mỗi lần gọi:
from oloproof import current_case, media_file, system
@system(name="captioner", version="v2", records=("media/v1",))
def caption(case):
image = render(case["prompt"]) # your system writes its own file
current_case().media([
media_file(case["photo"], role="input"),
media_file(image), # role="output" by default
])
return {"caption": describe(image)}Trong oloproof.yaml, một hệ thống callable khai báo records: [media/v1]. Mỗi mục chứa:
| Trường | Ý nghĩa |
|---|---|
| kind | image, audio hoặc video, suy ra từ kiểu MIME |
| mime_type | image/png, audio/wav, video/mp4, v.v. |
| uri | nơi tệp nằm: một đường dẫn file://, một URL https://, hoặc một đường dẫn tương đối so với dự án |
| digest | sha256 của các byte, sha256:... |
| size_bytes | dung lượng tính bằng byte |
| role | input, output (mặc định) hoặc context |
| name | tên mà một prompt hoặc một trang dùng để gọi nó; media_file dùng tên của tệp |
| width, height, duration_s | tùy chọn, theo những gì hệ thống của bạn khai báo |
media_file(path) điền các trường này từ một tệp cục bộ. Không có gì được sao chép vào kho lưu trữ của Oloproof. Mọi thứ đọc tệp về sau, dù là một kiểm tra, một giám khảo hay workbench, đều đọc nó qua read_media, hàm này từ chối các byte có dung lượng hoặc sha256 khác với bản ghi: nội dung đã thay đổi sẽ dừng lần chạy, và một tệp đã mất sẽ khiến trường hợp bị thiếu. Hãy giữ các tệp của một lần chạy, không thay đổi, chừng nào bạn còn giữ lần chạy đó; hãy ghi đầu ra của mỗi phiên bản vào chỗ riêng của nó. Trong @evaluator của riêng bạn, read_media(item) trả về các byte đã được kiểm tra.
Kiểm tra không cần mô hình
media_check đo từng mục đã ghi lại có một vai trò nhất định và đạt khi mọi mục đáp ứng mọi điều kiện đã khai báo:
- type: media_check
criterion: thumbnail_fits
kind: image
formats: [png, jpeg, webp]
max_width: 256
max_height: 256
max_bytes: 50000Định dạng được đọc từ các byte mở đầu của tệp, nên một tệp JPEG được lưu dưới tên .png sẽ thất bại; kích thước hình ảnh và thời lượng WAV được đọc từ phần header của chúng; kích thước của một video hoặc độ dài của một tệp MP3 được đo bằng ffprobe. Các giới hạn thời lượng áp dụng cho âm thanh và video, các giới hạn kích thước cho hình ảnh và video.
image_matches_reference đạt khi mỗi hình ảnh trông giống một hình tham chiếu: perceptual hash 64 bit của chúng khác nhau tối đa max_distance bit (mặc định là 8). Một bản sao đã đổi kích thước hoặc nén lại chỉ lệch vài bit; một hình trống, một tệp hỏng hoặc một cảnh khác thì không. Hình tham chiếu là một reference_file cho mọi trường hợp, hoặc một đường dẫn mà expected của mỗi trường hợp nêu ra với reference_field. Hash này đọc bố cục và ánh sáng, không đọc màu sắc, nên nó không thể phân biệt hai sản phẩm được chụp theo cùng một cách, và đồ họa phẳng có những vùng trống lớn làm nó dịch chuyển nhiều hơn so với ảnh chụp. Nó cần Pillow: pip install 'oloproof[media]'.
Mọi trường đều có trong tài liệu tham chiếu cấu hình. Cả hai kiểm tra đều quyết định ngay từ lần chạy đầu tiên, vì chúng không gọi mô hình nào.
Giám khảo thấy được đa phương tiện
Một rubric_judge với media được cho xem đa phương tiện đã ghi lại của trường hợp có vai trò đó (input, output hoặc all), mỗi mục được nêu tên trong prompt của nó để giám khảo có thể phân biệt một đầu vào với một đầu ra:
- type: rubric_judge
criterion: caption_matches
provider: openai_compatible
base_url: http://localhost:11434/v1
model: qwen2.5vl
rubric_text: Pass only if the caption truthfully describes the attached image.
media: output
video_frames: 4
transcriber:
model: whisper-1- Hình ảnh được đính kèm nguyên trạng, tối đa 5 MB mỗi hình và 20 hình cho mỗi phán quyết.
- Video được đính kèm dưới dạng các khung hình tĩnh, được trích bằng ffmpeg trên máy chạy giám khảo: video_frames: 4 lấy điểm giữa của bốn khoảng bằng nhau, [0.5, 2.0] lấy đúng các thời điểm đó.
- Âm thanh được transcriber phiên âm (một endpoint /audio/transcriptions tương thích OpenAI, của OpenAI khi bỏ trống base_url) và bản phiên âm được đưa vào prompt; hoặc, với audio: native, nó được đính kèm dưới dạng âm thanh cho một mô hình nghe được (wav và mp3; không phải của Anthropic).
Các digest của đa phương tiện là một phần của khóa mà một phán quyết được lập theo, nên đa phương tiện đã thay đổi sẽ được chấm lại còn đa phương tiện không đổi được lấy từ bộ nhớ đệm. Trình phiên âm và các thời điểm khung hình là một phần của phiên bản giám khảo, và mỗi phán quyết giữ lại các bản phiên âm của nó cùng phiên bản ffmpeg. Một giám khảo được khai báo cho âm thanh mà không có trình phiên âm, hoặc cho video trên một máy không có ffmpeg, sẽ dừng lần chạy thay vì để các trường hợp đó bị thiếu. Một mô hình được lưu trữ tính phí cho mỗi hình ảnh cũng như cho mỗi từ.
Xác thực một giám khảo đa phương tiện
Một giám khảo thấy được đa phương tiện không quyết định điều gì cho tới khi nhãn của con người cho thấy nó đồng ý với họ, giống hệt như một giám khảo đọc văn bản: gán nhãn cho một mẫu ngẫu nhiên, rồi chạy oloproof evaluators validate (Giám khảo). Trong một không gian làm việc được lưu trữ, hàng đợi xem xét hiển thị đa phương tiện của mỗi trường hợp cho người xem xét. Thay đổi mô hình, rubric, media, các khung hình hoặc trình phiên âm sẽ tạo ra một giám khảo mới, cần được xác thực riêng.
Đa phương tiện trong workbench
Đa phương tiện của một trường hợp xuất hiện bên cạnh đầu ra và các phán quyết của nó, trên trang của trường hợp và trong hàng đợi xem xét, cùng với kiểu, dung lượng và digest của mỗi tệp.
- Một workbench cục bộ đọc mỗi tệp từ nơi lần chạy đã ghi lại nó, trên máy của bạn, và chỉ hiển thị nó khi sha256 của nó vẫn khớp.
- Một không gian làm việc được lưu trữ không bao giờ nhận đa phương tiện. Trình duyệt của người xem tải mỗi tệp từ oloproof collect trong mạng của bạn, với cùng loại vé ngắn hạn mà hàng đợi xem xét dùng cho nội dung trường hợp (Giám khảo), và kiểm tra sha256 của nó trước khi hiển thị. Không có collector, trang sẽ liệt kê các dữ kiện của mỗi tệp và nói vì sao tệp không được hiển thị.
Một lần chạy đã được push mang theo các bản ghi media/v1, cùng với nơi lưu giữ mỗi tệp, thuộc hạng mục egress artifacts; một chính sách giữ lại artifacts cũng giữ các vị trí đó ở phía bạn.
Không được hỗ trợ
- Tạo ra đa phương tiện: hệ thống của bạn tạo ra các tệp của nó, và Oloproof đánh giá chúng.
- Tải đa phương tiện lên Oloproof: không có chức năng tải lên, dù được lưu trữ hay cục bộ.
- Một mô hình xem toàn bộ video hoặc nghe âm thanh qua API của Anthropic: ở đó video được chấm từ các khung hình, và âm thanh qua một bản phiên âm.
- Kiểm tra tất định về nội dung của âm thanh hoặc video (tỷ lệ lỗi từ, phát hiện cảnh): hãy tự viết bằng @evaluator và read_media.
- Perceptual hashing cho âm thanh hoặc video: image_matches_reference chỉ đọc hình ảnh.