只会写 SAS、写完就停下的助手,交给您的只是看起来正确的东西。宏能否正常解析、合并是否取到了您预期的变量、PROC MEANS 返回的是 19 行还是 0 行——在程序真正运行之前,这些都无从得知。
过去,运行它意味着需要一份 SAS 授权和一次安装,而这恰恰是智能体所不具备的。Run API 解除了这一限制:一次 HTTP 调用即可执行代码,并返回模型真正能够推理的结构化结果。
生成、检查、运行、迭代——全流程机器可读。
模型编写 SAS——一个 DATA 步、一个 PROC、一个宏。不需要任何特殊处理:Jenner 接受标准 SAS 语法,助手本来就会写的代码就是能够运行的代码。
将脚本 POST 到 /v1/validate 即可只做解析检查。诊断信息会直接返回而不执行任何代码,因此智能体可以在浪费一次运行之前发现语法错误。
将脚本连同任意 CSV 或 Parquet 输入 POST 到 /v1/run。Jenner 会在沙箱容器中执行,并返回列表输出、NOTE/WARNING/ERROR 日志、退出码,以及程序生成的每个数据集和文件。
日志和诊断信息是结构化的反馈,而不是一张截图。智能体读取真实的错误、修改真实的那一行,然后再次运行——无需人工介入即可闭环。
对公开 API 的真实请求。无需密钥,无需配置。
curl -X POST https://api.jenneranalytics.com/v1/quick \
--data-binary @analysis.sas The MEANS Procedure
Variable N Mean Std Dev
-----------------------------------------------
bmi 19 17.8420103 1.4625169
-----------------------------------------------这段代码缺少一个分号。仅做解析的调用会直接指出问题,智能体便可以修好后继续。
data demo;
set sashelp.class /* <- missing semicolon */
bmi = weight / (height**2) * 703;
run;{
"valid": false,
"diagnostics": [
{ "severity": "error",
"message": "Unexpected token: Eq, expected Semi" }
]
}一次完整运行会返回列表输出、日志、退出码,以及程序生成的每个数据集及其行数,让智能体可以确认自己确实拿到了数据,而不是凭空假设。
{
"run_id": "r_c8679761197f4f9d8a3bc021...",
"status": "ok",
"exit_code": 0,
"output": "...formatted listing tables...",
"log": "NOTE: PROC MEANS statement used.",
"datasets": [ { "name": "demo", "row_count": 19 } ],
"files": [],
"diagnostics": [],
"duration_ms": 412,
"jenner_version": "..."
}基础 URL https://api.jenneranalytics.com/v1
| 端点 | 用途 |
|---|---|
POST/v1/run | 执行脚本,可附带数据输入。以 JSON 返回输出、日志、退出码、数据集、文件和诊断信息。 |
POST/v1/run/stream | 与 /v1/run 相同,但以 Server-Sent Events 流式返回,程序仍在运行时日志就会陆续到达。 |
POST/v1/quick | 一行命令即可搞定。传入原始脚本,返回纯文本列表输出——回答“这段 SAS 能跑吗?”的最快方式。 |
POST/v1/validate | 仅做解析的语法检查。返回诊断信息但不执行代码。宏不会展开,因此大量使用宏的失败仅供参考。 |
GET/v1/run/{run_id} | 获取已完成的运行、其文件,或数据集的预览与下载。结果保留一小时,且需要该次运行的访问令牌。 |
无需密钥即可开始。需要更高上限时再添加。
| 等级 | 身份验证 | 速率限制 | 超时时间 |
|---|---|---|---|
| 匿名 | 无需密钥 | 每个 IP 1,000 次请求/小时 | 30 秒 |
| Free | 邮箱注册 | 1,500 次请求/小时 | 60 秒 |
| Pro | API 密钥 | 10,000 次请求/小时 | 5 分钟 |
| Enterprise | API 密钥 | 自定义 | 自定义 |
它们背后是同一套执行引擎,因此智能体通过 API 验证过的代码,在有人打开时表现完全一致。