第十五章《构建赛博小镇》案例复盘|逐章学习笔记 #792
Unanswered
jarvanstack
asked this question in
💬 Exercises & Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
原章链接:第十五章 构建赛博小镇
1. 分层架构为什么合理
Godot 负责确定性的渲染、碰撞、移动和 UI;FastAPI 负责权威游戏状态、API 和日志;HelloAgents 负责开放式对话与记忆。这样 LLM 延迟不会阻塞帧循环,游戏规则也不依赖模型“自觉遵守”。
权威状态必须在后端状态机:位置/物品/任务/好感度只能由验证过的游戏事件改变。LLM 输出只是
dialogue + proposed_intent,由规则层决定是否生效。否则玩家可通过提示注入让 NPC 直接发奖励或改状态。2. NPC 角色与记忆
角色提示应区分不可变设定(背景、知识边界、禁区)、当前状态(情绪、任务)和检索记忆。每个 NPC 使用独立命名空间;每个玩家的关系记忆也隔离,避免 A 玩家信息泄露给 B。
短期记忆保存最近对话,情景记忆保存重要事件,语义记忆保存经确认的玩家偏好/世界事实。不是每句话都长期保存:根据用户同意、剧情重要度、重复和未来价值整合。记忆要能纠正、遗忘和溯源;NPC 的“记错”若是玩法设计也应可控,不能与数据错误混在一起。
3. 好感度不能只交给 LLM
LLM 可对互动分类(帮助、冒犯、完成任务等)并给证据,但实际分数由规则引擎根据事件类型、冷却、每日上限和剧情约束计算。需防重复刷同一句、模型偏好奉承、玩家操纵系统提示以及不同语言/群体的不公平。
可用:
delta = base_event_score × novelty × relationship_modifier,并设置单次和每日上下限。重要关系跳变需要真实任务事件或人工编写剧情,不由闲聊无限累积。4. 轻负载与实时体验
背景对话可离线批量生成并缓存,玩家直接互动才实时调用。常见闲聊、世界知识和 NPC 间日程可用小模型;关键剧情或复杂记忆再路由强模型。所有请求异步,UI 显示思考/可取消;超过延迟预算返回角色化占位或模板回复,不能卡住游戏。
成本预算按“每玩家每分钟调用数、上下文 token、背景任务”控制;语义缓存需包含 NPC、关系状态和世界版本,避免把不合适的旧回复复用到新剧情。
5. 多人和 NPC 间互动的并发
多人场景应以房间/世界分区,服务端为权威事件序列。每个事件包含序号、actor、目标、世界版本和幂等 ID;同一 NPC 的关键状态串行更新,读请求可并行。后台 NPC 对话只能基于快照,提交时若世界版本变化需重算或丢弃。
6. 内容安全与隐私
应有年龄分级、敏感内容过滤、举报和审计;玩家输入与检索记忆都视为不可信,系统提示和密钥不回显;NPC 不应声称自己是真人或给出高风险专业建议。日志最小化 PII,并提供记忆/账号删除。对 UGC 和模型输出的版权、肖像和社区规范也需产品层治理。
7. 评估与扩展优先级
评估包括角色一致性、对话相关性、记忆正确/泄露率、剧情约束违反、P95 延迟、每会话成本、重复回复、内容安全和玩家留存。先做任务系统和可靠状态机,再做复杂情绪;先解决多人隔离与成本,再扩大世界。NPC 间互动、动态事件和个性化学习只有在可观察、可回滚的事件系统上才可持续扩展。
All reactions