面向開發者的獨立指南與社群
Jev 官方資訊:typesafe.ai

免費體驗 Jev

選擇一個問題,或針對同一情境提出三個不同問題。先選案例,再修改輸入,查看各題的結構化答案。

瀏覽 GitHub 專案 使用情境
01 / 選定一個判斷

先選一個具體案例

typesafe/jev-1.13

每次專注測試一種回答類型。 每次執行會用掉一次當日體驗額度。

1. Choice
questions.decision
預覽 API 請求

預覽不包含 API 金鑰和驗證權杖;每個問題 ID 都對應同名答案。

{
  "model": "typesafe/jev-1.13",
  "state": {
    "input": "我的訂閱被扣了兩次費用,可以幫我處理嗎?"
  },
  "questions": {
    "decision": {
      "type": "choice",
      "instructions": "應該交給哪個團隊處理?",
      "criteria": {
        "billing": "付款與退款",
        "technical": "程式錯誤與整合問題",
        "general": "其他問題"
      }
    }
  }
}

每個帳號每天(UTC)可免費體驗 6 次,於 00:00 UTC 重設。全站每日容量有限。輸入會傳送至 OpenRouter;本站只儲存用量紀錄,不儲存輸入內容。

02 / 讀取結果

填寫後即可執行

執行案例後,每個問題都會回傳一份結構化答案:Choice 選出選項,Score 給出分數,Probability 回傳 0 到 1 之間的數值。

API 串接範例

把 Jev 串接到程式碼中。

表單會將文字作為 state.input,並傳送一個或三個具名問題。每個結果都可在 answers.<question_id> 下找到。

看懂請求與回傳欄位

請求中定義要判斷的問題,回應會依問題名稱回傳結果。以下說明範例中用到的 JSON 欄位。

請求欄位

model
模型 ID。範例指定 Jev 1.13,避免呼叫的版本不明確。
state
待判斷的文字或結構化資料;這裡是一則客服訊息。
questions
按名稱組織的多個問題;回傳的 answers 會沿用這些名稱。
<question_id>
例如 action 或 urgency 這類名稱;答案會沿用相同名稱。
type
回答類型:choice 選出一個選項,score 依等級評分,noul 判斷是或否。
instructions
希望模型回答的具體問題或判斷標準。
criteria
choice 的候選選項、score 的有序等級,或 noul 中 false 與 true 的含義。

回傳欄位

answers
每個問題的結果,名稱與請求中的 questions 對應。
choice
模型選中的選項鍵,也是機率最高的選項。
probabilities
各選項的機率分布,數值加總為 1。
confidence
根據機率分布計算的信心分數;它不等於所選選項的機率。
score
依各等級的機率加權得出的位置,可能落在兩個等級之間。
legend
將 score 的數值位置對應回你定義的等級說明。
noul
是非問題的 0 到 1 數值;越接近 1 越傾向於「是」。

同一份情境,分別測試 Choice、Score 與 Probability 三個問題。 每次執行會用掉一次當日體驗額度。 結果符合欄位格式,判斷也可能出錯。請用自己的樣本驗證,並依業務風險設定分流門檻。

端點

OpenRouter

本站 Playground 透過 OpenRouter 呼叫固定版本的 Jev。目前的價格與可用性請以模型頁面為準。

端點
POST https://openrouter.ai/api/alpha/decisions
model
typesafe/jev-1.13
API 金鑰
在伺服器端以 Bearer token 傳送 API 金鑰。
OpenRouter ↗
官方直連 API

TypeSafe

TypeSafe 提供自己的端點和 API 金鑰。官方快速入門使用 jev-latest,也示範一次傳送多個問題。

官方公開價格
$0.042每百萬輸入 token

輸出 token 免費。

符合條件的帳號可能獲得促銷額度;官方公開頁面未註明固定金額,實際餘額與有效期限以控制台為準。

端點
POST https://api.typesafe.ai/v1/systemone
model
jev-latest
API 金鑰
在伺服器端以 Bearer token 傳送 API 金鑰。
LangChain · Python

把 Jev 放進 LangChain Agent 的 Harness

Harness 負責協調 Agent 的模型呼叫與工具執行。在需要判斷的節點,Jev 讀取使用者訊息、待執行的工具呼叫或 Agent 狀態,回傳結構化結果;後續分支由程式碼決定,開放式工作仍交給聊天模型。

