浮之静

大乱斗:OpenAI 开源 gpt-oss、Anthropic、Google 相继发布新模型

人工智能领域的格局再次发生转变!在被社群冠名 “CloseAI” 多年后,OpenAI 终于迈出了关键一步,于 8 月 5 日发布了自 2019 年 GPT-2 以来的首个开放权重模型系列,算是对日益壮大的开源生态系统所带来的竞争压力的直接回应。在此期间,以 Meta Llama[1] 系列和 Google Gemma[2] 系列为代表的开放模型,不仅在性能上不断追赶,也极大地推动了技术的普及和创新,从而对 OpenAI 坚持的商业化、封闭 API 模式构成了实质性挑战。有趣的是,当 OpenAI 开始有条件地向“开放”回归时,那个曾经用来批评它的标签似乎正在寻找新宿主。由前 OpenAI 成员创立、以安全为核心的 Anthropic 公司,因其坚持通过付费 API 提供其高性能的 Claude 系列模型,且未公布任何模型权重,或许将成为下一个 “Close” 代表...

Image

OpenAI gpt-oss

重磅开源:gpt-oss-120b & 20b,性能比肩 o4-mini,消费级硬件即可运行。

虽然 OpenAI 已经公开发布了包括 Whisper⁠[3] 和 CLIP⁠[4] 在内的其他模型,但 gpt-oss 模型是自 GPT‑2[5] 以来的首个开放大型语言模型。

📌 GPT-2

生成式预训练 Transformer 2 ( GPT-2 ) 是 OpenAI 开发的大型语言模型,也是其基础 GPT 模型系列中的第二个。 GPT-2 在 800 万个网页的数据集上进行了预训练。它于 2019 年 2 月部分发布,随后于 2019 年 11 月 5 日全面发布了拥有 15 亿个参数的模型。

OpenAI 正式发布两款颠覆性的开放语言模型:gpt-oss-120b 与 gpt-oss-20b。这两款模型不仅性能卓越,更将顶尖 AI 的门槛降至新低,在灵活的 Apache 2.0 许可证下,为开发者、研究者乃至整个行业带来前所未有的机遇。了解更多 Introducing gpt-oss[6]。

核心亮点(干货速览)

Image
Image

超高性价比的性能王者

  • gpt-oss-120b:性能与 OpenAI o4-mini 模型几乎持平,甚至在部分推理基准(如 HealthBench)上超越 GPT-4o,而运行仅需单个 80GB GPU。
  • gpt-oss-20b:性能媲美 OpenAI o3-mini,可轻松部署在仅有 16GB 内存的边缘设备上,是端侧应用和本地推理的理想选择。
  • 先进特性: 原生支持 128k 超长上下文,采用分组多查询注意力(GQA)和旋转位置嵌入(RoPE)等技术提升效率和性能。

前沿的技术架构

  • 高效 MoE 架构:采用专家混合(MoE)架构,大幅降低了推理时激活的参数量,是实现消费级部署的关键。
  • gpt-oss-120b:总参数 1170 亿,每次推理仅激活 51 亿。
  • gpt-oss-20b:总参数 210 亿,每次推理仅激活 36 亿。

为智能体(Agent)而生的强大能力

  • 顶级工具使用:专为智能体工作流设计,在工具调用(如网页搜索、代码执行)和少样本函数调用方面表现卓越,超越包括 GPT-4o 在内的专有模型。
  • 可控的 CoT 推理:支持三种推理强度(低、中、高)调节,开发者可根据延迟和性能需求灵活配置。更重要的是,OpenAI 刻意未对模型的思维链(CoT)进行直接监督,这为监控模型行为、防止滥用提供了透明的窗口。

开创性的安全标准与透明度

  • 主动风险评估:首创性地通过“对抗性微调”来模拟恶意攻击,即在专业数据(如生物、网络安全)上微调模型以评估其潜在风险。结果证明,即使经过极端微调,模型也未能达到构成高风险的能力水平。
  • 与顶尖模型同级的安全:安全训练与评估标准看齐 OpenAI 最前沿的闭源模型,并经过外部专家审核,为开源社区设立了全新的安全标杆。
  • 社区共建安全:发起 50 万美元奖金池的红队测试挑战赛,邀请全球社区共同发现并解决潜在安全问题。

