2026년 Solana AI 에이전트 구축 방법
작성자: Alchemy

AI 에이전트는 블록체인 인프라와 상호작용하는 방식을 바꾸고 있습니다. 이 자율 프로그램들은 자연어 명령만으로 트랜잭션을 실행하고, 포트폴리오를 관리하고, NFT를 민팅하고, DeFi 프로토콜과 상호작용할 수 있습니다. 초창기 크립토 UX와는 전혀 다른 모습입니다.
Solana는 AI 에이전트 개발을 위한 선도 블록체인으로 자리 잡았습니다. 2025년 12월 x402 트랜잭션 볼륨의 77%를 차지하며, 1초 미만의 파이널리티, 미미한 트랜잭션 비용, 에이전트 애플리케이션을 위해 구축된 성숙한 프레임워크 생태계를 결합하고 있습니다.
이 가이드에서는 올바른 프레임워크 선택부터 안전한 월렛 아키텍처 구현까지, Solana에서 프로덕션 수준의 AI 에이전트를 구축하는 과정을 다룹니다. 트레이딩 봇을 만들든, 개인 온체인 어시스턴트를 만들든, 자율 DeFi 매니저를 만들든, 필요한 기술적 기반을 여기서 찾을 수 있습니다.
Solana가 AI 에이전트에 적합한 이유
AI 에이전트는 온체인 활동을 바꾸고 전혀 새로운 유스케이스를 열 잠재력을 가지고 있으며, 이 때문에 개발자들에게 중요한 질문이 생깁니다: AI 에이전트를 어떤 블록체인에서 구축해야 하는가?
점점 더 많은 경우, 그 답은 Solana입니다. 시장을 모니터링하고, 트레이드를 실행하고, 포트폴리오를 리밸런싱하는 단일 에이전트가 하루에 수백 건의 트랜잭션을 제출할 수 있습니다. Ethereum 메인넷에서는 이런 운영 템포가 가스비로 수천 달러가 들 수 있습니다. Solana에서는 몇 센트입니다. 하지만 비용은 시작일 뿐입니다. Solana의 아키텍처는 수수료보다 훨씬 깊은 수준에서 에이전트의 요구사항과 맞아떨어집니다:
- 속도는 자율성에 중요합니다: 에이전트는 시장 상황, 사용자 요청, 온체인 이벤트에 실시간으로 반응해야 합니다. Solana의 400ms 블록 타임과 1초 미만의 파이널리티는 빠른 피드백 루프를 가능하게 합니다. 에이전트는 다음과 같은 사이클로 동작합니다: 무엇을 할지 추론하고, 행동을 실행하고, 결과를 관찰한 다음 다시 추론합니다. 각 "관찰" 단계는 트랜잭션 확인을 기다려야 합니다. 블록 타임이 12초인 체인에서는 3단계 워크플로우가 36초 이상의 유휴 대기 시간을 의미하며, 에이전트는 자율 동작을 반응성 있게 느껴지게 만드는 빠른 피드백 루프를 잃어버립니다. Solana에서는 동일한 워크플로우가 2초 이내에 확정되어, 에이전트가 거의 실시간으로 추론하고 행동할 수 있습니다. 이는 제출해 둔 배치 작업처럼 느껴지는 에이전트와 함께 일하는 협업자처럼 느껴지는 에이전트 사이의 차이입니다.
- 예측 가능한 수수료는 계획을 가능하게 합니다: 에이전트는 운영 비용을 예산화할 필요가 있습니다. Solana의 수수료 모델, 트랜잭션당 약 $0.00025은 최소한의 자본으로도 무기한 운영할 수 있는 에이전트를 구축할 수 있게 해줍니다. 혼잡 시 우선순위 수수료도 다른 체인의 가스 경매에 비해 합리적인 수준을 유지합니다.
- 네이티브 프로그램 조합성: Solana 프로그램은 단일 트랜잭션 내에서 다른 프로그램을 원자적으로 호출할 수 있습니다. 에이전트는 Jupiter에서 토큰을 스왑하고, 그 결과물을 Marinade에 스테이킹하고, 영수증 NFT를 민팅하는 과정을 모두 하나의 원자적 작업으로 처리할 수 있습니다. 이 조합성이 Solana 에이전트를 투박한 순차적 워크플로우와 구분 짓는 요소입니다. 에이전트가 토큰 스왑, 유동성 제공, LP 포지션 스테이킹 같은 여러 작업을 하나의 원자적 트랜잭션으로 묶을 수 있을 때, 실행은 더 빠르고(확인 1회 vs. 3회), 비용은 더 적으며(기본 수수료 1회 vs. 3회), 코드는 더 단순해집니다(단계 사이의 에러 핸들링 불필요). 사용자 입장에서는 그 차이가 분명합니다: 에이전트에게 "내 수익률을 최적화해줘"라고 요청하면, 각 단계마다 확인 프롬프트를 거치는 다단계 프로세스를 안내받는 대신 몇 초 만에 그냥 처리됩니다.
- 생태계 모멘텀: Solana의 AI 에이전트 생태계는 2024년 말부터 폭발적으로 성장했습니다. SendAI의 Solana Agent Kit, ElizaOS(구 ai16z), Crossmint의 GOAT toolkit, 그리고 Rig 같은 Rust 네이티브 프레임워크들이 풍부한 개발 환경을 만들어냈습니다. Jupiter는 Solana DEX 애그리게이터 볼륨의 90%를 처리하며, 프로그래매틱 접근을 염두에 두고 설계된 API를 제공해 에이전트가 이 데이터에 접속해 활용하기 매우 쉽습니다.
AI 에이전트 스택 이해하기
코드를 살펴보기 전에, AI 에이전트 스택의 레이어를 간단히 개괄하면 주어진 작업에 어떤 도구를 써야 할지 파악하는 데 도움이 됩니다. AI 에이전트 스택은 4개 레이어로 요약할 수 있습니다:
- 대형 언어 모델(LLM): LLM은 모든 AI 에이전트의 기반입니다. Claude Opus 4.5, GPT-5.2, Gemeni 2.5 Pro 같은 최신 모델들은 자연어 이해와 추론 능력을 제공합니다. 이들은 사용자 요청을 처리하고, 수집된 블록체인 데이터를 해석하며, 어떤 행동을 취할지 결정합니다. LLM은 단순한 스크립트가 아니라 에이전트를 지능적으로 만드는 "두뇌"입니다.
- 에이전트 프레임워크: 프레임워크는 LLM 위에서 에이전트가 동작하는 방식을 조율(orchestration)합니다. 대화 기록을 관리하고, 시스템 프롬프트를 통해 에이전트의 "성격"을 유지하고, 여러 도구를 조율하며, Twitter, Discord, Telegram 같은 외부 플랫폼과 통합합니다. ElizaOS가 대표적인 예로, LLM 통합, 메모리 관리, 멀티 플랫폼 클라이언트를 하나의 프레임워크로 결합합니다.
- 블록체인 툴킷: 툴킷은 에이전트가 실제로 Solana와 상호작용할 수 있는 능력을 부여합니다. Solana Agent Kit, GOAT toolkit, 그리고 유사한 라이브러리들은 블록체인 작업을 LLM이 호출할 수 있는 "도구"로 노출시킵니다. 사용자가 "10 SOL을 USDC로 스왑해줘"라고 말하면, 툴킷은 이를 Jupiter API 호출, 트랜잭션 구성, 제출로 변환합니다.
에이전트 프레임워크 환경
개념적 기반을 다졌으니, 이제 2026년 Solana AI 에이전트 개발을 주도할 4개 주요 프레임워크에 대해 이야기해 봅시다.
Solana Agent Kit (SendAI)
Solana Agent Kit은 Solana 생태계와 상호작용하는 에이전트를 구축하는 가장 직접적인 경로입니다. SendAI가 개발했으며, 토큰 작업, NFT 민팅, DeFi 상호작용 등을 아우르는 60개 이상의 사전 구축된 액션을 제공합니다. 이 킷은 LangChain, Vercel AI SDK 등 널리 쓰이는 AI 개발 프레임워크와 깔끔하게 통합됩니다.
SendAI의 모듈형 플러그인 아키텍처를 통해 필요한 부분만 설치할 수 있습니다. 토큰 플러그인은 SPL 토큰 전송과 스왑을 처리합니다. NFT 플러그인은 Metaplex 작업을 관리합니다. DeFi 플러그인은 Jupiter, Raydium 및 기타 프로토콜과 통합됩니다. 이 모듈성 덕분에 배포가 가볍게 유지됩니다.
이 프레임워크의 초기화는 다음과 같습니다. 먼저 월렛을 생성하고, RPC와 API 키로 에이전트를 인스턴스화한 다음, 필요한 플러그인을 체이닝합니다:
import { SolanaAgentKit, createVercelAITools, KeypairWallet } from "solana-agent-kit";
import TokenPlugin from "@solana-agent-kit/plugin-token";
import DefiPlugin from "@solana-agent-kit/plugin-defi";
const wallet = new KeypairWallet(keypair);
const agent = new SolanaAgentKit(wallet, "YOUR_RPC_URL", {
OPENAI_API_KEY: "YOUR_OPENAI_API_KEY"
})
.use(TokenPlugin)
.use(DefiPlugin);
const tools = createVercelAITools(agent, agent.actions);적합한 대상: Solana 전반을 폭넓게 지원하는 빠른 프로토타이핑을 원하는 개발자. 이 킷은 대부분의 블록체인 복잡성을 추상화하면서도 프로덕션 사용에 충분한 유연성을 유지합니다.
ElizaOS
ElizaOS는 ai16z 프로젝트에서 발전해 완전한 에이전트 운영체제가 되었습니다. Twitter 봇, Discord 어시스턴트, Telegram 채널 등 여러 플랫폼에서 지속적인 인격을 유지하는 자율 에이전트를 위해 설계되었습니다. 이 프레임워크는 메모리, 캐릭터 정의, 멀티 플랫폼 배포를 처리합니다.
ElizaOS의 에이전트는 성격, 사용 가능한 액션, 행동 파라미터를 지정하는 캐릭터 JSON 파일로 정의됩니다. Solana 플러그인이 블록체인 기능을 제공하며, 프레임워크는 상호작용 전반에 걸쳐 일관된 에이전트 행동을 유지하는 복잡성을 관리합니다.
CLI로 손쉽게 시작할 수 있습니다:
# Install ElizaOS CLI
bun install -g @elizaos/cli
# Create a new agent project
elizaos create my-solana-agent
# Start in development mode
elizaos dev실제 설정은 캐릭터 파일에서 이루어집니다. 여기서 에이전트가 어떤 플랫폼에서 동작할지, 어떤 LLM 공급자를 사용할지, 어떤 Solana 기능을 활성화할지를 정의합니다:
{
"name": "SolanaHelper",
"clients": ["twitter", "discord"],
"modelProvider": "openai",
"plugins": ["@elizaos/plugin-solana"],
"settings": {
"secrets": {
"SOLANA_PRIVATE_KEY": "your_base58_private_key",
"SOLANA_RPC_URL": "your_rpc_url"
}
}
}적합한 대상: 플랫폼 전반에 걸쳐 지속적인 정체성이 필요한 소셜 에이전트. Solana 기능을 갖춘 Twitter 봇이나 Discord 어시스턴트를 만든다면, ElizaOS가 자연스러운 선택입니다.
GOAT toolkit (Crossmint)
GOAT(Great Onchain Agent Toolkit)는 다른 접근 방식을 취합니다. AI 에이전트와 모든 블록체인 애플리케이션 사이의 범용 어댑터로 설계되었습니다. Solana Agent Kit이 Solana 전용 작업에 초점을 맞추는 반면, GOAT는 Solana, EVM 네트워크 등 30개 이상의 체인에 걸친 통합 인터페이스를 제공합니다.
GOAT의 진정한 강점은 통합 범위입니다. 200개 이상의 플러그인이 Solana의 Jupiter 및 Orca부터 Ethereum의 Uniswap, Aave에 이르는 프로토콜을 아우릅니다. 여러 체인에서 동작해야 하는 에이전트를 구축한다면, GOAT는 체인별 구현의 필요성을 없애줍니다.
초기화 패턴은 Solana Agent Kit과 유사합니다. 먼저 월렛을 초기화하고, 플러그인을 선택한 다음, AI 프레임워크용 도구를 생성합니다. 다음은 Jupiter 통합을 포함한 Solana 설정입니다:
import { getOnChainTools } from "@goat-sdk/adapter-vercel-ai";
import { solana } from "@goat-sdk/wallet-solana";
import { jupiter } from "@goat-sdk/plugin-jupiter";
const tools = await getOnChainTools({
wallet: solana({ keypair }),
plugins: [jupiter()]
});적합한 대상: 멀티체인 에이전트 및 특정 DeFi 프로토콜과의 통합이 필요한 애플리케이션. 프로토콜 커버리지 면에서 GOAT의 플러그인 생태계를 따라올 것이 없습니다.
Rig 프레임워크 (Rust)
고빈도 트레이딩 봇, MEV 전략, 지연에 민감한 작업 등 성능이 중요한 애플리케이션을 위해, Rig는 Rust 네이티브 AI 에이전트 프레임워크를 제공합니다. Solana 통합을 위한 Listen.rs와 결합하면, LLM의 결정에서 온체인 실행에 이르는 가장 낮은 지연 경로를 제공합니다.
Rig는 컴파일 타임 정확성을 위해 Rust의 타입 시스템을 활용하고, 밀리초 미만의 작업을 위해 그 성능 특성을 활용합니다. rig-onchain-kit이 Solana 통합을 제공하며, Listen.rs는 트랜잭션 모니터링과 MEV 보호 트랜잭션을 위한 Jito 번들 제출 기능을 추가합니다.
API는 깔끔하고 관용적인 Rust 스타일입니다. 클라이언트를 생성하고, 시스템 프롬프트로 에이전트를 구성한 다음, 프롬프트를 시작하면 됩니다:
use rig::{completion::Prompt, providers::openai};
async fn main() {
let client = openai::Client::from_env();
let agent = client
.agent("gpt-4")
.preamble("You are a Solana trading assistant.")
.build();
let response = agent.prompt("Analyze SOL/USDC market conditions").await?;
}적합한 대상: 지연이 중요한 성능 critical 애플리케이션. 트레이딩 인프라를 구축하거나 Solana의 네이티브 Rust 생태계와의 직접 통합이 필요하다면, Rig가 선택지입니다.
LangChain
LangChain은 LLM 기반 애플리케이션을 구축하는 데 가장 널리 채택된 프레임워크입니다. 블록체인 전용은 아니지만, 도구 추상화와 에이전트 아키텍처 덕분에 Solana 개발에도 자연스럽게 맞습니다. Solana Agent Kit은 일급 LangChain 통합을 제공하여, LangChain의 성숙한 생태계를 활용하면서 Solana의 온체인 기능에 접근할 수 있게 해줍니다.
LangChain의 강점은 조합성(composability)입니다. 개발자는 프롬프트, 도구, 메모리 시스템, 검색 메커니즘을 연결해 복잡한 에이전트 워크플로우를 만들 수 있습니다. 이 프레임워크는 대화 관리, 도구 선택, 출력 파싱을 처리합니다. Solana 에이전트의 경우, 이는 온체인 작업을 오프체인 데이터 소스, RAG 파이프라인, 다단계 추론과 결합할 수 있다는 의미입니다.
Solana Agent Kit과의 통합은 매끄럽습니다. 에이전트를 초기화한 다음, createLangchainTools 헬퍼를 사용해 Solana 액션으로부터 LangChain 호환 도구를 생성합니다:
import { SolanaAgentKit, createLangchainTools } from "solana-agent-kit";
import { ChatOpenAI } from "@langchain/openai";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
const agent = new SolanaAgentKit(wallet, "YOUR_RPC_URL", {
OPENAI_API_KEY: "YOUR_OPENAI_API_KEY"
});
const tools = createLangchainTools(agent, agent.actions);
const llm = new ChatOpenAI({ model: "gpt-4o" });
const solanaAgent = createReactAgent({
llm,
tools
});
const result = await solanaAgent.invoke({
messages: [{ role: "user", content: "Check my SOL balance" }]
});LangChain은 Solana 작업을 외부 데이터와 결합해야 할 때도 빛을 발합니다. 블록체인 도구와 함께 웹 검색 도구, 데이터베이스 검색기, 커스텀 API 통합을 추가할 수 있습니다. 에이전트는 작업에 따라 어떤 도구를 사용할지 스스로 결정합니다.
적합한 대상: 이미 LangChain 생태계에서 작업하는 개발자, 또는 Solana 작업을 복잡한 추론 체인, RAG, 외부 데이터 소스와 결합해야 하는 애플리케이션. 에이전트가 블록체인 상호작용 이상을 필요로 한다면, LangChain이 조율 레이어를 제공합니다.
첫 번째 Solana 에이전트 구축: 단계별 가이드
기초 이론을 다뤘으니, 이제 Solana Agent Kit과 LangChain을 사용해 실제로 동작하는 Solana AI 에이전트를 구축해 봅시다. 이 섹션이 끝날 때쯤이면, 잔액 확인, 스왑 실행, 금융 영수증 NFT 민팅까지 모두 자연어 명령으로 처리할 수 있는 에이전트를 갖게 될 것입니다.
하나씩 단계별로 설명하며 점진적으로 만들어 보겠습니다.
사전 준비
시작하기 전에 다음을 준비했는지 확인하세요:
- Node.js v23 이상: Solana Agent Kit은 최신 Node 기능을 필요로 합니다.
node --version로 버전을 확인하세요. 업그레이드가 필요하다면 nvm으로 쉽게 할 수 있습니다:
nvm install 23
nvm use 23- Solana 월렛: 테스트용 devnet SOL이 있는 키페어가 필요합니다. 없다면 생성하는 방법을 안내합니다. - API 키: OpenAI(LLM용) 및 선택적으로 Alchemy 같은 전용 RPC 제공업체
프로젝트 설정
새 디렉터리를 만들고 프로젝트를 초기화하는 것부터 시작합니다:
mkdir solana-agent
cd solana-agent
pnpm init이제 의존성을 설치합니다. 각 패키지는 특정 목적을 수행합니다:
pnpm add solana-agent-kit @langchain/core @langchain/openai @langchain/langgraph dotenv bs58각 의존성이 하는 일은 다음과 같습니다:
- solana-agent-kit: Solana 액션을 LLM 호환 도구로 제공하는 핵심 툴킷
- @langchain/core: 메시지, 프롬프트, 도구 인터페이스를 위한 기본 추상화
- @langchain/openai: LangChain용 OpenAI 통합(추론 엔진으로 GPT-4 사용)
- @langchain/langgraph: ReAct 에이전트 패턴을 제공—LLM이 어떤 도구를 사용할지 추론하고, 그것을 사용하고, 결과를 관찰하고, 다음에 무엇을 할지 결정하는 루프
- dotenv:
.env파일에서 환경 변수를 불러옵니다 - bs58: Solana 개인키용 Base58 인코딩/디코딩
환경 설정
프로젝트 루트에 .env 파일을 생성합니다. 이를 통해 민감한 자격 증명을 코드 밖에 보관할 수 있습니다:
OPENAI_API_KEY=your_openai_api_key
RPC_URL=https://api.devnet.solana.com
SOLANA_PRIVATE_KEY=[your,private,key,as,byte,array]개인키 포맷에 대한 참고: Solana 키페어는 64바이트 배열입니다. .env
파일은 이를 \[123,45,67,...\] 같은 JSON 배열로 저장합니다. 테스트용으로 새 키페어를
생성해야 한다면 다음을 사용하세요:
solana-keygen grind --starts-with ai:1이렇게 하면 "ai"로 시작하는 배너티 주소가 생성됩니다(에이전트 월렛을 식별하는 데
유용합니다). 출력에는 .env에 붙여넣을 수 있는 바이트 배열 형태의
키페어가 포함되어 있습니다.
중요: 개발용으로 실제 자금이 들어 있는 키페어는 절대 사용하지 마세요. 항상 먼저 devnet에서 테스트하세요.
에이전트 아키텍처 이해하기
코드를 작성하기 전에, 우리가 무엇을 만들고 있는지 이해해 봅시다. 우리 에이전트는 세 가지 주요 컴포넌트로 구성됩니다:
- LLM(GPT-5.2): 자연어를 이해하고, 어떤 행동을 취할지 추론하며, 응답을 생성하는 "두뇌"
- 도구(Solana Agent Kit): LLM이 호출할 수 있는 함수들—잔액 확인, 토큰 스왑, NFT 민팅 등
- 에이전트 루프(LangGraph ReAct): LangchainReAct는 LangGraph 프레임워크를 사용한 Reasoning and Acting(ReAct) 에이전트 아키텍처의 구현체입니다. 이는 LLM과 도구를 연결하는 조율 패턴입니다. 메시지를 보내면, 에이전트는 입력을 받고 → 도구가 필요한지 결정하고 → 도구를 호출하고 → 결과를 관찰하고 → 더 많은 도구가 필요한지 결정하고 → 응답을 생성합니다
이것이 ReAct(Reasoning + Acting) 패턴입니다. LLM은 단순히 응답만 하는 것이 아니라, 어떤 행동을 취할지 추론하고, 그것을 실행하고, 결과를 응답에 반영합니다.
에이전트 스크립트
이제 agent.ts을 구축해 봅시다. 섹션별로 진행하겠습니다.
임포트와 설정
import { SolanaAgentKit, createSolanaTools } from "solana-agent-kit";
import { HumanMessage } from "@langchain/core/messages";
import { ChatOpenAI } from "@langchain/openai";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
import { MemorySaver } from "@langchain/langgraph";
import * as dotenv from "dotenv";
import bs58 from "bs58";
import * as readline from "readline";
dotenv.config();임포트는 세 가지 범주로 나뉩니다: 블록체인 작업을 위한 Solana Agent Kit, AI 조율을 위한 LangChain, 환경 변수와 사용자 입력을 위한 Node 유틸리티.
에이전트 초기화
initializeAgent 함수는 모든 컴포넌트를 설정합니다:
async function initializeAgent() {
// Step 1: Initialize the LLM
const llm = new ChatOpenAI({
modelName: "gpt-4-turbo-preview",
temperature: 0.7
});추론 엔진으로 GPT-5.2를 사용하고 있습니다. temperature 값 0.7은
창의성과 일관성의 균형을 맞춥니다. 값이 낮을수록 응답이 더 결정론적이고,
높을수록 더 다양해집니다. 금융 트랜잭션에 대해 신뢰할 수 있는 결정을 내려야 하는
에이전트라면 이 값을 0.3 정도로 낮추는 것도 고려할 수 있습니다.
// Step 2: Set up the Solana wallet
const privateKeyArray = JSON.parse(process.env.SOLANA_PRIVATE_KEY!);
const privateKeyUint8 = new Uint8Array(privateKeyArray);
const privateKeyBase58 = bs58.encode(privateKeyUint8);이 스니펫은 .env의 JSON 배열 포맷으로 된 개인키를 Solana Agent Kit이
기대하는 base58 문자열로 변환합니다. 변환 경로는 다음과 같습니다: JSON
문자열 → JavaScript 배열 → Uint8Array → base58 문자열.
// Step 3: Initialize Solana Agent Kit
const solanaKit = new SolanaAgentKit(
privateKeyBase58,
process.env.RPC_URL!,
{ OPENAI_API_KEY: process.env.OPENAI_API_KEY! }
);SolanaAgentKit 인스턴스는 월렛을 Solana 네트워크에 연결합니다. 이는 세 개의
인자를 받습니다: 개인키(트랜잭션 서명용), RPC URL(네트워크 통신용),
구성 옵션(내부 AI 작업을 위한 OpenAI 키 포함).
// Step 4: Create tools from the kit
const tools = createSolanaTools(solanaKit);여기서 핵심적인 일이 일어납니다. createSolanaTools는 Solana Agent
Kit의 기능을 LangChain 호환 도구로 변환합니다. 각 도구는 이름,
설명, 그리고 LLM이 무엇을 할 수 있는지와 어떻게 호출하는지를 이해하는 데 사용하는
입력 스키마를 가지고 있습니다. 내부적으로는 get\_balance,
transfer, swap, deploy\_token, mint\_nft 등
수십 개의 도구를 얻게 됩니다.
// Step 5: Set up memory for conversation context
const memory = new MemorySaver();메모리는 여러 턴에 걸쳐 에이전트가 맥락을 유지할 수 있게 해줍니다. 메모리가 없다면 각 메시지가 독립적으로 처리되어, 에이전트는 방금 잔액에 대해 물어본 것을 기억하지 못하고 다음에 "절반을 스왑해줘"라고 요청했을 때 혼란스러워할 것입니다.
// Step 6: Create the ReAct agent
return createReactAgent({
llm,
tools,
checkpointSaver: memory
});
}마지막으로, 이 모든 것을 ReAct 에이전트로 조립합니다. 이로써 추론 루프가 만들어집니다: LLM이 입력을 받고, 사용할 도구(있다면)를 결정하고, 그것을 실행하고, 결과를 관찰한 다음, 다른 행동을 취하거나 사용자에게 응답합니다.
대화형 채팅 루프
두 번째 함수는 에이전트와 대화할 수 있는 터미널 인터페이스를 만듭니다:
async function runInteractiveChat() {
const agent = await initializeAgent();
const config = { configurable: { thread_id: "solana-agent-session" } };thread\_id은 메모리 목적으로 이 대화를 식별합니다. 동일한 스레드 ID로
스크립트를 다시 시작하면, 에이전트는 (이론상) 이전 맥락을
기억할 것입니다. 서로 다른 스레드 ID는 서로 다른 대화
맥락을 의미합니다.
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
console.log("Solana AI Agent Ready (type 'exit' to quit)");
console.log("--------------------------------------------");터미널 입출력을 위한 표준 Node.js readline 설정으로, 키보드 입력을 캡처하는
readline 인터페이스를 만들고(stdin) 에이전트의 응답을 화면에
다시 출력합니다(stdout). 추가 의존성을 도입하지 않고 대화형 명령줄
채팅을 만드는 가장 간단한 방법입니다.
const askQuestion = () => {
rl.question("You: ", async (input) => {
if (input.toLowerCase() === "exit") {
rl.close();
return;
}
const stream = await agent.stream(
{ messages: [new HumanMessage(input)] },
config
);메시지를 입력하면 HumanMessage로 감싸져 에이전트에게 전송됩니다. 에이전트가 생각하고 행동하는 동안 실시간 출력을 얻기 위해 invoke 대신 stream를 사용합니다.
process.stdout.write("Agent: ");
for await (const chunk of stream) {
if ("agent" in chunk) {
process.stdout.write(chunk.agent.messages[0].content);
} else if ("tools" in chunk) {
process.stdout.write(chunk.tools.messages[0].content);
}
}
console.log("\n--------------------------------------------");
askQuestion();
});
};
askQuestion();
}
runInteractiveChat().catch(console.error);스트리밍 루프는 두 가지 유형의 청크를 처리합니다: agent 청크(LLM의 추론과 응답)와 tools 청크(도구 실행 결과). 이를 통해 에이전트가 생각하고, 도구를 호출하고, 응답을 구성하는 과정을 실시간으로 볼 수 있습니다.
전체 스크립트
참고용 전체 agent.ts은 다음과 같습니다:
import { SolanaAgentKit, createSolanaTools } from "solana-agent-kit";
import { HumanMessage } from "@langchain/core/messages";
import { ChatOpenAI } from "@langchain/openai";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
import { MemorySaver } from "@langchain/langgraph";
import * as dotenv from "dotenv";
import bs58 from "bs58";
import * as readline from "readline";
dotenv.config();
async function initializeAgent() {
const llm = new ChatOpenAI({
modelName: "gpt-5.2,
temperature: 0.7
});
const privateKeyArray = JSON.parse(process.env.SOLANA_PRIVATE_KEY!);
const privateKeyUint8 = new Uint8Array(privateKeyArray);
const privateKeyBase58 = bs58.encode(privateKeyUint8);
const solanaKit = new SolanaAgentKit(
privateKeyBase58,
process.env.RPC_URL!,
{ OPENAI_API_KEY: process.env.OPENAI_API_KEY! }
);
const tools = createSolanaTools(solanaKit);
const memory = new MemorySaver();
return createReactAgent({
llm,
tools,
checkpointSaver: memory
});
}
async function runInteractiveChat() {
const agent = await initializeAgent();
const config = { configurable: { thread_id: "solana-agent-session" } };
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
console.log("Solana AI Agent Ready (type 'exit' to quit)");
console.log("--------------------------------------------");
const askQuestion = () => {
rl.question("You: ", async (input) => {
if (input.toLowerCase() === "exit") {
rl.close();
return;
}
const stream = await agent.stream(
{ messages: [new HumanMessage(input)] },
config
);
process.stdout.write("Agent: ");
for await (const chunk of stream) {
if ("agent" in chunk) {
process.stdout.write(chunk.agent.messages[0].content);
} else if ("tools" in chunk) {
process.stdout.write(chunk.tools.messages[0].content);
}
}
console.log("\n--------------------------------------------");
askQuestion();
});
};
askQuestion();
}
runInteractiveChat().catch(console.error);에이전트 실행
tsx(TypeScript 실행)로 실행합니다:
npx tsx agent.ts준비 완료 메시지가 보일 것입니다. 이제 몇 가지 명령을 시도해 보세요:
You: What's my wallet address and SOL balance?
Agent: Your wallet address is Ai7f...x3K2. Current balance is 1.5 SOL.
You: Swap 0.1 SOL for USDC
Agent: I'll execute a swap of 0.1 SOL for USDC using Jupiter...
Transaction confirmed: https://solscan.io/tx/...
You: Create an NFT collection called "AI Agents" with symbol "AIA"
Agent: Creating NFT collection with Metaplex...
Collection created: https://solscan.io/token/...내부적으로 일어나는 일: 잔액에 대해 물으면, LLM은 이것이 get\_balance 도구가 필요한 작업임을 인식하고, 올바른 파라미터로 호출한 다음, 결과를 받아 자연어 응답에 반영합니다. 스왑의 경우 swap 도구를 식별하고, 의도(0.1 SOL → USDC)를 파싱하고, Jupiter 스왑을 실행한 다음, 트랜잭션을 확인합니다.
완성된 것
이제 다음을 갖춘 동작하는 Solana AI 에이전트를 갖게 되었습니다:
- GPT-5.2를 통한 자연어 이해
- 도구로 사용 가능한 60개 이상의 Solana 작업
- 다중 턴 상호작용을 위한 대화 메모리
- 실시간 스트리밍 응답
이것은 개발 기반입니다. 프로덕션 배포에는 월렛 보안, 트랜잭션 신뢰성, 레이트 리미팅 등 추가적인 고려사항이 필요하며, 이는 이후 섹션에서 다룹니다.
DeFi 작업을 위한 Jupiter 통합
Jupiter는 애그리게이터 볼륨의 90% 이상을 처리하는 Solana의 지배적인 DEX 애그리게이터입니다. 에이전트가 토큰을 스왑해야 할 때, Jupiter는 최적의 가격을 얻기 위해 Raydium, Orca, Phoenix 등 수십 개의 DEX에서 최적의 경로를 찾아냅니다.
Solana Agent Kit에는 Jupiter 통합이 기본적으로 포함되어 있습니다. 에이전트에게 "1 SOL을 USDC로 스왑해줘"라고 요청하면, 이미 내부적으로 Jupiter를 사용하고 있는 것입니다. 하지만 때로는 더 세밀한 제어가 필요합니다: 커스텀 슬리피지 허용치, 특정 라우팅 선호도, 또는 자체 트랜잭션 파이프라인과의 직접 통합 등.
Jupiter 작동 방식
Jupiter의 API는 견적-후-스왑(quote-then-swap) 패턴을 따릅니다:
- 견적(Quote): 입력 토큰, 출력 토큰, 수량을 전송합니다. Jupiter는 사용 가능한 모든 DEX를 조회하고 예상 출력 수량과 함께 최적의 경로를 반환합니다.
- 스왑(Swap): 견적을 월렛 주소와 함께 다시 전송합니다. Jupiter는 최적 경로를 실행하는 트랜잭션을 구성합니다.
- 서명 및 제출: 트랜잭션에 서명하고 네트워크에 제출합니다.
이 2단계 프로세스를 통해 거래를 확정하기 전에 사용자에게 받을 내용을 보여줄 수 있습니다.
Jupiter 직접 통합
단계별 설명이 포함된 완전한 스왑 함수는 다음과 같습니다:
import { Connection, Keypair, VersionedTransaction } from "@solana/web3.js";
import { createJupiterApiClient } from "@jup-ag/api";
// Token mint addresses (mainnet)
const USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
const SOL_MINT = "So11111111111111111111111111111111111111112";표준 Solana web3.js 임포트와 Jupiter API 클라이언트로 시작합니다. mint 주소는 Solana에서 토큰의 고유 식별자입니다. SOL은 DEX 호환성을 위해 특별한 "래핑된" 주소를 사용합니다.
async function executeSwap(
connection: Connection,
wallet: Keypair,
inputMint: string,
outputMint: string,
amount: number // in smallest units (lamports for SOL, 6 decimals for USDC)
) {
const jupiter = createJupiterApiClient();Jupiter 클라이언트는 그들이 호스팅하는 API에 연결됩니다. 기본 사용에는 API 키가 필요하지 않지만, 레이트 리밋이 적용됩니다.
// Step 1: Get a quote
const quote = await jupiter.quoteGet({
inputMint,
outputMint,
amount,
slippageBps: 50 // 0.5% slippage tolerance
});견적 요청은 무엇을 거래하는지를 지정합니다. slippageBps는 베이시스
포인트 단위의 슬리피지 허용치로, 50은 0.5%를 의미합니다. 견적과 실행 사이에
가격이 이보다 더 움직이면, 더 나쁜 가격을 주는 대신 트랜잭션이 실패합니다.
견적 응답에는 예상 출력 수량, 경로(어떤 DEX가 사용될지), 가격 영향이 포함됩니다. 프로덕션 에이전트라면 진행하기 전에 이 값들을 확인하고 싶을 것입니다.
// Step 2: Get the swap transaction
const { swapTransaction } = await jupiter.swapPost({
swapRequest: {
quoteResponse: quote,
userPublicKey: wallet.publicKey.toString(),
wrapAndUnwrapSol: true // Automatically handle SOL wrapping
}
});스왑 요청은 견적과 월렛 주소를 받아 직렬화된
트랜잭션을 반환합니다. wrapAndUnwrapSol: true은 Solana의 한 가지 특이점을 처리합니다:
DEX는 "래핑된 SOL"(SPL 토큰)로 작동하지만, 사용자는 네이티브 SOL을
보유합니다. 이 플래그는 스왑 전후로 자동 래핑/언래핑하는 명령을
추가합니다.
// Step 3: Deserialize and sign
const transaction = VersionedTransaction.deserialize(
Buffer.from(swapTransaction, "base64")
);
transaction.sign([wallet]);Jupiter는 트랜잭션을 base64로 인코딩된 문자열로 반환합니다. 이를
적절한 트랜잭션 객체로 역직렬화한 다음 키페어로 서명합니다. 우리가 VersionedTransaction,을
사용하고 있다는 점에 유의하세요. Jupiter는 더 복잡한 경로를
지원하는 주소 조회 테이블을 지원하는 Solana의 최신 트랜잭션 포맷을 사용합니다.
// Step 4: Submit and confirm
const signature = await connection.sendTransaction(transaction);
await connection.confirmTransaction(signature);
return signature;
}마지막으로, 서명된 트랜잭션을 네트워크에 제출하고 확인을 기다립니다. 서명은 Solscan 같은 익스플로러에서 트랜잭션을 조회하는 데 사용할 수 있는 고유 식별자입니다.
Jupiter MCP 서버
Model Context Protocol을 지원하는 AI 어시스턴트(Claude Desktop이나 Cursor 등)를 위해, Jupiter는 MCP 서버를 제공합니다. 이를 통해 AI 어시스턴트는 표준화된 인터페이스를 통해 Jupiter의 기능에 직접 접근할 수 있습니다.
MCP 설정에서 다음과 같이 구성합니다:
{
"mcpServers": {
"jupiter": {
"command": "npx",
"args": ["jupiter-ultra-mcp"],
"env": {
"RPC_URL": "your_rpc_url",
"PRIVATE_KEY": "your_private_key"
}
}
}
}구성이 완료되면, Claude는 자연어를 통해 직접 Jupiter 스왑을 실행할 수 있습니다: "0.5 SOL을 USDC로 스왑해줘"가 실제 온체인 트랜잭션이 됩니다. 이는 특히 빠른 프로토타이핑에 유용합니다: 코드를 작성하기 전에 대화를 통해 DeFi 워크플로우를 구축하고 테스트할 수 있습니다.
월렛 보안 아키텍처
서명 권한을 가진 AI 에이전트는 고가치 공격 대상입니다. 침해된 에이전트는 즉시 월렛을 비울 수 있습니다. 보안 아키텍처는 자율성과 보호 사이의 균형을 맞춰야 합니다.
듀얼 키 아키텍처
안전한 에이전트 월렛을 위한 신흥 표준은 스마트 컨트랙트 월렛을 사용한 듀얼 키 아키텍처입니다:
스마트 컨트랙트 월렛: 여러 인증된 서명자를 가질 수 있는 단일 월렛(EVM의 ERC-4337 패턴 또는 Solana의 Squads 프로토콜 사용).
오너 키: 사용자가 보유하며, 최종적인 제어권을 제공합니다. 이 키로 에이전트 키를 추가/제거하고, 자금을 인출하고, 에이전트의 행동을 오버라이드할 수 있습니다.
에이전트 키: Trusted Execution Environment(TEE) 내에 배포되며, 제한된 권한으로 스마트 월렛에 등록됩니다. 이 키로 에이전트는 승인된 작업만 수행할 수 있습니다.
Crossmint의 구현은 이를 간단하게 만듭니다. 사용자 신원에 연결된 커스터디얼 월렛을 생성하고, 에이전트는 정의한 권한 내에서 동작합니다:
import { crossmint } from "@goat-sdk/crossmint";
import { Connection } from "@solana/web3.js";
const { custodial } = crossmint(apiKey);
const wallet = await custodial({
chain: "solana",
email: userEmail,
connection: new Connection(rpcUrl, "confirmed")
});
// Agent receives limited permissions through the smart wallet
// Owner retains full controlTEE 보호
Trusted Execution Environment는 에이전트 키를 위한 하드웨어 수준의 격리를 제공합니다. Phala Network와 Turnkey 같은 플랫폼은 AI 에이전트를 위해 특별히 설계된 TEE 인프라를 제공합니다.
Turnkey는 정책 기반으로 제어되는 월렛 접근을 제공합니다. 개인키를 노출하는 대신, 에이전트는 승인된 작업만 수행할 수 있는 범위가 제한된 API 자격 증명을 받습니다. 트랜잭션 유형, 금액, 빈도를 제한하는 정책을 정의하면, 에이전트는 그 가드레일 안에서 동작합니다:
`import { Turnkey } from "@turnkey/sdk-server";
import { TurnkeySigner } from "@turnkey/solana";
const turnkey = new Turnkey({
apiBaseUrl: "https://api.turnkey.com",
apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY,
apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY,
defaultOrganizationId: process.env.TURNKEY_ORGANIZATION_ID
});
const signer = new TurnkeySigner({
organizationId: process.env.TURNKEY_ORGANIZATION_ID,
client: turnkey.api
});
// Policies limit what the agent can do:
// - Only token transfers (no other transaction types)
// - Maximum transaction size
// - Rate limits`Phala Network는 분산형 TEE 인프라를 제공합니다. Phala에 배포된 에이전트는 호스트 시스템조차 개인키에 접근할 수 없는 격리된 엔클레이브에서 실행됩니다. 배포는 컨테이너 기반입니다:
# Build agent for TEE deployment
docker build --platform linux/amd64 -t agent:latest .
# Deploy to phala cloud
phala deploy agent:latest --api-key $PHALA_API_KEY보안 모범 사례
에이전트 보안 아키텍처를 안내할 몇 가지 원칙은 다음과 같습니다:
- 키 노출 최소화: 개인키는 로그, 에러 메시지, 접근 가능한 메모리에 절대 나타나서는 안 됩니다. 환경 변수와 안전한 키 관리 인프라를 사용하세요.
- 트랜잭션 제한 구현: 에이전트는 최대 트랜잭션 크기, 일일 지출 한도, 레이트 리밋을 가져야 합니다. 무제한 권한을 가진 침해된 에이전트는 무제한의 피해를 일으킬 수 있습니다.
- 별도의 월렛 사용: 프로덕션 에이전트는 작업에 필요한 자금만 가진 전용 월렛을 사용해야 합니다. 상당한 자산이 포함된 월렛에 에이전트를 절대 연결하지 마세요.
- 에이전트 활동 모니터링: 모든 에이전트 트랜잭션을 기록하고 비정상 패턴에 대한 알림을 구현하세요. 자동화된 모니터링은 심각한 피해가 발생하기 전에 침해를 포착할 수 있습니다.
- 먼저 devnet에서 테스트: 메인넷 배포 전에 항상 devnet에서 에이전트를 개발하고 테스트하세요. 네트워크를 전환하는 데 필요한 변경은 일반적으로 RPC URL뿐입니다.
Model Context Protocol(MCP) 통합
Model Context Protocol은 AI 어시스턴트가 외부 도구와 상호작용하는 방식을 표준화합니다. Solana 개발의 경우, MCP 서버는 Claude, Cursor 및 기타 AI 도구가 블록체인과 직접 상호작용할 수 있게 해줍니다.
Solana MCP 서버
SendAI의 Solana MCP 서버는 MCP 호환 AI 어시스턴트라면 어디든 블록체인 도구를 제공합니다:
# Install globally
npm install -g solana-mcp
# Or run directly
npx solana-mcpMCP 서버에서 사용 가능한 도구는 다음과 같습니다:
GET\_ASSET: 토큰/NFT 정보 조회GET\_BALANCE: 월렛 잔액 확인TRANSFER: SOL 또는 SPL 토큰 전송SWAP: Jupiter 스왑 실행DEPLOY\_TOKEN: 신규 SPL 토큰 생성MINT\_NFT: Metaplex를 통한 NFT 민팅
ElizaOS로 구축하기: Twitter 봇 예제
지금까지 터미널에서 추론하고, Solana 트랜잭션을 실행하고, 대화 맥락을 유지할 수 있는 동작하는 에이전트를 구축했습니다. 이제 동일한 기능을 사용자들이 실제로 활동하는 곳, 즉 Twitter에 ElizaOS를 사용해 배포해 보겠습니다.
ElizaOS는 플랫폼 전반에 걸쳐 지속적인 인격을 유지하는 봇인 소셜 에이전트에서 빛을 발합니다. Twitter 봇을 만들어 봅시다.
구축할 것
이 봇은 다음을 수행합니다:
- 토큰, 프로토콜, 시장 상황에 대해 묻는 멘션을 Twitter에서 모니터링
- 온체인 데이터 조회: 토큰 가격, 거래량, 유동성 깊이, 고래의 움직임
- 데이터를 평이한 언어로 분석하고 요약
- 모든 상호작용에서 일관된 "애널리스트" 인격 유지
ElizaOS는 복잡한 조율을 처리합니다: 멘션을 감시하고, 대화 맥락을 유지하고, 언제 온체인 데이터를 조회할지 결정하고, 정의된 인격에 맞는 응답을 생성합니다.
ElizaOS 아키텍처 이해하기
코드로 들어가기 전에, ElizaOS가 에이전트를 어떻게 구조화하는지 이해해 봅시다:
클라이언트는 에이전트를 Twitter, Discord, Telegram, 또는 직접 API 접근 같은 플랫폼에 연결합니다. 각 클라이언트는 플랫폼별 인증, 메시지 폴링, 응답 포맷팅을 처리합니다.
플러그인은 기능을 제공합니다. Solana 플러그인은 온체인 데이터 읽기, 토큰 조회, 트랜잭션 기록을 위한 도구를 에이전트에 제공합니다. 다른 플러그인은 이미지 생성, 웹 검색, 커스텀 액션을 추가할 수 있습니다.
캐릭터 파일은 구조화된 JSON을 통해 인격과 행동을 정의합니다. 여기에는 자기소개, 커뮤니케이션 스타일, 예시 대화, 행동 파라미터가 포함됩니다.
메모리는 대화 전반에 걸쳐 유지됩니다. ElizaOS는 에이전트가 누구와 대화했는지, 어떤 질문을 받았는지, 향후 상호작용을 위한 관련 맥락을 추적합니다.
설정
ElizaOS 레포지토리를 클론하는 것부터 시작합니다:
git clone https://github.com/elizaOS/eliza.git
cd elizaElizaOS는 핵심 프레임워크, 모든 공식 플러그인, 클라이언트 구현을 포함하는 모노레포입니다. 별도의 프로젝트를 만드는 대신 이 구조 내에서 작업할 것입니다.
의존성을 설치하고 빌드합니다:
pnpm install --no-frozen-lockfile
pnpm build--no-frozen-lockfile 플래그는 필요한 경우 pnpm이 락파일을 업데이트할 수 있게 합니다.
빌드 단계는 TypeScript를 컴파일하고 모든 패키지를 준비합니다.
환경 설정
프로젝트 루트에 .env 파일을 생성합니다. ElizaOS는 모든 자격 증명과 구성을 위해 이 파일을 읽습니다:
# Twitter credentials
TWITTER_USERNAME=your_bot_username
TWITTER_PASSWORD=your_password
TWITTER_EMAIL=your_emailTwitter 인증은 봇 계정의 자격 증명을 사용합니다. ElizaOS는 로그인하여 멘션을 폴링하고 답글을 게시하기 위한 세션을 유지합니다. 반드시 전용 봇 계정을 사용하세요—개인 Twitter에서 자동화된 에이전트를 운영하고 싶지는 않을 것입니다.
# LLM provider
OPENAI_API_KEY=your_openai_key모델 공급자는 에이전트의 추론을 구동합니다. ElizaOS는 여러 공급자(OpenAI, Anthropic, 로컬 모델)를 지원하지만, OpenAI가 시작하기에 가장 간단합니다.
# Solana configuration
SOLANA_RPC_URL=https://solana-mainnet.g.alchemy.com/v2/your-api-key
SOLANA_PUBLIC_KEY=your_public_key
SOLANA_CLUSTER=mainnet-beta애널리스트 봇의 경우, 개인키가 필요하지 않습니다—데이터를 읽기만 할 뿐, 트랜잭션에 서명하지는 않으니까요. devnet 테스트 토큰이 아닌 실제 시장 데이터를 원하므로 메인넷 RPC를 사용하세요. Alchemy 같은 전용 RPC 제공업체는 퍼블릭 엔드포인트보다 더 높은 레이트 리밋과 더 신뢰할 수 있는 데이터를 제공합니다.
보안 참고: 이 봇이 데이터만 읽는다 해도 API 키는 보호하세요. RPC 제공업체의 레이트 리밋은 이 자격 증명에 연결되어 있습니다.
캐릭터 파일 이해하기
캐릭터 파일은 ElizaOS 에이전트의 핵심입니다. 에이전트가 무엇을 할 수 있는지뿐만 아니라 누구인지까지 정의합니다. 하나씩 만들어 봅시다.
characters/solana-analyst.character.json을 생성합니다:
{
"name": "SolanaAnalyst",
"clients": ["twitter"],
"modelProvider": "openai",
"plugins": ["@elizaos/plugin-solana"],헤더는 기본 사항을 정의합니다:
- name: 에이전트가 자신을 식별하는 방법
- clients: 연결할 플랫폼. 여기에
"discord"을 추가하면 추가 코드 없이 Discord 통합이 활성화됩니다. - modelProvider: 추론에 사용할 LLM
- plugins: 활성화할 기능. Solana 플러그인은 토큰 데이터 조회, 가격 피드, 온체인 분석을 제공합니다.
"bio": [
"On-chain analyst tracking Solana markets in real-time.",
"I dig through blockchain data so you don't have to. Ask me about any token, protocol, or wallet.",
"Turning raw on-chain data into actionable insights."
],bio는 에이전트의 자기소개를 정의하는 문장들의 배열입니다.
ElizaOS는 에이전트가 자신을 소개하거나 "당신은 누구인가요?"라는 질문에 답해야
할 때 이를 사용합니다. 여러 항목을 추가하면 다양성이 생깁니다—에이전트는
맥락에 따라 서로 다른 bio 라인을 사용할 수 있습니다.
"lore": [
"Built to democratize access to on-chain intelligence.",
"Processes thousands of transactions to surface what matters.",
"No alpha is safe from on-chain analysis."
],lore은 에이전트가 참조할 수 있는 배경 맥락을 제공합니다. 이는 사용자에게
직접 노출되지 않지만, 에이전트가 자신의 목적과 역사를 이해하는 방식에 영향을
미칩니다. 에이전트의 내부 배경 스토리라고 생각하면 됩니다.
"messageExamples": [
[
{"user": "user1", "content": {"text": "What's happening with SOL today?"}},
{"user": "SolanaAnalyst", "content": {"text": "SOL is trading at $142.50, up 3.2% in the last 24h. Volume is elevated at $2.1B—about 40% above the 7-day average. The bid-ask spread on Jupiter is tight at 0.02%, suggesting healthy liquidity. No unusual whale movements in the past hour."}}
],
[
{"user": "user1", "content": {"text": "Any big wallets moving JUP?"}},
{"user": "SolanaAnalyst", "content": {"text": "Spotted two notable JUP movements in the last 6 hours: a 2.3M JUP transfer from a known market maker wallet to Binance (possible sell pressure incoming), and 890K JUP moved from the team vesting contract to a new wallet. The Binance deposit is worth watching—historically these precede increased selling within 24-48 hours."}}
],
[
{"user": "user1", "content": {"text": "Is Marinade still the top liquid staking protocol?"}},
{"user": "SolanaAnalyst", "content": {"text": "Marinade holds $1.2B in TVL, but Jito has been gaining ground fast—now at $980M, up 15% this month. The gap is closing. Marinade's mSOL still has deeper DEX liquidity, but jitoSOL is seeing better integration with newer DeFi protocols. If you're optimizing for composability, Jito might edge ahead soon."}}
]
],messageExamples는 에이전트가 응답하는 방법을 가르치는 퓨샷(few-shot) 예시입니다.
각 예시는 사용자 입력과 예상되는 에이전트 응답을 보여주는 대화 배열입니다. 예시들이
어떻게 톤을 정립하는지 주목하세요: 데이터 기반, 구체적인
수치, 실행 가능한 맥락, 군더더기 없음.
엣지 케이스를 다루는 더 많은 예시를 추가하세요: 존재하지 않는 토큰에 대해 물으면 어떻게 될까요? 비교 분석을 원한다면? 사기성 토큰에 대해 묻는다면? 더 많은 시나리오를 다룰수록, 에이전트의 행동은 더 일관성 있게 됩니다.
"style": {
"all": ["data-driven", "concise", "insightful", "avoids hype"],
"chat": ["direct", "analytical", "provides context for numbers"],
"post": ["informative", "highlights unusual activity", "actionable"]
}
}style는 맥락별 커뮤니케이션 패턴을 정의합니다:
all: 모든 응답에 적용chat: 다이렉트 메시지와 답글에 특화post: 에이전트가 만드는 원본 게시물용
이것들은 LLM의 톤에 영향을 미치는 서술적 키워드입니다. "과장을 피한다"는 재무 애널리스트에게 중요합니다—"SOL TO THE MOON 🚀" 같은 게 아니라 절제된 분석을 원하니까요. "숫자에 맥락을 제공한다"는 에이전트가 가격만 뱉어내는 게 아니라 그것이 무엇을 의미하는지 설명하도록 합니다.
완성된 캐릭터 파일
전체 캐릭터 정의는 다음과 같습니다:
{
"name": "SolanaAnalyst",
"clients": ["twitter"],
"modelProvider": "openai",
"plugins": ["@elizaos/plugin-solana"],
"bio": [
"On-chain analyst tracking Solana markets in real-time.",
"I dig through blockchain data so you don't have to. Ask me about any token, protocol, or wallet.",
"Turning raw on-chain data into actionable insights."
],
"lore": [
"Built to democratize access to on-chain intelligence.",
"Processes thousands of transactions to surface what matters.",
"No alpha is safe from on-chain analysis."
],
"messageExamples": [
[
{"user": "user1", "content": {"text": "What's happening with SOL today?"}},
{"user": "SolanaAnalyst", "content": {"text": "SOL is trading at $142.50, up 3.2% in the last 24h. Volume is elevated at $2.1B—about 40% above the 7-day average. The bid-ask spread on Jupiter is tight at 0.02%, suggesting healthy liquidity. No unusual whale movements in the past hour."}}
],
[
{"user": "user1", "content": {"text": "Any big wallets moving JUP?"}},
{"user": "SolanaAnalyst", "content": {"text": "Spotted two notable JUP movements in the last 6 hours: a 2.3M JUP transfer from a known market maker wallet to Binance (possible sell pressure incoming), and 890K JUP moved from the team vesting contract to a new wallet. The Binance deposit is worth watching—historically these precede increased selling within 24-48 hours."}}
],
[
{"user": "user1", "content": {"text": "Is Marinade still the top liquid staking protocol?"}},
{"user": "SolanaAnalyst", "content": {"text": "Marinade holds $1.2B in TVL, but Jito has been gaining ground fast—now at $980M, up 15% this month. The gap is closing. Marinade's mSOL still has deeper DEX liquidity, but jitoSOL is seeing better integration with newer DeFi protocols. If you're optimizing for composability, Jito might edge ahead soon."}}
]
],
"style": {
"all": ["data-driven", "concise", "insightful", "avoids hype"],
"chat": ["direct", "analytical", "provides context for numbers"],
"post": ["informative", "highlights unusual activity", "actionable"]
}
}에이전트 실행
캐릭터 파일과 함께 에이전트를 시작합니다:
pnpm start --character="characters/solana-analyst.character.json"ElizaOS가 다음과 같은 작업을 수행하는 로그가 보일 것입니다:
- 캐릭터 정의 로드
- OpenAI 공급자 초기화
- Twitter 연결
- Solana 플러그인 로드
- 멘션 폴링 시작
누군가 트윗을 보냈을 때 일어나는 일
사용자가 "@YourBot BONK의 오늘 거래량은 얼마인가요?"라고 트윗하면, 흐름은 다음과 같습니다:
- Twitter 클라이언트가 폴링을 통해 멘션을 감지합니다
- 메시지 핸들러가 트윗을 파싱하고 대화 맥락을 생성합니다
- LLM이 캐릭터 정의, bio, 예시와 함께 메시지를 받습니다
- 도구 선택은 이를 데이터 쿼리로 인식하고 적절한 Solana 플러그인 액션을 선택합니다
- 플러그인 실행이 RPC에서 토큰 데이터를 가져오고 Jupiter에서 가격을 집계합니다
- 응답 생성이 원시 데이터에 맥락을 부여하는 답글을 만듭니다
- Twitter 클라이언트가 답글을 스레드로 게시합니다
에이전트는 이 상호작용의 메모리를 유지합니다. 한 시간 뒤 같은 사용자가 "그게 어제와 비교하면 어떤가요?"라고 물으면, 에이전트는 이전 대화를 참조하여 비교 분석을 제공할 수 있습니다.
봇 확장하기
캐릭터 파일 접근 방식은 반복 작업을 빠르게 만듭니다. Discord 지원을 추가하고 싶나요?
"clients": ["twitter", "discord"]Discord용 환경 변수를 추가하고 재시작하면, 이제 에이전트는 동일한 인격을 유지한 채 두 플랫폼 모두에서 동작합니다.
선제적 알림을 추가하고 싶나요? 비정상적인 활동을 감지했을 때 게시하도록 에이전트를 구성할 수 있습니다:
"settings": {
"autoPost": true,
"postInterval": 3600,
"postTopics": ["whale movements", "unusual volume", "TVL changes"]
}이제 에이전트는 온체인 활동을 독립적으로 모니터링하고 주목할 만한 일이 발생하면 트윗할 것입니다—사용자 프롬프트가 필요하지 않습니다.
소셜 봇을 위한 프로덕션 고려사항
Twitter는 레이트 리밋과 자동화 정책을 가지고 있습니다. 프로덕션 배포를 위해서는:
- 레이트 리미팅: 모든 멘션에 즉시 응답하지 마세요. 사람의 응답 시간을 모방하는 지연을 추가하세요.
- 콘텐츠 정책: Twitter의 자동화 규칙은 해당 계정이 봇임을 명확히 공개할 것을 요구합니다. 이를 bio에 명시하세요.
- 데이터 정확성: 봇이 금융 정보를 제공하고 있습니다. 면책 조항을 추가하고, 데이터 출처를 인용하며, 한계를 명확히 하세요. "투자 조언이 아닙니다"는 단순한 법적 보호 장치가 아니라 책임 있는 행동입니다.
- 에러 핸들링: RPC 호출은 실패할 수 있고, 데이터는 오래될 수 있으며, 토큰은 상장 폐지될 수 있습니다. 이런 경우를 공개적으로 에러를 게시하는 대신 우아하게 처리하세요.
- 모니터링: 봇이 어떤 쿼리를 처리하고 어떤 응답을 생성하는지 추적하세요. 시장이 변동성이 클 때 특히, 무엇을 말하고 있는지에 대한 가시성이 필요합니다.
에이전트 툴링: CLI, Skills, MCP
프레임워크는 조율을 담당합니다. 에이전트를 위한 Alchemy는 인프라 레이어를 다룹니다.
Alchemy Skills를 설치하고, MCP 서버를 연결하고, CLI를 인증합니다:
npx skills add alchemyplatform/skills --yes
# Claude Code
claude mcp add alchemy --transport http https://mcp.alchemy.com/mcp
# Codex
codex mcp add alchemy --url https://mcp.alchemy.com/mcp
npm i -g @alchemy/cli@latest
alchemy auth터미널에서 쿼리합니다:
alchemy --json --no-interactive solana rpc getSlot -n solana-mainnet
alchemy --json --no-interactive prices symbol SOL,ETH
alchemy --json --no-interactive agent-prompt결론
이제 첫 번째 Solana AI 에이전트를 구축했습니다. 이 튜토리얼에서 하나를 기억해야 한다면, Solana에서 AI 에이전트를 구축하기 위한 인프라가 극적으로 성숙했다는 점입니다.
체인은 빠릅니다. 프레임워크는 준비되어 있습니다. 남은 질문은 당신이 이것들로 무엇을 만들 것인가입니다.
시작할 준비가 되셨나요? Alchemy는 Solana의 선도적인 AI 에이전트와 프레임워크를 구동하는 RPC 인프라를 제공합니다. 저지연 엔드포인트, 토큰 작업을 위한 향상된 API, 크로스 플랫폼 에이전트를 위한 멀티체인 지원 중 무엇이 필요하든, Alchemy의 플랫폼은 대규모로 운영할 수 있는 프로덕션급 AI 에이전트를 구축할 수 있는 기반을 제공합니다.
자주 묻는 질문
Solana AI 에이전트를 구축할 때 어떤 도구를 추천하나요?
유스케이스에 따라 Solana Agent Kit, ElizaOS, GOAT toolkit, Rig 프레임워크 사용을 제안합니다. Solana Agent Kit은 60개 이상의 사전 구축된 액션으로 빠른 프로토타이핑을 제공하고, ElizaOS는 플랫폼 전반의 소셜 에이전트에 뛰어나며, GOAT는 멀티체인 지원을 제공하고, Rig는 성능이 중요한 Rust 네이티브 개발을 제공합니다.
AI 에이전트 개발에 Solana가 선호되는 이유는 무엇인가요?
Solana의 400ms 블록 타임과 1초 미만의 파이널리티는 실시간 피드백 루프를 가능하게 하여, 에이전트가 빠르게 추론하고, 행동하고, 결과를 관찰할 수 있게 합니다. 트랜잭션 수수료는 평균 $0.00025로 고빈도 작업을 경제적으로 만들며, 네이티브 프로그램 조합성은 에이전트가 복잡한 다단계 작업을 단일 원자적 트랜잭션으로 실행할 수 있게 합니다.
Solana AI 에이전트를 구축하는 데 어떤 프로그래밍 언어가 가장 적합한가요?
Solana Agent Kit이나 LangChain을 사용한 TypeScript는 빠른 개발과 폭넓은 생태계 통합에 이상적입니다. 고빈도 트레이딩이나 MEV 전략 같은 성능이 중요한 애플리케이션의 경우, Rig 프레임워크를 사용한 Rust가 LLM의 결정에서 온체인 실행에 이르는 가장 낮은 지연 경로를 제공합니다.
AI 에이전트의 월렛을 어떻게 안전하게 보호해야 하나요?
오너 키가 최종적인 제어권을 제공하고 에이전트 키가 Trusted Execution Environment(TEE) 내에서 제한된 권한으로 동작하는 듀얼 키 아키텍처를 스마트 컨트랙트 월렛과 함께 사용하세요. 로그에 개인키를 절대 노출하지 말고, 트랜잭션 제한을 구현하고, 최소한의 자금만 가진 별도의 월렛을 사용하고, 항상 먼저 devnet에서 테스트하세요.
Twitter나 Discord에서 동작하는 AI 에이전트를 구축할 수 있나요?
네, ElizaOS는 에이전트가 Twitter, Discord, Telegram 등 여러 플랫폼에서 동시에 지속적인 인격을 유지할 수 있게 해줍니다. 캐릭터 JSON 파일을 통해 에이전트의 행동을 정의하면, ElizaOS가 플랫폼별 인증, 메시지 폴링, 응답 포맷팅을 처리합니다.
에이전트에서 토큰 스왑을 위해 Jupiter를 어떻게 통합하나요?
Solana Agent Kit은 사전 구축된 스왑 액션을 통해 Jupiter 통합을 기본으로 포함합니다. 커스텀 구현의 경우, Jupiter의 견적-후-스왑 API 패턴을 사용하세요: 거래 쌍으로 견적을 요청하고, 월렛 주소로 스왑 트랜잭션을 구성한 다음, 버전이 지정된 트랜잭션에 서명하고 제출하세요.
Model Context Protocol(MCP)이란 무엇이며 어떻게 도움이 되나요?
MCP는 AI 어시스턴트가 외부 도구와 상호작용하는 방식을 표준화합니다. Solana MCP 서버는 Claude, Cursor 및 기타 MCP 호환 AI 도구가 잔액 확인, 토큰 전송, 스왑, NFT 민팅 등을 포함한 블록체인 작업을 자연어를 통해 직접 실행할 수 있게 해줍니다.
Solana AI 에이전트를 구축할 때 흔히 저지르는 실수는 무엇인가요?
AI가 생성한 코드는 병렬 처리 대신 순차적인 계정 업데이트를 생성하거나 Solana 전용 최적화를 무시할 수 있습니다. 생성된 코드가 컴퓨트 유닛 효율성, Program Derived Address(PDA) 사용 같은 보안 모범 사례, RPC 호출 및 트랜잭션 실패에 대한 적절한 에러 핸들링을 갖추고 있는지 항상 검토하세요.
Alchemy 뉴스레터
출시 소식을 가장 먼저 받아보세요
뉴스레터 구독하기
Alchemy의 최신 제품 업데이트와 리소스 받기
이메일 주소를 입력하면 마케팅 커뮤니케이션 및 제품 업데이트 수신에 동의하게 됩니다. Alchemy는 저희 개인정보 처리방침에 따라 수집한 정보를 처리합니다. 언제든지 구독을 취소할 수 있습니다.
관련 아티클

Glamsterdam: Ethereum 개발자를 위한 완전 가이드
Glamsterdam이 Sepolia에서 가동 중입니다. 개발자에게 무엇을 의미하는지, 그리고 Alchemy가 네트워크 업그레이드에 어떻게 준비했는지를 담은 완전 가이드입니다.

도쿄에서 구축한다면 어떤 RPC 제공업체를 선택해야 할까
도쿄를 서비스하는 RPC 제공업체 다섯 곳을 다섯 개 체인에서 벤치마크했습니다. 비교 결과와, 지연 시간에 민감한 팀에게 차이가 어디서 나는지 정리합니다.

업계 최고 수준의 속도와 안정성을 위한 Solana RPC 읽기 아키텍처
Alchemy는 가장 낮은 Solana 읽기 지연 시간을 제공합니다: 9.21ms로, 차순위 제공업체보다 약 26% 빠릅니다.