微头条爆款体平台适配实测:把交付要求变成可计算的指标

微头条的「爆款体」经常被当成写作能力问题来讨论。这次 13 款大模型的单题单次模型实测中,最高均分 0.96,最低 0.61,而跨度最大的维度是 platform------GPT-6-Sol 拿 0.96,MiniMax-M3 为 0.18。本次样本中,低 platform 分与字数超限、可见 <think> 等交付问题同时出现;本文检查项只是启发式本地指标。单题单次不能判断分差的主要原因,更不能否定写作能力因素。platform 在本次裁判提示词中关注「能不能直接发」,包括字数、分段、开头钩子、数字密度和 AI 腔。本文只聚焦七维评分中的 platform 子维度;均分仅作参照,不展开或展示完整七维结果。主线是把这些要求拆开,说明如何转成可计算的检查项,并记录 13 款模型在本次输出中的差异。

先交代数据边界:所有分数来自 2026-10-16 当天的线上版本,裁判是未参赛的 gpt-5.6-sol。参赛与裁判模型通过千木SilvaMux的 OpenAI 兼容接口统一接入和切换,该工具不参与评分。完整评测另有六个维度,本文不展示也不据此展开结论,只分析 platform。题目是给模型一套素材(药店免费测血糖、第二天接到推荐 268 元糖化检查的回访、我妈血糖 5.4 正常、邻居张阿姨花 1200 元买了三个疗程)加六条硬性要求,考的是微头条爆款体能力------「具体冲突 + 克制表达 + 行动建议」的组合。分数不要跨版本引用,模型迭代一次就得重测。

微头条的分发规则:哪五条是硬的

平台适配可以拆成五个工程检查项,但它们不是平台公开的固定阈值。第一项:本文把开头前 30 字作为钩子检查窗口,避免铺垫过长。第二项:移动端长段落会增加阅读负担,本文把三行作为启发式参考。第三项:用具体数字替代空泛表述,例如「268 元」「1200 元」。第四项:扫描常见套话,把它们当作 AI 腔提示信号,而不是作者身份判定器。第五项:结尾保留行动建议或讨论入口,避免只停在吐槽。

这五项与写作能力、指令遵循和交付处理都可能有关,但本文没有分别测量这些因素,也没有建立因果。裁判提示词里 platform 维度的定义是「适合微头条直接发布,含字数与分段」;本文据此检查前 30 字、段落长度等可观察特征,但这些启发式指标不能单独解释 platform 分差。

题目的六条硬性要求里也嵌了这套规则:「不超过 300 字、至少 3 段」对应段落约束,「血糖5.4」「268元」「1200元」三个数字必须出现对应数字密度,禁用「惊呆了」「细思极恐」对应 AI 腔和低质情绪词,结尾必须给行动建议对应互动钩子。可以说这道题一半考写作,一半考指令遵循------而指令遵循的部分,恰好都是平台规则。

前 30 字:本文采用的钩子检查窗口

本文把前 30 字作为工程检查窗口,用来观察冲突、数字或悬念是否前置;这不是平台公开的完读率阈值,也不能单凭这一项预测分发效果。用户在信息流中的停留决策很快,因此减少开头铺垫是合理的编辑策略,但其真实影响仍需用发布后的曝光、停留和完读数据验证。

看头部模型怎么处理这道生死线。GPT-6-Sol(均分 0.96,platform 0.96)的开头是:「小区门口药店免费测血糖,我陪我妈去了。测之前要留电话,测完一看:血糖5.4,正常。我们就回家了。」开头交代完事件,紧接着「我们就回家了」制造落差------读者知道第二天会有电话打来。冲突前置、数字前置、悬念前置,这就是规则执行的标准形态。

再对照 MiniMax-M3(platform 0.18)的输出开头:「Let me analyze the requirements carefully: 1. Topic: Free blood glucose testing at pharmacy near community entrance...」。思考块用英文写、正文是中文,推理过程直接占掉了输出窗口的开头。前 30 字是分析任务要求的内容;按本文钩子检查项,这一窗口未出现成稿钩子。正文内容是否合规不在本文讨论范围内;就本次可见输出而言,存在交付形态问题,但不能据此排除写作能力或其他因素。

段落长度与数字密度:两个可量化的指标

「段落必须短」和「要有具体数字」听起来像经验之谈,但它们都可以变成代码里的两个函数。段落平均长度算字符数,数字密度算每百字里出现的具体数值个数。量化之后,规则就不再是「我觉得这段太长了」,而是一条可以过或不过的判定。

