coconut
Coconut 是一个由 Meta 开源的研究项目,旨在训练大型语言模型在“连续潜在空间”中进行推理。传统的大模型通常通过生成离散的文本步骤(即思维链)来解决问题,而 Coconut 创新地让模型学习生成连续的向量表示作为思考过程。这种方法试图突破纯文本推理的局限,探索更高效、更深层的逻辑推演能力,从而提升模型在处理复杂数学问题或逻辑任务时的表现。
该工具主要面向 AI 研究人员和高级开发者,特别是那些对大模型内部机制、推理算法优化以及前沿学术实验感兴趣的人群。用户可以通过提供的代码复现论文实验,基于 GSM8K 等数据集进行训练和评估。Coconut 的独特亮点在于其分阶段训练策略和对“连续思维”步数的灵活配置,允许研究者深入探究非文本形式的推理路径如何影响模型性能。虽然目前它更偏向于学术探索而非直接的商业应用,但为未来构建更具直觉和深度的 AI 系统提供了重要的技术参考。
使用场景
某教育科技公司的算法团队正在开发一款能够逐步讲解复杂数学题的 AI 辅导助手,旨在提升学生对解题逻辑的理解。
没有 coconut 时
- 推理过程僵硬:模型只能生成离散的文本步骤,一旦中间某步出错,后续逻辑极易崩塌,难以自我修正。
- 训练效率低下:为了让模型学会多步推理,需要耗费大量算力进行传统的思维链(CoT)微调,且收敛速度慢。
- 泛化能力受限:面对未见过的题型变体,模型往往死记硬背训练数据中的固定话术,缺乏真正的逻辑迁移能力。
- 调试困难:开发者无法干预或观察模型内部的思考“状态”,只能被动接受最终输出的文本结果。
使用 coconut 后
- 连续空间推理:coconut 让模型在连续潜在空间中进行“思考”,使推理过程更加平滑流畅,显著提升了多步推导的稳定性。
- 分阶段高效训练:利用 coconut 的分阶段训练机制,团队能用更少的 epoch 让模型掌握复杂逻辑,大幅降低了 GPU 资源消耗。
- 逻辑泛化增强:通过在潜在空间中学习通用的推理模式,coconut 帮助模型轻松应对各类变形数学题,不再依赖死记硬背。
- 可控性提升:开发者可以通过调整连续思维的数量(c_thought)等参数,精细控制模型的推理深度和复杂度。
coconut 通过将离散的语言推理转化为连续的潜在空间运算,从根本上提升了大模型解决复杂逻辑问题的效率与鲁棒性。
运行环境要求
- 未说明
- 必需 NVIDIA GPU
- 官方实验基于 4 张 A100 (80GB) GPU 进行,支持多卡分布式训练 (torchrun),具体显存需求取决于模型大小和批次设置
未说明

快速开始
椰子
该代码库是 在连续潜在空间中训练大型语言模型进行推理 的官方实现。

快速入门
克隆仓库:
git clone git@github.com:facebookresearch/coconut.git
cd coconut
设置环境:
conda create --name coconut python=3.12
conda activate coconut
pip install -r requirements.txt
代码依赖 wandb 进行日志记录。请在运行任何实验之前,按照此 文档 登录您的 wandb 账户。
数据
用于训练和评估的数据应以如下所示的 JSON 文件形式呈现:
[
{
"question": "...",
"answer": "...",
"steps": ["...", "...", ...]
},
...
]
该文件应包含一个数据点列表。每个数据点由一个问题(字符串)、一个答案(字符串)和步骤列表(字符串)组成,其中每一项都是字符串。
例如,您可以通过运行以下命令下载并处理 GSM8K 数据集(带有 增强的训练和验证集):
bash preprocessing/gsm_icot.bash
参数
一次运行的配置应在 YAML 文件中指定(示例可参见 这里)。
通用设置
- project: wandb 的项目名称
- save_path: 您存储检查点的路径
- only_eval: 如果为真,则仅加载模型并在
val_path中的数据上进行测试(必须与load_model_path一起使用)。否则,在train_path上训练模型,并在每个 epoch 结束后在val_path上进行测试。
方法
- coconut: 训练椰子模型
- cot: 训练 CoT 模型
- no_thoughts: 训练无思维的椰子模型
- no_cot: 训练无 CoT 模型
训练设置
- c_thought: 每个推理步骤中的连续思维数量
- epochs_per_stage: 每个训练阶段的 epoch 数
- max_latent_stage: 最大训练阶段数(除初始阶段外)
- pad_latent_to_max: 如果推理步骤的数量少于当前训练阶段的索引,则填充连续思维的数量。
- save_only_improve: 仅当最佳验证准确率更新时才保存模型。建议在椰子模型训练中将其设置为
False,否则最后阶段的检查点可能不会被保存。 - uniform_prob: 混合其他阶段数据的概率。标准实验为 0,分析实验为 0.3。
- model_id: 用于初始化的 Huggingface 模型 ID,例如
openai-community/gpt2 - load_model_path: 要加载的检查点路径。用于两种情况:(1) 用于评估 (2) 从 CoT 微调模型初始化椰子模型。
- seed: 随机种子。
- resume: 继续训练的 epoch。可用于跳过初始训练阶段。
- bf16: 是否使用 bf16 训练。
- train_path: 训练集路径。
- val_path: 验证或测试集路径(取决于
only_eval) - reset_optimizer: 切换训练阶段时是否重置优化器。
- batch_size_training: 每块 GPU 上用于训练模型的批量大小。
- debug: 如果为真,则不进行 wandb 日志记录和模型保存。将使用数据的一个子集。
- gradient_accumulation_steps: 梯度累积步数
- num_epochs: 最大训练 epoch 数。
- lr: 学习率
- weight_decay: 权重衰减
训练
运行以下命令(替换 N_GPUS 和 PATH_TO_ARGS):
torchrun --nnodes 1 --nproc_per_node N_GPUS run.py PATH_TO_ARGS
复现实验
在此我们提供复现论文中实验的说明。
以下所有命令均假设使用 4 块 A100(80GB)GPU。您可以根据自己的资源情况,在启动运行时更改配置文件中的相应参数(batch_size_training、gradient_accumulation_steps)以及 nproc_per_node。
GSM8K
预处理数据:
bash preprocessing/gsm_icot.bash
首先以 CoT 方式训练模型(作为第 0 阶段训练)
torchrun --nnodes 1 --nproc_per_node 4 run.py args/gsm_cot.yaml
选择一个检查点作为椰子模型的初始化(预计验证准确率约为 40%)。将 args/gsm_coconut.yaml 中的 load_model_path 替换为您选择的检查点,然后运行:
torchrun --nnodes 1 --nproc_per_node 4 run.py args/gsm_coconut.yaml
找到验证准确率最高的检查点,并将其路径放入 args/gsm_coconut_eval.yaml 中的 load_model_path。进行评估:
torchrun --nnodes 1 --nproc_per_node 4 run.py args/gsm_coconut_eval.yaml
ProntoQA
请克隆 ProntoQA 的官方 GitHub 仓库,并使用以下命令生成原始数据集:
cd prontoqa
python run_experiment.py --model-name json --model-size dummy --ordering random --num-trials 10000 --few-shot-examples 0 --ontology fictional --min-hops 5 --max-hops 5 --hops-skip 1
然后将生成的 5hop_0shot_random.json 文件复制到 data 目录,并使用以下命令预处理数据集:
python preprocessing/prontoqa.py
随后运行以下命令训练模型:
torchrun --nnodes 1 --nproc_per_node 4 run.py args/prontoqa_coconut.yaml
找到验证准确率最高的检查点,并将其路径放入 args/prosqa_coconut_eval.yaml 中的 load_model_path。进行评估:
torchrun --nnodes 1 --nproc_per_node 4 run.py args/prosqa_coconut_eval.yaml
ProsQA
ProsQA 数据集位于 data/prosqa_*.json。
随后运行以下命令训练模型:
torchrun --nnodes 1 --nproc_per_node 4 run.py args/prosqa_coconut.yaml
找到验证准确率最高的检查点,并将其路径放入 args/prosqa_coconut_eval.yaml 中的 load_model_path。进行评估:
torchrun --nnodes 1 --nproc_per_node 4 run.py args/prosqa_coconut_eval.yaml
引用
如果您在研究中使用此代码库,请使用以下 BibTex 条目引用我们的论文:
@article{hao2024training,
title={Training Large Language Models to Reason in a Continuous Latent Space},
author={Hao, Shibo and Sukhbaatar, Sainbayar and Su, DiJia and Li, Xian and Hu, Zhiting and Weston, Jason and Tian, Yuandong},
journal={arXiv preprint arXiv:2412.06769},
year={2024}
}
许可证
此代码以 MIT 许可证发布(参见 LICENSE)。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器