基于本地 LLM 的智能数据标注工具,支持自定义标签、批量处理、多种标注类型。
- 🤖 智能提示词生成 - 一句话自动生成专业级标注配置,零门槛使用
- 🎯 灵活的标签定义 - 支持动态类别、自定义提示词、多种标注类型
- 📦 8+预设模板 - 覆盖电商、金融、客服、内容审核等常见场景
- ⚡ 高性能批量处理 - 智能批量优化,性能提升 85%
- 🔐 结构化输出 - 使用 JSON Schema 保证输出格式
- 📊 多种标注类型 - 置信度、分类、提取、排序、生成
- 🎓 Few-shot 学习 - 支持示例引导,提升准确率
- 🚀 简单易用 - RESTful API,开箱即用
# 克隆项目
git clone <repo-url>
cd llm-ds-label
# 安装依赖
npm install
# 配置环境变量
cp .env.example .env
# 编辑 .env 文件,配置 LLM endpoint
# 编译
npm run build
# 启动服务
npm run serve服务启动在 http://localhost:3000
# 测试 API
curl -X POST http://localhost:3000/api/label \
-H 'Content-Type: application/json' \
-d '{
"content": "这个产品很好,非常满意",
"labelDefinition": {
"records": {
"情感": ["正面", "负面", "中性"]
}
}
}'详细快速开始指南请查看 QUICKSTART.md
- QUICKSTART.md - 快速开始指南
- docs/API.md - API 完整文档(包含智能提示词生成器)
- docs/PROMPT_GENERATOR_GUIDE.md - 智能提示词生成器使用指南 ⭐
- docs/UNIFIED_API_GUIDE.md - API 使用指南
- docs/BATCH_OPTIMIZATION.md - 批量优化说明
- examples/scenario-examples.md - 三大场景 12 个示例
- 用户情感分析(3个)
- 商品品类识别(3个)
- 金融场景分析(6个)
普通用户不需要设计提示词,只需一句话描述需求:
# 生成标注配置
curl -X POST http://localhost:3000/api/prompt/generate \
-H 'Content-Type: application/json' \
-d '{
"description": "我要分析电商评论是正面还是负面"
}'
# 自动返回完整的labelDefinition配置响应:
{
"success": true,
"data": {
"labelDefinition": {
"name": "电商评论情感分析",
"records": {"情感": ["正面", "负面", "中性"]},
"promptTemplate": "你是专业的电商评论分析师...",
"systemPrompt": "你是一位拥有10年经验的电商客服主管...",
"labelType": "classification"
}
}
}立即使用生成的配置:
# 生成 → 使用
LABEL_DEF=$(curl -s -X POST http://localhost:3000/api/prompt/generate \
-H 'Content-Type: application/json' \
-d '{"description": "分析评论情感"}' | jq '.data.labelDefinition')
curl -X POST http://localhost:3000/api/label \
-H 'Content-Type: application/json' \
-d "{
\"content\": \"这个产品很好\",
\"labelDefinition\": $LABEL_DEF
}"详细使用指南:docs/PROMPT_GENERATOR_GUIDE.md
POST /api/label // 单条标注
POST /api/batch // 批量标注
{
"content": "待标注文本",
"labelDefinition": {
"records": {
"类别名": ["标签1", "标签2", "标签3"]
},
"promptTemplate": "自定义提示词(可选)",
"systemPrompt": "角色设定(可选)",
"examples": [],
"labelType": "classification",
"config": {
"maxLabels": 1,
"includeConfidence": true
}
}
}{
"labelType": "confidence"
}输出:
{
"情感": {
"正面": 0.95,
"负面": 0.03,
"中性": 0.02
}
}{
"labelType": "classification",
"config": {
"maxLabels": 1,
"includeConfidence": true
}
}输出:
{
"情感": {
"label": "正面",
"confidence": 0.95
}
}{
"labelType": "extraction",
"customSchema": {
"type": "object",
"properties": {
"产品名称": {"type": "string"},
"价格": {"type": "string"}
}
}
}输出:
{
"产品名称": "iPhone 15 Pro",
"价格": "9999元"
}import { createBatchOptimizer } from './src/core/batch-optimizer.js';
const optimizer = createBatchOptimizer(labeler);
const { results, stats } = await optimizer.labelBatchOptimized(
items,
labelDefinition,
{
maxBatchSize: 50,
batchThreshold: 5,
}
);
// 性能提升:85%
// 20条数据:60秒 → 9秒详细说明请查看 docs/BATCH_OPTIMIZATION.md
# LLM 配置
LLM_PROVIDER=litellm
LLM_MODEL=lm_studio/glm-4.7
LLM_ENDPOINT=http://10.19.80.14:30400/
LLM_API_KEY=sk-xxx
# API 配置
API_PORT=3000
API_HOST=0.0.0.0interface LabelDefinition {
// 基本信息
name?: string;
version?: string;
// 标签定义(必需)
records: {
[categoryName: string]: string[];
};
// 自定义功能(全部可选)
promptTemplate?: string; // 自定义提示词
systemPrompt?: string; // 系统提示词(角色设定)
customSchema?: object; // 自定义 JSON Schema
examples?: FewShotExample[]; // Few-shot 示例
labelType?: LabelType; // 标注类型
config?: LabelConfig; // 配置选项
// 元数据
metadata?: {
description?: string;
created?: string;
[key: string]: any;
};
}curl -X POST http://localhost:3000/api/label \
-H 'Content-Type: application/json' \
-d '{
"content": "物流慢但质量好",
"labelDefinition": {
"records": {
"情感": ["正面", "负面", "中性"],
"购买意向": ["高", "中", "低"]
},
"promptTemplate": "你是电商分析师。请分析:{content}",
"systemPrompt": "你是某平台10年经验的专家。"
}
}'curl -X POST http://localhost:3000/api/label \
-H 'Content-Type: application/json' \
-d '{
"content": "Apple iPhone 15 Pro Max 智能手机",
"labelDefinition": {
"records": {
"一级品类": ["手机数码", "电脑办公", "家用电器"],
"品牌": ["苹果", "华为", "小米"]
}
}
}'curl -X POST http://localhost:3000/api/label \
-H 'Content-Type: application/json' \
-d '{
"content": "招商银行睿远稳进混合型基金,风险等级R3",
"labelDefinition": {
"records": {
"产品大类": ["基金", "银行理财", "保险", "信托"],
"风险等级": ["R1低风险", "R2中低风险", "R3中风险", "R4中高风险", "R5高风险"]
},
"labelType": "classification",
"config": {
"maxLabels": 1,
"includeConfidence": true
}
}
}'更多示例请查看 examples/scenario-examples.md
llm-ds-label/
├── src/
│ ├── api/ # API 路由和控制器
│ ├── core/ # 核心逻辑
│ │ ├── llm-client.ts
│ │ ├── labeler.ts
│ │ ├── prompt-builder.ts
│ │ └── batch-optimizer.ts
│ ├── models/ # 类型定义
│ ├── processors/ # 数据处理器
│ └── utils/ # 工具函数
├── scripts/ # 测试脚本
├── examples/ # 使用示例
└── docs/ # 文档
# 编译
npm run build
# 启动服务
npm run serve
# 开发模式
npm run dev:api
# 测试
npm run test:api:quick # API 快速测试
npm run test:unified-api # 统一 API 测试
npm run test:batch-optimizer # 批量优化测试
# 示例测试
cd examples && ./test-scenarios.sh| 数据量 | 逐条处理 | 批量优化 | 性能提升 |
|---|---|---|---|
| 10条 | 30秒 | 7秒 | +77% |
| 20条 | 60秒 | 9秒 | +85% |
| 50条 | 150秒 | 15秒 | +90% |
| 100条 | 300秒 | 30秒 | +90% |
A: 不是必须的,两个字段都是可选的。简单场景只用 promptTemplate,专业场景可以分开使用(systemPrompt 设定角色,promptTemplate 描述任务)。
A: 使用 labelType: "classification" 并设置 includeConfidence: true:
{
"labelType": "classification",
"config": {
"maxLabels": 1,
"includeConfidence": true
}
}输出:
{
"产品大类": {
"label": "基金",
"confidence": 0.98
}
}A: 使用批量优化功能,将多条语料合并成一次 LLM 调用:
import { createBatchOptimizer } from './src/core/batch-optimizer.js';
const optimizer = createBatchOptimizer(labeler);
const { results } = await optimizer.labelBatchOptimized(items, labelDef);性能提升可达 85-90%。
MIT
欢迎提交 Issue 和 Pull Request!
立即开始使用 LLM 自动标注系统! 🚀