Community生產力與協作github.com

Emrys-Merlin/agent-skills

使用 TypeSafe 的 Jev 模型(透過 OpenRouter 呼叫)來建構 AI 驅動的軟體,將自然語言與應用狀態轉化為可組合的類型化判斷與機率。

agent-skills 是什麼?

此技能讓開發者能夠透過 OpenRouter API 使用 TypeSafe 的 System One 模型(特別是 Jev),將 AI 判斷作為可組合的程式設計原語。Jev 不同於傳統的 LLM,它不產生文字,而是返回結構化的類型化答案和機率,讓程式碼可以直接消費這些結果,用於路由、排名、提取、驗證等場景。它支援 TypeSafe SDK(TypeScript/Python)或直接 HTTP API 呼叫,但需將基礎 URL 指向 OpenRouter,並使用 OpenRouter 的 API 金鑰。技能文件提供詳細的接入指引、模型 ID 對應、OpenRouter 特有的注意事項(如不能呼叫 SDK 的模型列表功能),以及豐富的設計模式(如函數呼叫、選擇性提取、驗證級聯等),幫助開發者將 AI 判斷無縫整合到現有工作流程中。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Emrys-Merlin/agent-skills/tree/HEAD/plugins/typesafe-openrouter/skills/typesafe-openrouter

Installed? Explore more 生產力與協作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

使用 TypeSafe 建構

TypeSafe 將 AI 智能單位打造成像程式設計原語一樣可用:你可以將小型判斷組合成更大的能力。其 System One 模型 返回快速、專注的判斷,軟體可以直接消費。Jev 是 TypeSafe 的旗艦產品,也是第一個 System One 模型。它能理解自然語言並返回類型化的答案與機率,而非生成文字或推理解釋。程式碼掌控工作流程;模型則在一般程式碼需要語義理解的地方,提供可程式化的常識。

透過 OpenRouter 呼叫 Jev

