2.6 KiB
2.6 KiB
1. 项目基础设施
- 1.1 在
pyproject.toml中添加依赖:llama-index-core、llama-index-llms-openai、python-frontmatter - 1.2 创建模块文件结构:
src/llama_agent_skills/skill.py、registry.py、agent.py、config.py - 1.3 在
config.py中实现配置管理:LLM API key(环境变量)、默认 SKILL 目录路径、基础 system prompt
2. Skill 数据模型与解析器(skill.py)
- 2.1 实现
Skill数据类(frozen dataclass),包含字段:name、description、body、metadata、source_path - 2.2 实现
SkillLoadError自定义异常类 - 2.3 实现
load_skill(path: Path) -> Skill函数:使用python-frontmatter解析 SKILL.md,校验必填字段(name、description),提取 metadata 并构造 Skill 实例 - 2.4 处理解析错误场景:缺少 frontmatter、缺少必填字段、文件不存在,均抛出
SkillLoadError
3. SKILL 注册表(registry.py)
- 3.1 实现
SkillRegistry类,包含register(skill)、unregister(name)、get(name)、list_skills()方法 - 3.2 实现
scan_directory(path: Path) -> list[Skill]函数:遍历目录下所有*/SKILL.md文件,调用load_skill解析,跳过无效文件并记录日志 - 3.3 实现
SkillRegistry.load_from_directory(path)便捷方法:调用scan_directory并批量注册
4. Agent 核心(agent.py)
- 4.1 实现
build_system_prompt(base_prompt: str, skills: list[Skill]) -> str函数:按设计文档中的格式将 SKILL 内容拼接到 system prompt - 4.2 实现
create_agent(skills, tools, llm_config) -> AgentWorkflow函数:使用AgentWorkflow.from_tools_or_functions()创建 Agent,传入组装后的 system prompt 和工具列表 - 4.3 实现
run_agent(agent, message) -> str异步函数:接受用户输入,运行 Agent 并返回响应文本
5. 入口整合(__init__.py)
- 5.1 改造
main()函数:从配置读取 SKILL 目录,创建 SkillRegistry 并加载 SKILL,构建 Agent,进入交互式对话循环 - 5.2 支持命令行参数或环境变量指定 SKILL 目录路径和 LLM 模型名称
6. 验证与测试
- 6.1 使用项目中现有的
.opencode/skills/目录下的 SKILL.md 文件作为测试数据,验证 skill loader 能正确解析所有 4 个 SKILL - 6.2 验证 SkillRegistry 的注册、注销、列表功能
- 6.3 验证 Agent 创建后的 system prompt 包含所有已加载 SKILL 的内容
- 6.4 端到端测试:加载 SKILL → 创建 Agent → 发送消息 → 获取响应