拓冰建站拓冰建站
首页 / 资讯中心 / 正文

AI学习之大模型如何连续工作超过24h:TaoToken 长程任务配置与上下文压缩实战

1. 长程任务为什么总在半夜断掉大模型连续工作超过 24 小时听起来像是把一句 prompt 丢进去、第二天早上来收结果。但真正跑过长时间任务的人都知道现实往往是跑到第 3 小时上下文爆了第 6 小时模型开始重复劳动第 9 小时因为一次网络抖动整个会话卡死第 12 小时你发现它把前面改好的文件又改回去了。这就是长程任务Long-Horizon Task的核心难点。它考验的不是单次推理有多强而是模型在几十轮、上百轮工具调用之后还能不能记住「我做到哪了」「哪些路走不通」「下一步该干什么」。普通对话窗口像一张不断被覆盖的草稿纸新内容写进来旧内容就被挤出去而长程任务需要的是一个会自己整理笔记的助手把关键状态压缩保留把无效尝试修剪掉。我试过用最朴素的方式让模型连续改一个中型项目不压缩上下文、不做状态落盘、断了就重开。结果很稳定地失败——要么上下文溢出报错要么模型在第 20 轮之后开始「失忆」把已经修好的模块重新改坏。后来我把上下文压缩、自我修正循环、任务续跑这三件事拆开逐个解决才把连续运行时间从几小时拉到 24 小时以上。这篇就按 AI 学习的场景把长程任务的工程配置讲清楚。你会拿到可复制的config.toml和settings.json骨架知道每个参数管什么也会看到连续运行的验证动作和日志观察点。所有请求统一走 TaoToken 的 Key/API 通道省去多平台切换的麻烦。2. TaoToken 前置统一 Key 与通道准备长程任务最怕中途换环境。你在这台机器上跑了一半换台机器 Key 不一样、Base URL 不一样续跑就断了。所以第一步是把访问通道固定下来。TaoToken 在这里的角色是一个统一的模型访问入口。你申请一个 Key就能通过同一套 API 规范调用不同模型Base URL 固定为https://taotoken.net/api。对长程任务来说这意味着你的脚本、配置文件、日志格式都不用因为换模型而重写。先拿到 Key。打开控制台创建 API Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite创建之后把 Key 存到环境变量里不要硬编码进脚本。Linux/macOS 下export TAOTOKEN_API_KEYsk-你的keyWindows PowerShell$env:TAOTOKEN_API_KEYsk-你的key如果你用的是 Anthropic 风格的客户端比如 Claude Code 这类编码 Agent接入文档里有对应的 Base URL 和请求头写法照着配即可https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite注意长程任务建议单独建一个 Key方便在控制台按 Key 维度看调用量和异常不要和日常聊天混用同一个 Key。通道准备好之后先做一次最小连通性验证确认 Key 和 Base URL 都对curl https://taotoken.net/api/v1/models \ -H Authorization: Bearer $TAOTOKEN_API_KEY返回模型列表就说明通道通了。这一步别跳过很多「跑一半断掉」的问题根源是 Key 额度或权限在中途出问题提前确认能省掉大量排查时间。3. 可复制配置config.toml 与 settings.json 骨架长程任务的配置分两层一层是「模型怎么调」放在config.toml一层是「任务怎么续」放在settings.json。下面给的是骨架参数按你的实际模型名和路径替换。3.1 config.toml模型与压缩参数# config.toml —— 长程任务模型配置骨架 [api] base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY timeout_seconds 600 # 单次请求超时长任务给足 max_retries 5 # 网络抖动自动重试 retry_backoff 2.0 # 退避倍数避免雪崩 [model] name your-model-name # 替换为控制台可用的模型名 max_output_tokens 8192 temperature 0.2 # 工程任务压低随机性 [context] window_tokens 128000 # 模型上下文窗口 compact_threshold 0.75 # 用到 75% 就触发压缩 keep_recent_turns 12 # 压缩时保留最近 N 轮原文 summary_max_tokens 2000 # 压缩摘要的上限 [task] checkpoint_interval 300 # 每 300 秒落盘一次状态 max_wall_clock_hours 26 # 硬上限防止无限跑 self_correct_rounds 8 # 单步最多自我修正轮数几个参数值得展开说。compact_threshold 0.75是关键不要等上下文满了才压缩那时候模型已经开始丢信息。提前到 75% 触发压缩过程本身还有余量。keep_recent_turns保证最近的操作细节不被摘要抹掉因为最近的报错往往最相关。self_correct_rounds限制单步修正次数防止模型在一个死胡同里反复撞墙。3.2 settings.json任务续跑与状态管理{ task_id: migrate-py2to3-001, workspace: /data/projects/legacy-backend, state_file: /data/state/task_state.json, log_file: /data/logs/longrun.log, resume: { enabled: true, load_state_on_start: true, save_on_each_step: true }, compaction: { strategy: summary_plus_recent, drop_failed_attempts: true, keep_decisions: true }, self_correction: { enabled: true, signal: test_result, on_failure: locate_and_retry }, guardrails: { max_tokens_total: 8000000, max_steps: 2000, stop_on_repeated_error: 3 } }state_file是续跑的命根子。每次步骤结束把「当前进度、已改文件、未通过测试、已知死路」写进去。进程挂了重启先读这个文件模型就知道自己睡了一觉之前干到哪了。drop_failed_attempts对应上下文压缩里的修剪逻辑失败的尝试只保留结论不保留过程。stop_on_repeated_error是保险丝同一个错误连续出现 3 次就停下来避免烧掉大量 token 却毫无进展。3.3 压缩与自我修正的衔接上下文压缩不是简单截断而是「摘要 保留最近原文 丢弃失败过程」。你可以把它理解成模型自己在写工作日志今天试了三种改法前两种不行第三种通过——日志里只记「方案 A、B 不可行采用方案 C」不记三种方案的完整代码。自我修正循环则依赖外部信号。signal test_result表示以测试结果作为奖励信号测试通过就前进失败就定位重试。这比让模型自己说「我修好了」可靠得多因为模型的自我评价经常过于乐观。4. 连续运行验证与日志观察点配置写完先别急着上 24 小时。用一个小任务做 30 分钟到 1 小时的短程验证确认压缩和续跑逻辑都对再放大时间。4.1 启动与断点续跑验证启动任务python run_longtask.py \ --config config.toml \ --settings settings.json \ --task 将 workspace 内 Python 2 代码迁移到 Python 3确保单元测试通过验证续跑最直接的办法是手动杀进程再重启# 跑到中途记录当前 step kill -9 $(pgrep -f run_longtask.py) # 重新启动观察是否从断点继续 python run_longtask.py --config config.toml --settings settings.json --resume重启后看日志里有没有loaded state from ... stepN以及模型是否跳过了已经完成的文件。如果它从头开始扫说明load_state_on_start没生效检查state_file路径和写盘权限。4.2 日志观察点长程任务的日志要盯这几个点[compact] triggered at 0.76, summarized 34 turns - 6 turns [checkpoint] step142 saved, files_changed18, tests_passed203/260 [self-correct] step143 test failed, locating error in auth/legacy.py [guardrail] repeated error x3, halting task[compact]行看压缩是否按阈值触发摘要前后轮数比例是否合理。如果压缩后模型立刻开始重复劳动说明摘要丢多了调大summary_max_tokens或keep_recent_turns。[checkpoint]行看进度是否单调前进。tests_passed应该总体上升如果长时间不动甚至下降说明模型在原地打转。[self-correct]行看修正是否收敛。同一个文件反复出现修正可能是任务本身有歧义需要你介入澄清。[guardrail]行是最后防线。出现它说明任务卡死了这时候别硬跑去看state_file里记录的失败原因。4.3 24 小时连续运行的结果形态跑满 24 小时之后你期望看到的不是「所有测试通过」这种完美结局而是一份可读的进度报告完成了多少文件、剩余多少、哪些是已知难点、哪些尝试被证明不可行。长程任务的价值在于把人的重复劳动压缩掉而不是完全不需要人。第二天早上你花 20 分钟看报告、处理几个卡点比你自己从头改 500 个文件高效得多。5. 本篇常见错排查上下文溢出报错context_length_exceeded。多半是compact_threshold设太高或者压缩没真正生效。先确认日志里有[compact]行再把阈值降到 0.7 试试。另外检查keep_recent_turns是不是设得过大保留太多原文等于没压缩。续跑后模型重复已完成的工作。检查state_file是否真的写进去了以及重启时是否带了--resume。还有一种情况是状态文件写了但模型没读到——确认load_state_on_start为 true且状态文件路径在重启后依然可访问。自我修正陷入死循环。同一个错误反复出现通常是任务描述有歧义或者测试用例本身有问题。把stop_on_repeated_error调低到 2让它早点停下来然后人工看日志定位。别指望模型自己跳出它理解不了的坑。请求超时或频繁重试。长任务单次请求可能很慢timeout_seconds给到 600 甚至更高。max_retries配合retry_backoff用但要注意重试次数太多会拖长整体时间5 次左右比较平衡。Key 中途失效或额度耗尽。这是最隐蔽的断点。建议在guardrails之外单独加一个额度监控或者在控制台设置用量提醒。长任务跑之前确认额度充足别跑到第 20 小时才发现调不动了。模型输出被截断导致 JSON 解析失败。长任务里模型经常要输出结构化状态max_output_tokens给小了会截断。工程任务建议不低于 8192复杂状态输出可以更高。6. 把长程任务跑稳的下一步长程任务能不能连续跑 24 小时本质是三件事有没有做到位上下文压缩让模型不「失忆」自我修正让模型不「幻觉」状态落盘让任务不「断片」。这三件事都不依赖某个特定模型而是工程配置的功夫。配置骨架已经给你了接下来按你的实际项目替换模型名、路径和任务描述先跑一个 1 小时的短程验证确认压缩日志和续跑都正常再逐步拉长时间。跑的过程中多盯日志里的[compact]和[checkpoint]这两个信号最能反映任务健康度。如果你要长期做编码类或 Agent 类任务可以考虑用 Coding Plan 把调用额度固定下来避免长任务跑到一半被额度打断https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite想先验证模型在长上下文下的表现可以直接在模型对话里丢一段长材料试试压缩效果https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite接入过程中遇到报错先查接入文档里的错误码说明大部分上下文和鉴权问题都有对应条目https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewriteKey 管理和用量查看在控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite最后说个实际经验长程任务第一次跑别直接上 24 小时。先用 1 小时验证压缩和续跑再用 6 小时验证自我修正的收敛性最后才放到 24 小时。每放大一档重点看日志里有没有新的异常模式。跑稳一次之后这套配置就能复用到其他长任务上边际成本很低。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门