feat: add a subagent frame
This commit is contained in:
87
agentlite/examples/skills_example.py
Normal file
87
agentlite/examples/skills_example.py
Normal file
@@ -0,0 +1,87 @@
|
||||
"""Example demonstrating the skills system for AgentLite.
|
||||
|
||||
This example shows how to use skills with an Agent.
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
from pathlib import Path
|
||||
|
||||
from agentlite import Agent, OpenAIProvider
|
||||
from agentlite.skills import discover_skills, index_skills_by_name, SkillTool
|
||||
|
||||
|
||||
async def main():
|
||||
"""Run skills example."""
|
||||
|
||||
print("=" * 60)
|
||||
print("AgentLite Skills Example")
|
||||
print("=" * 60)
|
||||
|
||||
# Discover skills from examples directory
|
||||
skills_dir = Path(__file__).parent / "skills"
|
||||
skills = discover_skills(skills_dir)
|
||||
|
||||
print(f"\nDiscovered {len(skills)} skill(s):")
|
||||
for skill in skills:
|
||||
print(f" - {skill.name}: {skill.description}")
|
||||
print(f" Type: {skill.type}")
|
||||
if skill.flow:
|
||||
print(f" Flow nodes: {len(skill.flow.nodes)}")
|
||||
|
||||
# Index skills by name
|
||||
skill_index = index_skills_by_name(skills)
|
||||
print(f"\nIndexed {len(skill_index)} skill(s)")
|
||||
|
||||
# Create agent (would need API key to actually run)
|
||||
print("\n" + "-" * 40)
|
||||
print("To use skills with an agent:")
|
||||
print("-" * 40)
|
||||
|
||||
code = """
|
||||
# Create provider
|
||||
provider = OpenAIProvider(api_key="your-key", model="gpt-4")
|
||||
|
||||
# Create agent
|
||||
agent = Agent(
|
||||
provider=provider,
|
||||
system_prompt="You are a helpful assistant with access to skills.",
|
||||
)
|
||||
|
||||
# Create skill tool
|
||||
skill_tool = SkillTool(skill_index, parent_agent=agent)
|
||||
|
||||
# Add skill tool to agent
|
||||
agent.tools.add(skill_tool)
|
||||
|
||||
# Now the agent can use skills!
|
||||
# The agent will see available skills in its context
|
||||
|
||||
# Example usage:
|
||||
response = await agent.run("Review this Python code: def add(a, b): return a + b")
|
||||
# The agent may choose to use the code-reviewer skill
|
||||
"""
|
||||
print(code)
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("Key Concepts:")
|
||||
print("=" * 60)
|
||||
print("1. Skills are defined in SKILL.md files")
|
||||
print("2. YAML frontmatter specifies name, description, and type")
|
||||
print("3. Standard skills load the markdown as a prompt")
|
||||
print("4. Flow skills execute a structured flowchart")
|
||||
print("5. Skills are discovered from directories")
|
||||
print("6. SkillTool allows agents to execute skills")
|
||||
print("\nSkill Format (SKILL.md):")
|
||||
print(""" ---
|
||||
name: skill-name
|
||||
description: When to use this skill...
|
||||
type: standard | flow
|
||||
---
|
||||
|
||||
# Skill Content
|
||||
Instructions for the skill...
|
||||
""")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user