段落平均长度怎么算

python 复制代码
def para_stats(text: str):
    paras = [p.strip() for p in text.split("\n\n") if p.strip()]
    lens = [len(p) for p in paras]
    return {
        "para_count": len(paras),
        "avg_len": round(sum(lens) / len(lens), 1) if lens else 0,
        "max_len": max(lens) if lens else 0,
        "total": sum(lens),
    }

GPT-6-Sol 的成稿是四段,每段都在手机屏幕三行以内,总字数卡在 300 字限制之下,platform 拿 0.96。MiniMax-M3 的输出连思考块一起远超 300 字,这个函数一跑就会亮红灯:总字数超标,且包含无法作为社媒成稿发布的思考内容。该现象与低 platform 分同时出现,但本文不能据此确定扣分构成或主要原因。

数字密度的统计口径

python 复制代码
import re

def number_density(text: str):
    hits = re.findall(r"\d+(?:\.\d+)?(?:元|次|个|年|天)?", text)
    total = len(text)
    return {
        "hits": hits,
        "per_100_chars": round(len(hits) / total * 100, 2) if total else 0,
    }

def hook_has_number_or_conflict(text: str) -> bool:
    hook = re.sub(r"\s+", "", text)[:30]
    conflict_signals = ("却", "但", "没想到", "反而", "第二天", "结果")
    return bool(re.search(r"\d", hook)) or any(s in hook for s in conflict_signals)

def ending_has_action_or_discussion(text: str) -> bool:
    ending = text.strip()[-60:]
    signals = ("建议", "可以", "先", "记得", "你怎么看", "欢迎讨论", "评论区")
    return any(s in ending for s in signals) or ending.endswith(("?", "?"))

题目要求「血糖5.4」「268元」「1200元」三个数字必须出现,这既是合规要求,也是本文数字密度检查的输入。相比空泛的「花了不少钱」,「花1200元买了三个疗程」提供了更具体的信息。头部三家在这项上全部达标;在尾部样本中,还可同时观察到数字出现在较长思考过程之后等交付现象,但单次结果不足以归因。

AI 腔是怎么被识别出来的

AI 腔常凭阅读感受被识别,但单靠词表无法判定作者身份。本文把「值得注意的是」「综上所述」「总而言之」「首先其次最后」「让我们」「在当今」「随着......的发展」列为编辑提示词:命中后人工复看上下文,而不是直接判定内容由 AI 生成。

python 复制代码
AI_MARKERS = [
    "值得注意的是", "综上所述", "总而言之",
    "首先", "其次", "最后,", "让我们",
    "在当今", "不难发现", "显而易见",
]

def ai_tone(text: str):
    found = [m for m in AI_MARKERS if m in text]
    return {
        "markers": found,
        "is_ai_flavored": len(found) >= 1,
    }

除了标记词,本文还把总结句收尾、观点先行再举例、每段长度高度均匀列为人工复看信号。这些特征可以量化,但不能据此判定作者身份或实际传播效果。在这次任务里,题目还额外禁用了「惊呆了」「细思极恐」「你品你细品」------这三个属于低质情绪词,和 AI 腔是两类问题,但都可以先用关键词表筛查。

本文还把句式工整、总结感强等现象作为人工复看的提示,不将其直接等同于 AI 腔或写作质量。微头条任务要求克制表达,但单次样本不足以判断这些结构特征对 platform 分或真实分发表现的影响。

platform 0.18 到 0.96:13 款模型对规则的执行差异

13 款模型在 platform 维度上的分布如下,七维均分一并列出作为参照:

模型 platform 均分
GPT-6-Sol 0.96 0.96
Gemini-3.7-Flash 0.94 0.94
DeepSeek-V4-Pro 0.95 0.94
GLM-5.2 0.94 0.91
GLM-5.3 0.91 0.91
Kimi-K2.6 0.90 0.88
Qwen3.6-Plus 0.89 0.87
Qwen3.5-Flash 0.84 0.86
Claude-Sonnet-5 0.78 0.86
GLM-5.3-Flash 0.70 0.85
Kimi K3 0.69 0.84
MiniMax-M2.7 0.39 0.66
MiniMax-M3 0.18 0.61

