mcpField
S
subconscious-dev

subconscious-dev

github.com/subconscious-systems开发052 次安装23 周前更新
代码仓库

关于 subconscious-dev

subconscious-dev 是兼容 OpenAI SDK 的推理服务,提供基于微调 Qwen-3.6 的聊天补全接口。适合通过 OpenAI 客户端调用模型的开发者,并支持工具调用、结构化输出、流式响应及推理开关。

主要功能

  1. 01兼容 OpenAI 聊天补全接口
  2. 02支持标准函数工具调用
  3. 03支持 JSON 与结构化输出
  4. 04支持 SSE 流式响应
  5. 05可配置思考模式

适用场景

  1. 01在现有 OpenAI SDK 应用中调用模型
  2. 02为生成流程提供函数工具定义
  3. 03生成符合指定 Schema 的 JSON
  4. 04为聊天界面处理流式输出

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/subconscious-systems/skills --skill subconscious-dev

安装后在 Claude Code 中输入/subconscious-dev确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api-reference.md
best-practices.md
examples.md
multimodal.md
structured-output.md
thinking.md
tools.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"}],
)

产品的全部接口就这些。本文其余部分将介绍如何更好地使用它。

重要背景 — 请先阅读

  1. 只有一个基础 URL。 https://api.subconscious.dev/v1。推理服务通过 Baseten 网关后面的 sglang 提供。端点:POST /chat/completions(主要端点)、POST /completions(旧版 OpenAI 文本补全)、GET /models。POST /v1/responses 虽然存在于 URL 空间中,但无法使用——无论输入格式如何,都会返回 sglang 错误。
  2. 只有一个模型。 subconscious/tim-qwen3.6-27b——经过微调的 Qwen-3.6,采用 fp8 量化。通过 GET /v1/models 获取完整的能力规格(没错,该端点确实存在)。
  3. 上下文长度: 根据公开仪表板/TIMRUN 的定位,达到数百万个 token。/v1/models 端点目前报告 context_length: 8192 和 max_completion_tokens: 5000——在此部署中,请将这些视为稳妥的运行时限制,而不是产品上限。若仪表板与 API 响应不一致,请以仪表板的说明为准,并在自己的工作负载上进行验证。
  4. 模态以文本为主:模型规格注明 input_modalities: ["text"],但实际使用中,许多图像来源(占位符、数据 URL)都能正常处理视觉输入。Wikipedia URL 则始终返回 500。音频、文件和视频块都会返回 400。完整说明请参阅 references/multimodal.md——视觉输入属于未记录但可用的功能,并非官方支持。
  5. 默认启用思考。 启用时,模型会在答案前附上一段名为“Here's a thinking process:”的说明(没有 <think> 标签,只是纯文本)。设置 chat_template_kwargs.enable_thinking: false 可关闭。此默认行为与 OpenAI/ChatGPT 相反。
  6. 根据模型规格,只有 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_formatjson_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 ...
403API 密钥无效检查 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 个 token257 个 token32×
"Capital of France one word"2 个 token176 个 token88×
"Explain quantum tunneling, 2 sentences"53 个 token600 个 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_format
  • references/multimodal.md — 视觉(支持数据 URL,有时支持 URL)、音频/文件/视频(均不支持)
  • references/best-practices.md — 生产环境模式、成本监控、重试
  • references/examples.md — 可运行的代码片段(Python、TypeScript、cURL)

资源

评论

支持 Markdown