Skip to content

Latest commit

 

History

History
138 lines (102 loc) · 4.25 KB

File metadata and controls

138 lines (102 loc) · 4.25 KB

Context Types

Based on a simplified mapping of human cognitive patterns and engineering considerations, OpenViking abstracts context into three basic types: Resource, Memory, and Skill, each serving different purposes in Agent applications.

Overview

Type Purpose Lifecycle Initiative
Resource Knowledge and rules Long-term, relatively static User adds
Memory Agent's cognition Long-term, dynamically updated Agent records
Skill Callable capabilities Long-term, static Agent invokes

Resource

Resources are external knowledge that Agents can reference.

Characteristics

  • User-driven: Resource information actively added by users to supplement LLM knowledge, such as product manuals and code repositories
  • Static content: Content rarely changes after addition, usually modified by users
  • Structured storage: Organized by project or topic in directory hierarchy, with multi-layer information extraction

Examples

  • API docs, product manuals
  • FAQ databases, code repositories
  • Research papers, technical specs

Usage

# Add resource
client.add_resource(
    "https://docs.example.com/api.pdf",
    reason="API documentation"
)

# Search resources
results = client.find(
    "authentication methods",
    target_uri="viking://resources/"
)

Memory

Memories are divided into user memories and Agent memories, representing learned knowledge about users and the world.

Characteristics

  • Agent-driven: Memory information actively extracted and recorded by Agent
  • Dynamic updates: Continuously updated from interactions by Agent
  • Personalized: Learned for specific users or specific Agents

6 Categories

Category Location Description Update Strategy
profile user/memories/.overview.md User basic info ✅ Appendable
preferences user/memories/preferences/ User preferences by topic ✅ Appendable
entities user/memories/entities/ Entity memories (people, projects) ✅ Appendable
events user/memories/events/ Event records (decisions, milestones) ❌ No update
cases agent/memories/cases/ Learned cases ❌ No update
patterns agent/memories/patterns/ Learned patterns ❌ No update

Usage

# Memories are auto-extracted from sessions
session = client.session()
await session.add_message("user", [{"type": "text", "text": "I prefer dark mode"}])
await session.commit()  # Extracts preference memory

# Search memories
results = await client.find(
    "UI preferences",
    target_uri="viking://user/memories/"
)

Skill

Skills are capabilities that Agents can invoke, such as current Skills, MCP, etc.

Characteristics

  • Defined capabilities: Tool definitions for completing specific tasks
  • Relatively static: Skill definitions don't change at runtime, but usage memories related to tools are updated in memory
  • Callable: Agent decides when to use which skill

Storage Location

viking://agent/skills/{skill-name}/
├── .abstract.md          # L0: Short description
├── SKILL.md              # L1: Detailed overview
└── scripts               # L2: Full definition

Usage

# Add skill
await client.add_skill({
    "name": "search-web",
    "description": "Search the web for information",
    "content": "# search-web\n..."
})

# Search skills
results = await client.find(
    "web search",
    target_uri="viking://agent/skills/"
)

Unified Search

Based on Agent's needs, supports unified search across all three context types, providing comprehensive information:

# Search across all context types
results = await client.find("user authentication")

for ctx in results.memories:
    print(f"Memory: {ctx.uri}")
for ctx in results.resources:
    print(f"Resource: {ctx.uri}")
for ctx in results.skills:
    print(f"Skill: {ctx.uri}")

Related Documents