头部到中段的 platform 分多在 0.87 以上;按本次可见输出,它们基本满足字数、分段和直接发布要求。分数较低的样本包括 GLM-5.3-Flash(0.70)、Kimi K3(0.69)、MiniMax-M2.7(0.39)和 MiniMax-M3(0.18)。第 11 名 Kimi K3 均分 0.84,到 M2.7 的 0.66 相差 0.18;这只是本次样本的分数与交付现象,不能据此判定结构性原因。

思考内容可见:两个单次样本的交付现象

MiniMax-M2.7 的输出同样以 <think> 开头:「用户需要我写一条微头条,要求非常明确:1. 主题:小区门口药店免费测血糖,发现事情不简单......」。M3 的思考块更长且是英文,M2.7 的短一些;两者本次 platform 分别为 0.39 和 0.18。能够确认的是两个单次样本都把 <think> 内容交付出来;仅凭这些记录不能判断模型侧处理机制,也不能把这一现象确定为分差成因。

可检验的假设是:对两者的输出剥离 <think> 块后重新评分,platform 可能回升;本文没有执行这项补测,因此不报告回升幅度,也不把它写成已验证结论。

13 款批处理入口:生成、落盘、复算 platform 检查项

前面的函数分散在各节,下面整合为一个可运行入口。它覆盖 13 个展示名,但不把展示名冒充已经核验的接口 alias:运行者必须通过 MODEL_ALIASES_JSON 提供本次原始配置中的展示名---调用名映射。程序逐一请求、保留原始输出,并复算本文定义的 platform 检查项 :总字数、至少三段、三个必现数字、开头钩子、禁词/AI 提示词、结尾入口、思考标签。这里的 platform_check_rate 是本地布尔项通过率,不是裁判给出的 0---1 platform 分,不能拿它伪造完整七维评分。

python 复制代码
import json
import os
import re
import time
from pathlib import Path

DISPLAY_MODELS = (
    "GPT-6-Sol", "Gemini-3.7-Flash", "DeepSeek-V4-Pro",
    "GLM-5.2", "GLM-5.3", "Kimi-K2.6", "Qwen3.6-Plus",
    "Qwen3.5-Flash", "Claude-Sonnet-5", "GLM-5.3-Flash",
    "Kimi K3", "MiniMax-M2.7", "MiniMax-M3",
)
REQUIRED_NUMBERS = ("5.4", "268元", "1200元")
BANNED = ("惊呆了", "细思极恐", "你品你细品")
AI_MARKERS = ("值得注意的是", "综上所述", "总而言之", "首先", "其次", "让我们")
CONFLICT = ("却", "但", "没想到", "反而", "第二天", "结果")
ACTION = ("建议", "可以", "先", "记得", "你怎么看", "欢迎讨论", "评论区")


def paragraphs(text: str) -> list[str]:
    return [part.strip() for part in re.split(r"\n\s*\n", text) if part.strip()]


def platform_checks(text: str) -> dict[str, bool]:
    compact = re.sub(r"\s+", "", text)
    hook = compact[:30]
    ending = text.strip()[-60:]
    return {
        "within_300_chars": len(compact) <= 300,
        "at_least_3_paragraphs": len(paragraphs(text)) >= 3,
        "required_numbers": all(number in compact for number in REQUIRED_NUMBERS),
        "hook_signal": bool(re.search(r"\d", hook)) or any(word in hook for word in CONFLICT),
        "no_banned_phrase": not any(word in text for word in BANNED),
        "no_ai_marker": not any(word in text for word in AI_MARKERS),
        "ending_entry": any(word in ending for word in ACTION) or ending.endswith(("?", "?")),
        "no_reasoning_tag": "<think>" not in text.lower(),
    }


def summarize_platform(text: str) -> dict[str, object]:
    checks = platform_checks(text)
    return {
        "checks": checks,
        "platform_check_rate": round(sum(checks.values()) / len(checks), 3),
        "char_count": len(re.sub(r"\s+", "", text)),
        "paragraph_count": len(paragraphs(text)),
    }


def load_aliases() -> dict[str, str]:
    aliases = json.loads(os.environ["MODEL_ALIASES_JSON"])
    missing = [name for name in DISPLAY_MODELS if name not in aliases]
    if missing:
        raise ValueError(f"缺少调用名映射: {missing}")
    return aliases


def load_done(path: Path) -> dict[str, dict[str, object]]:
    if not path.exists():
        return {}
    rows = [json.loads(line) for line in path.read_text(encoding="utf-8").splitlines() if line.strip()]
    return {row["display_model"]: row for row in rows}


