Chuyển đến nội dung chính
AgentEye đánh giá các phiên làm việc của agent đã hoàn thành bằng cách gửi toàn bộ bản ghi sự kiện đến một dịch vụ đánh giá do khách hàng sở hữu. Dịch vụ đánh giá trả về điểm số theo cách trực tiếp hoặc bằng cách trả về một 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:
  1. Cách phát hiện hoàn thành phiên làm việc.
  2. Hợp đồng HTTP mà dịch vụ đánh giá phải triển khai.
  3. Cấu hình máy chủ AgentEye.
  4. Xem kết quả.
  5. Xử lý sự cố.
Để tìm helper Python triển khai hợp đồng này, hãy xem gói agenteye-evaluator trên PyPI.

Cách hoạt động

Khi AgentEye SDK phát hành sự kiện 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. reasoningsummary là tùy chọn.
  • Trì hoãn với {"status":"pending", "job_id":"abc-123"}. AgentEye sau đó sẽ gọi GET {EVALUATOR_ENDPOINT}/evaluate/abc-123 cho đế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ồi pending có thể bao gồm next_poll_secs để ghi đè; nếu không thì AgentEye sử dụng giá trị default_poll_interval_secs từ GET /config; nếu không thì máy chủ quay lại EVALUATOR_POLLING_INTERVAL_SECS (mặc định 10s). Tất cả các giá trị được giới hạn ở [1s, 1h].
Các phiên làm việc không bao giờ phát hành 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-evaluator theo quy ước đọc EVALUATOR_TOKEN)
Nếu 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 đườngPhần thân / thông sốPhản hồi
GET /healthkhông có{"status":"ok"} (công khai, không xác thực)
GET /configkhông có{"inactivity_timeout_secs": <int> | null, "default_poll_interval_secs": <int> | bỏ qua}
POST /evaluateJSON 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; reasoningsummary đơ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á:
Máy chủ coi bất kỳ phần thân 2xx nào khác là lỗi giao thức và ghi lại một error cuối cùng cho phiên.

Viết một dịch vụ đánh giá với SDK

Gói Python agenteye-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:
Dịch vụ đánh giá tối thiểu:
Phiên bản 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ưới deploy/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

Sử dụng cùng giá trị với 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ụ

Ví dụ bao gồm:
  • 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:
Máy chủ trải rộng các yêu cầu 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

Sau khi agent chạy từ đầu đến cuối, 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_ENDPOINTURL 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_TOKENMã 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_WORKERSNhiệm vụ công nhân trên mỗi phiên bản máy chủ (mặc định 2).
EVALUATOR_CLAIM_BATCHCá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_SECSCô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_SECSFallback 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_MSTimeout theo yêu cầu (mặc định 30000).
EVALUATOR_MAX_ATTEMPTSSau 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_SECSTốc độ GET /config (mặc định 300).
EVALUATOR_MAX_POLL_DURATION_SECSThờ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.
Để bật chấm điểm tự động trên toàn bộ phiên bản, cung cấp Secret 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_ENDPOINTEVALUATOR_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ẫnQuyền bắt buộcMục đích
GET/evaluationsevaluations:readKế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/aggregateevaluations:readSứ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/environmentsevaluations:readCá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-jobsevaluations:readKhả năng hiển thị vào các đánh giá đang thực hiện. Lọc theo status (pending/polling).
GET/eventsevents:readTruyề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, limitorder. orderdesc (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/exportevents:readTrả 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-evaluateevaluations:triggerXế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ụ:
Mỗi đối tượng phản hồi /evaluations có những trường này:
TrườngLoạiGhi chú
evaluation_idstring (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.
idstring (UUID)Bí danh tương thích ngược mang giá trị giống như evaluation_id.
session_idstringPhiê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_idstringXác định agent đã tạo phiên.
environmentstringNhãn môi trường được sao chép từ phiên.
statusenumMột trong "done", "error", "timeout".
scoresobject | nullĐiểm số được trả về bởi dịch vụ đánh giá của bạn.
reasoningobject | nullBả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ó.
summarystring | nullTươ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á.
errorstring | nullĐược điền trên "error" / "timeout" chỉ.
attempt_countintegerSố lần nỗ lực gửi (≥ 1).
duration_msinteger | nullKhoảng thời gian của nỗ lực cuối cùng.
completed_atstring (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_atstring (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ềnCấp
evaluations:readDanh 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:triggerTự độ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:readXem 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:writeTạo và chỉnh sửa bảng điều khiển.
dashboards:deleteXóa bảng điều khiển.
Admin bootstrap (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ành agent_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).
Lưới Sessions với các viên chứng chỉ trạng thái đánh giá mỗi phiên và lá cờ điểm được mã hóa màu (helpfulness, factuality, tool_efficiency, safety, coherence) Lưới phiên hiển thị trạng thái đánh giá và điểm của mỗi lần chạy trong nháy mắt; lá cờ đỏ/hổ phách/xanh làm cho các điểm thấp nổi bật. Chế độ xem chi tiết phiên với điểm đánh giá và trạng thái gửi trong thanh bên phải Mở một phiên hiển thị dòng thời gian đầy đủ của nó cùng với điểm đánh giá và bất kỳ lỗi gửi nào trong thanh bên phải.

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.
Mỗi thẻ hiển thị số lượng phiên phù hợp, phân tích xong/lỗi/timeout, trung bình của mỗi điểm đặc biệt và một sparkline xu hướng nhỏ. Mở bảng điều khiển hiển thị bảng điều khiển kích thước đầy đủ; đơn vị mở trong phiên bỏ bạn vào trang phiên được lọc trước sẵn với chính xác lát cắt đó. Các số liệu được tính toán phía máy chủ trên toàn bộ tập hợp phù hợp (thông qua GET /evaluations/aggregate), vì vậy các số chính xác hơn là lấy mẫu. Bảng điều khiển sức khỏe eval với thanh điểm trung bình cho mỗi chiều đánh giá, phân tích công cụ ok-vs-error, công cụ hàng đầu và xu hướng sự kiện mỗi giờ Quyền: xem cần cả dashboards:readevaluations: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ằng EVALUATOR_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_atlast_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.