ابنِ باستخدام OTTERLOOP
OtterLoop هو عقد مواجهة الوكيل الذكي لناقد SeaOtter العدائي. تعمل الحلقة نفسها على AgentOS أو خارجه، عبر أي إطار عمل ونموذج وسحابة: أرسل العمل، واقرأ الحكم، وراجع، وكرّر حتى يجتاز النطاق بوابتك.
التكامل
كل شيء يُوجَّه إلى عقد التقييم نفسه. تملك واجهة API المستضافة تنفيذ الناقد، والتكييف، والتوطين، وعمليات الإرجاع الغنية، وسجل التدقيق الموقّع. خادم MCP وPython SDK مجرد أغلفة رقيقة فوق سطح HTTP ذاته.
التكامل
كل شيء يُوجَّه إلى عقد التقييم نفسه. تملك واجهة API المستضافة تنفيذ الناقد، والتكييف، والتوطين، وعمليات الإرجاع الغنية، وسجل التدقيق الموقّع. خادم MCP وPython SDK مجرد أغلفة رقيقة فوق سطح HTTP ذاته.
MCP
استخدمه في Claude أو Codex أو Cursor أو أي بيئة تشغيل تتحدث MCP.
{ "mcpServers": { "otterloop": {
"command": "python", "args": ["-m", "otterloop.mcp_server"],
"env": { "OTTERLOOP_API_URL": "https://dev-api.seaotter.ai",
"OTTERLOOP_API_KEY": "sk-otter-...",
"OTTERLOOP_POLICY_ID": "acme-prod-acceptance" } } } }curl
نداء تقييم أحادي عبر HTTP.
curl -s https://dev-api.seaotter.ai/api/v1/eval/feedback \
-H "Authorization: Bearer $OTTER_KEY" -H 'Content-Type: application/json' \
-d '{ "modality":"text", "policy_id":"acme-prod-acceptance", "locale":"ja",
"prompt":"Draft the Q3 incident postmortem",
"artifact_parts":[{"mime_type":"text/plain","text":"..."}],
"return_feedback_artifacts": true }'Python SDK
دع العميل يقود الإنتاج → التقييم → المراجعة حتى الإطلاق.
from otterloop import OtterLoopClient otter = OtterLoopClient(policy_id="acme-prod-acceptance", locale="ja") final = otter.loop(produce=lambda feedback: my_agent.revise(feedback), work=my_agent.first_draft(), modality="document", references=["file://brand-guide.pdf", "file://gold-postmortem.md"], max_rounds=5, target_band="ship")
وحدة المطوّر
أنشئ مفتاح eval-API لحسابك، ثم انسخ إعداد MCP أو Python SDK أو curl الجاهز للّصق لتوصيل أي وكيل ذكي بالناقد العدائي لـ SeaOtter. يُعرض السر مرة واحدة — خزّنه قبل مغادرة هذه الصفحة.
جارٍ تحميل المفاتيح…
AGENT QUICKSTART
SeaOtter is agent-native: an agent can discover this contract from /llms.txt, then run the whole loop over MCP or plain HTTP. The only human step today is minting the first eval key (above) — the agent does the rest. Every eval call carries Authorization: Bearer <sk-otter-...>. Bases: https://api.seaotter.ai (prod), https://dev-api.seaotter.ai (dev).
Machine-readable: /llms.txt · OpenAPI spec · interactive API docs.
1 — mint a key (one-time, signed-in user)
Returns the full sk-otter-... secret exactly once.
curl -s -X POST https://api.seaotter.ai/api/v1/agent-keys \
-H "Authorization: Bearer $SEAOTTER_USER_JWT" -H 'Content-Type: application/json' \
-d '{"name":"my-agent"}'
# -> { "id": "...", "key": "sk-otter-...", "key_prefix": "sk-otter-abcde", ... }2 — connect over MCP (.mcp.json)
Claude / Cursor. Codex uses [mcp_servers.otterloop] in config.toml.
{ "mcpServers": { "otterloop": {
"command": "python", "args": ["-m", "otterloop.mcp_server"],
"env": { "OTTERLOOP_API_URL": "https://api.seaotter.ai",
"OTTERLOOP_API_KEY": "sk-otter-...",
"OTTERLOOP_POLICY_ID": "acme-prod-acceptance" } } } }3 — score over HTTP
One-shot grade -> verdict + run_id to keep iterating.
curl -s https://api.seaotter.ai/api/v1/eval/feedback \
-H "Authorization: Bearer $OTTER_KEY" -H 'Content-Type: application/json' \
-d '{ "modality":"text", "policy_id":"acme-prod-acceptance",
"prompt":"Draft the Q3 incident postmortem",
"artifact_parts":[{"mime_type":"text/plain","text":"...your work..."}],
"return_feedback_artifacts": true }'
# -> { "run_id": "...", "verdict": { "score": ..., "band": "route_to_fix", "flaws": [...] } }5 — iterate until it ships
Re-score a revision against the same run.
curl -s -X POST https://api.seaotter.ai/api/v1/eval/runs/$RUN_ID/iterate \
-H "Authorization: Bearer $OTTER_KEY" -H 'Content-Type: application/json' \
-d '{ "decision":"reprompt", "new_artifact_ref":"inline:v2",
"artifact_parts":[{"mime_type":"text/plain","text":"...revised work..."}] }'عقد الحكم
صُمّم الحكم لوكلاء ذكيين متقدّمين، لا لصور شاشات مراجعة بشرية. يحمل الدرجة، والنطاق، والعيوب، والتحسينات، والمؤشرات الموضعية، والتعليل، ومراجع مُخرجات تغذية راجعة غنية يمكن للوكيل استخدامها مباشرة.
مخطط الحكم
{
"score": 0.91,
"band": "ship",
"decision": "ship",
"flaws": [
{ "criterion": "source_grounding", "severity": "high", "evidence": "Unsupported number", "detail": "The claim is not backed by the cited file", "anchor": { "kind": "span", "span": [418, 462] } }
],
"upgrades": [
{ "action": "Replace the unsupported figure", "target_criterion": "source_grounding", "draft": "Use the cited value from page 2 instead." }
],
"rationale": "Localized feedback so the agent can revise the exact failing region.",
"feedback_artifacts": [{ "kind": "annotated_png", "ref": "artifact://..." }]
}التكييف
OtterLoop ليس درجة عامة من نوع "هل هذا جيد". يمكن للعقد تكييف الحكم على سياسة مؤسستك، والموجه أو النية التي مُنحت للوكيل الذكي، والملفات المرجعية التي يجب الالتزام بها.
طبّق سياسة القبول الصحيحة بحيث يمكن لنفس المُخرج أن يجتاز فريقاً ويفشل عند آخر لأسباب قابلة للدفاع.
انقل الطلب الأصلي إلى الناقد ليحكم على العمل مقابل التكليف، لا مقابل إجابة مثالية عامة.
أدلة العلامة التجارية، الأمثلة الذهبية، مصادر الحقيقة، والتكرارات السابقة كلها تصبح أدلة تكييف.
الأنماط
تُغطي الحلقة نفسها النص والشيفرة والصور والعروض والمستندات وجداول البيانات والصوت والفيديو والمسارات متعددة الخطوات. يمكن أن تتضمن المرتجعات كلّاً من JSON الحكم المعياري والوسائط التي يمكن لإنسان أو وكيل ذكي قراءتها.
| الأنماط | المرتجعات |
|---|---|
| صورة أو إطار تصميم | PNG مُشَرَّح مع صناديق تحديد العيوب وتقرير markdown |
| عرض شرائح أو PDF أو مستند | صفحات مُعنونة، وملاحظات لكل صفحة، ومؤشرات موضعية قابلة للقراءة آلياً |
| جدول بيانات | خلايا معلّمة، وملاحظات مؤسَّسة على المعايير، وفروقات مُهيكلة |
| فيديو أو صوت | علامات طوابع زمنية، وتسميات توضيحية، وتعليل مُحَلّى موضعياً |
| نص أو شيفرة | مراجعة مُثبتة بالمدى مع مسودات تحسين يمكن للوكيل الذكي تطبيقها |