本文档旨在详细说明 agent
模块(及其依赖的通用模块)如何管理存储在 Redis 中的对话历史记录,包括数据结构、自动保留策略、过期机制以及手动清理功能。
agent
模块本身不直接执行 Redis 操作。实际的 Redis 交互由一个通用的核心模块 common/redis_conversation_manager.py
负责。API 层(如 unified_api.py
)在接收到请求后,会调用这个通用模块来创建、更新或获取对话数据。
系统使用以下三种类型的 Redis Key 来存储和管理对话历史:
对话元数据 (Hash): conversation:{conversation_id}:meta
Hash
对话消息列表 (List): conversation:{conversation_id}:messages
role
, content
, timestamp
等字段。List
用户对话索引 (List): user:{user_id}:conversations
conversation_id
。此列表按时间倒序排列,最新的对话ID在列表的最前面。List
系统采用一种“主动限制”(Proactive Capping)的机制,在数据写入时就自动维护数据的数量上限,无需额外的清理脚本。
conversation_id
通过 LPUSH
命令添加到该用户对话列表的头部。紧接着,系统会立即使用 LTRIM
命令修剪这个列表,只保留最新的 N 个对话。配置: 保留的对话数量由 app_config.py
中的 USER_MAX_CONVERSATIONS
参数控制。
# app_config.py
USER_MAX_CONVERSATIONS = 5 # 每个用户最多保留的对话数
LPUSH
到对应对话消息列表的头部。同样,系统会立即使用 LTRIM
命令修剪该列表,只保留最新的 N 条消息。配置: 保留的消息数量由 app_config.py
中的 CONVERSATION_MAX_LENGTH
参数控制。
# app_config.py
CONVERSATION_MAX_LENGTH = 10 # 单个对话最大消息数
系统支持为对话数据设置自动过期时间。
:meta
和 :messages
这两个 Key 设置或续期 TTL(Time-To-Live)。配置: TTL 的值由 app_config.py
中的 CONVERSATION_TTL
参数(单位为秒)控制。
# app_config.py
CONVERSATION_TTL = 7 * 24 * 3600 # 默认为7天
如何禁用 TTL: 将 CONVERSATION_TTL
的值设置为 None
即可禁用 TTL。redis-py
客户端在接收到 None
作为过期时间时,会忽略该命令,从而使 Key 永久存储。
# app_config.py - 禁用TTL的示例
CONVERSATION_TTL = None
系统提供了一套完整的API来管理和操作存储在Redis中的agent对话历史记录。
GET /api/v0/user/<user_id>/conversations
user:{user_id}:conversations
和 conversation:{conversation_id}:meta
user_id
(路径参数): 用户IDlimit
(查询参数, 可选): 返回对话数量限制,默认为 USER_MAX_CONVERSATIONS
GET /api/v0/conversation/<conversation_id>/messages
conversation:{conversation_id}:messages
和 conversation:{conversation_id}:meta
conversation_id
(路径参数): 对话IDlimit
(查询参数, 可选): 返回消息数量限制GET /api/v0/conversation_stats
user:*:conversations
、conversation:*:meta
、qa_cache:*
等KeyPOST /api/v0/conversation_limit_enforcement
user:*:conversations
, conversation:*:meta
, conversation:*:messages
user_id
(可选): 指定用户ID,如果不提供则处理所有用户user_max_conversations
(可选): 每用户最大对话数,默认使用 USER_MAX_CONVERSATIONS
配置conversation_max_length
(可选): 每对话最大消息数,默认使用 CONVERSATION_MAX_LENGTH
配置dry_run
(可选): 试运行模式,默认为 false
。设为 true
时只模拟执行,不实际删除数据mode
: 执行模式("global"或"user_specific")dry_run
: 是否为试运行模式processed_users
: 处理的用户数total_conversations_processed
: 处理的对话总数total_conversations_deleted
: 删除的对话总数total_messages_trimmed
: 裁剪的消息总数execution_summary
: 每个用户的详细处理结果execution_time_ms
: 执行时间(毫秒)POST /api/v0/conversation_cleanup
user:*:conversations
, conversation:*:meta
, conversation:*:messages
模式1: 删除指定用户
{"user_id": "guest"}
模式2: 删除指定对话
{"conversation_id": "guest:20250125143022155"}
// 或
{"thread_id": "guest:20250125143022155"}
模式3: 清空所有agent对话数据 ⚠️ 危险操作
{"clear_all_agent_data": true}
conversation:*:meta
、conversation:*:messages
、user:*:conversations
Key模式4: 清理无效引用
{"cleanup_invalid_refs": true}
维护数据一致性,不删除实际对话数据
返回: 根据操作模式返回相应的统计信息,包括删除的对话数、消息数、处理时间等
获取用户对话列表:
curl -X GET http://127.0.0.1:8084/api/v0/user/guest/conversations
bash
curl -X GET http://127.0.0.1:8084/api/v0/conversation/guest:20250125143022155/messages
获取系统统计信息:
curl -X GET http://127.0.0.1:8084/api/v0/conversation_stats
试运行模式 - 查看会删除什么:
curl -X POST -H "Content-Type: application/json" \
-d '{"dry_run": true}' \
http://127.0.0.1:8084/api/v0/conversation_limit_enforcement
为特定用户执行限额策略:
curl -X POST -H "Content-Type: application/json" \
-d '{"user_id": "guest", "user_max_conversations": 3}' \
http://127.0.0.1:8084/api/v0/conversation_limit_enforcement
全局执行自定义限额策略:
curl -X POST -H "Content-Type: application/json" \
-d '{"user_max_conversations": 5, "conversation_max_length": 20}' \
http://127.0.0.1:8084/api/v0/conversation_limit_enforcement
对话清理示例:
清理无效引用:
curl -X POST -H "Content-Type: application/json" \
-d '{"cleanup_invalid_refs": true}' \
http://127.0.0.1:8084/api/v0/conversation_cleanup
删除特定用户的所有对话:
curl -X POST -H "Content-Type: application/json" \
-d '{"user_id": "test_user"}' \
http://127.0.0.1:8084/api/v0/conversation_cleanup
删除特定对话:
curl -X POST -H "Content-Type: application/json" \
-d '{"conversation_id": "guest:20250125143022155"}' \
http://127.0.0.1:8084/api/v0/conversation_cleanup
清空所有agent对话数据 ⚠️ 危险操作:
curl -X POST -H "Content-Type: application/json" \
-d '{"clear_all_agent_data": true}' \
http://127.0.0.1:8084/api/v0/conversation_cleanup
试运行模式响应:
{
"code": 200,
"success": true,
"message": "操作成功",
"data": {
"mode": "global",
"dry_run": true,
"parameters": {
"user_max_conversations": 5,
"conversation_max_length": 10
},
"processed_users": 2,
"total_conversations_processed": 6,
"total_conversations_deleted": 2,
"total_messages_trimmed": 0,
"execution_summary": [
{
"user_id": "test_user",
"original_conversations": 1,
"kept_conversations": 1,
"deleted_conversations": 0,
"messages_trimmed": 0
},
{
"user_id": "wang11",
"original_conversations": 5,
"kept_conversations": 3,
"deleted_conversations": 2,
"messages_trimmed": 0
}
],
"execution_time_ms": 15,
"timestamp": "2025-08-07T22:54:27.941807",
"response": "限额执行完成"
}
}
清理无效引用响应:
{
"code": 200,
"success": true,
"message": "操作成功",
"data": {
"operation_mode": "cleanup_invalid_refs",
"processed_users": 2,
"cleaned_references": 0,
"response": "无效引用清理完成",
"timestamp": "2025-08-07T22:54:27.975516"
}
}
删除指定对话响应:
{
"code": 200,
"success": true,
"message": "操作成功",
"data": {
"operation_mode": "delete_conversation",
"conversation_id": "guest:20250125143022155",
"user_id": "guest",
"deleted_messages": 8,
"execution_time_ms": 2,
"existed": true,
"response": "对话删除完成",
"timestamp": "2025-08-07T22:54:27.990033"
}
}
参数错误响应示例:
{
"code": 400,
"success": false,
"message": "请求参数错误",
"data": {
"error_type": "missing_required_params",
"response": "参数错误:必须指定操作模式",
"error": "请提供以下参数组合之一: user_id | conversation_id/thread_id | clear_all_agent_data | cleanup_invalid_refs",
"timestamp": "2025-08-07T22:54:28.002030"
}
}
系统的对话管理由三层策略共同保障:自动化的实时保留策略、补救性的限额执行API和精确的数据清理API。这三者是互补关系,各司其职。
LTRIM
操作)LTRIM
命令实时确保每个用户的对话数和每个对话的消息数不超过预设上限 (USER_MAX_CONVERSATIONS
和 CONVERSATION_MAX_LENGTH
)。/api/v0/conversation_limit_enforcement
)/api/v0/conversation_cleanup
)这种分层设计确保了系统在各种场景下都能有效管理Redis中的对话数据,既保证了性能,又提供了灵活性和安全性。
clear_all_agent_data
操作:
限额执行操作:
dry_run: true
预览操作结果API使用顺序:
查看统计 → 试运行预览 → 实际执行 → 验证结果
定期维护建议:
cleanup_invalid_refs
清理无效引用/api/v0/conversation_stats
统计信息参数验证:
权限控制:
定期检查以下指标:
通过合理使用这些API,可以有效地管理和维护Redis中的对话历史数据,确保系统的稳定性和性能。