用 800+ 持久化 Agent 驱动一座 AI 城市:并发、上下文缓存与推理成本

Reddit r/LocalLLaMA 产品

摘要

开发者分享其 LLM 驱动的人生模拟项目 Slow Vale 的工程实践:中文服已有 800+ 持久化 AI 居民共处一个持续运行的城市,文章详述并发决策、动态动作空间、上下文缓存与推理成本。当前运行时使用托管的 DeepSeek Flash 而非本地推理。

过去一年我独立开发了 Slow Vale,一个 LLM 驱动的人生模拟项目。中文服目前有 800+ AI 居民共处一座持续运行的城市。这是一篇关于并发决策、动态动作空间、上下文缓存以及持久化多 Agent 系统运营成本的工程实践文章。当前运行时使用托管的 DeepSeek Flash,而非本地推理。我是该项目的开发者。原文以中文撰写,后经 AI 翻译并润色为英文。下文产品数据截至 2026 年 10 月 7 日。 ## 在持续推进的世界中进行异步决策 每个角色每天大约发起 300–400 次 LLM 调用,每次调用的平均上下文约为 30,000 token。一次调用包含角色的状态、相关经历、当前环境以及可用动作。模型选择一个动作及其参数;后端将该决策转化为一项占用时间和资源的活动。 游戏时间与真实时间并存。睡觉可能占用游戏内 8 小时,而说一句话可能只需游戏内 1 分钟。推理本身消耗真实时间。当一次调用还在进行时,其他角色可能已经改变了环境,世界时钟也在继续推进。 交互也涉及互斥关系。如果 A 正在和 B 聊天,C 就不能同时把 B 拉入另一场对话。设施、生产任务等各类活动都有各自获取和释放被占用资源的规则。 ## 将并发推理与世界状态变更分离 LLM 调用可以并发执行,但模型的响应不直接修改世界状态。响应结果返回到世界的执行流程中,经过有效性检查后,由拥有世界状态的执行组件应用变更。 例如,货架上最后一条鱼在角色开始推理时可能仍然可售。但当响应到达时,另一位居民可能已经买走了它。购买意图必须与当前库存进行核验。同样,模型想要交谈的对象可能已经离开、去睡觉或开始了其他活动。 因此,在决策所用的上下文与执行时的世界状态之间存在一个明确的时间差。系统必须区分角色想做什么、该动作是否仍然有效、以及实际产生了哪些效果。完成、失败、中断和恢复各自需要一致的状态转移。 ## 占用时间的活动共享同一套运行时 移动、生产、对话和睡眠具有不同的时长、参与者和完成条件。使用一套通用运行时,可以统一管理忙碌的角色、资源冲突和服务恢复,而无需为每种玩法单独构建调度器。 前端也必须追踪实际进度:活动何时开始、已运行多久、是否完成、产出了什么。日志和场景动画需要与后端提交的事实相对应。这是持久化世界中复杂性的重要来源:一个事件可能影响未来的决策、持久化数据、其他居民以及玩家界面。 ## 决策上下文是后端架构的一部分 仅靠性格描述不足以支撑一个长期自主行动的角色。每次决策都需要角色当前的需求、位置、资产、正在进行的关注事项、相关关系,以及当下实际可用的动作。这些输入的更新频率和生命周期各不相同。性格相对稳定;饥饿和精力持续变化;库存和其他角色的状态可能在几秒内发生变化;一段经历可能在很长时间后仍然影响一段关系。 每类信息都需要明确的规则:如何进入上下文、如何更新、如何退出角色当前的注意力范围。动作空间也需要反映游戏状态。呈现给模型的选项应披露其执行条件和相关状态,而后端保留最终验证权。否则,角色会反复尝试不可用的动作,或浪费调用次数去试图理解从未被明确披露的规则。 我在这一点上投入了大量精力:组织稳定信息与动态信息、控制无关历史的增长、避免重复提醒、保持上下文前缀的稳定。这些直接影响行为质量、推理延迟和缓存命中率,因此属于后端架构的范畴。 ## 每天约 50 亿 token,模型费用不到 100 美元 中文服目前每天处理约 50 亿 token,模型费用低于 100 美元。主要使用 DeepSeek Flash 等低成本模型,同时保持 90% 以上的缓存命中率。Token 计数包含缓存输入。在一个调用频繁、角色众多、上下文很长的系统中,可复用的稳定前缀直接决定了账单。哪些信息保持稳定、哪些每次调用都在变化、以及如何排序,都需要精心设计。 ![实际 DeepSeek 用量](https://preview.redd.it/71a7tjghs7uh1.jpg?width=1360&format=pjpg&auto=webp&s=5a57fc15627240d8a416b48947d9b6bd34eed474) 2026 年 10 月 7 日(GMT+8)实际 DeepSeek 用量与账单:所有 API Key 合计约 44.24 亿 token、163,742 次请求,费用 472.33 元人民币。当日使用的模型为 deepseek-flash。 ## 动态动作空间与前缀缓存的权衡 一个具体的工程权衡是:在使用工具调用(tool calling)或结构化输出时,如何表示动态动作空间。可用动作和参数值在每次决策时都在变化:附近有哪些设施、哪些商品可用、角色能和谁交谈,都取决于当前世界状态。 将这些选项直接编码到工具定义或输出 schema 中,可以提供更强的输出约束,但也会导致 schema 频繁变化。在我早期测试的一些 API 实现中,这些定义会成为请求前缀的一部分。schema 一变,其后原本稳定的上下文就无法命中缓存。 在那个阶段,我选择了将主路径改为普通文本生成 JSON,在后端进行解析和验证,并在解析失败时回退到严格 schema。模型仍然接收到了明确的、依赖状态的行动选项,但这些选项位于当前决策上下文中,而不是在一个不断变化的输出 schema 里。这使得稳定指令和可复用历史位于上下文前部,当前状态和行动选项位于末尾。 代价是放弃了主路径上解码时的格式保证。应用层必须处理格式错误的输出,并在执行时针对世界状态验证动作和参数。因此,90% 以上的缓存命中率来自于对整个请求结构的设计,而不仅仅是启用了某个供应商功能。该百分比指的是从缓存提供的输入 token 占比;模型仍然为每次决策生成全新的输出。 在比较调用方式时,我会综合考虑格式可靠性、角色行为、缓存复用、延迟和成本。以上数据仅涵盖模型费用。随着居民数量增长,数据库负载、状态推送、日志存储和场景渲染同样重要。低成本推理让持续模拟成为可能,但长期运营仍然依赖整个系统的资源管理。 ## 用运行手册组织 AI 协作 独自维护如此多的模块,需要给 AI 提供一个相对完整的工作环境。我提供了开发和运维工具,包括日志访问、Langfuse、增长分析、数据库以及生产服务维护流程。 ![Codex 用量](https://preview.redd.it/iqo7313ks7uh1.png?width=962&format=png&auto=webp&s=a6af26e071e8b76ff55c0d708a223e53664a89e8) 我的 Codex 用量:累计约 432.5 亿 token,最长连续使用 85 天。Codex 只是我使用的 AI 编程工具的一部分。
查看原文

相似文章

Poor Man's Agentic Modeling: Simulating Large LLM-Agent Societies on a Laptop

arXiv cs.AI

This paper proposes a method for simulating large LLM-agent societies on a laptop by fitting low-parameter surrogate models from a few hundred queries, using a statistical-physics-based taxonomy to predict when this approximation holds. The approach is validated on EconAgent and several other simulations using DeepSeek-elicited agent behaviors.

@realfxw: 做 Agent 工作流或自主智能体循环时,一个极度影响体验的瓶颈在于:每一个细小的分支判断、工具路由、任务完成度检查或安全拦截,如果全部塞给昂贵的推理大模型(Reasoning LLM),不仅每次调用带来数秒的延迟,Token 成本也会呈…

X AI KOLs Timeline

这篇文章介绍了开源清单awesome-jev-projects,它通过解耦System 1快速决策模型和System 2推理大模型来优化AI代理工作流,降低延迟和成本,并提供代码级参考。