🧩 插件
概述
Eliza 的插件系统提供了一种模块化的方法,通过附加功能、操作、评估器和提供者来扩展核心功能。插件是自包含的模块,可以轻松添加或移除,以定制您的代理功能。
核心插件概念
插件结构
Eliza 中的每个插件都必须实现 Plugin
接口,并包含以下属性:
interface Plugin {
name: string; // 插件的唯一标识符
description: string; // 插件功能的简要描述
actions?: Action[]; // 插件提供的自定义操作
evaluators?: Evaluator[]; // 行为评估的自定义评估器
providers?: Provider[]; // 消息生成的上下文提供者
services?: Service[]; // 额外的服务(可选)
}
使用插件
安装
- 安装所需的插件包:
pnpm add @elizaos/plugin-[name]
- 在角色配置中导入并注册插件:
import { bootstrapPlugin } from "@eliza/plugin-bootstrap";
import { imageGenerationPlugin } from "@eliza/plugin-image-generation";
import { buttplugPlugin } from "@eliza/plugin-buttplug";
const character = {
// ... 其他角色配置
plugins: [bootstrapPlugin, imageGenerationPlugin, buttplugPlugin],
};
可用插件
1. Bootstrap 插件 (@eliza/plugin-bootstrap
)
Bootstrap 插件提供基本的基础功能:
操作:
continue
- 继续当前对话流程followRoom
- 关注房间以获取更新unfollowRoom
- 取消关注房间ignore
- 忽略特定消息muteRoom
- 静音房间通知unmuteRoom
- 取消静音房间通知
评估器:
fact
- 评估事实准确性goal
- 评估目标完成情况
提供者:
boredom
- 管理参与度time
- 提供时间上下文facts
- 提供事实信息
2. 图像生成插件 (@eliza/plugin-image-generation
)
启用 AI 图像生成功能:
操作:
GENERATE_IMAGE
- 根据文本描述创建图像- 支持多种图像生成服务(Anthropic、Together)
- 自动生成图像的标题
3. Node 插件 (@eliza/plugin-node
)
提供基于 Node.js 的核心服务:
服务:
BrowserService
- 网页浏览功能ImageDescriptionService
- 图像分析LlamaService
- LLM 集成PdfService
- PDF 处理SpeechService
- 文本转语音TranscriptionService
- 语音转文本VideoService
- 视频处理
4. Solana 插件 (@eliza/plugin-solana
)
集成 Solana 区块链功能:
评估器:
trustEvaluator
- 评估交易信任分数
提供者:
walletProvider
- 钱包管理trustScoreProvider
- 交易信任指标
慈善捐款
所有 Coinbase 交易和转账会自动捐赠 1% 的交易金额给慈善机构。目前,慈善地址是根据交易使用的网络硬编码的,当前支持的慈善机构为 X。
每个网络的慈善地址如下:
- Base:
0x1234567890123456789012345678901234567890
- Solana:
pWvDXKu6CpbKKvKQkZvDA66hgsTB6X2AgFxksYogHLV
- Ethereum:
0x750EF1D7a0b4Ab1c97B7A623D7917CcEb5ea779C
- Arbitrum:
0x1234567890123456789012345678901234567890
- Polygon:
0x1234567890123456789012345678901234567890
未来,我们计划与 The Giving Block API 集成,以实现动态和可配置的捐赠,支持更多的慈善组织。
5. Coinbase Commerce 插件 (@eliza/plugin-coinbase
)
集成 Coinbase Commerce 进行支付和交易管理:
操作:
CREATE_CHARGE
- 使用 Coinbase Commerce 创建支付费用GET_ALL_CHARGES
- 获取所有支付费用GET_CHARGE_DETAILS
- 检索特定费用的详细信息
描述: 此插件使 Eliza 能够与 Coinbase Commerce API 交互,以创建和管理支付费用,提供与加密货币支付系统的无缝集成。
Coinbase 钱包管理
该插件会自动处理钱包创建,或在首次运行时使用现有钱包(如果提供了所需的详细信息)。
-
首次运行时生成钱包 如果未提供钱包信息(
COINBASE_GENERATED_WALLET_HEX_SEED
和COINBASE_GENERATED_WALLET_ID
),插件将:- 使用 Coinbase SDK 生成新钱包。
- 自动导出钱包详细信息(
seed
和walletId
)并安全地存储在runtime.character.settings.secrets
或其他配置的存储中。 - 记录钱包的默认地址以供参考。
- 如果角色文件不存在,钱包详细信息将保存到角色目录 中的
characters/charactername-seed.txt
文件中,并附有说明,指示用户必须手动将这些详细信息添加到 settings.secrets 或 .env 文件中。
-
使用现有钱包 如果在首次运行时提供了钱包信息:
- 通过
runtime.character.settings.secrets
或环境变量提供COINBASE_GENERATED_WALLET_HEX_SEED
和COINBASE_GENERATED_WALLET_ID
。 - 插件将导入钱包并用于处理大规模支付。
- 通过
6. Coinbase MassPayments 插件 (@eliza/plugin-coinbase
)
此插件使用 Coinbase SDK 促进加密货币大规模支付的处理。它使得可以创建和管理对多个钱包地址的大规模支付,并将所有交易详细信息记录到 CSV 文件中以供进一步分析。
操作:
SEND_MASS_PAYOUT
发送加密货币大规模支付到多个钱包地址。- 输入:
receivingAddresses
(字符串数组):接收资金的钱包地址。transferAmount
(数字):发送到每个地址的金额(以最小货币单位,例如 ETH 的 Wei)。assetId
(字符串):加密货币资产 ID(例如ETH
、BTC
)。network
(字符串):区块链网络(例如base
、sol
、eth
、arb
、pol
)。
- 输出:在 CSV 文件中记录交易结果(成功/失败)。
- 示例:
{
"receivingAddresses": [
"0xA0ba2ACB5846A54834173fB0DD9444F756810f06",
"0xF14F2c49aa90BaFA223EE074C1C33b59891826bF"
],
"transferAmount": 5000000000000000,
"assetId": "ETH",
"network": "eth"
}
- 输入:
提供者:
massPayoutProvider
从生成的 CSV 文件中检索过去交易的详细信息。- 输出:包括以下字段的交易记录列表:
address
:接收者钱包地址。amount
:发送的金额。status
:交易状态(Success
或Failed
)。errorCode
:错误代码(如果有)。transactionUrl
:交易详细信息的 URL(如果有)。
- 输出:包括以下字段的交易记录列表:
描述:
Coinbase MassPayments 插件简化了加密货币的分发,确保对支持的区块链网络上的多个接收者进行高效和可扩展的支付。
支持的网络:
base
(Base 区块链)sol
(Solana)eth
(Ethereum)arb
(Arbitrum)pol
(Polygon)
设置和配置:
-
配置插件 将插件添加到角色配置中:
import { coinbaseMassPaymentsPlugin } from "@eliza/plugin-coinbase-masspayments";
const character = {
plugins: [coinbaseMassPaymentsPlugin],
}; -
所需配置 设置以下环境变量或运行时设置:
COINBASE_API_KEY
:Coinbase SDK 的 API 密钥COINBASE_PRIVATE_KEY
:用于安全交易的私钥COINBASE_GENERATED_WALLET_HEX_SEED
:钱包的十六进制种子(如果使用现有钱包)COINBASE_GENERATED_WALLET_ID
:唯一钱包 ID(如果使用现有钱包)
钱包管理:
该插件以两种方式处理钱包创建和管理:
-
自动创建钱包 当未提供钱包详细信息时,插件将:
- 使用 Coinbase SDK 生成新钱包
- 导出并存储钱包详细信息在
runtime.character.settings.secrets
- 如果角色文件不存在,将详细信息保存到
characters/charactername-seed.txt
- 记录钱包的默认地址
-
使用现有钱包 当提供钱包信息时:
- 通过设置或环境变量提供所需的钱包详细信息
- 插件将导入并使用现有钱包
示例配置:
// 用于自动生成钱包
runtime.character.settings.secrets = {
// 首次运行时的空设置
};
// 使用现有钱包
runtime.character.settings.secrets = {
COINBASE_GENERATED_WALLET_HEX_SEED:
"0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
COINBASE_GENERATED_WALLET_ID: "wallet-id-123",
};
示例调用
const response = await runtime.triggerAction("SEND_MASS_PAYOUT", {
receivingAddresses: [
"0xA0ba2ACB5846A54834173fB0DD9444F756810f06",
"0xF14F2c49aa90BaFA223EE074C1C33b59891826bF",
],
transferAmount: 5000000000000000, // 0.005 ETH
assetId: "ETH",
network: "eth",
});
console.log("Mass payout response:", response);
交易记录
所有交易(成功和失败)都记录在插件工作目录中的 transactions.csv
文件中:
Address,Amount,Status,Error Code,Transaction URL
0xA0ba2ACB5846A54834173fB0DD9444F756810f06,5000000000000000,Success,,https://etherscan.io/tx/0x...
示例输出:
成功时,将返回类似以下的响应:
{
"text": "Mass payouts completed successfully.\n- Successful Transactions: 2\n- Failed Transactions: 0\nCheck the CSV file for more details."
}
最佳实践:
- 安全存储机密:确保
COINBASE_API_KEY
和COINBASE_PRIVATE_KEY
安全存储在runtime.character.settings.secrets
或环境变量中。要么添加COINBASE_GENERATED_WALLET_HEX_SEED
和COINBASE_GENERATED_WALLET_ID
,要么它将被动态创建 - 验证:始终验证输入参数,特别是
receivingAddresses
和network
,以确保符合预期格式和支持的网络。 - 错误处理:监控日志中的失败交易或支付过程中的错误,并根据需要调整重试逻辑。
7. Coinbase Token Contract 插件 (@eliza/plugin-coinbase
)
此插件使用 Coinbase SDK 启用与各种代币合约(ERC20、ERC721、ERC1155)的部署和交互。它提供了部署新代币合约和与现有合约交互的功能。
操作:
-
DEPLOY_TOKEN_CONTRACT
部署新代币合约(ERC20、ERC721 或 ERC1155)。- 输入:
contractType
(字符串):要部署的合约类型(ERC20
、ERC721
或ERC1155
)name
(字符串):代币名称symbol
(字符串):代币符号network
(字符串):要部署的区块链网络baseURI
(字符串,可选):代币元数据的基本 URI(仅适用于 ERC721 和 ERC1155)totalSupply
(数字,可选):代币总供应量(仅适用于 ERC20)
- 示例:
{
"contractType": "ERC20",
"name": "MyToken",
"symbol": "MTK",
"network": "base",
"totalSupply": 1000000
}
- 输入:
-
INVOKE_CONTRACT
调用已部署智能合约的方法。- 输入:
contractAddress
(字符串):要调用的合约地址method
(字符串):要调用的方法名称abi
(数组):合约 ABIargs
(对象,可选):方法的参数amount
(数字,可选):发送的资产金额(用于可支付方法)assetId
(字符串,可选):发送的资产 IDnetwork
(字符串):要使用的区块链网络
- 示例:
{
"contractAddress": "0x123...",
"method": "transfer",
"abi": [...],
"args": {
"to": "0x456...",
"amount": "1000000000000000000"
},
"network": "base"
}
- 输入:
描述:
Coinbase Token Contract 插件简化了在支持的区块链网络上部署和交互各种代币合约的过程。它支持:
- 可定制供应量的 ERC20 代币部署
- 支持元数据 URI 的 ERC721(NFT)部署
- 支持元数据 URI 的 ERC1155(多代币)部署
- 已部署合约的方法调用
所有合约部署和交互都记录在 CSV 文件中,以便记录和审计。
使用说明:
-
配置插件 将插件添加到角色配置中:
import { tokenContractPlugin } from "@eliza/plugin-coinbase";
const character = {
plugins: [tokenContractPlugin],
}; -
所需配置 确保配置以下环境变量或运行时设置:
COINBASE_API_KEY
:Coinbase SDK 的 API 密钥COINBASE_PRIVATE_KEY
:用于安全交易的私钥- 钱包配置(与 MassPayments 插件相同)
示例部署:
-
ERC20 代币
const response = await runtime.triggerAction("DEPLOY_TOKEN_CONTRACT", {
contractType: "ERC20",
name: "MyToken",
symbol: "MTK",
network: "base",
totalSupply: 1000000,
}); -
NFT 集合
const response = await runtime.triggerAction("DEPLOY_TOKEN_CONTRACT", {
contractType: "ERC721",
name: "MyNFT",
symbol: "MNFT",
network: "eth",
baseURI: "https://api.mynft.com/metadata/",
}); -
多代币集合
const response = await runtime.triggerAction("DEPLOY_TOKEN_CONTRACT", {
contractType: "ERC1155",
name: "MyMultiToken",
symbol: "MMT",
network: "pol",
baseURI: "https://api.mymultitoken.com/metadata/",
});
合约交互示例:
const response = await runtime.triggerAction("INVOKE_CONTRACT", {
contractAddress: "0x123...",
method: "transfer",
abi: [...],
args: {
to: "0x456...",
amount: "1000000000000000000"
},
network: "base"
});
最佳实践:
- 部署前始终验证合约参数
- 安全存储合约地址和部署详情
- 在主网部署前在测试网测试合约交互
- 使用生成的CSV日志跟踪已部署的合约
- 确保对失败的部署或交互进行适当的错误处理
8. TEE 插件 (@elizaos/plugin-tee
)
集成 Dstack SDK 以启用 TEE(可信执行环境)功能并部署安全和隐私增强的 Eliza Agents:
提供者:
deriveKeyProvider
- 允许在 TEE 环境中安全地派生密钥。支持为 Solana(Ed25519)和 Ethereum(ECDSA)链派生密钥。remoteAttestationProvider
- 基于report_data
生成远程认证报告。
DeriveKeyProvider 用法
import { DeriveKeyProvider } from "@elizaos/plugin-tee";
// 初始化提供者
const provider = new DeriveKeyProvider();
// 派生原始密钥
try {
const rawKey = await provider.rawDeriveKey(
"/path/to/derive",
"subject-identifier",
);
// rawKey 是一个 DeriveKeyResponse,可用于进一步处理
// 获取 uint8Array 如下
const rawKeyArray = rawKey.asUint8Array();
} catch (error) {
console.error("原始密钥派生失败:", error);
}
// 派生 Solana 密钥对(Ed25519)
try {
const solanaKeypair = await provider.deriveEd25519Keypair(
"/path/to/derive",
"subject-identifier",
);
// solanaKeypair 现在可以用于 Solana 操作
} catch (error) {
console.error("Solana 密钥派生失败:", error);
}
// 派生 Ethereum 密钥对(ECDSA)
try {
const evmKeypair = await provider.deriveEcdsaKeypair(
"/path/to/derive",
"subject-identifier",
);
// evmKeypair 现在可以用于 Ethereum 操作
} catch (error) {
console.error("EVM 密钥派生失败:", error);
}
RemoteAttestationProvider 用法
import { RemoteAttestationProvider } from "@elizaos/plugin-tee";
// 初始化提供者
const provider = new RemoteAttestationProvider();
// 生成远程认证
try {
const attestation = await provider.generateAttestation("your-report-data");
console.log("认证:", attestation);
} catch (error) {
console.error("生成认证失败:", error);
}
配置
要获取本地测试的 TEE 模拟器,请使用以下命令:
docker pull phalanetwork/tappd-simulator:latest
# 默认情况下,模拟器在 localhost:8090 可用
docker run --rm -p 8090:8090 phalanetwork/tappd-simulator:latest
通过运行环境使用提供者时,请确保配置以下设置:
# 可选,如果在 mac 或 windows 上测试模拟器。Linux x86 机器请留空。
DSTACK_SIMULATOR_ENDPOINT="http://host.docker.internal:8090"
WALLET_SECRET_SALT=your-secret-salt // 单个代理部署所需
9. Webhook 插件 (@eliza/plugin-coinbase-webhooks
)
使用 Coinbase SDK 管理 webhooks,允许创建和管理 webhooks 以监听 Coinbase 平台上的特定事件。
操作:
CREATE_WEBHOOK
- 创建一个新的 webhook 以监听特定事件。- 输入:
networkId
(string): webhook 应监听事件的网络 ID。eventType
(string): 要监听的事件类型(例如,转账)。eventFilters
(object, optional): 事件的附加过滤器。eventTypeFilter
(string, optional): 特定事件类型过滤器。
- 输出:包含 webhook 详细信息的确认消息。
- 示例:
{
"networkId": "base",
"eventType": "transfers",
"notificationUri": "https://your-notification-uri.com"
}
- 输入:
提供者:
webhookProvider
- 检索所有配置的 webhooks 列表。- 输出:包含 ID、URL、事件类型和状态的 webhooks 列表。
描述:
Webhook 插件使 Eliza 能够与 Coinbase SDK 交互,以创建和管理 webhooks。这允许基于用户设置的特定条件进行实时事件处理和通知。
使用说明:
-
配置插件 将插件添加到角色的配置中:
import { webhookPlugin } from "@eliza/plugin-coinbase-webhooks";
const character = {
plugins: [webhookPlugin],
}; -
确保安全配置 设置以下环境变量或运行时设置,以确保插件安全运行:
COINBASE_API_KEY
: Coinbase SDK 的 API 密钥。COINBASE_PRIVATE_KEY
: 用于安全交易的私钥。COINBASE_NOTIFICATION_URI
: 接收通知的 URI。
示例调用
创建 webhook:
const response = await runtime.triggerAction("CREATE_WEBHOOK", {
networkId: "base",
eventType: "transfers",
notificationUri: "https://your-notification-uri.com",
});
console.log("Webhook 创建响应:", response);
最佳实践:
- 安全存储密钥:确保
COINBASE_API_KEY
、COINBASE_PRIVATE_KEY
和COINBASE_NOTIFICATION_URI
安全存储在runtime.character.settings.secrets
或环境变量中。 - 验证:始终验证输入参数以确保符合预期格式和支持的网络。
- 错误处理:监控 webhook 创建过程中的错误日志,并根据需要调整重试逻辑。
10. Fuel 插件 (@elizaos/plugin-fuel
)
Fuel 插件提供与 Fuel Ignition 区块链的接口。
操作:
-
TRANSFER_FUEL_ETH
- 向指定的 Fuel 地址转移 ETH。 - 输入: -toAddress
(string): 要转移 ETH 的 Fuel 地址。 -amount
(string): 要转移的 ETH 数量。 - 输出:包含交易详情的确认消息。 - 示例:{
"toAddress": "0x8F8afB12402C9a4bD9678Bec363E51360142f8443FB171655eEd55dB298828D1",
"amount": "0.00001"
}设置和配置:
-
配置插件 将插件添加到角色的配置中:
import { fuelPlugin } from "@eliza/plugin-fuel";
const character = {
plugins: [fuelPlugin],
}; -
必需配置 设置以下环境变量或运行时设置:
FUEL_WALLET_PRIVATE_KEY
: 用于安全交易的私钥
编写自定义插件
通过实现 Plugin 接口创建新插件:
import { Plugin, Action, Evaluator, Provider } from "@elizaos/core";
const myCustomPlugin: Plugin = {
name: "my-custom-plugin",
description: "添加自定义功能",
actions: [
/* 自定义操作 */
],
evaluators: [
/* 自定义评估器 */
],
providers: [
/* 自定义提供者 */
],
services: [
/* 自定义服务 */
],
};
最佳实践
- 模块化:保持插件专注于特定功能
- 依赖性:清楚记录任何外部依赖
- 错误处理:实现健壮的错误处理
- 文档:为操作和评估器提供清晰的文档
- 测试:包括插件功能的测试
插件开发指南
操作开发
- 实现
Action
接口 - 提供清晰的验证逻辑
- 包括使用示例
- 优雅地处理错误
评估器开发
- 实现
Evaluator
接口 - 定义明确的评估标准