job_id để AgentEye thăm dò. Kết quả được lưu trữ và hiển thị trên bảng điều khiển.
Hướng dẫn này bao gồm:
- Cách phát hiện hoàn thành phiên làm việc.
- Hợp đồng HTTP mà dịch vụ đánh giá phải triển khai.
- Cấu hình máy chủ AgentEye.
- Xem kết quả.
- Xử lý sự cố.
agenteye-evaluator trên PyPI.
Cách hoạt động
agent_end cho một phiên làm việc, máy chủ lên lịch một đánh giá. Sau đó, nó gửi toàn bộ bản ghi sự kiện đến dịch vụ đánh giá của bạn, dịch vụ này có thể:
-
Trả về kết quả trực tiếp với
{"status":"done", "scores":{...}, "reasoning":{...}, "summary":"..."}. Kết quả được thêm vào dòng thời gian đánh giá của phiên.reasoningvàsummarylà tùy chọn. -
Trì hoãn với
{"status":"pending", "job_id":"abc-123"}. AgentEye sau đó sẽ gọiGET {EVALUATOR_ENDPOINT}/evaluate/abc-123cho đến khi dịch vụ đánh giá của bạn trả về{"status":"done", ...}hoặc{"status":"error", "error":"..."}. Tốc độ thăm dò là theo từng công việc: một phản hồipendingcó thể bao gồmnext_poll_secsđể ghi đè; nếu không thì AgentEye sử dụng giá trịdefault_poll_interval_secstừGET /config; nếu không thì máy chủ quay lạiEVALUATOR_POLLING_INTERVAL_SECS(mặc định 10s). Tất cả các giá trị được giới hạn ở [1s, 1h].
agent_end (ví dụ: quá trình agent bị sập) cũng có thể được nhận diện: GET /config của dịch vụ đánh giá có thể trả về {"inactivity_timeout_secs": 1800}, và AgentEye sẽ đánh giá bất kỳ phiên nào không hoạt động trong khoảng thời gian đó. Đặt trường thành null hoặc bỏ qua để vô hiệu hóa fallback này.
Pipeline hoàn toàn không hoạt động khi EVALUATOR_ENDPOINT không được đặt.
Một phiên có thể tích lũy nhiều đánh giá cuối cùng theo thời gian: mỗi sự kiện agent_end (và mỗi lần đánh giá lại thủ công từ bảng điều khiển) sẽ thêm một hàng đánh giá mới. Đây là cách được hỗ trợ để đánh giá một cuộc trò chuyện được tiếp tục: người dùng kết thúc agent, quay lại sau đó, gửi thêm sự kiện, kết thúc agent lần nữa, và một đánh giá thứ hai chạy với toàn bộ bản ghi được cập nhật. Bảng điều khiển hiển thị đánh giá gần nhất là tiêu đề chính và các đánh giá trước đó dưới dạng dòng thời gian có thể thu gọn. Trong khi một đánh giá đang chạy cho một phiên, các sự kiện agent_end bổ sung cho phiên đó sẽ bị bỏ qua; sự kiện tiếp theo sau khi đánh giá đang chạy hoàn thành sẽ xếp hàng một đánh giá mới như bình thường.
Fallback không hoạt động sẽ tái kích hoạt trên các phiên được tiếp tục: nếu các sự kiện mới đến sau một đánh giá cuối cùng trước đó và phiên sau đó trở nên không hoạt động quá inactivity_timeout_secs, một đánh giá mới sẽ được xếp hàng.
Các lỗi tạm thời (5xx, 429, timeout, lỗi mạng) sẽ được thử lại với backoff hàm mũ cho đến EVALUATOR_MAX_ATTEMPTS; phản hồi 4xx là cuối cùng. AgentEye có thể chạy an toàn với nhiều phiên bản máy chủ có tỷ lệ ngang; công việc được phân vùng sao cho cùng một phiên không bao giờ được gửi đi hai lần cùng lúc.
Hợp đồng HTTP
Mọi tuyến đường được xác thực sử dụng xác thực mã thông báo người mang. Giá trị tương tự phải được cấu hình ở cả hai bên:- Máy chủ AgentEye: biến env
EVALUATOR_TOKEN - Dịch vụ đánh giá: được cấu hình theo cách tương tự (SDK
agenteye-evaluatortheo quy ước đọcEVALUATOR_TOKEN)
EVALUATOR_TOKEN không được đặt, máy chủ không gửi tiêu đề Authorization; dịch vụ đánh giá sau đó có thể chấp nhận các yêu cầu ẩn danh, điều này tốt cho một mạng nội bộ nhưng không được khuyến khích trên internet công cộng.
Các tuyến đường mà dịch vụ đánh giá phải phục vụ
| Tuyến đường | Phần thân / thông số | Phản hồi |
|---|---|---|
GET /health | không có | {"status":"ok"} (công khai, không xác thực) |
GET /config | không có | {"inactivity_timeout_secs": <int> | null, "default_poll_interval_secs": <int> | bỏ qua} |
POST /evaluate | JSON EvalRequest | {"status":"done", ...} hoặc {"status":"pending", "job_id":"..."} |
GET /evaluate/{id} | không có | hình dạng phản hồi giống như /evaluate |
Phần thân EvalRequest được gửi bởi máy chủ
Các hình dạng phản hồi
Đồng bộ (done):reasoning (bản đồ giải thích theo từng điểm) và summary (lý thuyết tổng thể) đều là tùy chọn. Các khóa trong reasoning phải phản ánh các khóa trong scores; bảng điều khiển hiển thị mỗi mục nội tuyến dưới thanh điểm của nó. Các đánh giá cũ hơn chỉ trả về scores tiếp tục hoạt động không thay đổi; reasoning và summary đơn giản đọc là null và các affordance UI tương ứng sẽ bị bỏ qua.
Không đồng bộ (trì hoãn):
next_poll_secs là tùy chọn; nếu bỏ qua thì máy chủ quay lại default_poll_interval_secs của dịch vụ đánh giá từ /config, sau đó đến biến env EVALUATOR_POLLING_INTERVAL_SECS của nó.
Lỗi cuối cùng phía đánh giá:
error cuối cùng cho phiên.
Viết một dịch vụ đánh giá với SDK
Gói Pythonagenteye-evaluator cung cấp cho bạn một trình bao FastAPI được gõ triển khai hợp đồng HTTP ở trên. Cài đặt nó từ PyPI:
app là ASGI-callable, vì vậy uvicorn module:app chạy nó.
Đối với các dịch vụ đánh giá cần trì hoãn công việc tốn kém, hãy trả về JobPending thay thế và đăng ký trình xử lý @app.job_lookup; máy chủ AgentEye thăm dò GET /evaluate/{job_id} cho đến khi bạn trả về trạng thái cuối cùng hoặc giới hạn EVALUATOR_MAX_POLL_DURATION_SECS (mặc định 1 giờ) hết hiệu lực.
Tham khảo API đầy đủ, mẫu không đồng bộ và lược đồ sự kiện: README của agenteye-evaluator được gửi kèm trong mỗi tarball bản phát hành trên trang bản phát hành agenteye-enterprise, hoặc bạn có thể đọc nó trên trang PyPI của gói.
Chạy một dịch vụ đánh giá trên Kubernetes
Dịch vụ đánh giá là dịch vụ của bạn: AgentEye không gửi một container dịch vụ đánh giá mặc định. Bản phát hành bao gồm các bản kê khai Kubernetes tham khảo dướideploy/examples/evaluator/ mà bạn có thể áp dụng nguyên trạng sau khi thay thế hình ảnh và mã thông báo người mang dùng chung.
1. Đóng gói dịch vụ đánh giá của bạn
Một Dockerfile tối thiểu cho dịch vụ đánh giá của bạn:runAsNonRoot (UID 10001) giữ container tương thích với các hồ sơ Pod Security bị hạn chế.
2. Tạo mã thông báo người mang dùng chung
EVALUATOR_TOKEN trên máy chủ AgentEye. Máy chủ gửi Authorization: Bearer <token> trên mọi yêu cầu; SDK sử dụng hmac.compare_digest để kiểm tra thời gian không đổi và từ chối sự không khớp với HTTP 401.
3. Áp dụng các bản kê khai ví dụ
- Một Deployment 2 bản sao với
runAsNonRoot, hệ thống tệp gốc chỉ đọc, tất cả khả năng được bỏ, liveness + readiness trên/health - Một Dịch vụ ClusterIP trên cổng 9000
- Một bản mẫu
secret.example.yaml(cố tình không được bao gồm trong Kustomization; tạo secret thực tế ngoài dòng để không có mã thông báo nào được đặt trong git)
4. Kết nối AgentEye với nó
Trên máy chủ AgentEye, đặt:EVALUATOR_WORKERS × EVALUATOR_CLAIM_BATCH song song trên tất cả các pod dịch vụ đánh giá (mặc định: 2 × 4 = 8). Mở rộng replicas và giới hạn tài nguyên trên mỗi pod phối hợp với các công tắc này phía máy chủ.
Xác minh
GET /evaluations trên máy chủ AgentEye phải trả về một hàng có status: "done" và các điểm số mà dịch vụ đánh giá của bạn tạo ra.
Cấu hình máy chủ AgentEye
Đặt trên quá trình máy chủ:| Biến Env | Ý nghĩa |
|---|---|
EVALUATOR_ENDPOINT | URL cơ sở của dịch vụ đánh giá của bạn (http://evaluator:9000). Không được đặt = pipeline bị vô hiệu hóa. |
EVALUATOR_TOKEN | Mã thông báo người mang. Phải bằng giá trị mà dịch vụ đánh giá được cấu hình. |
EVALUATOR_WORKERS | Nhiệm vụ công nhân trên mỗi phiên bản máy chủ (mặc định 2). |
EVALUATOR_CLAIM_BATCH | Các hàng được yêu cầu trên mỗi tick công nhân (mặc định 4). Các lô được xử lý song song; đồng quy hiệu quả trên endpoint dịch vụ đánh giá của bạn là EVALUATOR_WORKERS × EVALUATOR_CLAIM_BATCH. |
EVALUATOR_POLL_IDLE_SECS | Công nhân ngủ bao lâu giữa các nỗ lực gửi khi không có đánh giá nào đến hạn (mặc định 2s). |
EVALUATOR_POLLING_INTERVAL_SECS | Fallback cuối cùng cho tốc độ GET /evaluate/{id} khi cả next_poll_secs trên mỗi phản hồi và default_poll_interval_secs của dịch vụ đánh giá không được đặt (mặc định 10s). |
EVALUATOR_REQUEST_TIMEOUT_MS | Timeout theo yêu cầu (mặc định 30000). |
EVALUATOR_MAX_ATTEMPTS | Sau nhiều lần thất bại tạm thời này, kết quả được ghi lại là error cuối cùng (mặc định 5). |
EVALUATOR_CONFIG_REFRESH_SECS | Tốc độ GET /config (mặc định 300). |
EVALUATOR_MAX_POLL_DURATION_SECS | Thời gian tối đa một phiên có thể ở trong hàng thăm dò trước khi bị kết thúc là timeout (mặc định 3600s). Bảo vệ chống lại một dịch vụ đánh giá luôn trả về pending. |
agenteye-evaluator với cả hai khóa được đặt. Trên các bản kê khai Kubernetes đi kèm, máy chủ đọc EVALUATOR_ENDPOINT và EVALUATOR_TOKEN từ Secret tùy chọn này. Tạo nó thông qua quy trình quản lý bí mật tiêu chuẩn của tổ chức của bạn, sau đó khởi động lại Deployment máy chủ để nhận up sự thay đổi.
Các công tắc điều chỉnh ở trên không được kết nối theo mặc định; hiển thị các biến môi trường tương ứng trên container máy chủ trong bản kê khai Deployment của bạn nếu bạn cần ghi đè các mặc định.
Xem deployment.md để xem bảng biến env đầy đủ.
Tham khảo API
| Phương pháp | Đường dẫn | Quyền bắt buộc | Mục đích |
|---|---|---|---|
GET | /evaluations | evaluations:read | Kết quả đầu cuối truy vấn. Hỗ trợ session_id, agent_id, environment, status (done/error/timeout), ts_from, ts_to, cursor, limit, score_filters, latest_per_session. limit mặc định là 50 và được giới hạn ở 200 (lưu ý điều này khác với /events, giới hạn ở 1000). environment chấp nhận danh sách tách bằng dấu phẩy (ví dụ: environment=prod,staging); các giá trị đơn vẫn hoạt động. Với latest_per_session=true phản hồi chứa nhiều nhất một hàng trên mỗi session_id (gần đây nhất theo completed_at) được sử dụng bởi trang danh sách phiên để thu gọn dòng thời gian đánh giá của phiên thành tiêu đề hiện tại của nó. Mặc định là false (trả về lịch sử đầy đủ). |
GET | /evaluations/aggregate | evaluations:read | Sức khỏe eval được cuộn lại cho một lát được lọc: tổng số lần, phân tích xong/lỗi/timeout, thống kê theo khóa điểm (số lần/trung bình/tối thiểu/tối đa/p50 trên các khóa scores tùy ý), và dòng thời gian được phân nhóm theo thời gian. Chấp nhận các thông số bộ lọc giống như /evaluations cộng với featured_keys (CSV của các khóa điểm để theo dõi) và latest_per_session. Powers tính năng Bảng điều khiển; các số liệu chính xác trên toàn bộ tập hợp phù hợp, không được lấy mẫu. |
GET | /evaluations/environments | evaluations:read | Các giá trị môi trường riêng biệt từ bảng evaluations. Được sử dụng để điền các menu thả xuống bộ lọc phạm vi dữ liệu đánh giá có thể đọc. |
GET | /evaluation-jobs | evaluations:read | Khả năng hiển thị vào các đánh giá đang thực hiện. Lọc theo status (pending/polling). |
GET | /events | events:read | Truyền phát sự kiện thô của phiên. Hỗ trợ session_id, agent_id, event_type (CSV), environment (CSV), ts_from, ts_to, cursor, limit và order. order là desc (mới nhất trước, mặc định) hoặc asc (cũ nhất trước); giá trị không được nhận dạng quay lại desc. Phân trang con trỏ thông qua next_cursor của phản hồi (một id sự kiện): chuyển nó trở lại thành cursor để lấy trang tiếp theo; với asc trang tiếp theo là các sự kiện sau id đó, với desc là các sự kiện trước nó. limit mặc định là 50 và được giới hạn ở 1000. |
GET | /sessions/:session_id/export | events:read | Trả về phần thân JSON chính xác mà dịch vụ đánh giá sẽ nhận cho phiên này, được phục vụ dưới dạng tệp đính kèm có thể tải xuống có tên session-<id>.json. Hữu ích để phát lại các phiên sản xuất qua agenteye-evaluator để thử nghiệm ngoài tuyến. Các byte giống hệt với những gì pipeline dịch vụ đánh giá gửi. |
POST | /sessions/:session_id/re-evaluate | evaluations:trigger | Xếp hàng một đánh giá mới cho một phiên; chạy cho dù đánh giá trước đó có tồn tại hay không. Kết quả mới được nối thêm vào dòng thời gian đánh giá của phiên thay vì ghi đè kết quả trước đó, vì vậy điểm số trước đó vẫn hiển thị dưới dạng lịch sử. Trả về 202 trên xếp hàng, 404 cho một phiên không xác định, 409 nếu một đánh giá đã đang thực hiện. Sử dụng sau khi triển khai một dịch vụ đánh giá mới hoặc cho các phiên không bao giờ phát hành agent_end. |
Lọc theo phạm vi điểm: score_filters
GET /evaluations chấp nhận một thông số score_filters tùy chọn thu hẹp kết quả theo các giá trị số bên trong đối tượng scores. Thông số này là danh sách tách bằng dấu phẩy của các mục key:min..max; có thể bỏ qua một trong hai giới hạn. Nhiều mục kết hợp với AND logic. Các hàng trong đó khóa được đặt tên vắng mặt hoặc không phải số được loại trừ. Một yêu cầu có thể chứa nhiều nhất 20 mục bộ lọc; vượt quá điều đó trả về HTTP 400.
Ví dụ:
/evaluations có những trường này:
| Trường | Loại | Ghi chú |
|---|---|---|
evaluation_id | string (UUID) | Mã định danh chính tắc cho đánh giá cuối cùng này. Mỗi đánh giá cuối cùng nhận được một UUID mới; một phiên duy nhất có thể giữ nhiều. |
id | string (UUID) | Bí danh tương thích ngược mang giá trị giống như evaluation_id. |
session_id | string | Phiên mà đánh giá chạy trên đó. Một phiên có thể có nhiều đánh giá trong dòng thời gian. |
agent_id | string | Xác định agent đã tạo phiên. |
environment | string | Nhãn môi trường được sao chép từ phiên. |
status | enum | Một trong "done", "error", "timeout". |
scores | object | null | Điểm số được trả về bởi dịch vụ đánh giá của bạn. |
reasoning | object | null | Bản đồ giải thích tùy chọn theo từng điểm được trả về bởi dịch vụ đánh giá của bạn. Các khóa thường phản ánh những khóa trong scores. Bảng điều khiển hiển thị mỗi mục dưới thanh điểm của nó. |
summary | string | null | Tương tự tùy chọn một đoạn tổng thể được trả về bởi dịch vụ đánh giá của bạn. Bảng điều khiển hiển thị nó ở trên bước phân tích theo điểm làm tiêu đề của đánh giá. |
error | string | null | Được điền trên "error" / "timeout" chỉ. |
attempt_count | integer | Số lần nỗ lực gửi (≥ 1). |
duration_ms | integer | null | Khoảng thời gian của nỗ lực cuối cùng. |
completed_at | string (ISO 8601 UTC) | Khi kết quả cuối cùng được ghi lại. Kết quả được sắp xếp theo completed_at (mới nhất trước). |
created_at | string (ISO 8601 UTC) | Mang cùng một dấu thời gian như completed_at (ngữ nghĩa ghi một lần). |
Quyền
| Quyền | Cấp |
|---|---|
evaluations:read | Danh sách kết quả đánh giá, xem điểm trong bảng điều khiển và tải số liệu sức khỏe bảng điều khiển. |
evaluations:trigger | Tự động xếp hàng một đánh giá cho một phiên qua POST /sessions/:session_id/re-evaluate hoặc nút đánh giá lại của bảng điều khiển. |
dashboards:read | Xem các bảng điều khiển đã lưu (cũng cần evaluations:read để tải các số liệu của chúng). |
dashboards:write | Tạo và chỉnh sửa bảng điều khiển. |
dashboards:delete | Xóa bảng điều khiển. |
ADMIN_KEY, ADMIN_EMAIL) tự động nhận các quyền này.
Xem kết quả
/sessions/<id>: dòng thời gian sự kiện + thanh bên phải hiển thị điểm số của phiên và bất kỳ lỗi nào từ nỗ lực gửi. Nếu khóa của bạn cóevaluations:trigger, một nút đánh giá lại sẽ xuất hiện bên cạnh nút xuất, hữu ích cho các phiên không bao giờ phát hànhagent_end, hoặc để làm mới điểm sau khi triển khai một dịch vụ đánh giá mới. Bảng điều khiển thăm dò tìm kết quả mới và cập nhật thanh bên phải khi nó đến./sessions: lưới phiên có thể lọc; cột điểm hiển thị trạng thái đánh giá và điểm của mỗi phiên trong nháy mắt./dashboards: các chế độ xem sức khỏe eval đã lưu (xem Bảng điều khiển dưới đây).


