EasyInstruct
浙大 ZJUNLP 出品,ACL 2024 接收,统一封装 LLM 指令生成、筛选与提示的 Pyth
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
浙大 ZJUNLP 出品,ACL 2024 接收,统一封装 LLM 指令生成、筛选与提示的 Pyth
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
大语言模型(LLM)的强大能力,很大程度上取决于如何向它下达指令。同样一个问题,问法不同,LLM 给出的答案可能天差地别。
在学术研究和工业实践中,研究者们已经积累了大量指令工程(Instruction Engineering)技巧:从最基础的"零样本提示"(Zero-shot Prompting),到复杂些的"思维链"(Chain-of-Thought),再到让模型自己生成训练指令的"自指令"(Self-Instruct)方法。这些方法在不同的论文里用不同的代码实现,彼此不兼容,换一个场景就得重写一遍。
浙江大学知识图谱实验室(ZJUNLP)敏锐地捕捉到了这个痛点,在 2024 年初推出了 EasyInstruct,并在 ACL 2024 系统演示 Track 中发表。这是一套统一的 Python 框架,将主流的指令生成、指令筛选、提示词设计三大能力模块化、可复用,让研究者和开发者不必从零造轮子。
EasyInstruct 的架构围绕三个核心组件展开:生成器(Generators)、筛选器(Selectors) 和 提示词(Prompts)。
生成器负责让 LLM 自动生成指令数据,这在构建微调数据集时尤为关键。项目支持以下生成策略:
| 方法 | 说明 |
|---|---|
| Self-Instruct | 从少量种子指令出发,让模型自行批量生成大量新指令(原始论文复现) |
| Evol-Instruct | 对已有指令进行"进化"——增加复杂度、深化推理步骤,逼迫模型应对高难度任务 |
| Backtranslation(回译) | 将答案反写成问题,再让模型判断问题-答案对的质量 |
| KG2Instruct | 利用知识图谱(Knowledge Graph)结构化数据生成事实性指令 |
其中 KG2Instruct 来自同一实验室的 KnowLM 项目,可基于 Wikipedia 等知识库自动提取三元组,生成知识密集型问答对,是 EasyInstruct 区别于同类框架的特色能力。
生成的大量指令良莠不齐,筛选器负责质量过滤。项目内置 8 种筛选策略:
这种"生成 + 筛选"的二级架构,是工业级数据生产的标准范式。
提示词模块将各种提示技术封装为统一接口:
这种抽象让用户在切换不同提示策略时,只需改一行代码,无需重写整个流程。
图1:EasyInstruct 整体架构图(来源:GitHub 仓库)
EasyInstruct 是浙江大学 KnowLM 大项目的子模块,继承了其工程规范。
依赖栈:PyTorch 2.1 + Transformers 4.34 + Accelerate,标准的 NLP 深度学习栈。API 层支持 OpenAI(GPT-4/3.5)、Anthropic Claude、Cohere 以及国产 ChatGLM2/LLaMA2 等模型。
代码组织:项目采用标准的 Python 包结构,核心代码集中在 easyinstruct/ 目录下:
easyinstruct/
engines/ # 模型推理后端(OpenAI/Claude/ChatGLM2/LLaMA2)
generators/ # 各种指令生成策略
selectors/ # 质量筛选器
prompts/ # 提示词模板
utils/ # API 配置(代理、Key 管理)
质量评价:代码有完整类型注解、docstring 覆盖率高、依赖版本明确锁定在 setup.py 中。但测试覆盖率和端到端集成测试相对薄弱,主要依赖 demo/app.py 中的 Gradio 界面进行人工验证。
作为纯 Python 库,EasyInstruct 没有 Docker 部署选项,但上手门槛很低:
pip install easyinstruct
安装后两种使用方式:
SelfInstructGenerator 等类,传入 API Key 和引擎配置,调用 .generate() 即可批量生成指令demo/app.py,在浏览器中可视化操作,支持生成器选择、参数配置、结果预览,适合快速验证想法硬件需求:无需 GPU,因为指令生成本质是调用远程 API(OpenAI/Anthropic/Cohere),本地只做调度和后处理。CPU 环境下 2GB 内存即可运行。
局限性:
easyinstruct/utils/api.pyEasyInstruct 被 ACL 2024 System Demonstration Track 接收,说明学术界对其工程完成度和实用价值的认可。ACL System Demo 赛道注重可复现性和易用性,EasyInstruct 的模块化设计 + Gradio Demo 正好符合这一标准。
从更宏观的视角看,EasyInstruct 代表了一个趋势:指令数据的自动化生产正在成为 LLM 训练流水线的标配环节。类似的工具还有 Stanford 的 Self-Instruct、Microsoft 的 WizardLM/Evol-Instruct 等,EasyInstruct 的优势在于统一接口 + 多种策略融合,降低了策略对比实验的门槛。