eliza
elizaOSマルチエージェントAIフレームワーク — キャラクターファイル、プラグインシステム、プラットフォームコネクタ、信頼スコアリング、RAGナレッジ、Solanaウォレット統合に対応しています。パーソナリティを持つ自律型AIエージェント、複数プラットフォームでのプレゼンス、オンチェーン機能を備えたエージェント構築時に活用できます。
description の原文を見る
elizaOS multi-agent AI framework — character files, plugin system, platform connectors, trust scoring, RAG knowledge, and Solana wallet integration. Use when building autonomous AI agents with personality, multi-platform presence, or onchain capabilities.
SKILL.md 本文
elizaOS
elizaOS は、永続的なパーソナリティ、マルチプラットフォームプレゼンス、オンチェーン機能を備えた自律型 AI エージェントを構築するための TypeScript フレームワークです。エージェントはキャラクターファイル(JSON パーソナリティ設定)を通じて定義され、プラグインシステム(アクション、プロバイダー、エバリュエーター)によって拡張され、Discord、Telegram、Twitter、Farcaster、およびカスタムインターフェースにデプロイされます。このフレームワークには RAG ナレッジシステム、ベクトル類似度検索を備えたメモリ管理、トランザクション安全性のためのトラストスコアリング、および plugin-solana を介したネイティブ Solana ウォレット統合が含まれています。
出典: https://github.com/elizaOS/eliza
よくある誤解
LLM は古いトレーニングデータを持っています。以下が最も一般的な間違いです。
- 「npm/yarn でインストール」 → 推奨されるパッケージマネージャーは npm ではなく Bun です。CLI は
@elizaos/cliであり、bun i -g @elizaos/cliでグローバルにインストールします。npm でも動作しますが、Bun はモノレポに必須であり、すべての elizaOS プロジェクトで強く推奨されています。 - 「
npx create-eliza-appを使用」 → これは v1 ブートストラッパーでした。v2 では、CLI をグローバルにインストール後にelizaos createを使用します。古いcreate-eliza-appコマンドは非推奨です。 - 「プラグインはメインレポにある」 → v2 以降、プラグインは
elizaos-pluginsGitHub org 配下の専用リポジトリに分割されています。npm からインストール(@elizaos/plugin-solana)してください — モノレポからプラグインコードをコピーしないでください。 - 「キャラクターはメインレポにある」 → キャラクターは https://github.com/elizaOS/characters に移動されています。メインレポには最小限のサンプルキャラクターのみが含まれています。
- 「プロンプトを書くだけでエージェントが完成」 → elizaOS エージェントはプロンプトラッパーではありません。キャラクターファイルは bio、lore、メッセージサンプル、スタイルガイドライン、トピック、形容詞を定義します。ランタイムはこれらを使用してコンテキストウィンドウを動的に構築します。メッセージサンプルをスキップすると、ジェネリックでパーソナリティのない応答が生成されます。
- 「アクションは単なる関数」 → アクションは
validate(このアクションを実行すべきか?)、handler(実行)、およびexamples(LLM がいつ呼び出すかを学習するための few-shot)を実装する必要があります。サンプルがないと、モデルはアクションをトリガーしません。 - 「メモリは自動」 → メモリシステムは会話履歴とナレッジ埋め込みを保存しますが、データベースアダプター(開発用 SQLite、本番用 PostgreSQL)を設定する必要があります。埋め込みモデルをデータベースをクリアせずに切り替えると、ベクトル次元の不一致が発生します。
- 「トラストスコアリングはすべての悪い取引を防ぐ」 → トラストスコアリングはリコメンダーの信頼性とトークンパフォーマンスデータを使用してトークン安全性を評価しますが、これは ヒューリスティックであり保証ではありません。常にトランザクション制限を設定し、トラスト閾値を確認してください。
- 「モノレポに pnpm/yarn を使用」 → モノレポは Bun ワークスペースを使用します。
pnpm installまたはyarn installを実行するとエラーが発生するか、破損したロックファイルが生成されます。 - Node.js バージョン → elizaOS は Node.js 23 以上を必要とします。それより前のバージョンは不可解なビルドエラーを引き起こします。
インストール
CLI(新規プロジェクトに推奨)
bun i -g @elizaos/cli
elizaos create my-agent
cd my-agent
elizaos start
elizaos create コマンドは対話型ウィザードを実行し、キャラクターファイル、デフォルトプラグイン、および環境設定でプロジェクトをスカッフォルディングします。
ソースから(コントリビューターワークフロー)
git clone https://github.com/elizaOS/eliza.git
cd eliza
bun install
cp .env.example .env
bun run build
bun run start
インストール確認
elizaos --version
キャラクターファイル
キャラクターファイルは、エージェントのアイデンティティ、パーソナリティ、および動作を定義する JSON 設定です。elizaOS プロジェクトにおいて最も重要なアーティファクトです。
コアフィールド
{
"name": "Atlas",
"description": "チェーン間のイールド機会を追跡する DeFi リサーチアナリスト",
"bio": [
"Atlas は 2020 年の DeFi サマー以来 DeFi プロトコルを追跡しているオンチェーンアナリストです。",
"データ駆動型の見方と持続不可能なイールドへの懐疑で知られています。",
"AMM 数学を発見した後、TradFi クォンツから暗号通貨にピボットしました。"
],
"lore": [
"監査されていないフォークで 40 ETH を失った経験があり、今はあらゆるコントラクトと対話する前にレビューします。",
"15 チェーン全体の TVL フロー追跡する個人ダッシュボードを保持しています。",
"直接尋ねられない限りメメコインについては議論することを拒否します。"
],
"messageExamples": [
[
{ "user": "user1", "content": { "text": "Base 上の新しい Aave マーケットについてどう思いますか?" } },
{ "user": "Atlas", "content": { "text": "Base Aave は興味深い — USDC のユーティライゼーションは約 78% で推移しているため、借入金利はすぐに上昇するでしょう。供給 APY もそれに続くはずです。cbETH が十分な流動性を持つようになったため、LST マーケットもそこで注視する価値があります。" } }
],
[
{ "user": "user1", "content": { "text": "500% APY を提供しているこの新しいプロトコルでファーミングすべきですか?" } },
{ "user": "Atlas", "content": { "text": "どの TVL に対して 500% APY ですか? $5M 以下の場合、誰かが参加した瞬間にレートは崩壊します。エミッションがネイティブトークンかどうかを確認してください — その場合、あなたは出口流動性です。コントラクトを確認してください:フォークですか?監査済みですか?管理機能のタイムロックがありますか?" } }
]
],
"style": {
"all": [
"クレームをする際に正確な数値とデータポイントを使用します。",
"シルやファイナンシャルアドバイスは決して行わない — すべてを分析としてフレーミングします。",
"ワンライナーではなく、中程度の長さのメッセージで応答します。"
],
"chat": [
"会話的かつ技術的です。DeFi 用語を自然に使用します。",
"特定のプロトコルについて意見を述べる前に、澄ましている質問をします。"
],
"post": [
"番号付きのポイントを備えたスレッド形式の分析。",
"常にデータを含めます:TVL、ユーティライゼーション率、APY 内訳。"
]
},
"topics": [
"DeFi イールド戦略",
"AMM メカニクス",
"レンディングプロトコル分析",
"オンチェーンデータ",
"プロトコルリスク評価"
],
"adjectives": [
"analytical",
"data-driven",
"skeptical",
"precise",
"methodical"
],
"modelProvider": "openai",
"settings": {
"model": "gpt-4o",
"voice": {
"model": "en_US-male-medium"
}
},
"plugins": [
"@elizaos/plugin-solana"
],
"clients": [
"discord",
"telegram"
]
}
フィールドリファレンス
| フィールド | 型 | 必須 | 目的 |
|---|---|---|---|
name | string | はい | 会話で使用される表示名 |
description | string | いいえ | エージェントの 1 行サマリー |
bio | string[] | はい | バックグラウンドステートメント — コンテキストの多様性のためにランダムに抽出 |
lore | string[] | はい | パーソナリティと知識境界を形作るバックストーリーファクト |
messageExamples | array[][] | はい | Few-shot 会話ペア — モデルはこれらからトーン、長さ、スタイルを学習 |
postExamples | string[] | いいえ | Twitter/Farcaster 用のサンプルソーシャルメディア投稿 |
style.all | string[] | はい | すべての出力に適用されるスタイルルール |
style.chat | string[] | いいえ | ダイレクトメッセージとチャット用のスタイルルール |
style.post | string[] | いいえ | ソーシャルメディア投稿用のスタイルルール |
topics | string[] | いいえ | 専門分野 — エージェントが何に関与するかをガイド |
adjectives | string[] | いいえ | パーソナリティ記述子 — システムプロンプト構築で使用 |
modelProvider | string | はい | LLM プロバイダー:openai、anthropic、google、groq、ollama、llama_local |
settings | object | いいえ | モデル設定、音声設定、シークレット |
plugins | string[] | いいえ | ロードするプラグインの npm パッケージ名 |
clients | string[] | いいえ | プラットフォームコネクタ:discord、telegram、twitter、farcaster、direct |
モデルプロバイダー
| プロバイダー | modelProvider 値 | 環境変数 |
|---|---|---|
| OpenAI | openai | OPENAI_API_KEY |
| Anthropic | anthropic | ANTHROPIC_API_KEY |
| Google Gemini | google | GOOGLE_API_KEY |
| Groq | groq | GROQ_API_KEY |
| Ollama(ローカル) | ollama | OLLAMA_SERVER_URL |
| Local Llama | llama_local | なし(モデルをダウンロード) |
プラグインシステム
プラグインは elizaOS エージェント用の拡張メカニズムです。各プラグインは関連するアクション、プロバイダー、エバリュエーターをまとめて再利用可能パッケージにします。
プラグインインターフェース
import { Plugin, Action, Provider, Evaluator, Service } from "@elizaos/core";
const myPlugin: Plugin = {
name: "my-plugin",
description: "エージェントにカスタム機能を追加",
actions: [myAction],
providers: [myProvider],
evaluators: [myEvaluator],
services: [myService],
};
export default myPlugin;
アクション
アクションはエージェントが実行できることを定義します。ランタイムは LLM を使用して、会話コンテキストとアクションのサンプルに基づいて呼び出すアクションを決定します。
import { Action, IAgentRuntime, Memory, State, HandlerCallback } from "@elizaos/core";
const checkPriceAction: Action = {
name: "CHECK_TOKEN_PRICE",
description: "暗号通貨トークンの現在価格を取得",
similes: ["GET_PRICE", "TOKEN_PRICE", "PRICE_CHECK"],
validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {
const text = message.content.text.toLowerCase();
return text.includes("price") && (text.includes("token") || text.includes("$"));
},
handler: async (
runtime: IAgentRuntime,
message: Memory,
state: State,
options: Record<string, unknown>,
callback: HandlerCallback
): Promise<void> => {
const tokenSymbol = extractTokenSymbol(message.content.text);
const price = await fetchPrice(tokenSymbol);
await callback({
text: `${tokenSymbol} は現在 $${price.usd} で取引されています(24 時間変化率:${price.change24h}%)`,
});
},
examples: [
[
{ user: "user1", content: { text: "今の SOL の価格はいくらですか?" } },
{ user: "agent", content: { text: "SOL は現在 $142.50 で取引されています(24 時間変化率:+3.2%)", action: "CHECK_TOKEN_PRICE" } },
],
],
};
プロバイダー
プロバイダーは各応答の前にエージェントのプロンプトにリアルタイムコンテキストを挿入します。これはエージェントの感覚システムです。
import { Provider, IAgentRuntime, Memory, State } from "@elizaos/core";
const portfolioProvider: Provider = {
name: "PORTFOLIO",
description: "エージェントの現在のウォレット残高を提供",
get: async (runtime: IAgentRuntime, message: Memory, state?: State): Promise<string> => {
const walletAddress = runtime.getSetting("SOLANA_PUBLIC_KEY");
if (!walletAddress) return "";
const balances = await fetchBalances(walletAddress);
return `現在のポートフォリオ:\n${balances.map(b => `- ${b.symbol}: ${b.amount} ($${b.usdValue})`).join("\n")}`;
},
};
エバリュエーター
エバリュエーターは各応答の後に実行され、会話を分析し、情報を抽出し、エージェントメモリを更新します。
import { Evaluator, IAgentRuntime, Memory } from "@elizaos/core";
const sentimentEvaluator: Evaluator = {
name: "SENTIMENT_TRACKER",
description: "会話全体でユーザーセンチメントを追跡",
similes: ["MOOD_TRACKER"],
validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {
return message.content.text.length > 20;
},
handler: async (runtime: IAgentRuntime, message: Memory): Promise<void> => {
const sentiment = await analyzeSentiment(message.content.text);
await runtime.memoryManager.createMemory({
userId: message.userId,
agentId: runtime.agentId,
roomId: message.roomId,
content: {
text: `ユーザーセンチメント:${sentiment.label} (${sentiment.score})`,
metadata: { type: "sentiment", ...sentiment },
},
});
},
examples: [],
};
プラットフォームコネクタ
Discord
DISCORD_APPLICATION_ID=your_app_id
DISCORD_API_TOKEN=your_bot_token
{
"clients": ["discord"]
}
エージェントは、メンションされているチャネルと DM で応答します。チャネル(ルーム)ごとに個別の会話メモリを保持します。
Telegram
TELEGRAM_BOT_TOKEN=your_bot_token
{
"clients": ["telegram"]
}
グループチャットとダイレクトメッセージの両方をサポートしています。グループではエージェントは名前でメンションされたときまたは直接返信されたときに応答します。
TWITTER_USERNAME=your_username
TWITTER_PASSWORD=your_password
TWITTER_EMAIL=your_email
TWITTER_COOKIES=your_cookies
{
"clients": ["twitter"]
}
エージェントはツイートを投稿し、メンションに返信し、引用リツイートできます。ツイート作成には style.post を使用します。
Farcaster
FARCASTER_NEYNAR_API_KEY=your_api_key
FARCASTER_NEYNAR_SIGNER_UUID=your_signer_uuid
FARCASTER_FID=your_fid
{
"clients": ["farcaster"]
}
メモリシステム
elizaOS はデータベースアダプター(SQLite または PostgreSQL)に支援された多層メモリシステムをベクトル埋め込みサポート付きセマンティック検索で提供します。
メモリタイプ
| タイプ | 目的 | 永続性 |
|---|---|---|
| 会話 | ルームあたりのチャットメッセージ | 永続的 |
| ナレッジ | RAG ドキュメントとファクト | 永続的 |
| 説明 | ユーザーについてのエージェントの理解 | 時間とともに更新 |
| ファクト | 会話から抽出されたファクト | 永続的 |
メモリの作成
await runtime.memoryManager.createMemory({
userId: message.userId,
agentId: runtime.agentId,
roomId: message.roomId,
content: {
text: "ユーザーは Solana DeFi プロトコルに関心がある",
metadata: { source: "conversation", confidence: 0.9 },
},
});
埋め込みはメモリ作成時にランタイムによって自動的に生成されます。手動の埋め込みステップは不要です。
メモリの検索
const relevantMemories = await runtime.memoryManager.getMemories({
roomId: message.roomId,
count: 10,
unique: true,
});
const semanticResults = await runtime.memoryManager.searchMemoriesByEmbedding(
await runtime.embed("Solana イールドファーミング"),
{
roomId: message.roomId,
match_threshold: 0.8,
count: 5,
}
);
RAG ナレッジ
knowledge/ ディレクトリにファイルを配置するか、プログラム的にエージェントのナレッジベースにドキュメントを追加できます:
await runtime.knowledgeManager.createMemory({
agentId: runtime.agentId,
content: {
text: documentContent,
metadata: { source: "docs", filename: "protocol-overview.md" },
},
roomId: "knowledge",
});
ランタイムはドキュメントをチャンク化し、埋め込みを生成し、プロンプト構築時に関連するチャンクを取得します。
データベースアダプター
| アダプター | パッケージ | ユースケース |
|---|---|---|
| SQLite | @elizaos/adapter-sqlite | ローカル開発、シングルエージェント |
| PostgreSQL | @elizaos/adapter-postgres | 本番環境、マルチエージェント、pgvector が必須 |
SQLite がデフォルトです。PostgreSQL の場合:
POSTGRES_URL=postgresql://user:password@localhost:5432/eliza
PostgreSQL アダプターは埋め込み保存と類似度検索のために pgvector 拡張が必要です。
マルチエージェントオーケストレーション
elizaOS は単一のランタイムで複数のエージェントを実行することをサポートしており、各エージェントは独自のキャラクター、メモリ、プラグインセットを持ちます。
ワールドとルーム
- ワールド:サーバーまたはワークスペース(例:Discord サーバー、Telegram グループ)
- ルーム:ワールド内のチャネルまたは DM
各エージェントはルームごとに独自のコンテキストを保持しますが、ワールドを共有するように設定できます。
複数エージェントの実行
elizaos start --characters characters/analyst.json,characters/trader.json,characters/moderator.json
またはプログラム的に:
import { AgentRuntime, defaultCharacter } from "@elizaos/core";
import { SqliteDatabaseAdapter } from "@elizaos/adapter-sqlite";
const db = new SqliteDatabaseAdapter("./data/db.sqlite");
const agents = await Promise.all(
characters.map(async (character) => {
const runtime = new AgentRuntime({
character,
databaseAdapter: db,
token: process.env.OPENAI_API_KEY,
modelProvider: "openai",
plugins: character.plugins,
});
await runtime.initialize();
return runtime;
})
);
Solana 統合(plugin-solana)
@elizaos/plugin-solana パッケージはウォレット管理、トークン操作、DeFi インタラクションを提供します。
セットアップ
bun add @elizaos/plugin-solana
SOLANA_PUBLIC_KEY=your_public_key
SOLANA_PRIVATE_KEY=your_private_key
SOLANA_RPC_URL=https://api.mainnet-beta.solana.com
BIRDEYE_API_KEY=your_birdeye_key
{
"plugins": ["@elizaos/plugin-solana"]
}
機能
| アクション | 説明 |
|---|---|
SEND_TOKEN | ウォレット間の SPL トークン転送 |
SWAP_TOKEN | Jupiter アグリゲーターを使用したトークンスワップ |
STAKE_SOL | バリデーターへの SOL ステーキング |
CHECK_BALANCE | ウォレット残高の照会 |
トラストスコアリング
トラストエンジンは以下を組み合わせることでトランザクション安全性を評価します:
- トークンパフォーマンスデータ — 価格履歴、ボリューム、流動性深度
- リコメンダー信頼性 — トークンを提案したアドレスのトラックレコード
- リスクヒューリスティック — コントラクト経過時間、ホルダー集中度、流動性ロック
const trustScore = await runtime.providers.get("TRUST_SCORE");
トラストスコアは 0 から 1 の範囲です。キャラクターの設定で最小閾値を設定します:
{
"settings": {
"secrets": {
"SOLANA_PUBLIC_KEY": "",
"SOLANA_PRIVATE_KEY": ""
},
"trustScoreThreshold": 0.6,
"maxTransactionAmount": 100
}
}
環境変数
完全なデプロイメント用の必須およびオプション環境変数:
# LLM プロバイダー(少なくとも 1 つが必須)
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
GOOGLE_API_KEY=
GROQ_API_KEY=
# プラットフォームコネクタ
DISCORD_APPLICATION_ID=
DISCORD_API_TOKEN=
TELEGRAM_BOT_TOKEN=
TWITTER_USERNAME=
TWITTER_PASSWORD=
TWITTER_EMAIL=
FARCASTER_NEYNAR_API_KEY=
FARCASTER_NEYNAR_SIGNER_UUID=
# Solana
SOLANA_PUBLIC_KEY=
SOLANA_PRIVATE_KEY=
SOLANA_RPC_URL=https://api.mainnet-beta.solana.com
BIRDEYE_API_KEY=
# データベース
POSTGRES_URL=
# サーバー
SERVER_PORT=3000
.env ファイルをコミットしないでください。.env.example をテンプレートとして使用してください。
プロジェクト構造
my-agent/
├── characters/
│ └── my-character.json
├── knowledge/
│ └── docs.md
├── plugins/
│ └── my-plugin/
│ ├── src/
│ │ ├── actions/
│ │ ├── providers/
│ │ ├── evaluators/
│ │ └── index.ts
│ └── package.json
├── .env
├── package.json
└── tsconfig.json
CLI リファレンス
| コマンド | 説明 |
|---|---|
elizaos create | 新しいプロジェクトをスカッフォルディング(対話型) |
elizaos create my-agent | 名前でスカッフォルディング |
elizaos start | エージェントランタイムを開始 |
elizaos start --characters file.json | 特定のキャラクターで開始 |
elizaos --version | CLI バージョンを出力 |
elizaos [command] --help | コマンドのヘルプを表示 |
一般的なパターン
動的キャラクター読み込み
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- 0xinit
- リポジトリ
- 0xinit/cryptoskills
- ライセンス
- Apache-2.0
- 最終更新
- 2026/3/10
Source: https://github.com/0xinit/cryptoskills / ライセンス: Apache-2.0