关于 subconscious-dev
subconscious-dev 是兼容 OpenAI SDK 的推理服务,提供基于微调 Qwen-3.6 的聊天补全接口。适合通过 OpenAI 客户端调用模型的开发者,并支持工具调用、结构化输出、流式响应及推理开关。
主要功能
- 01兼容 OpenAI 聊天补全接口
- 02支持标准函数工具调用
- 03支持 JSON 与结构化输出
- 04支持 SSE 流式响应
- 05可配置思考模式
适用场景
- 01在现有 OpenAI SDK 应用中调用模型
- 02为生成流程提供函数工具定义
- 03生成符合指定 Schema 的 JSON
- 04为聊天界面处理流式输出
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ subconscious-systems/ skills --skill subconscious-dev安装后在 Claude Code 中输入/subconscious-dev确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api-reference.mdbest-practices.mdexamples.mdmultimodal.mdstructured-output.mdthinking.mdtools.md详细介绍
Subconscious 聊天补全
Subconscious 提供兼容 OpenAI SDK 的推理服务,基于微调后的 Qwen-3.6,并通过 sglang 提供服务。将 OpenAI 客户端指向我们的基础 URL 即可使用;除一个控制推理的参数外,它支持标准 OpenAI 字段。
整个产品,6 行说明
from openai import OpenAI
client = OpenAI(
base_url="https://api.subconscious.dev/v1",
api_key="sky_...", # or set SUBCONSCIOUS_API_KEY
)
resp = client.chat.completions.create(
model="subconscious/tim-qwen3.6-27b",
messages=[{"role": "user", "content": "Hello"}],
)
产品的全部接口就这些。本文其余部分将介绍如何更好地使用它。
重要背景 — 请先阅读
- 只有一个基础 URL。
https://api.subconscious.dev/v1。推理服务通过 Baseten 网关后面的 sglang 提供。端点:POST /chat/completions(主要端点)、POST /completions(旧版 OpenAI 文本补全)、GET /models。POST /v1/responses虽然存在于 URL 空间中,但无法使用——无论输入格式如何,都会返回 sglang 错误。 - 只有一个模型。
subconscious/tim-qwen3.6-27b——经过微调的 Qwen-3.6,采用 fp8 量化。通过GET /v1/models获取完整的能力规格(没错,该端点确实存在)。 - 上下文长度: 根据公开仪表板/TIMRUN 的定位,达到数百万个 token。
/v1/models端点目前报告context_length: 8192和max_completion_tokens: 5000——在此部署中,请将这些视为稳妥的运行时限制,而不是产品上限。若仪表板与 API 响应不一致,请以仪表板的说明为准,并在自己的工作负载上进行验证。 - 模态以文本为主:模型规格注明
input_modalities: ["text"],但实际使用中,许多图像来源(占位符、数据 URL)都能正常处理视觉输入。Wikipedia URL 则始终返回 500。音频、文件和视频块都会返回 400。完整说明请参阅references/multimodal.md——视觉输入属于未记录但可用的功能,并非官方支持。 - 默认启用思考。 启用时,模型会在答案前附上一段名为“Here's a thinking process:”的说明(没有
<think>标签,只是纯文本)。设置chat_template_kwargs.enable_thinking: false可关闭。此默认行为与 OpenAI/ChatGPT 相反。 - 根据模型规格,只有
temperature和stop会作为采样参数生效。top_p、seed、n、frequency_penalty、logit_bias等其他字段虽然会返回 200,但 Baseten/sglang 会静默丢弃。
配置
# .env
SUBCONSCIOUS_API_KEY=sky_yNZq...
OpenAI SDK 默认读取 OPENAI_API_KEY——请显式传入 api_key=,或将 OPENAI_API_KEY 设置为你的 Subconscious 密钥。不要使用真实的 OpenAI 密钥访问我们的基础 URL。
身份验证
Authorization: Bearer <SUBCONSCIOUS_API_KEY>
| 场景 | 状态 |
|---|---|
完全没有 Authorization 标头 | 401 |
| 标头存在,但密钥无效 | 403 |
| 密钥有效 | 200 |
模型遵循的内容
控制面板宣传 TIM-Qwen3.6-27B 具备:
- 数百万 token 的上下文
- 前沿级 Agent 性能
- 基础模型计算量的 75%
- 持续吞吐量提升 50%
这些是产品层面的宣传内容,应视为权威信息。
GET /v1/models 返回当前运行时快照,范围较窄:
{
"id": "subconscious/tim-qwen3.6-27b",
"context_length": 8192,
"max_completion_tokens": 5000,
"quantization": "fp8",
"supported_sampling_parameters": ["temperature", "stop"],
"supported_features": ["tools", "json_mode", "structured_outputs", "reasoning"],
"input_modalities": ["text"],
"output_modalities": ["text"]
}
确实会影响输出的标准 OpenAI 请求字段:
| 字段 | 说明 |
|---|---|
model | 必填。subconscious/tim-qwen3.6-27b。 |
messages | 必填。角色:system / user / assistant / tool。developer 和 function(已弃用)角色会返回 400。内容为字符串。 |
temperature | 受支持。已验证:temperature: 0 在多次调用中会产生相同输出。 |
stop | 受支持。停止序列数组。会设置 finish_reason: "stop"。 |
max_tokens / max_completion_tokens | 硬性上限;已验证会截断输出。最大值为 5000。 |
n | 受支持——一次批量调用会返回 n 个选项。 |
stream | 为 true 时使用 SSE。 |
stream_options | {include_usage: true} 会输出最终用量块。 |
tools | 仅支持标准 OpenAI function 工具。较新的 custom 工具类型会返回 400。 |
tool_choice | 四种模式均可使用:"auto"(默认)、"none"、"required"、{type: "function", function: {name}}。 |
response_format | json_schema 和 json_object 两种模式均可使用。 |
reasoning_effort | 会验证枚举值:接受 none / low / medium / high。minimal 和 xhigh 会返回 400。对输出的影响尚未验证——这是 Qwen 模型,并非 o 系列推理模型。 |
接受但会静默丢弃/可能被忽略的字段(已验证会返回 200;不在模型的 supported_sampling_parameters 中):
- 采样:
top_p、top_k、seed、frequency_penalty、presence_penalty、logit_bias、logprobs、top_logprobs、parallel_tool_calls - 身份/缓存:
user、safety_identifier、prompt_cache_key、prompt_cache_retention、service_tier(可取auto/default/flex/priority) - 存储:
store、metadata - 输出配置:
modalities(此字段用于控制输出模态——例如["text", "audio"]——而模型只输出文本,因此不会生成音频;通过image_url内容块输入视觉内容是另一回事,且确实可用——参见references/multimodal.md)、audio(音频输出的语音/格式配置——不支持音频输出)、verbosity、prediction、web_search_options - 已弃用:
function_call、functions(改用tool_choice和tools)
如果你的应用依赖这些字段实际影响行为,那么在 Subconscious 上将无法实现。
会被拒绝并返回 400 的内容:
- 自定义工具类型(
{type: "custom", ...})——仅支持function工具 developer角色消息function角色消息(已弃用)reasoning_effort=minimal和reasoning_effort=xhigh(其他 4 个枚举值通过架构验证)
Subconscious 专属的唯一调节项:chat_template_kwargs.enable_thinking
通过 OpenAI SDK 的 extra_body 传入:
extra_body={
"chat_template_kwargs": {"enable_thinking": False},
}
- 默认值(开启):模型会先输出一段元推理开场白,内容类似“下面是思考过程:”,后接编号步骤,再给出实际答案。不会用标签包裹——所有内容都是
message.content中的纯文本。 enable_thinking: false:模型会跳过开场白,直接作答。
对于大多数面向用户的聊天/结构化输出场景,建议设为 false。参见 references/thinking.md。
流式传输时,stream_options.include_usage: true 也很有用——此字段属于标准 OpenAI,而非 Subconscious 专属。
工具 — 标准 OpenAI 函数调用
仅支持标准 OpenAI 工具格式:
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather in a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
resp = client.chat.completions.create(
model="subconscious/tim-qwen3.6-27b",
messages=[{"role": "user", "content": "Weather in Boston?"}],
tools=tools,
extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
tool_calls = resp.choices[0].message.tool_calls
# [{ id: "call_...", function: { name: "get_weather", arguments: '{"city":"Boston"}' } }]
模型会生成一个 tool_calls 数组;你的代码执行函数,然后发送一条 role: "tool" 的后续消息,其中包含结果。标准 OpenAI 工具调用循环——在此端点上,Subconscious 不会在服务端执行工具。
此端点不支持 Subconscious 专用的工具类型(type: "platform"、MCP、基于 URL 的函数工具)——这些类型会因缺少 function 而返回 400 验证错误。
结构化输出
schema = {
"type": "object",
"properties": {
"sentiment": {"type": "string", "enum": ["positive", "neutral", "negative"]},
"confidence": {"type": "number"},
},
"required": ["sentiment", "confidence"],
}
resp = client.chat.completions.create(
model="subconscious/tim-qwen3.6-27b",
messages=[{"role": "user", "content": "Analyze: 'works great'"}],
response_format={
"type": "json_schema",
"json_schema": {"name": "sentiment", "schema": schema},
},
extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
import json
result = json.loads(resp.choices[0].message.content)
json_mode 和 structured_outputs 都包含在 supported_features 中。将 enable_thinking: false 时,会得到纯净的 JSON;启用思考时,解析前需要去掉前面的文本说明。
流式传输
stream = client.chat.completions.create(
model="subconscious/tim-qwen3.6-27b",
messages=[{"role": "user", "content": "Haiku about Boston."}],
stream=True,
stream_options={"include_usage": True},
extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
for chunk in stream:
delta = chunk.choices[0].delta if chunk.choices else None
if delta and delta.content:
print(delta.content, end="", flush=True)
if chunk.usage:
print(f"\n[in={chunk.usage.prompt_tokens} out={chunk.usage.completion_tokens}]")
设置 include_usage: true 时,[DONE] 之前的最后一个数据块会包含 usage。这是标准 OpenAI SSE 格式。
状态码
| 状态码 | 含义 | 操作 |
|---|---|---|
| 200 | 正常 | 读取响应正文 |
| 400 | 请求正文格式错误(缺少必填字段、工具格式错误) | 修正请求 |
| 401 | 缺少身份验证标头 | 添加 Authorization: Bearer ... |
| 403 | API 密钥无效 | 检查 SUBCONSCIOUS_API_KEY |
| 404 | 未知模型 | 使用 subconscious/tim-qwen3.6-27b |
| 429 | 请求过多,触发速率限制 | 等待一段时间,并遵循 Retry-After |
| 500 | 服务端 / 上游错误 | 使用指数退避重试 |
错误响应正文格式:
// sglang validation error
{"error": {"code": 400, "message": "...", "object": "error", "param": null, "type": "Bad Request"}}
// Simpler errors (auth, missing model)
{"error": "string"}
OpenAI SDK 会抛出带类型的异常(AuthenticationError、RateLimitError、BadRequestError 等)——优先使用这些异常,而不是解析响应正文。
最佳实践
- 聊天 / 结构化输出 / 分类任务默认设置
enable_thinking: false。 大幅降低延迟,输出也更简洁。 - 对于复杂推理任务,保持
enable_thinking: true(研究综合、代码生成、规划)。 - 每次调用都设置
max_tokens。 服务端没有硬性默认值;生成失控会产生费用。 - 对于感知延迟超过 1 秒的任何面向用户的界面,使用
stream=True。 - 在流式调用中添加
stream_options.include_usage: true以跟踪费用。 - 不要依赖
top_p、seed、frequency_penalty等参数。 请求会返回 200,但这些参数不会生效。 - 合理限制消息历史长度。 控制面板声称支持数百万个 token;此部署的
/v1/models报告为 8192。请测试实际需要的长度——较长的提示词可能会被静默截断。 - 支持视觉功能,但没有文档说明。 数据 URL(
data:image/png;base64,...)是可靠的方式;Wikipedia URL 始终返回 500。音频 / 文件 / 视频肯定无法使用(400/500)。参见references/multimodal.md。
TypeScript / Node
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://api.subconscious.dev/v1',
apiKey: process.env.SUBCONSCIOUS_API_KEY!,
});
const resp = await client.chat.completions.create({
model: 'subconscious/tim-qwen3.6-27b',
messages: [{ role: 'user', content: 'Hello' }],
// @ts-expect-error chat_template_kwargs is a Subconscious extension
chat_template_kwargs: { enable_thinking: false },
});
cURL
curl https://api.subconscious.dev/v1/chat/completions \
-H "Authorization: Bearer $SUBCONSCIOUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "subconscious/tim-qwen3.6-27b",
"messages": [{"role": "user", "content": "ping"}],
"max_tokens": 50,
"chat_template_kwargs": {"enable_thinking": false}
}'
定价
根据公开控制面板 https://www.subconscious.dev/platform(未经实际账单验证):
- 输入:$0.50 / 1M 个 token
- 输出:$3.50 / 1M 个 token
GET /v1/models 在其 pricing 字段中返回零值——这是占位值,并非实际费率。实际定价请查看控制面板 / 文档。
思考 token 计入输出。测量结果(每项运行 3 次取中位数,2026-05-22):
| 提示词 | 关闭 | 开启 | 比率 |
|---|---|---|---|
| "Hello" | 8 个 token | 257 个 token | 32× |
| "Capital of France one word" | 2 个 token | 176 个 token | 88× |
| "Explain quantum tunneling, 2 sentences" | 53 个 token | 600 个 token(达到上限) | 11× |
| "Solve 17*23 step by step" | 600(达到上限) | 600(达到上限) | 达到上限时约为 1× |
对于简短提示词,开启思考会占据主要费用。对于长输出提示词,两种模式都可能达到 max_tokens 上限。
注意:/v1/models 当前返回的 pricing 字段为零值——该端点用于提供模型规格,而非计费信息。定价请查看控制面板 / 文档。
参考资料
references/api-reference.md— 端点、完整的请求/响应格式、错误格式references/thinking.md— 思考模式的实际行为;默认启用;去除前导内容references/tools.md— OpenAI 函数调用模式;完整的工具调用流程;接受与拒绝的内容references/structured-output.md— 使用 JSON Schema + Pydantic/Zod 的response_formatreferences/multimodal.md— 视觉(支持数据 URL,有时支持 URL)、音频/文件/视频(均不支持)references/best-practices.md— 生产环境模式、成本监控、重试references/examples.md— 可运行的代码片段(Python、TypeScript、cURL)
资源
- API 基础 URL:https://api.subconscious.dev/v1
- 模型规范:
GET https://api.subconscious.dev/v1/models - 控制面板:https://www.subconscious.dev/platform
- 体验场:https://www.subconscious.dev/playground
- 文档:https://docs.subconscious.dev
- 定价:https://docs.subconscious.dev/pricing