logic-engine / docs /concepts /skillbook.md
ghostdrive1's picture
Upload folder using huggingface_hub
116524e verified
|
Raw
History Blame Contribute Delete
5.79 kB
# The Skillbook
The **Skillbook** is ACE's knowledge store β€” a structured collection of learned issues and insights. Each entry is called a **skill**.
## What Is a Skill?
A skill is a single learned entry with:
| Field | Description |
|-------|-------------|
| `id` | Unique identifier (e.g., `context-00001`) |
| `section` | Pipeline-facing split: `context` or `harness` |
| `keywords` | Structured topic labels (domain, subsystem, API, behavior) |
| `issue` | The problem this skill captures |
| `insight` | The recommended action; required for `context`, optional for `harness` |
| `active` | Whether the skill participates in normal active views |
| `helpful_count` / `harmful_count` / `neutral_count` | Effectiveness counters |
| `occurrences` | Provenance records linking the skill back to supporting traces |
Example skill:
```json
{
"id": "context-00001",
"section": "context",
"keywords": ["math", "decomposition"],
"issue": "Complex arithmetic questions are easier to solve when the work is decomposed into smaller verified steps.",
"insight": "Break the problem into smaller steps before computing.",
"active": true,
"helpful_count": 5,
"harmful_count": 0,
"neutral_count": 1
}
```
## Skill Lifecycle
Skills go through four stages:
1. **Created** β€” the SkillManager adds a new skill after a reflection
2. **Tagged** β€” each time the Agent cites a skill, the Reflector tags it as helpful, harmful, or neutral
3. **Updated** β€” the SkillManager may refine a skill's issue, insight, or keywords based on new learnings
4. **Removed** β€” skills are soft-removed by setting `active=False`
These correspond to four [update operations](updates.md): `ADD`, `TAG`, `UPDATE`, `REMOVE`.
## Prompt Format
When the skillbook is rendered as text, it is grouped by section and shows keywords plus issue/insight:
```python
skillbook.as_prompt() # Markdown format for LLM consumption
```
```
## context
- [context-00001]
Keywords: math, decomposition
Issue: Complex arithmetic questions are easier to solve when the work is decomposed into smaller verified steps.
Insight: Break the problem into smaller steps before computing.
## harness
- [harness-00001]
Keywords: retries, rate_limit
Issue: The runtime can stall for long periods when provider 429 retries fan out.
```
## Sections
Skills are organized into exactly two sections:
- `context`: learnings the agent should apply while solving the task
- `harness`: environment or runtime learnings that affect the pipeline itself
Fine-grained categorization lives in `keywords`:
```python
from ace import Skillbook
skillbook = Skillbook()
# Add a context skill with explicit keywords and an action insight
skillbook.add_skill(
section="context",
issue="Complex arithmetic questions are easier to solve when the work is decomposed into smaller verified steps.",
keywords=["math", "decomposition"],
insight="Break complex problems into smaller steps before computing.",
)
```
## Persistence
```python
# Save
skillbook.save_to_file("strategies.json")
# Writes `strategies.json` plus `strategies.embeddings.npz`
# Load
skillbook = Skillbook.load_from_file("strategies.json")
```
## Statistics
```python
stats = skillbook.stats()
# {"sections": 2, "skills": 15, "active_skills": 14, "by_section": {"context": 11, "harness": 3}}
```
## Deduplication
As the skillbook grows, similar skills can accumulate. The `DeduplicationManager` detects and consolidates them using embedding similarity:
```python
from ace import DeduplicationConfig, DeduplicationManager
config = DeduplicationConfig(
enabled=True,
embedding_model="text-embedding-3-small",
similarity_threshold=0.85,
within_section_only=True,
)
dedup = DeduplicationManager(config)
```
When used with a runner, deduplication runs automatically at a configurable interval:
```python
runner = ACE.from_roles(
...,
dedup_manager=dedup,
dedup_interval=10, # Every 10 samples
)
```
## Insight Source Tracing
Each skill tracks where it came from using structured provenance records.
Each source stores a stable trace identity (`trace_uid`, `source_system`,
`trace_id`, `display_name`) plus optional learning metadata such as
`epoch`, `step`, `learning_text`, and `trace_refs`.
One skill can carry multiple source records. This is especially useful for
skills synthesized from several traces, where ACE can attach one primary
source plus additional supporting sources instead of collapsing everything
onto a single trace.
Trace identity is exact. In-trace anchors are best-effort: when the trace is
structured enough, `trace_refs` can include `json_path`, `step_indices`,
`message_indices`, and `span_ids`; otherwise ACE falls back to excerpt-only
references.
Typical source record:
```json
{
"trace_uid": "kayba-hosted:conv-123",
"source_system": "kayba-hosted",
"trace_id": "conv-123",
"display_name": "checkout-failure.md",
"epoch": 1,
"step": 3,
"learning_text": "Check for a next-page token before stopping",
"trace_refs": [
{
"text_excerpt": "The API response included next_page_token.",
"excerpt_location": "operation.evidence"
}
]
}
```
Query provenance with:
```python
sources = skillbook.source_map() # skill_id -> source info
summary = skillbook.source_summary() # Aggregated statistics
```
## What to Read Next
- [Update Operations](updates.md) β€” how ADD, UPDATE, TAG, REMOVE work
- [Three Roles](roles.md) β€” which role creates, tags, and updates skills
- [Full Pipeline Guide](../guides/full-pipeline.md) β€” see the skillbook in action