基于 Google AI Edge Gallery 的 SKILL.md 机制实现的 Python Agent 框架,整合 LiteRT-LM 引擎。
text_adventure_Planner/
├── workplan.md # 项目规划文档
├── design_doc.md # 详细设计文档
├── README.md # 本文件
├── text_adventure/ # 核心框架
│ ├── __init__.py # 模块导出
│ ├── skill.py # SKILL.md 解析与技能管理
│ ├── agent.py # text_adventure 主类与对话功能
│ └── compression.py # 上下文压缩模块
├── skills/ # 测试技能目录
│ └── echo-text/
│ └── SKILL.md # Echo 测试技能
├── question.py # 命令行单次询问工具
└── interactive.py # 交互式 Shell 入口
from text_adventure import text_adventure
from LiteRT_LM.python.litert_lm.interfaces import Backend
agent = text_adventure(
model_path="/path/to/model.litertlm",
skill_dir="./skills",
backend=Backend.CPU,
temperature=0.7
)
# 列出可用技能
agent.list_skills()
# 发送消息
response = agent.chat("Hello, world!")
print(response)from text_adventure import text_adventure
agent = text_adventure(
model_path="/path/to/model.litertlm",
skill_dir="./skills"
)
# 多轮对话
print(agent.chat("What can you do?"))
print(agent.chat("Tell me more"))
print("会话历史:", agent.history_messages)# 基本测试
python question.py \
--model gemma-4-E2B-it.litertlm \
--skill-dir skills \
"Test message"
# 交互式模式
python interactive.py \
--model model.litertlm \
--skill-dir skills
# 列出技能
python question.py \
--model model.litertlm \
--skill-dir skills \
"--list-skills"---
name: skill-name
description: Skill description here
metadata:
require-secret: true
require-secret-description: "API key description"
---
# Skill Name
## Instructions
This is the instruction content that guides the LLM's behavior.
## Behavior Rules
1. Rule 1
2. Rule 2| 特性 | Gallery (Android) | Python text_adventure |
|---|---|---|
| SKILL.md 解析 | Kotlin 解析器 | Python Yaml 解析器 |
| Prompt 注入 | 替换 ___SKILLS___ |
构建完整 system prompt |
| 技能加载 | 从 assets 或 URL | 从文件系统目录 |
| 执行方式 | JavaScript/Webview | 纯 Python + LLM推理 |
| API 调用 | 支持 | 需自行实现工具调用 |
echo-text:
---
name: echo-test
description: Echo the input text back to the user.
---
# Echo Test Skill
## Instructions
Simply repeat back the user's input exactly.load_skills(skill_dir): 加载目录下所有 SKILL.mdget_skill(name): 获取特定技能get_skills_list(): 返回注入格式的技能列表get_skills_names(): 返回技能名称列表
chat(user_message): 单轮对话chat_stream(user_message): 流式对话list_skills(): 列出所有技能get_skill_info(skill_name): 获取技能详情available_skills: 属性返回技能名称列表
build_instrumented_prompt(skills): 构建带技能的 system promptinject_skill_instructions(skill, instructions): 注入特定技能指令
- 创建技能目录:
my-skill/ - 创建 SKILL.md,包含 frontmatter 和 instructions
- 在 text_adventure 初始化时指定
skill_dir
参考 LiteRT-LM 的 tools.py 实现:
from LiteRT_LM.python.litert_lm.interfaces import Tool
class MyTool(Tool):
def get_tool_description(self) -> dict:
return {
"name": "my_tool",
"description": "Does something useful"
}
def execute(self, param) -> Any:
# 实现工具逻辑
return result- 模型文件: 必须使用
.litertlm格式 - 路径分离: 确保
text_adventure/在LiteRT-LM/python/同级目录 - Python 版本: Python 3.8+ 推荐使用
Pillow和PyYAML - GPU 后端: 需要相应硬件支持,默认使用 CPU
本项目基于 Apache License 2.0 (与 LiteRT-LM 一致)。