Bảng điều khiển
Trang Bảng điều khiển (/dashboards) cho phép bạn lưu một kết hợp các bộ lọc đánh giá dưới dạng chế độ xem được đặt tên, có thể tái sử dụng và xem cách lát cắt đánh giá đó hoạt động trong nháy mắt. Bảng điều khiển được chia sẻ trên toàn bộ tổ chức của bạn; mọi người có dashboards:read đều nhìn thấy cùng một tập hợp.
Mỗi bảng điều khiển ghim:
- Bộ lọc: cùng các điều khiển với trang phiên: môi trường, trạng thái, agent, cửa sổ thời gian lăn và bộ lọc phạm vi điểm (
key:min..max). - Cấu hình hiển thị: khóa điểm nào để đặc biệt, ngưỡng sức khỏe xanh/hổ phách/đỏ, bảng điều khiển nào để hiển thị và có nên thu gọn thành đánh giá gần đây nhất cho mỗi phiên hay không.
GET /evaluations/aggregate), vì vậy các số chính xác hơn là lấy mẫu.

dashboards:read và evaluations:read; tạo và chỉnh sửa cần dashboards:write; xóa cần dashboards:delete. Admin bootstrap nhận tất cả những cái này tự động.
Xử lý sự cố
Các phiên tồn tại nhưng không có đánh giá nào được tạo. Xác nhận rằngEVALUATOR_ENDPOINT được đặt trên quá trình máy chủ, máy chủ và dịch vụ đánh giá chia sẻ cùng một giá trị EVALUATOR_TOKEN và endpoint /health của dịch vụ đánh giá có thể truy cập được từ máy chủ. Khi EVALUATOR_ENDPOINT không được đặt, pipeline là không hoạt động.
Các đánh giá đang thực hiện tích tụ. Truy vấn GET /evaluation-jobs để xem hàng đợi đang thực hiện. Kiểm tra attempt_count, next_attempt_at và last_error trên mỗi hàng. Nguyên nhân phổ biến: dịch vụ đánh giá không thể truy cập hoặc trả về 5xx (được thử lại với backoff), EVALUATOR_TOKEN sai (401 là cuối cùng), hoặc một dịch vụ đánh giá không đồng bộ trả về pending vô thời hạn (xem dưới đây).
Các phiên đã hoàn thành nhưng không có đánh giá cuối cùng. Truy vấn GET /evaluation-jobs?status=polling; kết quả vẫn có thể đang thực hiện. Nếu một công việc bị kẹt ở pending, máy chủ gặp sự cố khi kết nối với dịch vụ đánh giá; hãy kiểm tra xem dịch vụ đánh giá có được bật và EVALUATOR_TOKEN khớp không.
HTTP 401 từ dịch vụ đánh giá: mã thông báo người mang không hợp lệ. EVALUATOR_TOKEN trên máy chủ không khớp với giá trị mà dịch vụ đánh giá được cấu hình. Chúng phải giống hệt nhau.
Dịch vụ đánh giá không đồng bộ trả về pending vĩnh viễn. Máy chủ thăm dò GET /evaluate/{job_id} cho đến khi dịch vụ đánh giá trả về done hoặc error, hoặc cho đến khi EVALUATOR_MAX_POLL_DURATION_SECS (mặc định 1 giờ) hết hiệu lực. Sau khi vượt quá giới hạn, đánh giá được ghi lại là timeout và được xóa khỏi hàng đợi đang thực hiện. Tăng EVALUATOR_MAX_POLL_DURATION_SECS nếu dịch vụ đánh giá của bạn hợp pháp cần lâu hơn mặc định.
