Setup & Initialize Your Agent
🧠 Initialize Your Agent
Create an agent using TensaiKit for DeFi protocols actions of Katana Network.
import { privateKeyToAccount } from "viem/accounts";
import { createWalletClient, http } from "viem";
import { ChatOpenAI } from "@langchain/openai";
import { TensaiKit, sushiSwapActionProvider, katana } from "tensaikit";
import { ViemWalletProvider } from "tensaikit/wallet";
import { createReactAgent, tool, MemorySaver, HumanMessage } from "langchain";
// Initialize your agent
async function initializeAgent() {
try {
const llm = new ChatOpenAI({
model: "gpt-4o-mini",
apiKey: process.env.OPENAI_API_KEY,
});
const account = privateKeyToAccount(
(process.env.WALLET_PRIVATE_KEY as `0x{string}`) ?? ""
);
const client = createWalletClient({
account,
chain: katana(process.env.KATANA_RPC_API_KEY),
transport: http(),
});
const walletProvider = new ViemWalletProvider(client);
const agentkit = await TensaiKit.from({
walletProvider,
actionProviders: [sushiSwapActionProvider()],
});
const tools = await getMyLangChainTools(agentkit);
const memory = new MemorySaver();
const agentConfig = {
configurable: { thread_id: "Tensaikit Chatbot Example" },
};
const agent = createReactAgent({
llm,
tools,
checkpointSaver: memory,
messageModifier: `You are a helpful onchain agent using TensaiKit. Be clear, concise, and only use tools when needed.`,
});
return {
agent,
config: agentConfig,
};
} catch (error) {
console.error("Failed to initialize agent:", error);
throw error;
}
}
const agentPromise = initializeAgent();
export default agentPromise;
🛠️ LangChain Tool Wrapping
Wrap your TensaiKit
actions into LangChain-compatible tools.
async function getMyLangChainTools(agentKit: TensaiKit) {
const actions = agentKit.getActions();
return actions.map((action) =>
tool(async (arg) => await action.invoke(arg), {
name: action.name,
description: action.description,
schema: action.schema,
})
);
}