def run_batch(prompt: str, output_path: str = "microheadline_runs.jsonl", temperature: float = 0.7) -> None:
    from openai import OpenAI

    aliases = load_aliases()
    client = OpenAI(api_key=os.environ["API_KEY"], base_url=os.environ["BASE_URL"])
    path = Path(output_path)
    done = load_done(path)
    with path.open("a", encoding="utf-8") as file:
        for display_name in DISPLAY_MODELS:
            if display_name in done:
                continue
            started = time.perf_counter()
            response = client.chat.completions.create(
                model=aliases[display_name],
                messages=[{"role": "user", "content": prompt}],
                temperature=temperature,
            )
            text = response.choices[0].message.content or ""
            row = {
                "display_model": display_name,
                "call_alias": aliases[display_name],
                "temperature": temperature,
                "elapsed_seconds": round(time.perf_counter() - started, 2),
                "raw_output": text,
                "platform_local": summarize_platform(text),
            }
            file.write(json.dumps(row, ensure_ascii=False) + "\n")
            file.flush()


def make_text(prefix: str, filler: str, ending: str) -> str:
    return f"{prefix}\n\n第二段含268元。\n\n第三段含1200元。{filler}{ending}"


def run_boundary_tests() -> None:
    exact_300 = make_text("血糖5.4,第二天却接到电话。", "", "建议先核实。")
    missing = 300 - len(re.sub(r"\s+", "", exact_300))
    exact_300 = make_text("血糖5.4,第二天却接到电话。", "甲" * missing, "建议先核实。")
    over_300 = exact_300 + "乙"
    assert len(re.sub(r"\s+", "", exact_300)) == 300
    assert platform_checks(exact_300)["within_300_chars"] is True
    assert platform_checks(over_300)["within_300_chars"] is False
    assert platform_checks(exact_300)["at_least_3_paragraphs"] is True
    assert platform_checks(exact_300.replace("\n\n", "", 1))["at_least_3_paragraphs"] is False
    assert platform_checks(exact_300)["required_numbers"] is True
    assert platform_checks(exact_300.replace("268元", "二百多元"))["required_numbers"] is False
    assert platform_checks("<think>分析</think>" + exact_300)["no_reasoning_tag"] is False


if __name__ == "__main__":
    run_boundary_tests()
    if os.environ.get("RUN_MODEL_BATCH") == "1":
        prompt = Path("task_prompt.txt").read_text(encoding="utf-8")
        run_batch(prompt)

代码故意不剥离 <think>:原始评测要把交付污染保留在 L1;如果生产流程另做清洗,应同时保存 raw_output 和 clean_output,并明确 local 指标基于哪个版本。接口返回的模型不可用、权限或网络异常也应记录为运行错误,不能静默补成空文本后参与排名。

边界测试:阈值两侧都要覆盖

上方完整脚本中的 run_boundary_tests() 可离线运行:默认先覆盖恰好 300 字与 301 字、三段与两段、三个必现数字齐全与缺失、<think> 存在与否;只有显式设置 RUN_MODEL_BATCH=1 才会读取提示词并发起网络请求。这样语法和边界测试不依赖模型服务,批处理则仍需安装 openai 并提供 API 环境变量及 13 项真实 alias 映射。

边界测试验证的是代码口径,不验证平台真实分发,也不等于复现裁判主观判断。前 30 字和三段都是本文评测规则;自动检查不能替代编辑、医学事实与发布合规的专业审核。若业务规则改变,应连测试一起版本化。

L1、L2、L3 与温度边界

  • L1 逐字层 :保留 GPT-6-Sol 开头、MiniMax-M3 英文 <think> 开头、MiniMax-M2.7 中文 <think> 开头。没有保存的完整作品不补写。
  • L2 分数摘要层:本文只完整复现 13 款的 platform 与均分参照,以及 DeepSeek-V4-Pro 30.45 秒、MiniMax-M3 22.41 秒两项可核耗时。没有借此暗示六个未展示维度已经完整分析。
  • L3 编辑方法层:本地检查率、批处理入口和边界测试是工程方法,不是裁判原分,也不是平台公开算法。

把被测温度改为 0 只能减少部分采样随机性,不等于稳定:线上模型版本、路由、上下文实现和裁判输出仍可能变化;本文没有在温度 0 下做重复试验。裁判温度 0 同样不构成稳定性证明。

让模型遵守平台规则的提示词写法

