10分钟上手开源个人助理Leon:打造专属技能生态系统
你是否曾幻想拥有一个完全属于自己的智能助理?一个既能听懂你的指令,又能根据你的需求不断进化的数字伙伴?开源个人助理Leon正是为实现这一愿景而生。本文将带你从零开始探索Leon的技能生态系统,掌握从开发自定义技能到分享给全球用户的完整流程,让你的个人助理真正为你量身定制。
读完本文,你将能够:
- 理解Leon技能生态的核心架构与工作原理
- 开发一个能记住用户偏好的个性化问候技能
- 构建并测试实用的待办事项管理功能
- 将你的创意技能分享到Leon社区
Leon技能生态全景:从核心到扩展
Leon的强大之处在于其模块化的技能生态系统,采用"核心+插件"的设计理念,让开发者可以轻松扩展其能力边界。整个生态分为三层架构:基础层包含核心对话引擎与自然语言处理(NLP)模块,中间层是跨语言桥接系统(支持Python/Node.js),最上层则是丰富的技能插件集合。
核心配置文件core/skills-endpoints.json定义了所有技能的注册信息,而多语言支持则通过core/langs.json实现,目前已支持英语、法语等多种语言。这种设计使得技能开发既可以基于现有框架快速实现,也能根据需求深度定制。
技能目录skills/采用领域驱动的组织结构,将功能划分为生产力、娱乐、工具等多个类别。每个技能都是一个独立模块,包含配置文件、业务逻辑和资源文件,这种隔离性确保了系统的稳定性和可维护性。
技能开发实战:从构思到代码
开发Leon技能无需深厚的AI背景,通过简单的配置和基础编程知识即可实现强大功能。我们以"个性化问候"技能为例,展示完整开发流程。
技能定义与配置
首先创建技能元数据文件skill.json,定义基本信息:
{
"$schema": "../../../schemas/skill-schemas/skill.json",
"name": "Introduction",
"bridge": "python",
"version": "1.0.0",
"description": "Leon introduce himself and remembers basic information about you.",
"author": {
"name": "Your Name",
"email": "your@email.com"
}
}
这个JSON文件指定了技能名称、使用的桥接语言(Python/Node.js)、版本信息和作者详情,是技能被Leon识别的基础。
核心逻辑实现
在Python桥接中实现业务逻辑,创建introduce_leon.py:
from leon import skills
def run(params: skills.ActionParams) -> None:
# 获取用户信息
user_name = params.get('user_name', 'friend')
# 生成个性化问候
response = f"Hello {user_name}! I'm Leon, your personal assistant. How can I help you today?"
# 返回结果给Leon核心
return {
"response": response,
"memory": {
"user_name": user_name
}
}
这段代码实现了基本功能:接收用户参数、生成个性化回应,并将用户信息存入记忆系统。Leon的技能系统会自动处理意图识别和参数解析,开发者只需关注业务逻辑。
意图与实体配置
创建expressions.json定义用户可能触发技能的表达方式:
{
"en": [
"introduce yourself",
"tell me about yourself",
"who are you"
],
"fr": [
"présente-toi",
"parle-moi de toi",
"qui es-tu"
]
}
多语言支持通过为不同语言定义表达式实现,Leon的NLP引擎会自动根据用户语言环境选择合适的表达式进行匹配。
实用技能案例:待办事项管理器深度解析
待办事项管理是Leon最受欢迎的生产力技能之一,展示了如何利用Leon的记忆系统和交互能力构建实用工具。
功能架构
待办事项技能Todo List包含以下核心功能:
- 创建和管理多个任务列表
- 添加、标记完成和删除任务
- 在对话中自然引用和操作任务
其数据模型设计如下:
# 任务列表内存模型
class TodoListMemory:
def __init__(self, name: str, items: list[TodoItemMemory] = None):
self.name = name
self.items = items or []
# 任务项模型
class TodoItemMemory:
def __init__(self, name: str, completed: bool = False):
self.name = name
self.completed = completed
核心API实现
待办事项技能提供了完整的CRUD操作API,例如创建任务列表:
def create_list(params: ActionParams) -> None:
list_name = params['list_name']
# 检查列表是否已存在
if memory.has_todo_list(list_name):
return {"response": f"List '{list_name}' already exists."}
# 创建新列表
memory.create_todo_list(list_name)
return {"response": f"Created new list: {list_name}"}
记忆系统操作通过Leon SDK提供的memory.py模块实现,封装了数据持久化逻辑,开发者无需关心底层存储细节。
交互设计
技能支持自然语言交互,用户可以通过日常对话管理任务:
- "创建购物清单" - 创建新列表
- "添加牛奶到购物清单" - 添加任务项
- "标记牛奶为已完成" - 更新任务状态
- "显示我的购物清单" - 查询任务列表
这种自然交互方式降低了使用门槛,使待办事项管理更加直观高效。
技能测试与调试:确保质量与体验
Leon提供了完整的测试框架,帮助开发者确保技能质量。创建测试文件test_introduction.py:
import unittest
from skills.leon.introduction.src.introduce_leon import run
class TestIntroductionSkill(unittest.TestCase):
def test_basic_introduction(self):
params = {}
result = run(params)
self.assertIn("Hello friend", result["response"])
def test_personalized_greeting(self):
params = {"user_name": "Alice"}
result = run(params)
self.assertIn("Hello Alice", result["response"])
self.assertEqual(result["memory"]["user_name"], "Alice")
if __name__ == '__main__':
unittest.main()
运行测试命令:
cd /data/web/disk1/git_repo/gh_mirrors/le/leon
npm run test:skills -- --skill=leon/introduction
Leon的测试系统会模拟用户交互,验证技能在各种场景下的表现,确保发布前的稳定性。
技能打包与分享:加入Leon生态
完成开发和测试后,使用Leon提供的工具打包技能:
cd /data/web/disk1/git_repo/gh_mirrors/le/leon
node scripts/skill-package.js --path=skills/leon/introduction
该命令会生成一个.leon-skill文件,包含技能的所有代码和资源。你可以将这个文件分享给其他Leon用户,或提交到官方技能库。
要将技能提交到社区,需遵循以下规范:
- 确保所有测试通过
- 提供详细的使用文档
- 包含多语言支持(至少英语)
- 遵循代码风格指南
官方技能库会对提交的技能进行审核,确保质量和安全性,优质技能将被纳入官方推荐列表。
高级技能开发:探索更多可能性
Leon技能系统支持复杂交互和高级功能,为创意提供无限可能。
多轮对话
通过会话管理实现复杂流程,例如quiz.py中的猜谜游戏:
def run(params: ActionParams) -> None:
session = memory.get_session()
if session.state == "start":
# 第一轮:开始游戏
return start_game()
elif session.state == "question":
# 中间轮:处理用户回答
return process_answer(params["answer"])
elif session.state == "guess":
# 最后轮:猜测结果
return make_guess()
富媒体响应
技能可以返回富媒体内容,如HTML组件或交互式界面:
def run(params: ActionParams) -> None:
return {
"response": "Here's your todo list:",
"widget": {
"type": "todos_list_widget",
"params": {
"list_name": "Shopping"
}
}
}
对应的前端组件实现list_of_lists_widget.py,可以创建交互式待办事项界面。
外部API集成
技能可以调用外部服务扩展功能,如speedtest.py实现的网络测速功能:
def run(params: ActionParams) -> None:
# 调用测速API
result = speedtest.run_test()
return {
"response": f"Your internet speed: {result.download} Mbps download, {result.upload} Mbps upload"
}
技能生态展望:共建智能助手未来
Leon技能生态系统持续发展,未来将支持更多高级特性:
- 低代码技能编辑器:无需编程即可创建简单技能
- 技能市场:一站式发现、安装和管理技能
- 技能组合:将多个技能组合成复杂工作流
- 跨设备同步:在所有设备间同步技能数据
社区贡献是生态发展的核心动力,无论是完善现有技能、创建新技能,还是改进技能开发工具,都能推动整个生态进步。
总结与行动指南
Leon开源个人助理通过模块化技能系统,让每个人都能定制属于自己的智能助手。本文介绍了技能开发的完整流程,从定义元数据到实现逻辑,再到测试和分享。
立即行动:
- 克隆仓库:
git clone https://gitcode.com/gh_mirrors/le/leon - 探索现有技能:浏览skills/目录
- 开始开发第一个技能:参考skills/leon/introduction模板
- 加入社区:关注项目更新并分享你的创作
Leon的潜力取决于社区的创造力,期待你的技能为这个开源生态注入新的活力!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



