拾一安 AI

开发者文档

接入你的本地 AI 接口

先创建本站密钥,再通过统一的文本接口完成一次模拟调用。

这是个人开发测试环境

模拟供应商会明确返回 simulation: true;它验证接口与账本流程,不会调用真实模型。测试额度不是现金。

1. 获取接口地址和密钥

在控制台的 API 密钥页创建密钥并安全保存。下方地址根据你当前访问的网站生成。

https://ai.shiyian.com.cn/v1

模型目录:GET /v1/models;文本调用:POST /v1/chat/completions。两者都使用 Authorization: Bearer YOUR_API_KEY。

2. 确认模型状态

初始模拟模型 ID 为 mock-text-1。如果管理员更改配置,以实时模型目录为准。未配置或未验证的真实模型不可调用。

Windows PowerShell 示例

把密钥仅保存在当前进程的环境变量中,再运行示例。不要把真实密钥写进共享文件或提交到 Git。

PowerShell · 普通响应
# 请先在当前进程安全设置 LOCAL_AI_API_KEY;不要提交真实值。
if (-not $env:LOCAL_AI_API_KEY) { throw "请先设置 LOCAL_AI_API_KEY" }
$baseUrl = "https://ai.shiyian.com.cn/v1"
$headers = @{
  Authorization = "Bearer $env:LOCAL_AI_API_KEY"
  "Idempotency-Key" = [guid]::NewGuid().ToString()
}
$body = @{
  model = "mock-text-1"
  messages = @(@{ role = "user"; content = "你好,请介绍这个测试接口。" })
  max_tokens = 256
  stream = $false
} | ConvertTo-Json -Depth 5
Invoke-RestMethod -Uri "$baseUrl/chat/completions" -Method Post `
  -Headers $headers -ContentType "application/json; charset=utf-8" `
  -Body ([System.Text.Encoding]::UTF8.GetBytes($body))

Python 示例

仅使用 Python 标准库。示例从环境变量读取密钥,不需要额外 SDK。

Python · 普通响应
import json
import os
import uuid
from urllib.request import Request, urlopen
from urllib.error import HTTPError

base_url = "https://ai.shiyian.com.cn/v1"
api_key = os.environ["LOCAL_AI_API_KEY"]
request_id = str(uuid.uuid4())  # 同一次调用遇到疑问时保留,不自动换号重试
body = {
    "model": "mock-text-1",
    "messages": [{"role": "user", "content": "你好,请介绍这个测试接口。"}],
    "max_tokens": 256,
    "stream": False,
}
req = Request(base_url + "/chat/completions",
    data=json.dumps(body).encode("utf-8"),
    headers={"Content-Type": "application/json",
             "Authorization": "Bearer " + api_key,
             "Idempotency-Key": request_id}, method="POST")
try:
    with urlopen(req, timeout=90) as response:
        print("请求编号:", response.headers.get("X-Request-ID"))
        print(json.loads(response.read()))
except HTTPError as exc:
    print("请求编号:", exc.headers.get("X-Request-ID"))
    print(exc.read().decode("utf-8"))

逐步接收 SSE 响应

将 stream 改为 true,响应类型为 text/event-stream。按空行分隔事件,读取每个 data: JSON 中的 choices[0].delta.content,遇到 [DONE] 结束。末尾用量事件包含 usage 与 usage_source。

事件可能横跨多次网络读取,需保留未读完整的片段,并使用流式 UTF-8 解码。不要把一次网络读取当成一个完整事件。可以在文本调试台直接验证。

连接停止不代表调用未发生

取消、超时或断流后先查请求记录。待对账状态会保留预留,不自动退回,也不自动重新调用。相同 Idempotency-Key 不会再次发送;重复请求返回 409 和原请求编号,不回放聊天正文。

理解错误与计价

状态码处理方式
400 / 413 / 415检查字段、请求体积与 JSON 类型。
401 / 403检查密钥、会话或页面安全校验;不要把密钥放到 URL 中。
402 / 409 / 429检查额度、重复请求、限额及频率。先查看错误中的 code。
502 / 503 / 504保留请求编号,查看请求记录;不要盲目自动重试。

错误格式为 {"error":{"message":"说明","type":"类型","code":"错误码","request_id":"请求编号"}}。响应头含 X-Request-ID。SSE 错误通过数据事件返回,随后发送 [DONE]。

金额由后端以整数微单位记录:1 测试额度单位 = 1,000,000 微单位。先预留、再按用量结算。模拟供应商的真实上游成本为 0,本站模拟计价独立记录。未知用量或成本显示未知。

当前能力与限制

  • 提供文本模型目录、Chat Completions 和独立的图片/视频任务接口;不代表支持所有 OpenAI 接口。
  • 文本支持普通响应与 SSE;图片/视频工作台支持单次任务、状态查询与结果链接。音频、工具调用和自定义上游 URL 尚未开放。
  • 单次最多输出 1024 tokens;账号并发与请求频率以控制台当前配置为准。
  • 注册需要管理员发放的一次性邀请码,并由部署配置控制是否开放;邮件找回、真实充值、提现与对外收费尚未开放。
  • 部分免费文本模型的普通响应/SSE 与 Kolors 图片生成已完成真实验收;视频已适配但尚未完成真实生成验收。真实调用仍受开关、预算和实时目录状态控制。
  • 仅记录排障和计价元数据;不默认存储完整提示词与回答。
  • 本机服务会受关机、睡眠、断电、网络中断影响。当前页面不代表公网可用性验收。

登录你的控制台

使用你的账户登录。还没有账号?凭邀请码注册。

注册需要管理员发放的一次性邀请码。邮件找回尚未开放,忘记密码请联系管理员重置。