跳转至

Session v2 集成指南

基于Claude Code设计的不可变Session管理系统 集成日期: 2026-04-01 状态: ✅ 已完成并测试


📊 集成概述

集成成果

Session v2已完全集成到LingFlow核心系统 - 导出路径: lingflow.core - 可用导入: from lingflow.core import SessionManager, SessionSnapshot - 向后兼容: 与现有session.py系统共存 - 测试状态: 所有测试通过

核心特性

特性 说明 优势
不可变快照 Frozen dataclass 线程安全,防止意外修改
Token统计 自动追踪输入/输出 成本控制,使用分析
简洁持久化 JSON格式 易于管理,跨平台兼容
高性能 <1ms/操作 几乎无性能开销

🚀 快速开始

基本使用

from lingflow.core import SessionManager

# 创建管理器
manager = SessionManager()

# 添加消息
manager.add_message(
    "用户: 请帮我优化这段代码",
    input_tokens=10,
    output_tokens=5
)

# 查看Token统计
summary = manager.get_usage_summary()
print(f"总Tokens: {summary['total_tokens']}")
# 输出: 总Tokens: 15

# 保存会话
session_path = manager.save_session()
print(f"会话已保存: {session_path}")

创建不可变快照

from lingflow.core import SessionManager, SessionSnapshot

# 创建管理器
manager = SessionManager()
manager.add_message("测试消息", input_tokens=10, output_tokens=5)

# 创建快照(不可变)
snapshot = manager.create_snapshot()
print(f"Session ID: {snapshot.session_id}")
print(f"消息数: {len(snapshot.messages)}")

# 快照可以安全地传递和并发处理
def process_session(snapshot: SessionSnapshot):
    # 由于是不可变的,可以安全地并发处理
    print(f"处理Session: {snapshot.session_id}")

process_session(snapshot)

加载现有Session

import json
from pathlib import Path
from lingflow.core import SessionManager

# 创建新管理器
manager = SessionManager()

# 从文件加载
session_path = Path(".lingflow/sessions/xxx.json")
with open(session_path) as f:
    data = json.load(f)

# 恢复消息和token统计
for msg in data['messages']:
    manager._current_messages.append(msg)

manager._current_input_tokens = data['input_tokens']
manager._current_output_tokens = data['output_tokens']

# 查看恢复的统计
summary = manager.get_usage_summary()
print(f"恢复的消息数: {summary['message_count']}")

🔄 与现有系统集成

共存策略

LingFlow现在有两个Session系统,各有用途:

1. 现有session.py (lingflow/context/session.py)

用途: 简单的上下文恢复

from lingflow.context.session import save_context, load_context

# 保存上下文摘要
save_context(
    summary="本次优化工作",
    tasks=[{"name": "集成Session v2", "done": True}],
    next_steps=["设置定期优化"]
)

# 加载上下文
context = load_context()
print(context['summary'])

使用场景: - 会话摘要保存 - 任务进度跟踪 - 简单的上下文恢复

2. Session v2 (lingflow/core/session_v2.py)

用途: 完整的会话管理和Token追踪

from lingflow.core import SessionManager

# 管理详细的会话和Token统计
manager = SessionManager()
manager.add_message("开始优化工作", input_tokens=10, output_tokens=5)
manager.save_session()

# 查看Token使用
summary = manager.get_usage_summary()
print(f"总Tokens: {summary['total_tokens']}")

使用场景: - 需要Token统计的会话 - 需要不可变快照 - 多线程/并发场景 - 需要详细的消息历史

集成示例

from lingflow.context.session import save_context
from lingflow.core import SessionManager

# 同时使用两个系统

# 1. 保存摘要(使用现有session.py)
save_context(
    summary="LingFlow优化工作",
    tasks=[
        {"name": "代码质量优化", "done": True},
        {"name": "Session v2集成", "done": True}
    ],
    next_steps=["设置定期优化"]
)

# 2. 管理详细会话(使用Session v2)
manager = SessionManager()
manager.add_message("开始优化", input_tokens=10, output_tokens=5)
manager.add_message("运行LingMinOpt", input_tokens=20, output_tokens=30)
manager.save_session()

# 两者互补,各司其职

📐 API文档

SessionManager

初始化

manager = SessionManager(session_dir: Path = Path(".lingflow/sessions"))

参数: - session_dir: Session存储目录,默认.lingflow/sessions

方法

add_message(message, input_tokens=0, output_tokens=0) - 添加消息到当前会话 - 自动累加Token统计

create_snapshot(session_id=None) -> SessionSnapshot - 创建不可变快照 - 如果不提供session_id,自动生成UUID

save_session(session_id=None) -> Path - 保存会话到JSON文件 - 返回保存的文件路径

get_usage_summary() -> Dict[str, Any] - 获取使用统计摘要 - 返回: {'message_count', 'input_tokens', 'output_tokens', 'total_tokens'}

SessionSnapshot

属性(只读)

