AI agent'lar, ortamlarını algılamak, bilgileri işlemek ve belirli hedeflere ulaşmak için eylem gerçekleştirmek üzere tasarlanmış özerk programlardır. Bu agent'lar, basit kural tabanlı botlardan zaman içinde kararları uyarlayıp optimize edebilen gelişmiş makine öğrenimi sistemlerine kadar geniş bir yelpazede yer alabilir.
Blockchain ve DeFi alanında, yapay zeka destekli otomasyonun yükselişi, sorunsuz ve akıllı on-chain etkileşimler için yeni kapılar aralamıştır. Ticaret, risk değerlendirmesi ve likidite yönetimi gibi görevleri otomatikleştirmekten karmaşık akıllı sözleşme etkileşimlerini yürütmeye kadar AI agent'lar, verimliliği artırarak ve insan müdahalesine olan ihtiyacı azaltarak dapp geliştirme biçimimizi dönüştürmektedir.
ElizaOS gibi framework'ler sayesinde geliştiriciler, blockchain protokolleriyle etkileşime giren ve token swap'ları, arbitraj ile portföy yönetimi konusunda gerçek zamanlı kararlar alan AI agent'lar inşa edebilir. Bu kılavuzda, ElizaOS'un yerleşik işlevselliklerini kullanarak işlemleri özerk biçimde gerçekleştiren bir AI agent'ın tasarımını, kurulumunu ve uygulamasını adım adım ele alacağız.
Ön Koşullar
Geliştirmeye başlamadan önce aşağıdaki kurulumların hazır olduğundan emin olun:
Node.js (v23.3.0 veya üzeri)
PNPM paket yöneticisi
Testnet token'larına sahip EVM uyumlu cüzdan – İşlem yürütme için gereklidir (örn. Sepolia ETH)
RPC sağlayıcı URL'si – Uygulamanızı blockchain'e bağlar, örn. Infura
Model sağlayıcı için API anahtarları – Yapay zeka etkileşimleri için gereklidir (örn. OpenAI)
Bunları hazırladıktan sonra yapay zeka destekli blockchain agent'ınızı oluşturmaya başlamaya hazırsınız.
ElizaOS Ortamını Kurma
ElizaOS deposunu klonlayın ve en son sürüme geçin.
git clone https://github.com/elizaOS/eliza.git
cd eliza
git checkout $(git describe --tags --abbrev=0)
Ana sürüm çalışmazsa kararlı bir sürüme geçebilirsiniz. Bu yazının hazırlandığı sırada stable-11-30 sürümü önerilmekteydi. Kullanmak için şunu çalıştırın:
git fetch --all
git checkout stable-11-30
Bağımlılıkları yükleyin
pnpm install
Ortam değişkenlerini yapılandırın
cp .env.example .env
`# EVM
EVM_PRIVATE_KEY=
EVM_PROVIDER_URL=
OPEN AI
OPENAI_API_KEY=`
Yukarıdaki bilgiler ElizaOS'un düzgün çalışması için zorunludur:
EVM_PRIVATE_KEY**:** İşlemleri imzalamak için kullanılan cüzdan özel anahtarı. Eliza'nın token transferleri ve swap'ları gerçekleştireceği cüzdandır; bu nedenle içinde bir miktar Sepolia testnet ETH bulunduğundan emin olun.
EVM_PROVIDER_URL**:** Bir blockchain node'una bağlanan ve AI agent'ın ağla etkileşime girmesini sağlayan RPC endpoint'i.
OPENAI_API_KEY**:** OpenAI modellerine erişim sağlayarak AI agent'ın akıllı kararlar almasına olanak tanır.
Not: Özel anahtarınızın güvende kaldığından ve sürüm kontrolünün dışında tutulduğundan emin olun.
Eliza Framework'ünün Temel Kavramları
Eliza framework'ü dört temel bileşenden oluşur:
Characters (Karakterler): Yapay zekanın kişiliğini, davranışını ve iletişim tarzını tanımlayan JSON yapılandırma dosyaları
Agents (Agent'lar): Belleği yönetmek, girdileri işlemek ve davranışları yürütmekten sorumlu çalışma zamanı modülleri
Providers (Sağlayıcılar): Etkileşimleri zenginleştirmek için bağlam ve gerçek zamanlı bilgi sunan veri kaynakları
Actions (Eylemler): Agent'ların görev gerçekleştirmesini ve harici sistemlerle etkileşime girmesini sağlayan çalıştırılabilir fonksiyonlar
Token Swap ve Transfer Karakteri Tanımlama
Karakterler, bir AI agent'ın iletişim tarzını, tonunu ve yanıt tutarlılığını belirleyerek etkileşimleri daha doğal ve ilgi çekici hale getirir. İyi tasarlanmış bir karakter, yapay zekanın amaçlanan hedefle uyumlu olmasını sağlar.
Bu projede uygulamak istediğimiz temel işlevsellik token transferi ve swap'tır; bu nedenle AI agent'ın blockchain protokolleriyle nasıl etkileşime gireceğini, işlemleri nasıl yürüteceğini ve kullanıcılara nasıl geri bildirim sağlayacağını yöneten bir Eliza karakteri tanımlayacağız. Bu karakter, agent'ın işlem ayrıntılarını açıkça iletmesini, önceden tanımlanmış güvenlik kurallarına uymasını ve sorunsuz bir kullanıcı deneyimi sunmasını sağlayacaktır.
Yeni bir karakter dosyası oluşturun.
cd characters
touch degen.character.json
Aşağıdaki içeriği yeni oluşturulan dosyaya kopyalayın:
{
"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"
]
}
Yukarıdaki dosya, ETHMaxxer adlı bir AI agent'ın yapılandırmasını tanımlar; "modelProvider": "openai" belirtilmiş ve Sepolia, atanmış blockchain ağı olarak ayarlanmıştır.
Agent'lar
Eliza framework'ündeki agent'lar, AI karakterleri hayata geçiren temel çalışma zamanı bileşenleridir. Davranışları ve etkileşimleri AgentRuntime sınıfı aracılığıyla yönetirler. AgentRuntime sınıfının düzgün çalışması için bazıları Eliza framework'ü tarafından hazır olarak sağlanan birkaç temel bileşen gereklidir:
Database adapter (Veritabanı adaptörü): Bellek depolama, ilişki takibi ve bilgi yönetimi dahil olmak üzere AI agent'lar için bilgilerin depolanmasını ve alınmasını yönetir.
Plugins (Eklentiler): AI agent'ların işlevselliğini genişleterek blockchain ve sosyal medya gibi harici hizmetlerle entegrasyonu mümkün kılar. Bu projede AI agent'ımızın blockchain ile etkileşime girmesi için @elizaos/plugin-evm kullanmasını belirtiyoruz.
Model provider (Model sağlayıcı): Yanıtları işlemek ve oluşturmak için kullanılan yapay zeka modeli kaynağını tanımlar. Anthropic, Grok ve diğerleri dahil çeşitli seçenekler mevcuttur; ancak bu proje için karakter dosyamızda tanımlandığı üzere OpenAI'ı tercih ettik.
Authentication token (Kimlik doğrulama token'ı): Seçilen model sağlayıcı için gereklidir. OPENAI_API_KEY gibi bir ortam değişkeni olarak iletilmelidir.
Character configuration file (Karakter yapılandırma dosyası): Daha önce tanımladığımız ve AI agent'ın özelliklerini ile davranışını belirleyen karakter dosyası.
Tüm bu bileşenler /agent/src/index.ts klasöründe tanımlanmıştır. Agent'ımız için ilgili AgentRuntime kod parçacığı şu şekildedir:
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
]
})
Sağlayıcılar
Sağlayıcılar, cüzdan entegrasyonları, blockchain etkileşimleri ve veri erişimi gibi özel işlevleri yönetir; AI agent'ların harici sistemlere sorunsuz biçimde bağlanmasını sağlar. İşlemleri yürütmek, gerçek zamanlı verileri almak ve farklı hizmetler arasındaki etkileşimleri yönetmek için birer ağ geçidi işlevi görürler.
@elizaos/plugin-evm içindeki sağlayıcılar, AI agent'ların EVM uyumlu blockchain'lerle etkileşime girmesini sağlayarak işlem göndermelerine, akıllı sözleşmeleri sorgulamalarına ve blockchain aktivitesini izlemelerine olanak tanır. Infura gibi hizmetlerin RPC endpoint'lerinden yararlanarak agent, özel bir node çalıştırmadan on-chain işlemleri gerçekleştirebilir.
@elizaos/plugin-evm içinde sağlayıcıların nasıl uygulandığı aşağıda gösterilmektedir:
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);
}
}
Eylemler
Eylemler, AI agent'ların gerçekleştirebileceği belirli davranışları tanımlar; harici sistemlerle etkileşime girmelerini, talepleri işlemelerini ve görevleri otomatikleştirmelerini sağlar. Her eylem, işlem gönderme, veri alma veya akıllı sözleşme çağrıları yürütme gibi belirli bir işlevi yerine getirecek şekilde tasarlanmıştır; bu sayede agent ortamı içinde verimli biçimde çalışır.
@elizaos/plugin-evm içindeki eylemler, token transferlerini, swap'ları ve blockchain etkileşimlerini kolaylaştırarak AI agent'ların EVM uyumlu ağlar üzerinde doğrudan işlem gerçekleştirmesine olanak tanır. Bu eylemler, kullanıcı girdileri veya önceden tanımlanmış mantık tarafından tetiklenerek blockchain ile ilgili işlemlerin sorunsuz yürütülmesini sağlar.
@elizaos/plugin-evm içinde bir token transfer eyleminin nasıl uygulandığı aşağıda gösterilmektedir:
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}
Ortam değişkenlerini, karakter dosyasını sağladığımıza ve kullanılacak Eliza eklentisini belirttiğimize göre, şimdi her şeyi bir araya getirip AI agent'ımızı test edelim.
Projeyi derleyin
pnpm build
Karakteri çalıştırın
pnpm start --character="characters/degen.character.json"
İstemciyi başlatın
pnpm start:client
Şimdi agent'ımızla etkileşime geçelim ve belirli görevleri gerçekleştirmesini isteyelim.
Sonuç
Ethereum ve EVM uyumlu blockchain'lerle etkileşime giren bir AI agent oluşturmak, otomatik ve akıllı on-chain etkileşimler için yeni olanaklar sunar. Bu kılavuz, agent'ın token'ları özerk biçimde transfer etmesini ve swap etmesini sağlayan Characters, Agents, Providers ve Actions bileşenlerinin tanımlanmasını ele aldı.
ElizaOS'un modüler framework'ünden yararlanarak geliştiriciler, blockchain ağlarıyla sorunsuz biçimde etkileşime giren yapay zeka destekli DeFi asistanları, trading bot'ları veya portföy yöneticileri oluşturabilir. Artık temeli attığınıza göre, yeteneklerini genişletmeyi, mantığını iyileştirmeyi ve on-chain otomasyonu güçlendirmek için yeni özellikler entegre etmeyi deneyin.