KI-Agenten sind autonome Programme, die darauf ausgelegt sind, ihre Umgebung wahrzunehmen, Informationen zu verarbeiten und Maßnahmen zu ergreifen, um bestimmte Ziele zu erreichen. Diese Agenten können von einfachen regelbasierten Bots bis hin zu fortschrittlichen Machine-Learning-Systemen reichen, die in der Lage sind, Entscheidungen im Laufe der Zeit anzupassen und zu optimieren.
In der Blockchain- und DeFi-Welt hat der Aufstieg KI-gestützter Automatisierung neue Möglichkeiten für nahtlose und intelligente On-Chain-Interaktionen eröffnet. Von der Automatisierung von Aufgaben wie Trading, Risikobewertung und Liquiditätsmanagement bis hin zur Ausführung komplexer Smart-Contract-Interaktionen verändern KI-Agenten die Art und Weise, wie wir Dapps entwickeln, indem sie die Effizienz steigern und den Bedarf an menschlichem Eingreifen reduzieren.
Mit Frameworks wie ElizaOS können Entwickler KI-Agenten erstellen, die mit Blockchain-Protokollen interagieren und Echtzeit-Entscheidungen zu Token-Swaps, Arbitrage und Portfolio-Management treffen. In diesem Leitfaden führen wir durch das Design, die Einrichtung und die Implementierung eines KI-Agenten, der Transaktionen mithilfe der integrierten ElizaOS-Funktionen autonom ausführt.
Voraussetzungen
Bevor wir mit dem Aufbau beginnen, stelle sicher, dass du folgendes eingerichtet hast:
Node.js (v23.3.0 oder höher)
PNPM Paketmanager
EVM-kompatible Wallet mit Testnet-Token – Erforderlich für die Transaktionsausführung (z. B. Sepolia ETH)
RPC-Provider-URL – Verbindet deine Anwendung mit der Blockchain, z. B. Infura
API-Schlüssel für den Modellanbieter – Erforderlich für KI-Interaktionen (z. B. OpenAI)
Sobald du diese bereit hast, kannst du direkt mit dem Aufbau deines KI-gestützten Blockchain-Agenten beginnen.
ElizaOS-Umgebung einrichten
Klone das ElizaOS-Repository und checke das neueste Release aus.
git clone https://github.com/elizaOS/eliza.git
cd eliza
git checkout $(git describe --tags --abbrev=0)
Du kannst zu einem stabilen Release wechseln, falls die Hauptversion nicht funktioniert. Zum Zeitpunkt der Erstellung dieses Leitfadens wurde die Version stable-11-30 empfohlen. Um sie zu verwenden, führe folgendes aus:
git fetch --all
git checkout stable-11-30
Abhängigkeiten installieren
pnpm install
Umgebungsvariablen konfigurieren
cp .env.example .env
`# EVM
EVM_PRIVATE_KEY=
EVM_PROVIDER_URL=
OPEN AI
OPENAI_API_KEY=`
Die oben genannten Details sind für das ordnungsgemäße Funktionieren von ElizaOS unerlässlich:
EVM_PRIVATE_KEY**:** Privater Wallet-Schlüssel zum Signieren von Transaktionen. Dies ist die Wallet, von der aus Eliza Token-Transfers und Swaps durchführt – stelle daher sicher, dass sie mit etwas Sepolia-Testnet-ETH vorgeladen ist.
EVM_PROVIDER_URL**:** Ein RPC-Endpunkt, der eine Verbindung zu einem Blockchain-Node herstellt und dem KI-Agenten die Interaktion mit dem Netzwerk ermöglicht.
OPENAI_API_KEY**:** Gewährt Zugang zu OpenAI-Modellen und ermöglicht dem KI-Agenten, intelligente Entscheidungen zu treffen.
Hinweis: Stelle sicher, dass dein privater Schlüssel sicher bleibt und von der Versionskontrolle ausgeschlossen ist.
Kernkonzepte des Eliza-Frameworks
Das Eliza-Framework besteht aus vier Schlüsselkomponenten:
Characters: JSON-Konfigurationsdateien, die die Persönlichkeit, das Verhalten und den Kommunikationsstil der KI definieren
Agents: Dies sind Laufzeitmodule, die für die Verwaltung von Speicher, die Verarbeitung von Eingaben und die Ausführung von Verhaltensweisen zuständig sind
Providers: Datenquellen, die Kontext und Echtzeit-Informationen bereitstellen, um Interaktionen zu verbessern
Actions: Ausführbare Funktionen, die Agenten in die Lage versetzen, Aufgaben auszuführen und mit externen Systemen zu interagieren
Einen Token-Swap- und Transfer-Character definieren
Characters definieren den Kommunikationsstil, den Ton und die Antwortkonsistenz eines KI-Agenten, wodurch Interaktionen natürlicher und ansprechender werden. Ein gut gestalteter Character stellt sicher, dass die KI mit ihrem beabsichtigten Zweck übereinstimmt.
Für dieses Projekt ist die Hauptfunktionalität, die wir implementieren möchten, Token-Transfer und Swapping. Daher definieren wir einen Eliza-Character, der steuert, wie der KI-Agent mit Blockchain-Protokollen interagiert, Transaktionen ausführt und Feedback an Benutzer gibt. Dieser Character stellt sicher, dass der Agent Transaktionsdetails klar kommuniziert, vordefinierte Sicherheitsregeln befolgt und eine nahtlose Benutzererfahrung aufrechterhält.
Erstelle eine neue Character-Datei.
cd characters
touch degen.character.json
Kopiere den folgenden Inhalt in die neu erstellte Datei:
{
"name": "ETHMaxxer",
"clients": [],
"modelProvider": "openai",
"settings": {
"chains": {
"evm": ["sepolia"]
}
},
"plugins": ["@elizaos/plugin-evm"],
"bio": [
"ETH Transfers",
"ETHMaxxer is a crypto-native who lives and breathes Ethereum",
"Believes every dip is a 'generational buying opportunity'",
"Always sending ETH and reminding everyone 'gas fees are part of the game'",
"Claims 'BTC is cool, but ETH is the future of finance'",
"Frequently checks gas prices but still sends transactions anyway"
],
"lore": [
"Started stacking ETH in the early days, never looked back",
"Loves discussing new L2s, staking, and Ethereum upgrades",
"Firm believer in 'not your keys, not your coins'",
"Survived multiple bull and bear cycles but still max bullish"
],
"knowledge": [
"Sending ETH transactions",
"Gas fee optimization",
"Ethereum staking",
"Layer 2 scaling solutions",
"DeFi applications",
"Smart contract risks",
"On-chain security",
"Bridging assets",
"Crypto market trends"
],
"messageExamples": [
[
{
"user": "{{user1}}",
"content": {
"text": "How do I send ETH?"
}
},
{
"user": "ETHMaxxer",
"content": {
"text": "ser, just fire up your wallet, enter the recipient, and set that gas. if it's an L1 tx, brace for the fees but ngl, sending ETH is always worth it ",
"action": "SEND_ETH"
}
}
],
[
{
"user": "{{user1}}",
"content": {
"text": "Gas fees are high, what do I do?"
}
},
{
"user": "ETHMaxxer",
"content": {
"text": "fren, welcome to the ETH experience . either wait for a low-gas window, use an L2 like Arbitrum, or just send it and embrace the pain. ngmi if you're scared of gas fees "
}
}
],
[
{
"user": "{{user1}}",
"content": {
"text": "Is ETH going up?"
}
},
{
"user": "ETHMaxxer",
"content": {
"text": "anon, ETH is always going up... eventually. if not today, then after the next hard fork or bull cycle. remember, '1 ETH = 1 ETH', just hodl "
}
}
]
],
"postExamples": [
"gas is pain, but ETH is life ",
"sending ETH and feeling rich, until I check my gas fees ",
"L2s are cool, but real maxxers still send ETH on mainnet "
],
"topics": [
"eth_transfers",
"ethereum_news",
"gas_fees",
"staking",
"crypto_markets"
],
"style": {
"all": [
"Crypto-maximalist",
"ETH-focused",
"Slightly degen",
"Loves talking about gas fees and upgrades"
],
"chat": [
"Casual",
"Crypto-slang heavy",
"Slightly memetic",
"Uses emojis frequently"
],
"post": ["Short", "Bullish", "Relatable", "Memetic"]
},
"adjectives": [
"ETH-maxi",
"Bullish",
"Crypto-native",
"Gas-tolerant",
"Future-focused",
"Layer 2 curious"
]
}
Die obige Datei definiert die Konfiguration für einen KI-Agenten namens ETHMaxxer, legt "modelProvider": "openai" fest und setzt Sepolia als designiertes Blockchain-Netzwerk.
Agents
Agents im Eliza-Framework sind die zentralen Laufzeitkomponenten, die KI-Characters zum Leben erwecken. Sie verwalten Verhaltensweisen und Interaktionen über die AgentRuntime-Klasse. Für das ordnungsgemäße Funktionieren der AgentRuntime-Klasse sind mehrere Schlüsselkomponenten erforderlich, von denen einige vom Eliza-Framework direkt bereitgestellt werden:
Database adapter: Verwaltet die Speicherung und den Abruf von Informationen für KI-Agenten, einschließlich Speicherverwaltung, Beziehungsverfolgung und Wissensverwaltung.
Plugins: Erweitern die Funktionalität von KI-Agenten und ermöglichen die Integration mit externen Diensten wie Blockchain und sozialen Medien. In diesem Projekt legen wir fest, dass unser KI-Agent @elizaos/plugin-evm für die Interaktion mit der Blockchain verwendet.
Model provider: Definiert die KI-Modellquelle für die Verarbeitung und Generierung von Antworten. Verfügbare Optionen umfassen Anthropic, Grok und andere, aber für dieses Projekt haben wir uns für OpenAI entschieden, wie in unserer Character-Datei definiert.
Authentication token: Erforderlich für den ausgewählten Modellanbieter. Dieser sollte als Umgebungsvariable übergeben werden, z. B. OPENAI_API_KEY.
Character configuration file: Die Character-Datei, die wir zuvor definiert haben und die die Eigenschaften und das Verhalten des KI-Agenten beschreibt.
Alle diese Komponenten sind im Ordner /agent/src/index.ts definiert. Der relevante AgentRuntime-Code-Ausschnitt für unseren Agenten lautet wie folgt:
return new AgentRuntime({
databaseAdapter: db,
token,
modelProvider: character.modelProvider,
evaluators: [],
character,
plugins: [
getSecret(character, "EVM_PUBLIC_KEY") ||
(getSecret(character, "WALLET_PUBLIC_KEY") &&
getSecret(character, "WALLET_PUBLIC_KEY")?.startsWith("0x"))
? evmPlugin
: null
]
})
Providers
Providers übernehmen spezialisierte Funktionen wie Wallet-Integrationen, Blockchain-Interaktionen und Datenzugriff und stellen sicher, dass KI-Agenten nahtlos mit externen Systemen verbunden werden können. Sie fungieren als Gateways für die Ausführung von Transaktionen, den Abruf von Echtzeit-Daten und die Verwaltung von Interaktionen über verschiedene Dienste hinweg.
In @elizaos/plugin-evm ermöglichen Providers KI-Agenten die Interaktion mit EVM-kompatiblen Blockchains, sodass sie Transaktionen senden, Smart Contracts abfragen und Blockchain-Aktivitäten überwachen können. Durch die Nutzung von RPC-Endpunkten von Diensten wie Infura kann der Agent On-Chain-Aktionen ausführen, ohne einen dedizierten Node zu betreiben.
So werden Providers in @elizaos/plugin-evm implementiert:
export class WalletProvider {
private cache: NodeCache;
private cacheKey: string = "evm/wallet";
private currentChain: SupportedChain = "mainnet";
private CACHE_EXPIRY_SEC = 5;
chains: Record<string, Chain> = { ...viemChains };
account: PrivateKeyAccount;
constructor(
accountOrPrivateKey: PrivateKeyAccount |
0x${string}
,
private cacheManager: ICacheManager,
chains?: Record<string, Chain>
) {
this.setAccount(accountOrPrivateKey);
this.setChains(chains);
if (chains && Object.keys(chains).length > 0) {
this.setCurrentChain(Object.keys(chains)[0] as SupportedChain);
}
this.cache = new NodeCache({ stdTTL: this.CACHE_EXPIRY_SEC });
}
getAddress(): Address {
return this.account.address;
}
getCurrentChain(): Chain {
return this.chains[this.currentChain];
}
getPublicClient(
chainName: SupportedChain
): PublicClient<HttpTransport, Chain, Account | undefined> {
const transport = this.createHttpTransport(chainName);
const publicClient = createPublicClient({
chain: this.chains[chainName],
transport,
});
return publicClient;
}
getWalletClient(chainName: SupportedChain): WalletClient {
const transport = this.createHttpTransport(chainName);
const walletClient = createWalletClient({
chain: this.chains[chainName],
transport,
account: this.account,
});
return walletClient;
}
getChainConfigs(chainName: SupportedChain): Chain {
const chain = viemChains[chainName];
if (!chain?.id) {
throw new Error("Invalid chain name");
}
return chain;
}
async getWalletBalance(): Promise<string | null> {
const cacheKey = "walletBalance_" + this.currentChain;
const cachedData = await this.getCachedData<string>(cacheKey);
if (cachedData) {
elizaLogger.log(
"Returning cached wallet balance for chain: " +
this.currentChain
);
return cachedData;
}
try {
const client = this.getPublicClient(this.currentChain);
const balance = await client.getBalance({
address: this.account.address,
});
const balanceFormatted = formatUnits(balance, 18);
this.setCachedData<string>(cacheKey, balanceFormatted);
elizaLogger.log(
"Wallet balance cached for chain: ",
this.currentChain
);
return balanceFormatted;
} catch (error) {
console.error("Error getting wallet balance:", error);
return null;
}
}
async getWalletBalanceForChain(
chainName: SupportedChain
): Promise<string | null> {
try {
const client = this.getPublicClient(chainName);
const balance = await client.getBalance({
address: this.account.address,
});
return formatUnits(balance, 18);
} catch (error) {
console.error("Error getting wallet balance:", error);
return null;
}
}
addChain(chain: Record<string, Chain>) {
this.setChains(chain);
}
}
Actions
Actions definieren die spezifischen Verhaltensweisen, die KI-Agenten ausführen können, und ermöglichen es ihnen, mit externen Systemen zu interagieren, Anfragen zu verarbeiten und Aufgaben zu automatisieren. Jede Action ist darauf ausgelegt, eine bestimmte Funktion auszuführen, wie z. B. das Senden von Transaktionen, das Abrufen von Daten oder das Ausführen von Smart-Contract-Aufrufen, um sicherzustellen, dass der Agent effizient in seiner Umgebung arbeitet.
In @elizaos/plugin-evm ermöglichen Actions Token-Transfers, Swaps und Blockchain-Interaktionen, sodass KI-Agenten Transaktionen direkt auf EVM-kompatiblen Netzwerken ausführen können. Diese Actions werden durch Benutzereingaben oder vordefinierte Logik ausgelöst und gewährleisten eine nahtlose Ausführung blockchain-bezogener Operationen.
So wird eine Token-Transfer-Action in @elizaos/plugin-evm implementiert:
async transfer(params: TransferParams): Promise<Transaction> {
console.log(
Transferring: ${params.amount} tokens to (${params.toAddress} on ${params.fromChain})
);
if (!params.data) {
params.data = "0x";
}
this.walletProvider.switchChain(params.fromChain);
const walletClient = this.walletProvider.getWalletClient(
params.fromChain
);
try {
const hash = await walletClient.sendTransaction({
account: walletClient.account,
to: params.toAddress,
value: parseEther(params.amount),
data: params.data as Hex,
kzg: {
blobToKzgCommitment: function (_: ByteArray): ByteArray {
throw new Error("Function not implemented.");
},
computeBlobKzgProof: function (
_blob: ByteArray,
_commitment: ByteArray
): ByteArray {
throw new Error("Function not implemented.");
},
},
chain: undefined,
});
return {
hash,
from: walletClient.account.address,
to: params.toAddress,
value: parseEther(params.amount),
data: params.data as Hex,
};
} catch (error) {
throw new Error(
Transfer failed: ${error.message}
Nachdem wir nun die Umgebungsvariablen, die Character-Datei und das zu verwendende Eliza-Plugin angegeben haben, wollen wir alles zusammenführen und unseren KI-Agenten testen.
Projekt bauen
pnpm build
Character ausführen
pnpm start --character="characters/degen.character.json"
Client starten
pnpm start:client
Jetzt interagieren wir mit unserem Agenten und bitten ihn, bestimmte Aufgaben auszuführen.
Fazit
Der Aufbau eines KI-Agenten, der mit Ethereum und EVM-kompatiblen Blockchains interagiert, eröffnet neue Möglichkeiten für automatisierte und intelligente On-Chain-Interaktionen. Dieser Leitfaden führte durch die Definition von Characters, Agents, Providers und Actions und ermöglichte es dem Agenten, Token autonom zu transferieren und zu swappen.
Durch die Nutzung des modularen Frameworks von ElizaOS können Entwickler KI-gestützte DeFi-Assistenten, Trading-Bots oder Portfolio-Manager erstellen, die nahtlos mit Blockchain-Netzwerken interagieren. Jetzt, da du die Grundlage hast, experimentiere damit, seine Fähigkeiten zu erweitern, seine Logik zu verfeinern und neue Funktionen zu integrieren, um die On-Chain-Automatisierung zu verbessern.