@dataclass(frozen=True)
class SessionSnapshot:
    session_id: str              # Session唯一标识
    messages: Tuple[str, ...]    # 消息列表(不可变)
    input_tokens: int            # 输入Token总数
    output_tokens: int           # 输出Token总数
    created_at: str              # 创建时间(ISO格式)
    metadata: Dict[str, Any]     # 元数据

特性: 不可变(frozen),任何修改操作都会抛出FrozenInstanceError


⚡ 性能特性

性能测试结果

✅ 添加1000条消息: 0.0004秒 (平均0.0004毫秒/条)
✅ 创建快照: 0.0222毫秒
✅ 保存会话: 0.3932毫秒 (1000条消息,23.52 KB)

内存占用

  • 每条消息: ~24 bytes
  • 1000条消息: ~24 KB
  • 快照创建: 几乎无开销(只是tuple的view)

🎯 使用场景推荐

选择Session v2的场景

需要Token统计

manager = SessionManager()
manager.add_message("消息", input_tokens=10, output_tokens=5)
summary = manager.get_usage_summary()
# 精确的成本追踪

多线程/并发环境

# 不可变快照可安全传递
snapshot = manager.create_snapshot()
# 可在多个线程中并发读取snapshot

需要会话持久化

# 保存到文件,后续恢复
manager.save_session()

需要消息历史追踪

snapshot = manager.create_snapshot()
for msg in snapshot.messages:
    print(msg)

选择现有session.py的场景

简单的上下文恢复

save_context(summary="工作进度", tasks=[...])
context = load_context()

任务进度跟踪

save_context(
    summary="优化工作",
    tasks=[
        {"name": "代码优化", "done": True},
        {"name": "测试", "done": False}
    ]
)

会话摘要保存

save_context(
    summary="本次完成了LingFlow优化",
    next_steps=["部署到生产环境"]
)


🧪 测试验证

运行集成测试

cd /home/ai/LingFlow
python test_session_v2_integration.py

测试覆盖

  • ✅ 导入测试
  • ✅ 创建管理器
  • ✅ 消息添加和Token统计
  • ✅ 不可变快照创建
  • ✅ Session保存和加载
  • ✅ 性能测试
  • ✅ 与现有系统集成

📋 集成清单

已完成

  • [x] Session v2代码实现
  • [x] 导出到lingflow.core
  • [x] 导入测试
  • [x] 功能测试
  • [x] 性能测试
  • [x] 与现有系统集成测试
  • [x] 文档编写

使用步骤

  1. 导入Session v2

    from lingflow.core import SessionManager, SessionSnapshot
    

  2. 创建管理器

    manager = SessionManager()
    

  3. 添加消息

    manager.add_message("消息", input_tokens=10, output_tokens=5)
    

  4. 查看统计

    summary = manager.get_usage_summary()
    

  5. 保存会话(可选)

    manager.save_session()
    


💡 最佳实践

1. Token统计

# 每次API调用后更新
manager.add_message(
    user_message,
    input_tokens=input_count,
    output_tokens=output_count
)

# 定期检查使用量
summary = manager.get_usage_summary()
if summary['total_tokens'] > 100000:
    print("⚠️ Token使用量超过100K")

2. 会话持久化

# 重要会话点保存
manager.add_message("关键决策", ...)
manager.save_session()  # 保存快照

3. 并发安全

# 传递快照给其他线程
snapshot = manager.create_snapshot()

def worker(snapshot: SessionSnapshot):
    # 安全并发读取
    for msg in snapshot.messages:
        process(msg)

import threading
threading.Thread(target=worker, args=(snapshot,)).start()

4. 与现有session.py配合

# 摘要用session.py
save_context(summary="工作总结", ...)

# 详细用Session v2
manager.add_message("详细消息", ...)
manager.save_session()

🎓 设计思想

基于Claude Code的设计

  1. 不可变性(Immutability)
  2. Frozen dataclass防止状态错误
  3. 线程安全,无锁并发

  4. 简洁性(Simplicity)

  5. 只存储必要信息
  6. JSON格式,易于管理

  7. Token追踪(Token Tracking)

  8. 内置统计,便于成本控制
  9. 自动累加,无需手动计算

  10. 快照模式(Snapshot Pattern)

  11. 不可变时间点视图
  12. 安全的会话传递

📚 相关文档

  • FINAL_IMPROVEMENT_SUMMARY.md: 完整改进总结
  • LINGFLOW_AUTO_OPTIMIZATION_GUIDE.md: 自动优化指南
  • CLAUDE_CODE_PRACTICAL_LEARNING_PLAN.md: Claude Code学习计划
  • test_session_v2_integration.py: 集成测试代码

🔄 后续改进

计划中的功能

  • [ ] 自动压缩长会话
  • [ ] Session搜索和过滤
  • [ ] Token使用预警
  • [ ] 分布式Session存储
  • [ ] 与现有ContextManager深度集成

版本: v1.0 集成日期: 2026-04-01 状态: ✅ 生产就绪 测试: ✅ 全部通过

🎉 Session v2已成功集成到LingFlow!