必须用长期记忆实现跨会话状态持久化,全局变量仅限单次调用内临时存储;长期记忆基于用户/bot id云端持久化,全局变量随函数结束销毁;配置需开启长期记忆、设json记忆项、代码中显式读写并校验none。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在扣子(Coze)Bot中实现跨会话的用户状态持久化、共享配置或运行时参数复用,必须绕过默认的无状态设计,借助长期记忆(Long-term Memory)机制与全局变量配合使用——但二者本质不同,不能混用,错误配置会导致数据丢失或覆盖。
理解长期记忆与全局变量的根本区别
长期记忆是扣子平台提供的持久化存储能力,基于用户ID或Bot ID自动绑定,数据存于云端,生命周期以月计;全局变量是Bot运行时内存中的Python变量,仅存活于单次函数调用内,函数结束即销毁。
你在Bot逻辑里写的 config = {"timeout": 30} 是局部变量;写 global CONFIG; CONFIG = {...} 仍是全局变量——但它【不会跨会话保留,重启Bot后清空】,和“长期记忆”毫无关系。
真正需要长期保存的用户偏好、对话历史摘要、审批流程状态,必须显式写入长期记忆;临时计算中间值、API响应缓存、函数内参数传递,才用全局/局部变量。
启用并配置长期记忆存储
第一步:进入 Bot 设置 →「长期记忆」→ 开启开关 → 选择记忆粒度(按用户 / 按Bot / 按对话)。
第二步:在「知识库」中添加一条结构化记忆项,类型选「JSON」,Key 命名为 user_profile_{{user_id}},Value 示例:{"theme":"dark","lang":"zh-CN","last_order_id":"ORD-789"}。
第三步:在插件或函数代码中,通过 bot.get_memory(key="user_profile_{{user_id}}") 读取;用 bot.set_memory(key="user_profile_{{user_id}}", value=profile_dict) 写入。注意:key 中的 {{user_id}} 会被自动替换为当前用户唯一标识。
【必须校验返回值是否为 None,未初始化的 key 不会自动创建空字典】,直接对 None 调用 .get() 会报错。
在Python函数中安全使用全局变量
方法一:声明 global 变量用于单次会话内状态暂存
在函数顶部写 global CACHED_TOKEN, LAST_TIMESTAMP;后续赋值如 CACHED_TOKEN = response["access_token"] 才真正修改模块级变量。
扣子 (Windows) 是字节跳动推出的一站式 AI Agent 平台客户端,支持多 Agent 协作、可视化工作流和知识库管理。最新版本新增 Claude Code 与 Codex CLI 接入、多端同步和项目级管理功能,同时优化了插件生态和 AI 响应速度,让用户在 Windows 上即可高效创建、运行和协作智能体,满足个人、团队及企业场景需求。
方法二:用模块级字典模拟“伪全局”状态(推荐)
定义 _STATE = {"retry_count": 0, "pending_task": None} 放在函数外;函数内直接操作 _STATE["retry_count"] += 1。无需 global 声明,避免命名污染,且支持嵌套键访问。
方法三:禁止在协程或异步函数中依赖全局变量
扣子函数默认同步执行,若你手动改造成 asyncio 协程,global 变量将不可靠——每个协程栈独立,修改不互通。此时必须改用 threading.local() 或传参方式。
长期记忆 + 全局变量协同工作流程
第一步:用户发送“切换主题为深色” → Bot 函数触发
第二步:调用 profile = bot.get_memory(key=f"user_profile_{user_id}") or {}
第三步:更新本地字典 profile["theme"] = "dark",同时写入长期记忆 bot.set_memory(key=f"user_profile_{user_id}", value=profile)
第四步:为本次会话提速,将 theme 缓存到模块变量:_SESSION_CACHE[user_id] = profile["theme"](_SESSION_CACHE 是 dict 类型模块变量)
第五步:后续同会话内其他函数直接读 _SESSION_CACHE.get(user_id),跳过长期记忆IO,响应更快。










