Zum Inhalt springen

Erstelle einen KI-Agenten, der mit ElizaOS Token übertragen und tauschen kann

Erfahre, wie du einen KI-Agenten erstellst, der Token übertragen und tauschen kann.

5 Min.
Erstelle einen KI-Agenten, der mit ElizaOS Token übertragen und tauschen kann

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)
Kopieren

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
Kopieren

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
Kopieren

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"
    ]
}
Kopieren

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
        ]
})
Kopieren

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 | 
Kopieren
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);
    }  
}
Kopieren

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(
           
Kopieren
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(
Kopieren
Transfer failed: ${error.message}
);
        }
    }
Kopieren

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.

KI-übersetzt. Kann Fehler enthalten. Bitte überprüfen Sie die Informationen stets.

Bewerten Sie die Übersetzung

Dieser Artikel wurde verfasst von:

  • Kingsley Okonkwo

    Kingsley, zertifizierter Ethereum-Blockchain-Entwickler, ist als technischer Redakteur bei Consensys tätig und hat sich auf Entwickler-Tools spezialisiert. Vor seinem Einstieg bei Consensys arbeitete Kingsley als freiberuflicher Backend-Entwickler auf verschiedenen Plattformen, darunter Gigster und Braintrust. Mit 5 Jahren Erfahrung in der Softwareentwicklung beherrscht er Tools wie JavaScript (Node.js & React), GoLang, SQL und Docker. Kingsley zeichnet sich durch die Erstellung von Schritt-für-Schritt-Tutorials und Anleitungen aus und nutzt dabei die neuesten Web3-Technologien, um anderen Entwicklern beim Aufbau besserer Dapps zu helfen. Derzeit lebt Kingsley in Dubai und verbringt seine Freizeit gerne mit Basketball und Fußball.

    Alle Artikel lesen