Qwythos-9B 怎么用?vLLM、SGLang 和 Transformers 部署指南

Qwythos-9B-Claude-Mythos-5-1M 是 Empero AI 发布的 9B 推理模型,基于 Qwen3.5-9B,主打 1M 上下文、原生工具调用、长文本推理和 Apache-2.0 许可。本文整理模型特点、vLLM/SGLang 部署方式、采样参数和使用注意事项。

Qwythos-9B-Claude-Mythos-5-1M 是 Empero AI 在 Hugging Face 上发布的 9B 推理模型。

模型地址:empero-ai/Qwythos-9B-Claude-Mythos-5-1M

它最吸引人的几个点很直接:

  • 基于 Qwen3.5-9B
  • 9B 参数规模;
  • Apache-2.0 许可;
  • 默认配置 1,048,576 token 上下文;
  • 支持 Qwen3.5 风格的 function calling;
  • 面向长文本推理、工具调用和 agentic 场景;
  • 模型卡给出了 vLLM、SGLang、Transformers 的使用方式。

如果你正在找一个小体量、长上下文、能接工具的开权重模型,Qwythos-9B 值得看一眼。

先说适合谁

Qwythos-9B 不太像一个普通聊天模型。

它更适合这些场景:

  • 长文档分析;
  • 多文件代码库阅读;
  • 长链路 agent 任务;
  • 带工具调用的问答;
  • 需要 Python 执行器或搜索工具辅助验证的任务;
  • 研究、推理、数学、代码和技术文档处理;
  • 想测试 1M context 的本地或私有部署。

不太适合的场景:

  • 只想轻量聊天;
  • 没有 GPU 资源;
  • 不想处理 <think> 推理块;
  • 想要开箱即用的消费级聊天体验;
  • 对安全边界没有额外应用层控制。

模型卡里明确提到它是一个 reasoning model,回答会先出现 <think> 推理块,再给最终答案。如果你要把它接到面向用户的产品里,需要自己处理或隐藏这部分。

模型核心信息

按 Hugging Face 模型卡信息,Qwythos-9B 的基础信息大致如下:

项目 信息
模型名 empero-ai/Qwythos-9B-Claude-Mythos-5-1M
发布方 Empero AI
基座 Qwen/Qwen3.5-9B
参数规模 9B
格式 Safetensors
许可证 Apache-2.0
上下文 1,048,576 tokens
特点 reasoning、function calling、long-context、agentic

它不是简单的 prompt 包装,而是 full-parameter fine-tune。模型卡描述中提到,训练数据包含超过 5 亿 token 的 Claude Mythos / Claude Fable traces,以及 Empero AI 内部工具 rethink 生成的 chain-of-thought 数据。

这类模型的使用重点不是“它会不会聊天”,而是看它能不能在复杂上下文里持续推理、调用工具并修正答案。

1M 上下文意味着什么

Qwythos-9B 模型卡中最醒目的能力,是默认启用 YaRN rope scaling,把上下文扩展到:

1
1,048,576 tokens

也就是约 1M token。

配置里包含类似这样的参数:

1
2
3
4
5
6
7
8
9
"rope_parameters": {
  "rope_type": "yarn",
  "factor": 4.0,
  "original_max_position_embeddings": 262144,
  "mrope_interleaved": true,
  "mrope_section": [11, 11, 10],
  "rope_theta": 10000000
},
"max_position_embeddings": 1048576

这对几个场景很有吸引力:

  • 把大型代码库直接塞进上下文;
  • 处理 10 到 20 篇论文加笔记;
  • 长时间 agent 任务中保留工具输出;
  • 多文档交叉分析;
  • 长 traceback、日志、API 返回内容的连续推理。

不过要现实一点:1M context 不等于你随便一张消费级显卡就能舒服跑满。

模型卡也提示,完整 1M window 更适合 tensor parallel 多 GPU 或 aggressive KV-cache offload。单张高端卡可能更适合 256k 到 512k 级别,具体还要看后端、量化、KV cache 和显存。