此技能變體是透過 OpenRouter(而非 TypeSafe 自身 API)來呼叫 Jev。TypeSafe 的文件仍然是概念與問題設計的參考依據;只有存取方式、模型 ID 與計費方式不同。

  • 憑證: 一個 OpenRouter API 金鑰,費用計入 OpenRouter 帳戶。無需 TypeSafe 帳戶。從環境變數(OPENROUTER_API_KEY 或將 TYPESAFE_API_KEY 設為 OpenRouter 金鑰)讀取;絕不應硬編碼,並在網頁應用程式中保持在伺服器端。
  • System One API(預設): POST https://openrouter.ai/api/v1/systemone,標頭 Authorization: Bearer <OpenRouter 金鑰>。它實作了 TypeSafe 的請求和回應格式,並在回應中新增 id、provider 和 usage.cost。
  • TypeSafe SDK(@typesafe-ai/sdk、typesafe_sdk):透過 baseURL / base_url 或 TYPESAFE_BASE_URL 將基礎 URL 設為 https://openrouter.ai/api(SDK 會附加 /v1/systemone),並透過 apiKey / api_key 或 TYPESAFE_API_KEY 傳入 OpenRouter 金鑰。其餘部分遵循 TypeSafe 的 SDK 文件。
  • 請勿呼叫 SDK 的模型列表功能(client.models.list()):在 OpenRouter 上,它會打到 OpenRouter 的 Models API,其回應格式會被 SDK 拒絕。
  • 模型 ID: jev-1.14(最新版)、jev-1.13 或 jev-latest;裸 ID 會對應到 typesafe/jev-… 和 ~typesafe/jev-latest。為了可重現的閾值,請固定版本。查看 OpenRouter 上的 TypeSafe 模型 以取得最新版本、價格和上下文長度;回應中的 model 欄位會指出服務該請求的確切版本。
  • Box(在 state 的圖片中定位描述目標)需要 jev-1.14 或更高版本;1.13 會回傳 400 錯誤。Box 永遠會回傳邊緣,因此當目標可能不存在時,請搭配一個 Noul 使用。
  • 替代介面: OpenRouter 自身的 Decisions API(POST https://openrouter.ai/api/alpha/decisions)及其 TypeScript、Python 和 Go SDK。僅在專案已經使用 OpenRouter SDK 時才優先考慮使用。
  • 非 Jev 的類型化 API: typesafe/jev-router 是一個聊天補全路由,它使用 Jev 來選擇另一個 LLM。它回傳的是生成文字,而非類型化答案,因此不適用於此技能的模式。
  • 雲端和沙箱 session: 網路允許清單必須包含 openrouter.ai;將金鑰儲存為機密,而非純文字環境變數。

OpenRouter 文件:OpenRouter 上的 Jev、OpenRouter 上的 TypeSafe SDK、Jev 教學 和 文件索引(搜尋 "Jev" 以找到食譜)。當 OpenRouter 和 TypeSafe 文件在存取方式、端點、模型 ID 或定價上不一致時,對於此設定,以 OpenRouter 的文件為準。

閱讀即時文件

即時 TypeSafe 文件是唯一真理來源。請在執行任務時閱讀它們。 此技能提供方向;文件則包含當前的概念、提示指引、API 合約、SDK 使用方式、型號、限制和實際範例。

  • 從文件索引開始,以發現相關頁面和食譜。進行有目標的閱讀,而非載入整個網站。
  • Mintlify 透過在頁面路徑後附加 .md 來提供 Markdown,例如如何使用 TypeSafe 建構。從索引中的連結;在有用時將無副檔名的文件頁面連結轉換為 .md。相對路徑請根據 https://docs.typesafe.ai 解析。
  • 在撰寫整合程式碼之前,請先閱讀目前的 API 或所選 SDK 頁面,以及與設計相關的問題指引。對於新的工作流程,也請檢查最接近的食譜:它通常會比通用的分類器提供更好的分解方式。
  • 如果索引無法使用,請使用以下直接連結或網站導航。如果 Markdown 獲取失敗,請嘗試一般頁面。如果無法即時存取,請使用可用的本地文件或已安裝的 SDK 類型,說明此限制,並避免發明依賴版本的細節。
任務從此處開始;跟隨相關細節
了解程式設計模型System One、建構指南
探索可以建構什麼使用案例地圖,然後從索引中取得相關食譜
準備輸入和問題狀態、原語,然後是所選原語的頁面
決定如何處理不確定性信心
撰寫 API 程式碼先看 OpenRouter 上的 TypeSafe SDK,然後看 HTTP API、Python SDK 或 JavaScript SDK 以了解請求格式,使用 OpenRouter 的基礎 URL 和金鑰
尋找 OpenRouter 食譜工具呼叫閘道、驗證級聯、大規模分類、權限提示自動批准
更新舊的整合遷移指南 和已安裝 SDK 的現行參考

找到有用的形式

從使用者想要的行為開始:應用程式會顯示、選擇、變更或移交什麼?反向推導出它所需的判斷。將已知規則、計算、精確查詢和執行保留在程式碼中。保留使用者選擇的技術棧和範圍;在語義理解有幫助的地方加入 TypeSafe。

在腦力激盪或選擇架構時,不要只考慮分類。以下模式是起點:圍繞使用者的目標組合原語,包括那些不符合既定配方點子的模式。

  • 路由並填入已知參數。 一個請求可以選擇一個處理程式及其類型化參數。預先詢問有用的分支特定問題,並僅消費相關答案。探索函數呼叫和推測性扇出。
  • 選擇而非生成。 在程式碼中尋找候選值或來源區塊,使用判斷選擇目標值,然後複製或標準化它。程式碼也可以將來源文字組合成格式化的文件或閱讀指南。探索值提取和結構恢復。
  • 尋找並判斷證據。 檢索候選項,比較它們與查詢的相關性,並選擇有用的上下文。探索重新排序和階層式分類。
  • 將判斷轉化為可重複使用的資料。 一次性對各個維度進行評分,然後讓程式碼或使用者控制調整權重、閾值、排名和檢視。搭配有標籤的結果,這些訊號可以成為經典機器學習特徵。探索複合評分和特徵發現。
  • 驗證並升級處理。 針對證據檢查特定聲明或欄位;將不確定或失敗的情況交給人工或推理模型處理。探索引用檢查和提取級聯。
  • 回應變化的狀態。 程式碼可以保留目標和觀察結果,同時透過新的判斷來引導下一個有邊界的步驟。保持推斷狀態與觀察到的事實分離,並在將結果應用於已變更的情況之前檢查其新鮮度。

對於開放式請求,提供最能服務使用者目標的少數方向,並推薦一個起點。對於具體請求,選擇相關模式並建構;腦力激盪不是強制性的繞道。

設計判斷

根據答案的意義來選擇,然後閱讀相關的原語頁面:

需求原語重要區別
已定義集合中的一個Choice選取一個選項;其分佈比較競爭選項
條件是否成立Noul是的機率;沒有單獨的信心度;當多個可能適用時,每個標籤使用一個
沿著描述維度的程度Score有序級別上的機率加權位置;對可比較的逐項 Score 使用以進行分級排名
描述目標在圖片中的位置Box僅限 Jev 1.14+;無標準;永遠回傳邊緣,因此詢問 Noul 是否存在

為每個問題提供足夠相關的 狀態 來作答:來源文字、身份、關係、政策和當前事實。當上下文有多個部分時,優先使用命名的 JSON 欄位。將判斷放在 instructions 中,並在 criteria 中定義其可能的答案。問題 ID 是給程式碼用的,不會發送給模型;在問題中包含完整的含義。使用反引號路徑(例如 ticket.messages[0].text)來引用巢狀狀態。

每個問題只問一個狹義、連貫的判斷。拆分獨立有用的維度,但不要破壞正在被判斷的關係。有邊界的動作選擇或情境解釋是有效的;原子化不意味著字面的事實提取或一句話的限制。簡單問題使用字串。當定義、對比、排除或範例有助於釐清 instructions 或 criteria 時,使用結構化物件或陣列。Score 級別必須描述具體情況且能獨立理解。

保留所需的答案。當可能沒有任何東西符合時,包含一個無匹配結果;當獨立有用時,使用單獨的存在判斷。對於來源值選擇,檢查候選項的覆蓋範圍:模型無法選擇一個被省略的值。

組合與驗證

在同一狀態上同時詢問獨立的問題,包括有用的推測性問題。它們會並行執行,且無法看到彼此的回答。明確陳述每個推測前提;程式碼消費適用的答案。當需要根據先前的答案來擷取證據、建構新狀態或決定下一步選項時,才需要第二次請求。額外的問題仍會消耗 token;請衡量實際請求預算、成本和端到端延遲。

使用機率和信心來引導行為,並在使用者的資料和後果上評估閾值。Choice/Score 的信心總結了分佈的集中程度,而非整體工作流程正確性或執行權限。接近 0.5 的 Noul 表示是和否的機率相似,而非中等強度。幾個可接受的替代方案也可能分散機率;低信心不一定使無害的偏好選擇失效。忽略未使用分支上的不確定性。

保持策略明確,原始判斷可重複使用。加權評分適用於補償性偏好;「任何嚴重違規」規則需要單獨的條件。當證據和問題含義不變時,更改權重或顯示過濾器無需重新執行推理。類型化輸出保證的是介面,而非真相。System One 模型經過校準決策的訓練;在目標領域驗證其效能。

測試代表性案例以及由此產生的應用程式行為。對於失敗情況,檢查確切的狀態、問題、候選項、答案、組合和觀察到的結果。區分缺少證據、模型錯誤、程式碼錯誤和服務失敗。將食譜閾值和示範結果視為需要評估的範例,而非通用規則或永久性的模型限制。在網頁應用程式中,將 API 憑證保持在伺服器端。

相關技能