Your First Plugin
创建你的第一个 Eliza 插件
1.1 简介 plugin
每一个 eliza
的插件都是一个 npm
包,插件的入口模块是 index.ts
。
插件的入口模块需要导出 一个 Plugin
对象,plugin 扩展结构:
- actions 为插件的核心部分,定义了插件的执行逻辑
- services 类比操作系统中的服务程序,属于常驻模块
- providers 提供基础的 GET 方法,用于对外输出数据
- evaluators 评估器,agent 根据评估器中定义的规则,触发 agent 本身的行为,比如:存储更新
Action 基本结构
- examples (必选)为 Chat 的一些实例, Agent 将交互 Example 传递给 LLM, 用于评估执行接下来的 Action。
- validate 验证方法,Agent 会根据
validate
的结果决定,这个 Action 是否可以执行。 - handler 执行的方法,内部可以完成动作的相关逻辑。
Service 基本结构
Service 是常驻模块,在 runtime
中初始化,在 runtime
中调用,为单例模式,按照 类型来识别。入口为 : initialize。
同时,不同的 Service 可以添加不同的服务方法,供 eliza
调用。
1.2 runtime 中调用
https://github.com/elizaOS/eliza/blob/develop/packages/core/src/runtime.ts
plugin 各个模块注册:
service 模块初始化 (真实启动):
1.3 插件中互相调用
调用其他插件的 Service
插件中获取 service 实例方法:
获取到对应的实例以后,就可以使用实例的方法了。
Action 中互相调用
Action hander 中签名如下:
其中,callback 用于把消息返回给 agent
的 chat
中。
HandlerCallback 签名:
Content 的类型如下:
在 Content 中,指定 其他 Action 的 ID ,就可以把消息路由给其他的插件 Action 模块。
一个 Action 的大致流程:
Provider 调用
在 eliza
中 Provider 提供一个通用的 get 方法用于对外输出数据。
在 plugin
的 Action 调用过程中,会检查 state 参数,如果没有,那么通过 runtime 构建:
构建过程中,需要注入所有注册了的 Provider 的 Get 数据
getProviders 方法: