OpenChat
基于 GPT-NeoX-20B 的开源聊天机器人训练工具包,支持 4300 万指令微调与检索增强
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 GPT-NeoX-20B 的开源聊天机器人训练工具包,支持 4300 万指令微调与检索增强
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2023 年 3 月,OpenAI 发布 GPT-4 的余波尚未平息,一个由 Together、LAION 和 Ontocord.ai 联合发起的开源项目悄然登场——OpenChatKit。它的目标听起来既简单又宏大:给任何人和任何组织一个打造专用或通用聊天机器人的完整工具链。
这个项目在 GitHub 上线仅数小时便斩获数千星,引发 Reddit 社区热议,被开发者称为「第一个真正意义上的开源 ChatGPT 替代方案」。它不仅是一个模型,更是一套从数据准备、模型训练到推理部署的完整流水线。
OpenChatKit 的核心是 GPT-NeoXT-Chat-Base-20B——一个基于 EleutherAI 的 GPT-NeoX-20B 进一步微调的大语言模型,参数量达 200 亿。
这个微调过程并不简单。团队与 LAION 和 Ontocord 合作,构建了 OIG-43M 数据集(Open Instruction Generalist),包含超过 4300 万条指令-响应对。Together 公开强调:整个训练过程运行在 100% 碳中和算力之上。GPT-NeoXT-Chat-Base-20B-v0.16 正是基于这个数据集微调后的产物,在 HuggingFace 上开放下载。
值得注意的是,该模型并非简单地对 GPT-NeoX 做指令微调,还专门训练了一个 60 亿参数的内容审核模型(Moderation Model),用来过滤不当输入和输出,这使得整个系统在开放场景下更具安全性。
OpenChatKit 不仅仅押注 20B 大模型。项目仓库中实际上包含三条并行的模型路线:
| 模型 | 参数量 | 定位 |
|---|---|---|
| GPT-NeoXT-Chat-Base-20B | 20B | 主力对话模型 |
| Pythia-Chat-Base-7B | 7B | 轻量快速对话 |
| Llama-2-7B-32K-beta | 7B | 长上下文微调实验 |
三条路线各有独立的训练脚本、数据下载工具和权重转换工具。这反映了 Together 的工程思路:不把鸡蛋放在一个篮子里,让不同规模的模型都能通过同一套工具链进行训练和推理,方便社区根据硬件条件选择适合的版本。
在 inference/ 目录下,项目的推理实现相当干净。conversation.py 负责对话状态管理,使用 <human> 和 <bot> 标签构建 prompt 模板,并在每次对话中注入当前日期时间,增强模型的时间感知能力。bot.py 则是整个推理引擎的核心,核心流程如下:
from transformers import AutoTokenizer, AutoModelForCausalLM
from accelerate import infer_auto_device_map, init_empty_weights
class ChatModel:
def __init__(self, model_name, gpu_id, max_memory):
device = torch.device('cuda', gpu_id)
# 使用 accelerate 库实现多卡推理分发
config = AutoConfig.from_pretrained(model_name)
with init_empty_weights():
model = AutoModelForCausalLM.from_config(config)
device_map = infer_auto_device_map(model, max_memory=max_memory, ...)
值得关注的是,项目采用 accelerate 库的 infer_auto_device_map 实现模型权重的自动分片,将大模型智能分配到多卡 VRAM 中,而不是简单做数据并行。这使得 20B 模型可以分布在 4×48GB 的 GPU 集群上运行。
推理还内置了 StoppingCriteria 流式输出机制——当检测到 <human> 标签出现时(意味着模型开始生成用户下一轮输入),立即停止生成,实现多轮对话的精准截断。
retrieval/ 模块实现了实验性的检索增强生成(RAG)能力。项目预先构建了 Wikipedia 的 3 句级检索索引,当用户提问时,系统先用 BM25/向量化方法从索引中检索相关段落,再将这些段落作为上下文注入模型 prompt。
这在 2023 年初是一个相当前沿的设计——彼时 RAG 概念还未像今天这样成为 LLM 应用的标准范式。项目甚至预留了 tools/ 目录用于扩展更多检索来源,但目前该模块相对简单,是进一步开发的良好起点。
training/ 目录包含完整的模型训练代码。训练基于 DeepSpeed 的 Pipeline Parallelism 实现,支持多 GPU 分布式训练,关键参数包括:
--num-layers:每张 GPU 的 Transformer 层数(配合 pipeline parallelism)--data-group-size:数据并行 worker 数--pipeline-group-size:Pipeline 并行 worker 数--optimizer:支持普通 Adam 和 8bit Adam(节省显存)训练日志集成 Weights & Biases(wandb)和 Loguru,方便实时监控训练损失曲线、梯度分布等关键指标。数据管道支持 FAISS-GPU 加速大规模向量化检索。
必须坦诚地说,OpenChatKit 的部署难度相当高,对硬件要求近乎苛刻:
GPU 显存门槛:
软件依赖:
不支持 Docker 一键部署,所有环境需要通过 conda env create -f environment.yml 手动构建。没有 Web UI 界面,只能通过命令行 python inference/bot.py --model togethercomputer/GPT-NeoXT-Chat-Base-20B 启动交互式终端聊天。
如果你有一台 A100 80GB 的机器,这个过程大约需要 1-2 小时;如果只有消费级 RTX 3090(24GB),需要借助模型量化或跳过 20B 模型,转而使用 7B 版本。
OpenChatKit 是一个面向研究者和开发者的开源大模型训练+推理工具包,以 GPT-NeoX-20B 为核心,通过 4300 万条指令数据微调出对话能力,同时提供检索增强和内容审核模块。开源协议友好(Apache 2.0),代码质量较高,但部署门槛极高——至少需要 48GB 显存的专业 GPU 才能流畅运行 20B 版本,这限制了它的实际可用性。
它的真正价值不在于直接拿来部署聊天机器人,而在于提供了一套完整可复现的训练流程:从数据构建到模型微调、从分布式训练到推理部署,每个环节都有代码和文档。对于想深入理解大模型训练流程的开发者,OpenChatKit 是一座值得深挖的宝矿。

图1:Together AI 官方机构头像(来源:GitHub Avatars)