如何获取与使用

  • 即刻下载:模型权重已在 Hugging Face 上开放下载,并原生提供 MXFP4 量化格式,进一步降低部署门槛。
  • 完善生态:已与 Hugging Face, Azure, NVIDIA, AMD, vLLM, Ollama, Snowflake, Databricks 等数十家行业领导者合作,确保在各类主流平台、硬件和框架上实现无缝部署与优化。
  • 配套工具开源:同时开源了全新的 o200k_harmony 分词器、Harmony[7] 提示格式渲染器(Python/Rust)以及推理参考实现,助你轻松上手。
Image
📌 量化 - MXFP4 格式

OpenAI 在 gpt-oss 模型中采用量化技术,以降低内存占用。模型在训练完成后会对专家混合(MoE)部分的权重进行量化,转换为 MXFP4 格式,其中每个参数被压缩为 4.25 位。MoE 权重占模型总参数数量的 90% 以上,将其量化为 MXFP4 后,可使较小的模型在仅有 16GB 内存的系统上运行,而较大的模型也能装入一张 80GB 的 GPU 中。

注:Ollama 原生支持 MXFP4 格式,无需额外的量化或格式转换。为此,Ollama 为其全新引擎开发了专门的内核,以支持 MXFP4 格式。Ollama 与 OpenAI 合作,通过对比参考实现进行基准测试,确保其实现的模型在质量上保持一致。可通过以下命令下载安装:

ollama run gpt-oss

意义及影响

自己还上价值了,但 OpenAI 走到今天这一步,难道不是被开源模型逼的吗 😅?

OpenAI 相信,一个健康的开放模型生态是实现 AI 普惠的关键。所以 gpt-oss 模型的发布,不仅是提供了两个强大的工具,更是对 AI 民主化和开放生态的一次重要推动。它为资源有限的组织和新兴市场打开了通往顶尖 AI 的大门,并通过树立新的安全透明度标准,引领整个开源社区走向更负责任、更具创新力的未来。

Claude Opus 4.1

Anthropic 于 8 月 6 日发布了 Claude Opus 4.1[8],该模型是 Claude Opus 4 的一次升级,主要针对智能体(agentic)任务、实际编程应用及逻辑推理能力进行了优化。Anthropic 同时表示,计划在未来几周内推出更大幅度的模型更新。

性能指标与能力增强

Claude Opus 4.1 在多项技术基准上展现了性能提升:

  • 编码能力:在 SWE-bench Verified 编码评估基准中,Opus 4.1 的得分提升至 74.5%。
  • 分析与研究:模型在深度研究、数据分析、细节追踪以及智能体搜索等任务上的处理能力也得到了增强。
Image

第三方技术评估

多个合作伙伴对 Opus 4.1 进行了评估:

  • GitHub 的评估报告指出,相较于 Opus 4,Opus 4.1 在多数能力维度上均有提升,其中多文件代码重构的性能增益尤为明显。
  • Rakuten Group 的测试结果表明,Opus 4.1 在大型代码库中能精确定位需修正的代码,且不会引入非必要的代码调整或程序错误(bug)。其团队认为此特性适用于日常的代码调试工作。
  • Windsurf 的报告显示,在其设置的初级开发者基准测试中,Opus 4.1 的性能相较于 Opus 4 提升了一个标准差。据报告,这一性能提升的幅度与从 Sonnet 3.7 模型升级到 Sonnet 4 时的幅度相当。
Image

使用指南

  • 接入平台:Opus 4.1 已通过 API、Amazon Bedrock 及 Google Cloud Vertex AI 提供服务。同时,该模型也已对 Claude 服务的付费订阅用户和 Claude Code 用户开放。
  • 定价策略:Opus 4.1 的定价与前代 Opus 4 模型保持一致。
  • Anthropic 建议所有应用场景从 Opus 4 升级至 Opus 4.1。开发者可通过 API 使用 claude-opus-4-1-20250805 来调用新模型。

Google Genie 3

Image

8 月 5 日,Google 发布了一款用于生成可交互环境的通用世界模型 Genie 3[9]。该模型能够基于文本提示,生成可供用户实时交互的动态虚拟环境。

根据技术参数,Genie 3 可以生成 720p 分辨率的动态世界,以每秒 24 帧的速率运行,并能在数分钟的时长内维持环境的连续性。

背景与研究方向

Google DeepMind 在模拟环境领域有超过十年的研究历史,其应用范围涵盖了策略游戏、机器人技术以及开放式学习等。这些研究推动了“世界模型”的开发。世界模型作为一种人工智能系统,旨在通过对世界运行规律的理解来模拟其动态变化,从而使智能体(agent)能够预测环境演变及其行为可能产生的结果。

世界模型被认为是实现通用人工智能(AGI)路径上的一个重要组成部分,因为它能为 AI 智能体提供大量且丰富的模拟环境以供学习和训练。在 Genie 3 之前,已发布了 Genie 1 和 Genie 2 等基础世界模型。同时,相关的视频生成模型(如 Veo[10] 系列)也在对物理世界的理解上取得了进展。

Image

相较于前代模型,Genie 3 的主要特点在于首次实现了实时交互功能,并在环境的真实感与一致性方面进行了改进。

技术特性

实时交互功能

Genie 3 的实时交互功能需要在技术上应对以下挑战:在自回归地生成每一帧画面的过程中,模型必须持续处理由用户先前输入所构成的、随时间增长的数据序列。例如,当用户在一分钟后返回先前访问过的位置时,模型需要调用并处理一分钟前的相关环境信息。为实现实时响应,这一系列计算必须在接收到新用户输入的瞬间,以高频率(每秒多次)完成。

环境长时间一致性

在 AI 生成的环境中,长时间的物理一致性是确保用户沉浸感的关键。相较于一次性生成完整的视频片段,自回归地逐帧生成环境更容易因误差随时间累积而导致不一致。Genie 3 通过其模型设计,使生成的环境能够在数分钟内保持较高程度的一致性,其视觉记忆可追溯至约一分钟前。

Genie 3 的一致性被描述为一种涌现能力(emergent capability)。这与依赖显式三维数据表示的技术(如 NeRF 或 Gaussian Splatting)存在区别。由于 Genie 3 是基于世界描述和用户行为逐帧生成环境,其创造的世界具备更强的动态性和内容丰富度。

📌 NeRF & Gaussian Splatting
Image

NeRF 和 3D Gaussian Splatting 都是革命性的三维重建技术,它们的目标是相同的:利用一组从不同角度拍摄的普通二维照片,来创建一个可以从任意新视角自由探索的、逼真的三维场景。你可以把它们想象成一种能将照片“缝合”成立体世界的魔法。

NeRF 的核心是一个深度神经网络,它像一个“魔法函数”,学习并记住了整个空间中每一个点的颜色和密度信息。当你想看一个新视角的画面时,它会模拟光线如何穿过这个空间,并沿途查询这个神经网络来计算出最终的像素颜色。这种方式能创造出极为逼真的光影和细节,但代价是计算量巨大,导致训练和渲染过程都非常缓慢,难以实现实时交互。

相比之下,Gaussian Splatting 采用了一种更直接、更高效的方式。它不使用复杂的神经网络,而是用成千上万个微小的、半透明的 3D “椭球体”(即高斯体)来“搭建”整个场景。渲染时,它像现代游戏引擎一样,将这些椭球体快速“泼洒”或投影到你的屏幕上。这个过程可以被显卡高度并行化,因此速度极快,能够轻松实现实时的高质量渲染,在实用性上取得了巨大突破。

Image

总而言之,两者最根本的区别在于 NeRF 用一个缓慢而精细的“神经网络画家”来描绘世界,而 Gaussian Splatting 则用无数个“数字积木”快速搭建世界。NeRF 开创了高保真三维表示的先河,而 Gaussian Splatting 则凭借其惊人的速度优势,使这项技术真正走向了实时应用。

可通过文本提示修改世界事件

除了标准的导航输入,Genie 3 还支持通过文本指令对虚拟世界进行修改。这一功能被称作“可提示的世界事件”(Promptable World Events)。

用户可以通过输入文本来改变当前世界的属性,例如调整天气、添加新的物体或角色。此功能为交互提供了导航控制之外的更高自由度,同时也为 AI 智能体的训练提供了生成大量“反事实”(what-if)场景的有效途径,以供其学习应对非预期情况。

HuggingChat 关闭运营

一个不错的开源大模型体验广场,目前也迫于计算资源压力,在 7 月 1 日关闭运营了。

Image

HuggingChat 于 2023 年 4 月发布,当时 ChatGPT 刚上线 5 个月,部署类似服务仍相当困难。这个项目的初衷是为了展示:借助社区的开源模型和构建模块,已经可以打造一个 ChatGPT 的开源替代品。

它也被用作推理优化的试验平台,催生了 Hugging Face 的高性能推理框架 text-generation-inference[11],并由此推动了对 SGLang[12]、vLLM[13]、llama.cpp[14] 等多个主流大模型推理引擎的持续贡献。

在过去的 27 个月里,曾推出了多个重要功能:例如 Assistants 功能,可将提示词、模型与工具组合成一个可分享的链接;HuggingChat Tools 功能,使用户能直接在聊天界面中调用 Gradio Spaces 的完整工具生态;此外,许多重要模型(如 OpenAssistant、LLaMA 系列、Phi-4、Qwen、DeepSeek、Gemma 等)也通过 HuggingChat 首发或支持上线。

它始终保持免费和实验性质。如今,项目正式关闭,以便为 Hugging Face 生态中更集成的新方案腾出空间。用户可将过往的对话导出为 Zip 文件,方便迁移至其他平台继续使用。

如果你正在寻找替代界面,可以试试 LibreChat[15](简洁但功能丰富)、openwebui[16](无需介绍的热门界面)、Scira MCP[17](新兴的 MCP 风格聊天界面)等项目。另外,HuggingChat 所使用的底层代码库 chat-ui[18] 仍在维护,并可通过 Chat UI Spaces 提供的一键 Docker 模板快速部署。

拓展阅读

关于 gpt-oss 还有些有趣的东西,比如你就不好奇“当提问大模型是谁时,它的固定式回答,如何定义修改这些信息吗”?大模型输出的原始信息是如何被解析的等等。

Image

OpenAI Harmony 响应格式

重要提示:gpt-oss 模型必须配合 Harmony 格式使用,否则将无法正常工作。

gpt-oss 模型在训练时采用了 Harmony 响应格式,这是一种用于定义对话结构、生成推理过程(CoT)和构建函数调用的专用格式。如果你是通过 API 或 Ollama 等服务来使用 gpt-oss,那么你无需关心此格式,因为底层的推理服务已经为你处理好了一切。但如果你正在构建自己的推理解决方案,本指南将为你详细介绍 Harmony 格式(原文:OpenAI Harmony Response Format[19])。它的设计旨在模仿 OpenAI 的响应 API,所以如果你熟悉后者,那么上手会非常快。

核心概念

角色 (Roles)

模型处理的每条消息都有一个关联的角色。模型能理解以下五种角色,它们之间存在一个指令优先级:  system > developer > user > assistant > tool

  • system:用于指定模型的推理强度、知识截止日期等元信息,以及定义内置工具(如 Python 和浏览器)。
  • developer:用于提供模型指令(即通常所说的“系统提示”)和可用的自定义函数工具。
  • user:代表用户的输入。
  • assistant:代表模型的输出,可以是最终的文本回复,也可以是工具调用。
  • tool:代表工具调用的返回结果。

通道 (Channels)

assistant(模型)的输出消息可以被发送到三个不同的“通道”,用于区分面向用户的最终回复和模型内部的思考过程。

  • final:最终呈现给用户的最终回复。
  • analysis:模型的思维链 (CoT)。注意:此通道的内容不遵循与 final 通道相同的安全标准,切勿直接展示给用户。
  • commentary:主要用于触发函数工具调用。有时模型也会用此通道生成一个“前言”,来解释它接下来要执行的一系列复杂操作。

Harmony 渲染库

强烈推荐使用 OpenAI 官方的 Harmony 渲染库(可通过 PyPI[20] 或 crates.io[21] 安装)。它会自动处理消息格式化和 Token 化,大大简化你的工作。

下面是一个使用 Python 库构建包含系统指令、工具定义和对话历史的示例:

from openai_harmony import (
    Conversation, DeveloperContent, HarmonyEncodingName,
    Message, Role, SystemContent, ToolDescription,
    load_harmony_encoding, ReasoningEffort
)

# 加载 gpt-oss 专用的编码器
encoding = load_harmony_encoding(HarmonyEncodingName.HARMONY_GPT_OSS)

# 1. 定义 System 消息:设置模型身份、推理强度等
system_message = (
    SystemContent.new()
        .with_model_identity("You are ChatGPT, a large language model trained by OpenAI.")
        .with_reasoning_effort(ReasoningEffort.HIGH) # 设置高强度推理
        .with_knowledge_cutoff("2024-06")
)

# 2. 定义 Developer 消息:提供指令和函数工具
developer_message = (
    DeveloperContent.new()
        .with_instructions("Always respond in riddles") # 设置模型行为指令
        .with_function_tools(
            [
                ToolDescription.new(
"get_current_weather",
"Gets the current weather in the provided location.",
                    parameters={
"type": "object",
"properties": { "location": { "type": "string" } },
"required": ["location"],
                    },
                ),
            ]
        )
)

# 3. 构建完整的对话历史
convo = Conversation.from_messages(
    [
        Message.from_role_and_content(Role.SYSTEM, system_message),
        Message.from_role_and_content(Role.DEVELOPER, developer_message),
        Message.from_role_and_content(Role.USER, "What is the weather in Tokyo?"),

# 模型的 CoT (分析通道)
        Message.from_role_and_content(
            Role.ASSISTANT,
'User asks: "What is the weather in Tokyo?" We need to use get_weather tool.',
        ).with_channel("analysis"),

# 模型的工具调用 (评论通道)
        Message.from_role_and_content(Role.ASSISTANT, '{"location": "Tokyo"}')
        .with_channel("commentary")
        .with_recipient("functions.get_weather"), # 指定调用哪个函数
    ]
)

# 4. 将对话渲染成模型可接受的 tokens
tokens = encoding.render_conversation_for_completion(convo, Role.ASSISTANT)

# ...运行模型推理...

# 5. 解析模型返回的 tokens
# new_tokens = model_inference(tokens)
# parsed_response = encoding.parse_messages_from_completion_tokens(new_tokens, Role.ASSISTANT)

该库还提供了一个 StreamableParser,用于在模型生成 Token 的同时进行流式解析,非常适合构建实时响应的应用。

from openai_harmony import (
    load_harmony_encoding,
    StreamableParser
)

encoding = load_harmony_encoding(HarmonyEncodingName.HARMONY_GPT_OSS)
stream = StreamableParser(encoding, role=Role.ASSISTANT)

tokens = [
200005,35644,200008,1844,31064,25,392,4827,382,220,17,659,220,17,16842,12295,81645,
13,51441,6052,13,200007,200006,173781,200005,17196,200008,17,659,220,17,314,220,19,
13,200002
]

for token in tokens:
    stream.process(token)
    print("--------------------------------")
    print("current_role", stream.current_role)
    print("current_channel", stream.current_channel)
    print("last_content_delta", stream.last_content_delta)
    print("current_content_type", stream.current_content_type)
    print("current_recipient", stream.current_recipient)
    print("current_content", stream.current_content)

手动构建提示格式

这些标记将采用 o200k_harmony 编码。所有特殊标记均遵循 <|type|> 格式。如果你选择自己实现渲染器或使用 tiktoken[22],则需要遵循以下格式规范。

Image

消息格式

系统消息格式示例如下:

<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI.
Knowledge cutoff: 2024-06
Current date: 2025-06-28
Reasoning: high
# Tools
## browser
// Tool for browsing.
// The `cursor` appears in brackets before each browsing display: `[{cursor}]`.
// Cite information from the tool using the following format:
// `【{cursor}†L{line_start}(-L{line_end})?】`, for example: `【6†L9-L11】` or `【8†L3】`.
// Do not quote more than 10 words directly from the tool output.
// sources=web (default: web)
namespace browser {
// Searches for information related to `query` and displays `topn` results.
type search = (_: {
query: string,
topn?: number, // default: 10
source?: string,
}) => any;
// Opens the link `id` from the page indicated by `cursor` starting at line number `loc`, showing `num_lines` lines.
// Valid link ids are displayed with the formatting: `【{id}†.*】`.
// If `cursor` is not provided, the most recent page is implied.
// If `id` is a string, it is treated as a fully qualified URL associated with `source`.
// If `loc` is not provided, the viewport will be positioned at the beginning of the document or centered on the most relevant passage, if available.
// Use this function without `id` to scroll to a new location of an opened page.
type open = (_: {
id?: number | string, // default: -1
cursor?: number, // default: -1
loc?: number, // default: -1
num_lines?: number, // default: -1
view_source?: boolean, // default: false
source?: string,
}) => any;
// Finds exact matches of `pattern` in the current page, or the page given by `cursor`.
type find = (_: {
pattern: string,
cursor?: number, // default: -1
}) => any;
} // namespace browser
## python
Use this tool to execute Python code in your chain of thought. The code will not be shown to the user. This tool should be used for internal reasoning, but not for code that is intended to be visible to the user (e.g. when creating plots, tables, or files).
When you send a message containing Python code to python, it will be executed in a stateful Jupyter notebook environment. python will respond with the output of the execution or time out after 120.0 seconds. The drive at '/mnt/data' can be used to save and persist user files. Internet access for this session is UNKNOWN. Depends on the cluster.
# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|>
# Valid channels: analysis, commentary, final. Channel must be included for every message.
  • 模型身份(identity):这应该始终保持为 You are ChatGPT, a large language model trained by OpenAI.。如果想更改模型的身份,需在开发人员消息中说明。
  • 元日期(meta dates):指知识截止(Knowledge cutoff)和当前日期(Current date)。
  • 推理工作量(reasoning effort):按高(high)、中(medium)、低(low)级别指定。默认为中等级别。
  • 可用渠道(valid channels):为了获得最佳性能,这应该映射到 analysis、 commentary 和 final。
  • 内置工具(built-in tools):该模型已在 python 和 browser 工具上进行训练。
📌 修改模型身份

如果你想替换掉 You are ChatGPT, a large language model trained by OpenAI. ,则需使用开发者消息格式,{instructions} 就是你要替换的系统提示语,它的基本格式如下:

<|start|>developer<|message|># Instructions
{instructions}<|end|>

比如修改成“你是一个乐于助人的购物助手”。

<|start|>developer<|message|># Instructions
You are a helpful shopping assistant
# Response Formats
## shopping_list
{"properties":{"items":{"type":"array","description":"entries on the shopping list","items":{"type":"string"}}},"type":"object"}<|end|><|start|>user<|message|>I need to buy coffee, soda and eggs<|end|><|start|>assistant

推理示例

以上的描述可能有些抽象,为了方便理解,这里举个推理的示例。比如对于 What is 2 + 2? 这个问题:

<|start|>user<|message|>What is 2 + 2?<|end|>
<|start|>assistant

模型可能产生以下输出:

<|channel|>analysis<|message|>User asks: "What is 2 + 2?" Simple arithmetic. Provide answer.<|end|>
<|start|>assistant<|channel|>final<|message|>2 + 2 = 4.<|return|>

在这种情况下,CoT 是:

User asks: “What is 2 + 2?” Simple arithmetic. Provide answer.

实际的答案是:

2 + 2 = 4

References

[1]

Llama:https://www.llama.com

[2]

Gemma:https://deepmind.google/models/gemma

[3]

Whisper⁠:https://github.com/openai/whisper

[4]

CLIP⁠:https://github.com/openai/CLIP

[5]

GPT‑2:https://github.com/openai/gpt-2

[6]

Introducing gpt-oss:https://openai.com/index/introducing-gpt-oss

[7]

Harmony:https://github.com/openai/harmony

[8]

Claude Opus 4.1:https://www.anthropic.com/news/claude-opus-4-1

[9]

Genie 3:https://deepmind.google/discover/blog/genie-3-a-new-frontier-for-world-models

[10]

Veo:https://deepmind.google/models/veo

[11]

text-generation-inference:https://github.com/huggingface/text-generation-inference

[12]

SGLang:https://huggingface.co/SGLang

[13]

vLLM:https://docs.vllm.ai/en/latest/

[14]

llama.cpp:https://huggingface.co/ggml-org

[15]

LibreChat:https://github.com/danny-avila/LibreChat

[16]

openwebui:https://github.com/open-webui/open-webui

[17]

Scira MCP:https://github.com/zaidmukaddam/scira-mcp-chat

[18]

chat-ui:https://github.com/huggingface/chat-ui

[19]

OpenAI Harmony Response Format:https://cookbook.openai.com/articles/openai-harmony

[20]

PyPI:https://pypi.org/project/openai-harmony

[21]

crates.io:https://crates.io/crates/openai-harmony

[22]

tiktoken:https://github.com/openai/tiktoken