用 vLLM 部署

如果你已经习惯 OpenAI-compatible API,vLLM 是最直接的方式之一。

安装:

1
pip install vllm

启动模型:

1
vllm serve "empero-ai/Qwythos-9B-Claude-Mythos-5-1M"

如果要显式指定接近 1M 的上下文,可以参考模型卡里的写法:

1
vllm serve empero-ai/Qwythos-9B-Claude-Mythos-5-1M --max-model-len 1010000

调用接口:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
curl -X POST "http://localhost:8000/v1/chat/completions" \
  -H "Content-Type: application/json" \
  --data '{
    "model": "empero-ai/Qwythos-9B-Claude-Mythos-5-1M",
    "messages": [
      {
        "role": "user",
        "content": "What is the capital of France?"
      }
    ]
  }'

如果启动时报显存不足,先不要急着上 1M。可以先用更小的 --max-model-len 测通,例如 32k、64k、128k,再逐步往上加。

用 SGLang 部署

SGLang 也是模型卡中给出的部署方式。

安装:

1
pip install sglang

启动:

1
2
3
4
python3 -m sglang.launch_server \
  --model-path "empero-ai/Qwythos-9B-Claude-Mythos-5-1M" \
  --host 0.0.0.0 \
  --port 30000

如果要尝试长上下文:

1
2
3
SGLANG_ALLOW_OVERWRITE_LONGER_CONTEXT_LEN=1 python -m sglang.launch_server \
  --model-path empero-ai/Qwythos-9B-Claude-Mythos-5-1M \
  --context-length 1010000

调用:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
curl -X POST "http://localhost:30000/v1/chat/completions" \
  -H "Content-Type: application/json" \
  --data '{
    "model": "empero-ai/Qwythos-9B-Claude-Mythos-5-1M",
    "messages": [
      {
        "role": "user",
        "content": "What is the capital of France?"
      }
    ]
  }'

Docker 方式模型卡也给了示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
docker run --gpus all \
  --shm-size 32g \
  -p 30000:30000 \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  --env "HF_TOKEN=<secret>" \
  --ipc=host \
  lmsysorg/sglang:latest \
  python3 -m sglang.launch_server \
    --model-path "empero-ai/Qwythos-9B-Claude-Mythos-5-1M" \
    --host 0.0.0.0 \
    --port 30000

部署前注意:如果模型需要访问 gated 资源或私有缓存,HF_TOKEN 要配置好。

用 Transformers 加载

模型卡给出的 text-only 推理示例使用 AutoModelForImageTextToTextAutoTokenizer

示例结构大致是:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import torch
from transformers import AutoModelForImageTextToText, AutoTokenizer

model_id = "empero-ai/Qwythos-9B-Claude-Mythos-5-1M"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(
    model_id, dtype="bfloat16", device_map="auto"
)

messages = [
    {
        "role": "user",
        "content": "Explain how tool calling helps a reasoning model verify exact facts."
    }
]

text = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tok(text, return_tensors="pt").to(model.device)

out = model.generate(
    **inputs,
    max_new_tokens=16384,
    do_sample=True,
    temperature=0.6,
    top_p=0.95,
    top_k=20,
    repetition_penalty=1.05,
)

print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))

这里有两个重点:

  1. 模型回答会包含 <think>...</think>
  2. 推荐给足 max_new_tokens,模型卡建议 16384。

如果你是做产品输出,一般要在后处理阶段把 <think> 部分过滤掉,只展示最终回答。

推荐采样参数

模型卡给出的推荐参数是:

1
2
3
4
5
6
7
8
gen_kwargs = dict(
    do_sample=True,
    temperature=0.6,
    top_p=0.95,
    top_k=20,
    repetition_penalty=1.05,
    max_new_tokens=16384,
)

不要一上来用 greedy decoding,也不要把 temperature 压得太低。

模型卡里提到,在 greedy 或很低温度(T <= 0.3)下,这类 reasoning model 可能进入重复循环。默认按模型卡参数跑,通常更稳。

