MCPcopy Create free account
hub / github.com/Louisym/MiniCC / main

Function main

tutorials/07_auto_compaction.py:381–499  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

379# ============================================================
380
381def main():
382 print("=" * 60)
383 print("Tutorial 07: Auto Compaction 自动压缩演示")
384 print("=" * 60)
385
386 # --- 构建一个包含很多消息的 session ---
387 session = Session()
388
389 # 模拟一段长对话
390 conversations = [
391 ("user", "帮我创建一个 Flask Web 应用"),
392 ("assistant", "好的,让我先创建项目结构。我会用 bash 来创建目录。"),
393 ("user", "然后在 src/app.py 里写一个简单的 Hello World"),
394 ("assistant", "好的,我来创建 src/app.py 文件。TODO: 还需要添加路由测试。"),
395 ("user", "帮我添加一个 /api/users 的 REST 接口"),
396 ("assistant", "我来修改 src/app.py,添加用户接口。Next: 需要写单元测试。"),
397 ("user", "在 tests/test_app.py 里写测试"),
398 ("assistant", "测试已经写好了。所有 3 个测试都通过了。"),
399 ("user", "帮我添加数据库连接"),
400 ("assistant", "我来配置 SQLAlchemy 数据库连接。Remaining: 迁移脚本还没写。"),
401 ("user", "看看当前的 git 状态"),
402 ("assistant", "当前有 5 个文件被修改,还没提交。"),
403 ]
404
405 for role, text in conversations:
406 if role == "user":
407 session.messages.append(ConversationMessage.user_text(text))
408 else:
409 session.messages.append(ConversationMessage.assistant_text(text))
410
411 # 加一些工具使用记录
412 session.messages.insert(2, ConversationMessage(
413 role="assistant",
414 blocks=(
415 TextBlock(text="让我创建目录。"),
416 ToolUseBlock(id="t1", name="bash", input='{"command": "mkdir -p src tests"}'),
417 ),
418 ))
419 session.messages.insert(3, ConversationMessage.tool_result("t1", "bash", "(directory created)"))
420
421 print(f"\n对话总消息数: {len(session.messages)}")
422 print(f"预估 token 数: {estimate_session_tokens(session)}")
423
424 # --- 1. 测试是否需要压缩(token 阈值设得低一点方便演示)---
425 config = CompactionConfig(preserve_recent_messages=4, max_estimated_tokens=50)
426 print(f"\n需要压缩吗 (阈值={config.max_estimated_tokens} tokens)? {should_compact(session, config)}")
427
428 # --- 2. 执行压缩 ---
429 result = compact_session(session, config)
430
431 print(f"\n--- 压缩结果 ---")
432 print(f" 被压缩掉的消息数: {result.removed_message_count}")
433 print(f" 压缩前消息数: {len(session.messages)}")
434 print(f" 压缩后消息数: {len(result.compacted_session.messages)}")
435 print(f" 压缩前 token 数: {estimate_session_tokens(session)}")
436 print(f" 压缩后 token 数: {estimate_session_tokens(result.compacted_session)}")
437
438 # --- 3. 看看摘要长什么样 ---

Callers 1

Calls 13

appendMethod · 0.80
SessionClass · 0.70
ConversationMessageClass · 0.70
TextBlockClass · 0.70
ToolUseBlockClass · 0.70
estimate_session_tokensFunction · 0.70
CompactionConfigClass · 0.70
should_compactFunction · 0.70
compact_sessionFunction · 0.70
maybe_auto_compactFunction · 0.70
user_textMethod · 0.45
assistant_textMethod · 0.45

Tested by

no test coverage detected