你可能遇到过这种场景:Dify里跑了一个客户服务机器人,对话进行到第101轮,结果前面的内容,没了。没错,Dify的内置数据库默认只保留最近100轮对话,超出部分,自动截断,丢了就丢了。
如果你需要完整保存所有历史交互记录,比如用于客服对话存档、合规审计等场景,那就必须借助外部存储节点,把会话数据流给接过来。

配置外部存储节点接入权限
首先,打开Dify控制台,在左侧导航栏找到【Settings】,然后选择【Advanced】选项卡。第一步,把【External Storage Integration】这个开关打开。
关键一步来了:记得勾选【Enable session history export】。这个开关一旦打开,系统就会强制启用会话数据外发机制。注意了,如果这个开关没开,后面你做的所有配置都不生效,等于白忙活。
接着,页面底部会生成一个API密钥,复制下来,妥善保管。这个密钥只显示一次,丢了就得重新生成。
部署兼容的外部存储服务
接下来,你需要准备一个外部存储来接收数据。这里有两种常见方案,任选其一。
方法一:使用PostgreSQL自建表结构
创建一个名为dify_sessions的数据库,然后执行下面的建表语句:
CREATE TABLE sessions (id VARCHAR(255) PRIMARY KEY,app_id VARCHAR(255),user_id VARCHAR(255),messages JSONB NOT NULL,created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW());
这里有个技术细节需要留意:messages字段的类型必须是JSONB。如果用了其他类型,Dify写入数据时格式校验会失败,整条记录都会被丢弃。
方法二:对接MinIO对象存储
如果你更习惯用对象存储,可以在MinIO里新建一个存储桶,命名为dify-archives,并设置好读写权限。Dify写入数据时,会按照/app_id/user_id/YYYYMMDD/session_id.json这个路径来存放文件,完全自动管理。
绑定存储服务到具体应用
存储服务部署好后,需要把它绑定到目标应用上。
第一步:进入Dify应用编辑页,点击【Chatbot】标签,然后一直往下滚动,找到【Session Management】区域。
第二步:点击【Configure External Storage】,从下拉列表中选择你刚才配置好的PostgreSQL或MinIO实例。
第三步:在【Session Retention Policy】中,选择【Archive All】,然后保存设置。
设置完成后,新发起的会话将不再写入Dify的本地数据库,而是直接传到外部存储。但要注意,之前已有的会话历史不会自动迁移,你需要单独调用/v1/export_sessions这个API来触发补录。
验证归档是否生效
配置全部完成后,最好验证一下。
在应用中发起一次新对话,随便发送3条以上的消息。然后立即登录PostgreSQL,执行SELECT COUNT(*) FROM sessions WHERE app_id = 'your_app_id';,看看能不能查到记录。如果用的是MinIO,就去对应的路径下检查是否有.json文件生成。
如果查不到记录,先别慌。回到【Settings】→【Advanced】,确认一下API密钥是否过期,或者检查一下网络策略,看是不是拦截了Dify到存储服务地址的出站POST请求。
