Hướng dẫn
Đánh giá từ Node
SDK cho Node chạy hệ thống của bạn và các bộ đánh giá của nó trong Node, bên trong trình chạy kiểm thử của chính bạn, rồi chuyển điểm số cho engine Python, nơi đưa ra quyết định. Một đội TypeScript giữ nguyên mã, fixture và trình chạy kiểm thử của mình; mọi khoảng, so sánh và quyết định vẫn thuộc về engine, và SDK không tính bất kỳ thứ nào trong số đó, kể cả một giá trị trung bình.
Cài đặt
npm install --save-dev @oloproof/sdk
pip install oloproofDòng đầu tiên là SDK, dòng thứ hai là engine mà SDK chuyển điểm số cho (Python 3.11 trở lên). SDK tìm oloproof trong PATH của bạn; nếu không có ở đó, nó dừng lại và cho biết cách cài đặt.
Chấm điểm một hệ thống trong một bài kiểm thử
Một bộ kiểm thử là chính tệp JSON Lines mà engine đọc (Viết một bộ kiểm thử), mỗi dòng một trường hợp, mỗi trường hợp có một id. Hãy đưa cho evaluate bộ kiểm thử, hệ thống và một bộ đánh giá cho mỗi tiêu chí:
import { test } from "vitest";
import { type Case, decide, evaluate } from "@oloproof/sdk";
import { answer, rateHelpfulness } from "./support-bot.js";
type SupportCase = Case<{ question: string }, { label: string }>;
type Answer = { label: string; text: string };
test("the support bot is good enough to release", async () => {
const scored = await evaluate<SupportCase, Answer>({
suitePath: "data/support.jsonl",
system: (testCase) => answer(testCase.input.question),
evaluators: {
exact_label: (output, testCase) => ({ passed: output.label === testCase.expected?.label }),
helpfulness: {
scale: [0, 1],
judge: "gpt-4o-mini",
evaluate: async (output, testCase) => ({ score: await rateHelpfulness(output, testCase) }),
},
},
concurrency: 8,
out: "scores/candidate.jsonl",
});
console.log(scored.counts);
}, 600_000);Một bộ đánh giá trả về { passed } hoặc { score }, kèm một reason tùy chọn. Một hàm phán định đạt hoặc không đạt; một bộ đánh giá chấm điểm khai báo scale của nó, vì một khoảng trên một giá trị trung bình chỉ đúng bên trong một phạm vi đã biết trước khi đọc điểm số. Hãy nêu tên judge khi một mô hình đã chấm: khi đó engine coi nó là một giám khảo cần được kiểm tra so với con người trước khi nó được phép làm cổng cho một lần phát hành (Giám khảo).
concurrency giới hạn số trường hợp chạy cùng lúc (mặc định là bốn). Tệp điểm số liệt kê các trường hợp theo thứ tự mà bộ kiểm thử đưa ra, bất kể chúng hoàn tất theo thứ tự nào.
Để engine quyết định
const decided = await decide({
scores: "scores/candidate.jsonl",
baseline: "scores/baseline.jsonl",
policy: "release.yaml",
});
console.log(decided.exit, decided.comparison?.gate?.decisions);decide chạy các lệnh mà bạn sẽ gõ, trong thư mục được cho là cwd (mặc định là thư mục hiện tại):
oloproof scores import scores/baseline.jsonl scores/candidate.jsonl --tool node
oloproof compare RUN_ID BASELINE_RUN_ID --policy release.yaml --jsonKhi có đường cơ sở, engine so sánh hai lần chạy theo từng trường hợp và decided.comparison là bản ghi mà oloproof compare --json đã in ra. Khi không có, decide chạy oloproof gate trên lần chạy đã nhập và trả về những gì lệnh đó đã in ra trong decided.decision.stdout. Dù theo cách nào, decided.exitCode là mã thoát của engine, không bị thay đổi, và decided.exit là tên của nó: EXIT_CODES ánh xạ mỗi tên tới giá trị của engine, như Chạy trong CI liệt kê.
Tệp chứa những gì
Tệp này chính là tệp mà oloproof scores import đọc (Ý kiến thứ hai): một hàng cho mỗi trường hợp và tiêu chí, chỉ có id trường hợp và điểm số. Một câu trả lời, một đầu vào hay một reason không bao giờ đi vào tệp; chúng ở lại trong scored.results, trong Node.
- Một trường hợp mà hệ thống ném lỗi được ghi với giá trị rỗng ở mọi tiêu chí, và một trường hợp mà bộ đánh giá ném lỗi được ghi với giá trị rỗng ở tiêu chí đó. Engine đếm mỗi trường hợp như vậy là thiếu và giới hạn nó ở giá trị xấu nhất, nên một lỗi làm giảm những gì bằng chứng có thể cho thấy thay vì biến mất khỏi bằng chứng. scored.errors liệt kê từng trường hợp kèm thông báo của nó.
- Một phán quyết mà tệp không thể mang sẽ dừng lần chạy với một lỗi và không ghi gì cả: một điểm số không có thang đo hoặc nằm ngoài thang đo, vừa có điểm số vừa có kết quả đạt, hoặc một tiêu chí mà engine không thể đặt tên thành một chỉ số.
- Mỗi tệp là một phiên bản hệ thống được xác định bởi nội dung của nó, nên nhập lại cùng một tệp sẽ dùng lại những gì engine đã lưu.
Không cần cài đặt engine
secondOpinion gửi hai tệp điểm số tới trang được lưu trữ sẵn trả lời câu hỏi "điều đó có thật không?" mà không cần cài đặt gì, và trả về câu trả lời của engine đúng như engine đã viết:
import { secondOpinion } from "@oloproof/sdk";
const result = await secondOpinion({
baseUrl: "https://oloproof.com",
baseline: "scores/baseline.jsonl",
candidate: "scores/candidate.jsonl",
});
if (result.ok) console.log(result.opinion.answers);
else console.log(result.error, result.description);Trang không giữ lại gì và không cần tài khoản. Nó đọc tối đa 2 MB mỗi tệp và bị giới hạn theo từng máy khách; một lần từ chối trả về câu của engine nêu tên hàng cần thay đổi.
Những gì chưa được xây dựng
- Phát hành @oloproof/sdk lên npm. Cho đến khi điều đó xảy ra, hãy build nó từ packages/sdk trong kho mã.
- Bất kỳ loại thống kê nào trong Node, theo thiết kế: SDK ghi điểm số và đọc câu trả lời của engine.
- Một group_id hoặc time_order trong bộ kiểm thử của bạn không được mang vào lệnh nhập, vốn chỉ đọc id trường hợp và điểm số, nên engine đọc các trường hợp như là độc lập.
Tiếp theo
- Ý kiến thứ hai: định dạng tệp và những gì một so sánh trả lời.
- Cổng trong CI: chính sách phát hành mà decide chuyển cho engine.
- API Python: cùng một lần đánh giá, do chính engine chạy.