工具调用怎么理解

Qwythos-9B 支持 Qwen3.5 风格的 function calling。

模型卡描述中提到,可以把 tools=[...] 传给 chat template,模型会输出符合 Qwen3.5 规范的 <tool_call> block。

一个简化的工具定义结构类似:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
TOOLS = [
    {
        "type": "function",
        "function": {
            "name": "python_executor",
            "description": "Execute Python code and return stdout.",
            "parameters": {
                "type": "object",
                "properties": {
                    "code": {"type": "string"}
                },
                "required": ["code"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "web_search",
            "description": "Search the web for current facts and citations.",
            "parameters": {
                "type": "object",
                "properties": {
                    "query": {"type": "string"},
                    "max_results": {"type": "integer"}
                },
                "required": ["query"]
            }
        }
    }
]

模型会生成类似 <tool_call> 的内容,你的应用需要解析它,执行工具,再把结果喂回模型。

也就是说,Qwythos-9B 的工具调用不是“模型自己真的联网”。

你需要提供工具执行环境。

对硬件的现实预期

9B 参数听起来不大,但 1M context 是另一个维度的压力。

部署时需要分别看:

  • 模型权重显存;
  • KV cache;
  • 上下文长度;
  • batch size;
  • 并发数;
  • 是否使用量化;
  • 是否做 KV cache offload;
  • 后端是 vLLM、SGLang 还是 Transformers。

如果你只是想试模型能力,可以先从较小上下文开始:

1
32k -> 64k -> 128k -> 256k

确认稳定后再尝试更长上下文。

不要把 1M context 理解成默认每次都要跑满。更实际的做法是:只有在代码库分析、多论文汇总、长 agent 轨迹这类任务里,才逐步拉高上下文。

使用限制和安全边界

模型卡里有几个限制值得认真看:

  • 它是 reasoning model,会输出 <think>
  • 低温或 greedy decoding 可能出现重复循环;
  • 具体标识符、CVE、药物标签、精确数值等仍需工具或检索验证;
  • 模型是 uncensored,面向复杂技术问题不会轻易拒答;
  • 视觉能力继承自基座,但这次 fine-tune 是 text-only,视觉行为没有被重点训练或评估。

如果你把它用于面向用户的应用,建议加上:

  • 输出过滤;
  • 安全策略;
  • 工具调用白名单;
  • 速率限制;
  • 日志审计;
  • 高风险领域人工复核;
  • 检索或工具验证机制。

特别是网络安全、医疗、药理、财务、法律这类场景,不能把模型回答当最终事实。它可以做辅助推理,但最终仍要回到可靠来源、工具结果或人工审核。

适合怎么测试

第一次测试 Qwythos-9B,不建议直接上超长上下文。

可以按这个顺序:

  1. 先用 Transformers 或 vLLM 跑通短问答;
  2. 使用推荐采样参数;
  3. 观察 <think> 和最终回答格式;
  4. 再测试长一点的文档摘要;
  5. 再接入 Python executor;
  6. 最后尝试 web_search 或 RAG;
  7. 稳定后再逐步拉长上下文。

测试 prompt 可以从这些开始:

1
请阅读下面这段代码,找出可能的边界条件问题,并给出最小修复建议。

或者:

1
请先列出你需要验证的关键事实,再说明哪些可以用工具确认,哪些需要人工复核。

这类问题更能体现 reasoning model 和 tool-use 的价值。

一句话总结

Qwythos-9B-Claude-Mythos-5-1M 是一个偏工程和研究场景的 9B 推理模型。

它的看点不是单纯参数规模,而是:

1
Qwen3.5-9B 基座 + 1M context + function calling + reasoning 训练 + Apache-2.0

如果你想测试长上下文代码库分析、多文档研究、带工具验证的 agent 工作流,它值得试。但部署时不要被 1M context 冲昏头,先用小上下文跑稳,再根据显存、KV cache 和后端能力逐步放大。

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计