两条访问路径
第一条是 TypeSafe 官方 early-access API:在控制台获得访问资格和密钥,使用官方 typesafe-sdk。第二条是 Vercel AI Gateway 暴露的 typesafe-ai/jev 模型;它适合已经使用 AI Gateway 的项目,但请求方言、计费和可用能力应以网关页面为准。官方 Python SDK|Vercel 模型页
本教程先走官方 Python SDK,因为它直接呈现 Choice、Score 和 Noul。截至本页审阅日,我们尚未使用自己的有效密钥完成本地 Jev 调用;以下代码依据官方 SDK 形状整理,不冒充复现结果。
建立隔离环境
python -m venv .venv
source .venv/bin/activate
pip install typesafe-sdk
export TYPESAFE_API_KEY="[REDACTED]"
[REDACTED] 只是占位符。SDK 默认从环境变量 TYPESAFE_API_KEY 读取密钥。不要把真实值写进 Python、Markdown、截图或命令历史;本地可使用被 .gitignore 排除的 .env,CI 使用 GitHub Actions Secret。公开仓库提交前还应运行敏感信息扫描。
第一次 Choice
from typesafe_sdk import Choice, TypeSafeClient
state = {"task": "检查订单表中昨天开始出现的重复记录"}
with TypeSafeClient() as client:
response = client.system_one(
state=state,
questions={
"route": Choice(
instructions="哪个执行器最适合处理这项任务?",
criteria={
"search": "检索外部资料",
"code": "修改或调试代码",
"database": "查询或检查数据库",
"human_review": "风险或信息不足,需要人工判断",
},
)
},
)
print(response.choices["route"].choice)
先检查返回结构与概率,再决定业务阈值。不要因为 SDK 给出了合法枚举,就立即自动执行高风险工具。
Score 与 Noul
Score 表达有序程度,Noul 表达一个条件成立的概率。官方 SDK 示例形状如下:
from typesafe_sdk import Noul, Score
questions = {
"risk": Score(
instructions="这项操作的风险有多高?",
criteria=["low", "medium", "high"],
),
"needs_human": Noul(
instructions="这项操作是否必须由人工复核?"
),
}
# system_one 调用后:
# response.scores["risk"].score
# response.nouls["needs_human"].noul
不要用 Score 代替互斥分类,也不要把接近 0.5 的 Noul 理解为“中等程度”;它表示是与否接近不确定。
失败必须是正常路径
程序启动时检查 TYPESAFE_API_KEY 是否存在,缺失就明确退出。网络调用应设置合理超时;超时、限额或服务不可用时,回退到规则、现有结构化 LLM 或人工复核,而不是默认放行。
答案空间也需要本地校验:候选不能为空,标签含义不能重叠,必须保留 human_review 或 unknown。若返回概率不足以达到你的阈值,应记录为拒答,而不是强行选择最高项。
在生产接入前记录模型版本、request id、延迟、估算成本和脱敏后的输入标识。不要记录密钥、个人信息、公司机密或可逆推出原文的完整 trace。等我们拿到 API Key 后,下一步会把这里的最小请求固定为可执行 smoke test,并把真实运行状态更新为“本地复现”。