ModelRouterMiddlewarebefore_agent → wrap_model_call

執行開始前判斷最新的使用者請求,選定適合的模型,並在這次執行中沿用。選項、機率與信心值會留在 Agent 狀態中,供後續邏輯使用。

AutoModeMiddlewarewrap_tool_call

在指定工具執行前檢查呼叫。如果 Jev 判定風險較高或授權不足,中介軟體會阻止呼叫並回傳錯誤 ToolMessage;它不會自動請求人員核准。

TypeSafeClassifierChoice · Score · Noul

也可以在自訂中介軟體加入檢查點:把 Agent 訊息或狀態交給 TypeSafeClassifier,以 Choice、Score 或 Noul 提問,再由程式碼決定分支或交由人工複核。

LangChain · Python · ModelRouterMiddleware
# pip install "langchain-typesafe[experimental]" langchain-openai
# Set TYPESAFE_API_KEY and OPENAI_API_KEY on your server.
from langchain.agents import create_agent
from langchain_typesafe.experimental.middleware import (
    ModelChoice, ModelRouterMiddleware,
)

router = ModelRouterMiddleware(
    choices={
        "fast": ModelChoice(
            model="openai:gpt-5.6-terra",
            criteria="Simple lookups and extraction.",
        ),
        "powerful": ModelChoice(
            model="openai:gpt-6-astra",
            criteria="Complex reasoning and high-stakes decisions.",
        ),
    },
    instructions="Choose the least costly model that can do the task safely.",
)
agent = create_agent("openai:gpt-5.6-terra", middleware=[router])
result = agent.invoke({"messages": [{"role": "user", "content": "Summarize this log."}]})
print(result["model_route"].choice)

伺服器端 TypeScript

TypeScript · fetch
// Run on your server. Keep the API key out of browser code.
const apiKey = process.env.OPENROUTER_API_KEY;
if (!apiKey) throw new Error("Set OPENROUTER_API_KEY");

const response = await fetch("https://openrouter.ai/api/alpha/decisions", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + apiKey,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "typesafe/jev-1.13",
    state: {input: "A customer reports a duplicate charge."},
    questions: {
      team: {
        type: "choice",
        instructions: "Which team should handle this?",
        criteria: {
          billing: "Payments and refunds",
          technical: "Bugs and integrations"
        }
      },
      urgency: {
        type: "score",
        instructions: "How urgent is the issue?",
        criteria: ["Can wait", "Needs attention today", "Immediate action"]
      },
      escalate: {
        type: "noul",
        instructions: "Should a human review this first?",
        criteria: {false: "No review needed", true: "Review before acting"}
      }
    }
  })
});

if (!response.ok) throw new Error("Decision request failed");
const {answers} = await response.json();
console.log(answers.team.choice, answers.urgency.score, answers.escalate.noul);
讀取結果

三種問題,三種回傳形式

選擇程式碼所需的答案類型。一次送出多個問題時,每個問題 ID 都會收到獨立結果。

TypeSafe: Choice · Score · Noul ↗

Choice

choice · probabilities · confidence

模型選中的選項鍵,也是機率最高的選項。

Score

score · legend · probabilities · confidence

依各等級的機率加權得出的位置,可能落在兩個等級之間。

Noul

noul

是非問題的 0 到 1 數值;越接近 1 越傾向於「是」。

投入正式環境前

正式上線前,請用具代表性的客服案件測試、記錄模型版本,並將結果不確定或出錯代價高的情況交由人工審核。範例中的 0.8 只是示意門檻。

社群動態

用適合你的方式關注 Jev 生態。

透過持續更新的公開儲存庫,或不定期寄送的電子報精選,掌握新的 Jev 專案、System One 社群模型與實際應用案例。

持續公開更新

Jev AI Radar

面向開發者、指令碼與 AI Agent 的開源資料庫,內容可讀取、重複使用,也能追蹤歷次變更。

到 GitHub 按個 Star
低頻人工精選

電子報

不定期收到社群精選:值得關注的熱門專案、實用程式碼範例與 Jev 應用案例。

提交電子郵件即表示你同意接收 Jev AI Dev 不定期寄送的郵件。