tom-running/gezida-aigc

0

stars

1

commits

Python

primary language

Jun 20, 2026

updated

README

gezida-aigc

二分类模型服务:识别一段中文文本是「AIGC 改写」(label=1) 还是「人类原创」(label=0)。

详细方案见 方案.md


0. 环境

  • 训练机:10.0.0.6(Ubuntu 24.10、Python 3.12、RTX 4090)
  • 推理机:客户 T4 服务器(仅需 onnxruntime-gpu + transformers/tokenizers

1. 安装

cd ~/gezida-aigc
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt

2. 准备基础数据集(占位)

# 从 train_sample.jsonl 生成 dataset/human/seed.jsonl 与 dataset/aigc_rewrite/seed.jsonl
python scripts/seed_from_sample.py
# 也可以限制行数做快速冒烟:python scripts/seed_from_sample.py --limit 100

这两份 jsonl 是占位。你之后用真实基础数据集替换 dataset/human/*.jsonldataset/aigc_rewrite/*.jsonl 即可,无需改代码

3. 启动 API

source .venv/bin/activate
nohup uvicorn src.server.app:app --host 0.0.0.0 --port 8000 \
    > logs/api.log 2>&1 &

健康检查:

curl -s http://127.0.0.1:8000/healthz | jq

4. HTTP 接口

4.1 推送 AIGC 改写样本(增量)

curl -s -X POST http://127.0.0.1:8000/samples \
  -H 'Content-Type: application/json' \
  -d '{"samples":[{"text":"...AIGC 改写后的段落...","source":"deepseek_v3"}]}'

返回示例:

{
  "received": 1, "inserted": 1, "duplicated": 0,
  "pending_unused": 1, "training_triggered": false,
  "trigger_reason": "unused_positive 1 < 1000"
}

触发条件(均在 config.yaml 中可调):

  • trigger.min_unused_positive(默认 1000)
  • trigger.min_interval_seconds(默认 3600)

4.2 查询最新版本

curl -s http://127.0.0.1:8000/model/version | jq

4.3 下载最新模型

客户端必须带上自己当前持有的版本号 current_version

# 一致 → 不更新
curl -s "http://127.0.0.1:8000/model/latest?current_version=20260427_153012" | jq
# {"updated": false, "latest_version": "20260427_153012"}

# 不一致或不带 → 直接下载
curl -OJ "http://127.0.0.1:8000/model/latest?current_version=20260101_000000"
# 落盘文件:model_<version>.zip

响应头:X-Model-VersionX-Model-SHA256

4.4 训练任务状态

curl -s http://127.0.0.1:8000/training/<version> | jq

5. 客户端推理

解压 model_<version>.zip 后:

pip install onnxruntime-gpu transformers
python scripts/predict_onnx.py --model_dir ./onnx --text "段落..."

6. 配置

所有可调项在 config.yaml。修改后重启 uvicorn

配置说明
trigger.min_unused_positive触发训练的未使用正样本阈值
trigger.min_interval_seconds距上次成功训练的最小间隔(秒)
train.batch_size / train.epochs / train.lr训练超参
data.neg_pos_ratio训练时人类:AIGC 采样比
base_model默认 hfl/chinese-roberta-wwm-ext(base)

7. 日志位置

  • API:logs/api.log
  • 每次训练:logs/train_<version>.log
  • 模型产物:models/<version>/

Contributors

tom-running

1 commits

tom-running/gezida-aigc

0

stars

1

commits

Python

primary language

Jun 20, 2026

updated

README

gezida-aigc

二分类模型服务:识别一段中文文本是「AIGC 改写」(label=1) 还是「人类原创」(label=0)。

详细方案见 方案.md


0. 环境

  • 训练机:10.0.0.6(Ubuntu 24.10、Python 3.12、RTX 4090)
  • 推理机:客户 T4 服务器(仅需 onnxruntime-gpu + transformers/tokenizers

1. 安装

cd ~/gezida-aigc
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt

2. 准备基础数据集(占位)

# 从 train_sample.jsonl 生成 dataset/human/seed.jsonl 与 dataset/aigc_rewrite/seed.jsonl
python scripts/seed_from_sample.py
# 也可以限制行数做快速冒烟:python scripts/seed_from_sample.py --limit 100

这两份 jsonl 是占位。你之后用真实基础数据集替换 dataset/human/*.jsonldataset/aigc_rewrite/*.jsonl 即可,无需改代码

3. 启动 API

source .venv/bin/activate
nohup uvicorn src.server.app:app --host 0.0.0.0 --port 8000 \
    > logs/api.log 2>&1 &

健康检查:

curl -s http://127.0.0.1:8000/healthz | jq

4. HTTP 接口

4.1 推送 AIGC 改写样本(增量)

curl -s -X POST http://127.0.0.1:8000/samples \
  -H 'Content-Type: application/json' \
  -d '{"samples":[{"text":"...AIGC 改写后的段落...","source":"deepseek_v3"}]}'

返回示例:

{
  "received": 1, "inserted": 1, "duplicated": 0,
  "pending_unused": 1, "training_triggered": false,
  "trigger_reason": "unused_positive 1 < 1000"
}

触发条件(均在 config.yaml 中可调):

  • trigger.min_unused_positive(默认 1000)
  • trigger.min_interval_seconds(默认 3600)

4.2 查询最新版本

curl -s http://127.0.0.1:8000/model/version | jq

4.3 下载最新模型

客户端必须带上自己当前持有的版本号 current_version

# 一致 → 不更新
curl -s "http://127.0.0.1:8000/model/latest?current_version=20260427_153012" | jq
# {"updated": false, "latest_version": "20260427_153012"}

# 不一致或不带 → 直接下载
curl -OJ "http://127.0.0.1:8000/model/latest?current_version=20260101_000000"
# 落盘文件:model_<version>.zip

响应头:X-Model-VersionX-Model-SHA256

4.4 训练任务状态

curl -s http://127.0.0.1:8000/training/<version> | jq

5. 客户端推理

解压 model_<version>.zip 后:

pip install onnxruntime-gpu transformers
python scripts/predict_onnx.py --model_dir ./onnx --text "段落..."

6. 配置

所有可调项在 config.yaml。修改后重启 uvicorn

配置说明
trigger.min_unused_positive触发训练的未使用正样本阈值
trigger.min_interval_seconds距上次成功训练的最小间隔(秒)
train.batch_size / train.epochs / train.lr训练超参
data.neg_pos_ratio训练时人类:AIGC 采样比
base_model默认 hfl/chinese-roberta-wwm-ext(base)

7. 日志位置

  • API:logs/api.log
  • 每次训练:logs/train_<version>.log
  • 模型产物:models/<version>/

Contributors

tom-running

1 commits

Languages

Python

99.4%