用途:构建可自我改进的预测服务,让新写入的标注数据回流到模型训练,并在不阻塞写入与推理路径的前提下完成异步训练与模型热切换。适合写入吞吐可由单进程承载(每秒数千次写入量级)且希望避免引入 Redis、RabbitMQ、Celery 等外部组件的场景。
主要能力:数据写入、审计事件发布与条件性训练入队在同一事务内完成,事务回滚则不留孤立任务或幽灵事件;训练任务由 honker 队列异步领取,通过命名锁(如 training-lock)串行化训练、防止并发重复训练;训练完成后写入 models 表并调用 notify("model-updated"),推理进程通过 db.listen 监听通知实现模型热切换,无需轮询。Schema 包含 training_data 与 models 两张表,并提供 idx_models_active 部分索引。API 提供 /ingest 与 /predict 两个 FastAPI 端点。
使用方式:以 honker.open 打开 DB,创建 db.queue("training") 与 db.stream("data-events"),建表;ingest 中在事务内 INSERT training_data、data_stream.publish 审计事件,并在 COUNT(*) % BATCH_SIZE == 0 时 training_queue.enqueue;worker 通过 training_queue.claim("trainer") 领取任务,训练后保存 artifact 并更新 models 表;推理侧启动时 load_active_model,后台 model_listener 在收到通知时重新 joblib.load。运行可用 Makefile 分别启动 run-server 与 run-worker,或 run-all;环境变量包括 DB_PATH、BATCH_SIZE(默认 100)、ARTIFACTS_DIR、LOG_LEVEL。
限制:仅适用于单进程写入,SQLite 一次只允许一个写入者;训练为进程内执行,不支持 GPU 训练与多机分布式训练;数据量超过 100GB 应改用 Postgres 或数据仓库;不支持工作流 DAG(链式训练阶段、扇出);批量突发写入会按阈值累积多个训练任务,锁只保证串行执行,其余会重试,必要时需在 worker 中做去重;模型 artifact 在 Kubernetes emptyDir 上为临时文件,Pod 重启后需由首次训练重建,若需启动即推理可将 artifact 作为 blob 存入 models 表;未提供完整配置、收费、价格与效果数据。