既然规则是硬约束,提示词就应该把它们写成可验证的判定条件,而不是「写得吸引人一点」这类模糊要求。核心技巧有三条:把字数和段落数写成明确上限;把必现数字列成清单;把禁用词表和 AI 腔标记词表贴进提示词。规则的判定链路如下:
#mermaid-svg-nAWJFzzFOLd1Abof{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-nAWJFzzFOLd1Abof .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nAWJFzzFOLd1Abof .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nAWJFzzFOLd1Abof .error-icon{fill:#552222;}#mermaid-svg-nAWJFzzFOLd1Abof .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nAWJFzzFOLd1Abof .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nAWJFzzFOLd1Abof .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nAWJFzzFOLd1Abof .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nAWJFzzFOLd1Abof .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nAWJFzzFOLd1Abof .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nAWJFzzFOLd1Abof .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nAWJFzzFOLd1Abof .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nAWJFzzFOLd1Abof .marker.cross{stroke:#333333;}#mermaid-svg-nAWJFzzFOLd1Abof svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nAWJFzzFOLd1Abof p{margin:0;}#mermaid-svg-nAWJFzzFOLd1Abof .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-nAWJFzzFOLd1Abof .cluster-label text{fill:#333;}#mermaid-svg-nAWJFzzFOLd1Abof .cluster-label span{color:#333;}#mermaid-svg-nAWJFzzFOLd1Abof .cluster-label span p{background-color:transparent;}#mermaid-svg-nAWJFzzFOLd1Abof .label text,#mermaid-svg-nAWJFzzFOLd1Abof span{fill:#333;color:#333;}#mermaid-svg-nAWJFzzFOLd1Abof .node rect,#mermaid-svg-nAWJFzzFOLd1Abof .node circle,#mermaid-svg-nAWJFzzFOLd1Abof .node ellipse,#mermaid-svg-nAWJFzzFOLd1Abof .node polygon,#mermaid-svg-nAWJFzzFOLd1Abof .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nAWJFzzFOLd1Abof .rough-node .label text,#mermaid-svg-nAWJFzzFOLd1Abof .node .label text,#mermaid-svg-nAWJFzzFOLd1Abof .image-shape .label,#mermaid-svg-nAWJFzzFOLd1Abof .icon-shape .label{text-anchor:middle;}#mermaid-svg-nAWJFzzFOLd1Abof .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nAWJFzzFOLd1Abof .rough-node .label,#mermaid-svg-nAWJFzzFOLd1Abof .node .label,#mermaid-svg-nAWJFzzFOLd1Abof .image-shape .label,#mermaid-svg-nAWJFzzFOLd1Abof .icon-shape .label{text-align:center;}#mermaid-svg-nAWJFzzFOLd1Abof .node.clickable{cursor:pointer;}#mermaid-svg-nAWJFzzFOLd1Abof .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nAWJFzzFOLd1Abof .arrowheadPath{fill:#333333;}#mermaid-svg-nAWJFzzFOLd1Abof .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nAWJFzzFOLd1Abof .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nAWJFzzFOLd1Abof .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nAWJFzzFOLd1Abof .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nAWJFzzFOLd1Abof .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nAWJFzzFOLd1Abof .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nAWJFzzFOLd1Abof .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nAWJFzzFOLd1Abof .cluster text{fill:#333;}#mermaid-svg-nAWJFzzFOLd1Abof .cluster span{color:#333;}#mermaid-svg-nAWJFzzFOLd1Abof div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-nAWJFzzFOLd1Abof .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nAWJFzzFOLd1Abof rect.text{fill:none;stroke-width:0;}#mermaid-svg-nAWJFzzFOLd1Abof .icon-shape,#mermaid-svg-nAWJFzzFOLd1Abof .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nAWJFzzFOLd1Abof .icon-shape p,#mermaid-svg-nAWJFzzFOLd1Abof .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nAWJFzzFOLd1Abof .icon-shape .label rect,#mermaid-svg-nAWJFzzFOLd1Abof .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nAWJFzzFOLd1Abof .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nAWJFzzFOLd1Abof .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nAWJFzzFOLd1Abof :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
否
是
否
是
是
否
是
否
拿到模型输出
开头 30 字内含具体冲突或数字?
完读率风险, 判不通过
段落平均长度与总字数达标?
数字密度: 三个必现数字齐全?
AI 腔标记词命中?
剥离重写或降权
结尾有行动建议/互动钩子?
通过, 可直接发布

如果你的场景是「生成即发布」,提示词之外还要加一道后处理:用正则剥离 <think>...</think>,再用前面三个函数复核。请求时关闭思考(模型支持的话)是更干净的做法。剥离必须在报告里写明,否则等于替模型修了 platform 分。模型调用走 OpenAI 兼容接口即可:

python 复制代码
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["API_KEY"],
    base_url=os.environ["BASE_URL"],
)

温度建议 0.7:写作题需要发散,且每款模型用同一温度,横向才有可比性。裁判打分时温度设 0,可减少随机性,但本文未做重复评分,不能据此证明评分稳定。需要注意的是,医学细节严谨度属于完整评测的其他子维度,不纳入本文的 platform 结论;这里仅检查文本能否按字数、分段、钩子和结尾要求直接发布。

还有两点局限必须说清。每款模型只跑了一次,温度 0.7 带来的方差和模型间的真实方差混在一起拆不开;表中的均分也只作背景参照,不能据此反推 platform 之外的表现。若用于「直接可发」场景,应单独提高 platform 权重,而不是把本文当作完整七维横评。

关于平台适配的几个问题

MiniMax-M3 的 platform 0.18 样本观察到什么?

M3 把思考过程原样吐进了正文:<think>Let me analyze the requirements carefully... 连同后续推理一起交付,字数远超 300 字,分析过程无法作为社媒成稿发布。本文不评价其他评分子维度;仅按本文检查项看,这次输出存在字数超限和思考内容可见两项交付问题。它们与 platform 0.18 同时出现,但不足以确定分数的主要原因。

GLM-5.2 的 platform 0.94,为什么高于 GLM-5.3 的 0.91?

这 0.03 属于单次采样下的小分差,不足以据此判断稳定优劣。两者都在 0.90 以上,说明这次输出基本满足字数、分段和直接发布要求;要比较稳定性,应按同一提示词各跑 3 次,再看 platform 中位数,而不是借用其他子维度解释。

本次思考型模型样本出现了什么交付现象?

MiniMax-M2.7、M3 两个单次样本都包含可见 <think>,这些内容计入总字数并占用交付空间,两次输出也都超过 300 字。本文据此只能描述这两个样本,不能判断思考型模型的普遍特征。要回答是否更易超限,需要分别开关思考模式,并在相同提示词和参数下重复采样对照。生产使用时可以在模型支持的情况下关闭思考,或落盘后剥离 <think>...</think> 再判定;剥离必须写明,否则等于改变原始交付文本。

耗时 30.45 秒的 DeepSeek-V4-Pro 为什么能排第 3?

它用了 30.45 秒,垫底的 MiniMax-M3 只有 22.41 秒。这两项都只是单次端到端耗时,不能用于推断生成长度、思考量或内部机制。当前能核对的差异是交付文本:M3 的 platform 为 0.18,且前 30 字被思考块占据。

单次采样加单一裁判,这套分数能信多少?

题目只有一道,13 款模型的排序是「这一道微头条题」上的表现,不是微头条爆款体能力这个维度的结论,更不是综合实力结论。补洞的方法:同一题对每款模型跑 3 次取中位数;换一个非参赛模型做第二裁判,再观察 M3 的低 platform 分与可见 <think> 是否在重复样本中持续同时出现;参数也未做敏感性测试,温度固定 0.7,方差无法拆分。分数对应 2026-10-16 当天的线上版本,模型一迭代就要重测。

相关推荐
论文复现现场2 小时前
DeepSeek V4.1 Flash 和 V4 Pro 有什么区别?API 价格、性能与迁移建议
java·服务器·人工智能·python·大模型api·deepseek·deepseek v4.1
zyseo82 小时前
谷歌SEO 关键词研究完整方法论:从种子词到优先级矩阵
数据库·人工智能·矩阵
郭小李3 小时前
转发与重定向
java·服务器·数据库
你看我名字3 小时前
数眼智能 Search + Reader 实战:联网问答怎样避免“搜到了,却引用错了”
android·java·开发语言
重生之小比特3 小时前
【算法拾光】前缀和|连续的子数组和 + 和相同的二元子数组
算法·leetcode·哈希算法
一去不复返的通信er3 小时前
力扣15:盛最多水的容器
算法·leetcode
Navigator_Z3 小时前
LeetCode //C - 1309. Decrypt String from Alphabet to Integer Mapping
c语言·算法·leetcode
潇湘秦3 小时前
SQL Server 2016+ 整数类型元数据扩宽(秒级变更)完整说明
数据库·算法
MetaLite3 小时前
Spring Boot 加了 @Valid,嵌套参数为什么还没校验?
java·spring boot·后端