miro-engine

generate_characters

你这个判断是对的。脚本我已经改成了分块处理 + 实时进度 + 可恢复,不会再“长时间没反应”。

我做了哪些改动

  • 按块读取 source/*.txt(默认 chunk_size=7000, overlap=600
  • 每处理一个块都会打印进度,并把候选人物缓存到:
    • /root/miro-engine/.cache/character_candidates.json
  • 人物 JSON 逐个生成、逐个落盘(不是最后一次性写)
  • 增加了可控参数,避免一次跑太重:
    • --max-name-chunks:只先跑前 N 块
    • --max-characters:只先生成前 N 个人物
    • --reuse-candidates:复用上次候选名单继续生成
    • --request-timeout:单次请求超时秒数

我已做过冒烟测试,能正常边跑边写出 JSON。


推荐运行方式(大文件友好)

先小范围验证:

1
2
3
4
5
6
7
8
cd /root/miro-engine
source .venv/bin/activate
python generate_characters.py \
--source-dir /root/miro-engine/source \
--output-dir /root/miro-engine/data/characters \
--model deepseek-chat \
--max-name-chunks 3 \
--max-characters 10

确认没问题后全量跑:

1
2
3
4
python generate_characters.py \
--source-dir /root/miro-engine/source \
--output-dir /root/miro-engine/data/characters \
--model deepseek-chat

如果中断后继续(不重复抽取名字):

1
2
3
4
5
python generate_characters.py \
--source-dir /root/miro-engine/source \
--output-dir /root/miro-engine/data/characters \
--model deepseek-chat \
--reuse-candidates

如果你愿意,我可以再加一个 --skip-existing,让它遇到已存在的人物 JSON 自动跳过,只补新增人物。