文档

5 分钟跑通第一条续写请求。服务地址 https://api.elisnovel.com,鉴权用 Authorization: Bearer <key>。

1. 快速开始

一条 curl

curl -N https://api.elisnovel.com/v1/continue \
  -H "Authorization: Bearer $ELIS_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "p1":   "第一章 雪夜\n他推开门,风雪灌了进来。",
    "p2":   "第二章 山门\n雪还在下。",
    "skel": "他走进山门,看见【一个人影】站在台阶尽头。",
    "stream": true
  }'

-N 是必须的(关掉 curl 的缓冲,否则你会以为卡住了)。

Python(边收边拼接)

import json, requests

resp = requests.post(
    "https://api.elisnovel.com/v1/continue",
    headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"},
    json={"p1": p1, "p2": p2, "skel": skel, "stream": True},
    stream=True,          # 必须
    timeout=(10, 600),    # 连接 10s,读 600s(一章可能跑到 6 分钟)
)
resp.raise_for_status()

text = ""
for raw in resp.iter_lines(decode_unicode=True):
    if not raw or raw.startswith(":"):        # 空行 / 心跳注释帧 → 跳过
        continue
    if not raw.startswith("data: "):
        continue
    payload = raw[6:].strip()
    if payload == "[DONE]":
        break
    ev = json.loads(payload)
    if "choices" not in ev:                    # queued_ms / error 之类的信息帧
        if ev.get("truncated"):
            print("⚠️", ev.get("note"))
        continue
    for ch in ev["choices"]:
        piece = (ch.get("delta") or {}).get("content")
        if piece:
            text += piece
            print(piece, end="", flush=True)

print("\n共", len(text), "字")

2. 请求与响应

请求体

字段类型说明
p1string必填。上一章正文
p2string必填。本章前文
skelstring必填。本章骨架,用 【】 标出要展开的点
streambool必须是 true。公网只提供流式
modelstring可选,默认 elisnovel-v4-32g

响应(SSE)

逐帧 data: {...},最后 data: [DONE]。另外会有:

3. 错误码

情况表现怎么办
key 无效 / 被禁HTTP 401换 key
没传 stream: trueHTTP 400 stream_required加 "stream": true
输入超过 8192 tokensHTTP 400缩短 p1/p2,不会静默截断
余额不足HTTP 402充值 / 兑换卡密
排队满了HTTP 429(带 Retry-After)等一会儿重试
排队超时已 200 开流,流内一帧 {"error":{"code":"queue_timeout"}} + [DONE]重试或错峰
撞 8K 上限正常结束 + truncated: true正文是完整的,只是没自然收尾

4. 计费与限流

5. 常见问题

能不能不用流式?

公网不行。一章要写 1~6 分钟,一次性返回过不了 CDN 的首字节限制,而且中途断了你会什么都拿不到。 流式至少保证"已经写出来的部分一定到手"。

为什么会有 : 这样的空帧?

SSE 允许注释帧,用来保活。所有标准解析器都会忽略它。如果你的解析器报错,说明它没按 SSE 规范实现。

会不会返回不完整的内容?

会,两种情况都会明确告知而不是静默丢弃:撞 8K 上限(truncated:true, finish:"length")、 上游中断(finish:"error",正文是已经写出来的那部分)。

卡密怎么用?

curl -X POST https://api.elisnovel.com/v1/redeem \
  -H "Authorization: Bearer $ELIS_KEY" \
  -H "Content-Type: application/json" \
  -d '{"code":"DJ-XXXX-XXXX"}'

返回 {"ok":true,"usd":5.0,"balance_usd":…}。一张卡密只能用一次。

注意:模型只吃三段式,不接受对话历史。messages 那类 OpenAI 写法在这里没有意义。