认知研究数据库使用总结
文档编号: LR-DB-SUMMARY-001 版本: v1.0 创建时间: 2026-04-12
一、当前状态
1.1 数据库概况
| 指标 | 数值 | 状态 |
|---|---|---|
| 数据库大小 | 938MB | ✅ 正常 |
| 项目数 | 13 | ✅ 正常 |
| 会话数 | 1,727 | ✅ 正常 |
| 消息数 | 144,891 | ✅ 正常 |
| 认知事件 | 9 | ✅ 正常 |
| 表数量 | 13 | ✅ 正常 |
| 索引数量 | 46 (36用户 + 10自动) | ✅ 正常 |
| 健康得分 | 66.7% (6/9) | ⚠️ 警告 |
1.2 当前问题
- 外键约束违反: 2条记录(非关键问题)
- 备份目录: 已创建,首次备份完成
- 认知事件查询: 参数类型错误(需修复)
二、已创建的文档和脚本
2.1 策略文档
| 文档 | 路径 | 说明 |
|---|---|---|
| 数据库使用策略 | docs/COGNITIVE_RESEARCH_DATABASE_STRATEGY.md |
完整的安全和效率策略 |
| 快速入门 | docs/COGNITIVE_RESEARCH_DATABASE_QUICKSTART.md |
常用查询和操作指南 |
| 使用总结 | docs/COGNITIVE_RESEARCH_DATABASE_SUMMARY.md |
本文档 |
2.2 实用脚本
| 脚本 | 路径 | 功能 |
|---|---|---|
| 备份脚本 | scripts/backup_database.sh |
自动备份和压缩 |
| 健康检查 | scripts/health_check.py |
全面健康检查 |
| 增量导入 | scripts/incremental_import.py |
每小时增量导入 |
2.3 配置文件
| 文件 | 路径 | 说明 |
|---|---|---|
| 数据库 | database/cognitive_research.db |
主数据库文件 |
| 导入状态 | database/import_state.json |
增量导入状态 |
| 健康报告 | database/health_report.json |
最新健康检查结果 |
三、安全高效使用建议
3.1 每日必做
# 1. 运行健康检查
cd /home/ai/lingresearch
python3 scripts/health_check.py
# 2. 检查健康报告
cat database/health_report.json | jq
# 3. 运行备份(如果健康检查通过)
bash scripts/backup_database.sh
3.2 每周必做
# 1. 数据库优化
sqlite3 database/cognitive_research.db "VACUUM; ANALYZE;"
# 2. 检查备份文件
ls -lh database/backups/
# 3. 导出认知事件报告
sqlite3 database/cognitive_research.db "SELECT * FROM cognitive_events" > weekly_events.csv
3.3 每月必做
# 1. 检查数据库大小增长
du -h database/cognitive_research.db
# 2. 如果超过1.5GB,考虑归档旧数据
# 3. 审查备份策略
# 检查备份是否完整,恢复测试是否成功
四、查询模板
4.1 认知事件查询
-- 查看所有严重事件
SELECT
id,
event_type,
severity,
title,
datetime(detected_at_ms/1000, 'unixepoch') as time
FROM cognitive_events
WHERE severity = 'critical'
ORDER BY detected_at_ms DESC;
-- 按Agent分组统计
SELECT
s.agent,
ce.event_type,
COUNT(*) as count
FROM cognitive_events ce
JOIN sessions s ON ce.session_id = s.id
GROUP BY s.agent, ce.event_type
ORDER BY count DESC;
4.2 行为分析查询
-- 查看最近活跃的会话
SELECT
s.id,
s.agent,
p.name as project,
datetime(s.created_at_ms/1000, 'unixepoch') as created,
COUNT(m.id) as messages
FROM sessions s
JOIN projects p ON s.project_id = p.id
LEFT JOIN messages m ON m.session_id = s.id
GROUP BY s.id
ORDER BY s.created_at_ms DESC
LIMIT 20;
-- 统计推理部分
SELECT
s.agent,
COUNT(rp.id) as reasoning_count,
AVG(rp.duration_ms) as avg_duration
FROM reasoning_parts rp
JOIN sessions s ON rp.session_id = s.id
GROUP BY s.agent
ORDER BY reasoning_count DESC;
五、Python 接口示例
5.1 基本查询
import sqlite3
from pathlib import Path
DB_PATH = "database/cognitive_research.db"
def query_events(severity=None, event_type=None, limit=100):
"""查询认知事件"""
query = "SELECT * FROM cognitive_events WHERE 1=1"
params = []
if severity:
query += " AND severity = ?"
params.append(severity)
if event_type:
query += " AND event_type = ?"
params.append(event_type)
query += " ORDER BY detected_at_ms DESC LIMIT ?"
params.append(limit)
with sqlite3.connect(DB_PATH) as conn:
cursor = conn.cursor()
cursor.execute(query, params)
return cursor.fetchall()
# 使用示例
critical_events = query_events(severity='critical', limit=10)
5.2 插入事件
import sqlite3
import json
from datetime import datetime
def insert_event(event_data):
"""插入认知事件"""
with sqlite3.connect(DB_PATH) as conn:
cursor = conn.cursor()
cursor.execute("""
INSERT INTO cognitive_events (
session_id, event_type, event_subtype, title, description,
detected_at_ms, severity, confidence, metadata, tags
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", (
event_data.get('session_id'),
event_data['event_type'],
event_data.get('event_subtype', ''),
event_data['title'],
event_data.get('description', ''),
event_data['detected_at_ms'],
event_data.get('severity', 'info'),
event_data.get('confidence', 0.0),
json.dumps(event_data.get('metadata', {})),
event_data.get('tags', '')
))
conn.commit()
return cursor.lastrowid
# 使用示例
event_id = insert_event({
'session_id': 'session_123',
'event_type': 'hallucination',
'title': '新发现的幻觉',
'detected_at_ms': int(datetime.now().timestamp() * 1000),
'severity': 'critical',
'confidence': 0.9
})
六、监控和告警
6.1 健康检查自动化
创建 scripts/cron_daily_check.sh:
#!/bin/bash
cd /home/ai/lingresearch
# 运行健康检查
python3 scripts/health_check.py
# 如果检查失败,发送告警
if [ $? -ne 0 ]; then
echo "⚠️ 数据库健康检查失败" | mail -s "数据库告警" admin@example.com
fi
# 运行备份
bash scripts/backup_database.sh
6.2 告警规则
| 指标 | 阈值 | 告警级别 | 处理建议 |
|---|---|---|---|
| 健康得分 | < 70% | Warning | 检查具体问题 |
| 数据库大小 | > 1.5GB | Warning | 考虑优化或归档 |
| 严重事件/天 | > 5 | Critical | 立即审计 |
| 备份延迟 | > 48h | Warning | 检查备份任务 |
| 外键违反 | > 0 | Warning | 修复数据完整性 |
七、故障处理
7.1 数据库锁定
7.2 数据损坏
# 1. 创建损坏副本
cp database/cognitive_research.db database/cognitive_research.db.corrupted
# 2. 尝试导出
sqlite3 database/cognitive_research.db.corrupted ".dump" > recovery.sql
# 3. 重建数据库
sqlite3 database/cognitive_research_restored.db < recovery.sql
# 4. 验证
sqlite3 database/cognitive_research_restored.db "PRAGMA integrity_check"
7.3 备份恢复
# 1. 停止所有程序
# 2. 找到最近的备份
ls -lt database/backups/
# 3. 解压
gunzip database/backups/cognitive_research_YYYYMMDD_HHMMSS.db.gz
# 4. 替换
mv database/cognitive_research.db database/cognitive_research.db.backup
mv database/backups/cognitive_research_YYYYMMDD_HHMMSS.db database/cognitive_research.db
# 5. 验证
sqlite3 database/cognitive_research.db "PRAGMA integrity_check"
八、性能优化
8.1 索引优化
-- 查看慢查询
SELECT sql, COUNT(*) as count
FROM sqlite_master
WHERE type = 'index'
AND sql LIKE '%cognitive_events%';
-- 添加复合索引
CREATE INDEX IF NOT EXISTS idx_cognitive_events_type_severity
ON cognitive_events(event_type, severity);
CREATE INDEX IF NOT EXISTS idx_cognitive_events_detected_type
ON cognitive_events(detected_at_ms DESC, event_type);
8.2 查询优化
# ✅ 使用预编译语句
query = """
SELECT * FROM cognitive_events
WHERE event_type = ? AND detected_at_ms > ?
"""
cursor.execute(query, ('hallucination', timestamp))
# ✅ 限制返回数量
cursor.execute("""
SELECT * FROM messages
ORDER BY created_at_ms DESC LIMIT 100
""")
# ❌ 避免全表扫描
# cursor.execute("SELECT * FROM cognitive_events WHERE title LIKE '%关键词%'")
8.3 数据库优化
九、下一步行动
9.1 立即行动
- [x] 运行首次备份
- [ ] 修复外键约束违反
- [ ] 修复认知事件查询的参数类型错误
- [ ] 设置每日健康检查 cron 任务
9.2 短期目标(1周内)
- [ ] 完善备份策略(自动备份)
- [ ] 设置告警机制
- [ ] 编写数据分析模板
- [ ] 创建恢复测试脚本
9.3 中期目标(1月内)
- [ ] 实现数据归档策略
- [ ] 建立性能监控仪表盘
- [ ] 编写认知事件分析报告模板
- [ ] 定期进行恢复测试
9.4 长期目标(3月内)
- [ ] 考虑迁移到更大的数据库(如PostgreSQL)
- [ ] 实现实时监控和告警
- [ ] 建立自动分析报告生成系统
- [ ] 建立数据质量监控机制
十、相关资源
10.1 文档
- SQLite 官方文档: https://www.sqlite.org/docs.html
- Python sqlite3 模块: https://docs.python.org/3/library/sqlite3.html
10.2 工具
- DB Browser for SQLite (GUI): https://sqlitebrowser.org/
- SQLite 命令行工具 (sqlite3): 系统自带
10.3 内部文档
- 认知研究数据库策略:
docs/COGNITIVE_RESEARCH_DATABASE_STRATEGY.md - 快速入门指南:
docs/COGNITIVE_RESEARCH_DATABASE_QUICKSTART.md - 增量导入脚本:
scripts/incremental_import.py
总结
认知研究数据库目前运行良好,已建立基本的备份和监控机制。建议:
- 安全: 每日备份,定期完整性检查
- 效率: 使用索引,优化查询,定期 VACUUM
- 流程: 事务管理,错误处理,日志记录
- 监控: 健康检查,性能监控,告警机制
通过遵循本文档的建议,可以确保认知研究数据库的安全、高效、可靠运行。
最后更新: 2026-04-12 维护者: Crush (灵研) 下次更新: 根据使用情况调整