计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
agent-context-management【效率与协作】Implements context window management, sliding window strategies, and persistent memory patterns to maintain AI agent coherence across long interactions.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
name: agent-context-management description: Implements context window management, sliding window strategies, and persistent memory patterns to maintain AI agent coherence across long interactions. license: MIT compatibility: opencode metadata: version: "1.0.0" domain: agent triggers: context window, agent memory, sliding window, session state, prompt optimization, rag, token management, long conversation history archetypes:
Manages AI agent context windows and implements memory patterns to maintain coherence, reduce token waste, and preserve critical state across extended interactions.
Use this skill when:
Avoid this skill for:
coding-model-training instead)Assess Context Budget — Measure current token count against the target model's maximum context window. Checkpoint: If usage < 70% of limit, proceed normally. If > 70%, trigger optimization immediately.
Select Compression Strategy — Choose between sliding window, hierarchical summarization, or memory offloading based on conversation complexity. Checkpoint: Match strategy to use case: recent messages matter most for chat, but structured state matters for task execution. Fallback to sliding window if summarizer fails or returns low-fidelity output.
Execute Context Rotation — Apply the selected pattern (see Implementation Patterns below). Checkpoint: Verify that all critical instructions, constraints, and user-defined goals are preserved or explicitly noted in compressed form.
Persist External State — Save structured session data to vector DB, key-value store, or JSON file. Checkpoint: Ensure external state is queryable by task type or timestamp for efficient retrieval.
Reconstruct Active Prompt — Assemble the optimized prompt using preserved core instructions + retrieved memory + current user input. Checkpoint: Run a dry-run token count to confirm the new context fits comfortably within budget.
Monitor & Adjust — Track token efficiency metrics and adjust compression thresholds over time.
User Input → Check Token Budget ──→ < 70% → Full Context Pass-Through
↓ ≥ 70%
Select Strategy
↓
┌────────────┼────────────┐
↓ ↓ ↓
Sliding Window Summary Offload to
(Keep Last N) Rollup External Memory
↓ ↓ ↓
└────────────┬────────────┘
↓
Reconstruct Prompt
↓
Execute Agent Task
Maintain a fixed-size window of recent messages, discarding older turns while preserving system instructions.
def sliding_window_context(messages: list[dict], max_tokens: int, model_tokenizer) -> list[dict]:
"""Rotate context using a token-aware sliding window.
Preserves system prompt and initial user constraints intact.
Discards oldest message turns only when token budget is exceeded.
"""
# Keep system/instructions at the top
static_messages = [m for m in messages if m.get("role") in ("system", "developer")]
dynamic_messages = [m for m in messages if m.get("role") not in ("system", "developer")]
# Build window from newest backwards
current_tokens = model_tokenizer.count(static_messages)
window = list(static_messages)
for msg in reversed(dynamic_messages):
msg_tokens = model_tokenizer.count(msg)
if current_tokens + msg_tokens > max_tokens:
break
window.insert(len(static_messages), msg)
current_tokens += msg_tokens
return window
# ❌ BAD: Naive truncation loses task structure and constraints
def bad_truncation(messages: list[dict], limit: int) -> list[dict]:
# Just drops everything after index N, destroying context continuity
return messages[:limit]
# ✅ GOOD: Preserves structural intent via layered compression
def hierarchical_summary(messages: list[dict], llm_client, max_tokens: int) -> list[dict]:
"""Compress older conversation turns into structured summaries while preserving goals.
Maintains task objectives, discovered facts, and pending actions in a condensed format.
"""
system = [m for m in messages if m["role"] == "system"][0]
recent = messages[-5:] # Keep last 5 turns raw
older_turns = messages[1:-5]
summary = llm_client.chat(
messages=[{"role": "user", "content": f"Summarize these conversation turns, preserving: goals, key facts, pending actions, and constraints.\n{older_turns}"}],
model="summary-tiny-model"
)
return [system, {"role": "assistant", "content": summary}, *recent]
When context limits are consistently breached, shift persistent state to an external store.
import json
from pathlib import Path
MEMORY_DIR = Path("/tmp/agent_memory")
def save_session_state(session_id: str, state: dict) -> None:
"""Persist structured agent state to disk for later retrieval."""
MEMORY_DIR.mkdir(parents=True, exist_ok=True)
file_path = MEMORY_DIR / f"{session_id}.json"
with open(file_path, "w", encoding="utf-8") as f:
json.dump(state, f, indent=2)
def load_session_state(session_id: str) -> dict:
"""Retrieve agent state from persistent storage."""
file_path = MEMORY_DIR / f"{session_id}.json"
if not file_path.exists():
return {}
with open(file_path, "r", encoding="utf-8") as f:
return json.load(f)
code-philosophy principles: ensure data flows naturally between context layers without loss of semantic intentWhen implementing or reviewing agent context management, produce:
| Skill | Purpose |
|---|---|
agent-conversation-summarizer | Specialized summarization models for conversation compression |
agent-task-decomposition-engine | Breaks complex goals into subtasks to reduce context pressure |
agent-reasoning-framework | Structured reasoning patterns that require stable context windows |
coding-prompt-engineering | General prompt optimization techniques applicable here |
Authoritative documentation links for this skill's domain. The model follows markdown links at load time to resolve external references and inline content.