应用开发开发教程
运行本地模拟
运行本地模拟:沿用平台当前公开 SDK 合同,区分本地模拟、联网调试与正式运行。
本地模拟不联网、不启动真实模型、不扣积分。它在本机回环地址启动一个短期 HTTP 服务,把与联网调试和中心运行相同的环境变量注入子进程。因此业务代码不需要为“本地模式”写另一套调用。
先创建 local_demo.py:
from jusp_sdk.runtime import RuntimeClient, RuntimeHttpClient
runtime = RuntimeHttpClient()
session_api = RuntimeClient(app_key="my-app")
try:
session = session_api.resolve_dev_session()
print(session.identity().account_id)
print(runtime.services())
reply = runtime.chat_completions({
"model": "local-chat",
"messages": [{"role": "user", "content": "你好"}],
})
print(reply["choices"][0]["message"]["content"])
finally:
runtime.close()
session_api.close()用 jusp app 启动:
jusp app dev --local --app-key my-app -- python local_demo.py本地 HTTP 模拟覆盖所有 SDK 公开运行面接口:服务发现、对话、向量、重排、OCR、语音转写、提示词优化、图片/视频/音频/文档异步任务、Job 查询、Asset 上传/读取、RuntimeSession 交换/解析和应用间授权。异步任务第一次查询为 running,第二次为 succeeded,便于验证轮询逻辑。
这里的“所有公开运行面接口”还包括 openapi()、models()、voices()、voice()、preview_admission() 和 head_asset()。它们同样经过本机 HTTP 请求、认证头、JSON 解析和错误映射,不是绕过 SDK 的 Python 假对象。创建应用、上传版本、导入镜像和审核属于会留下真实记录的控制面,不在模拟范围内;其离线校验分别由 jusp app inspect / validate / package 完成。
用 --scenario 验证错误分支:
| 场景 | 命令参数 | 预期 |
|---|---|---|
| 组织管理员 | --scenario success(默认) | 两个分组、三名成员的固定示例 |
| 普通组织成员 | --scenario organization_member | 身份解析成功,目录请求 403 |
| 无组织个人 | --scenario personal | 身份不含组织;Python SDK 调用目录前抛出 ValueError,直接 HTTP 请求则返回 403 |
| 会话过期 | --scenario expired_session | 身份解析 401 |
| 参数错误 | --scenario invalid | HTTP 400 |
| 积分不足 | --scenario insufficient_balance | HTTP 402 |
| 限流 | --scenario rate_limited | HTTP 429,带 Retry-After |
| 依赖失败 | --scenario dependency_error | HTTP 503 |
| 超时 | --scenario timeout | HTTP 504 |
| 幂等冲突 | --scenario idempotency_conflict | HTTP 409 |
| 异步任务失败 | --scenario async_failed | Job 返回 failed |
例如:
jusp app dev --local --scenario rate_limited -- python local_demo.py模拟器不会伪造开发者控制面中的创建应用、上传版本、上传镜像或审核;这些动作必须联网且保留真实记录。固定模拟文本只用于验证业务代码的请求、成功、失败和超时处理,不代表真实模型质量。