This commit is contained in:
Deepak
2024-12-27 17:41:12 +05:30
parent 3cdd45d623
commit a537716d99
7 changed files with 122 additions and 6 deletions

View File

@@ -0,0 +1,83 @@
# Agent Kit LangGraph Example
This example demonstrates how to build an advanced Solana agent using LangGraph and the Solana Agent Kit. It showcases a multi-agent system that can handle various Solana-related tasks through a directed workflow.
## Features
- Multi-agent architecture using LangGraph's StateGraph
- Specialized agents for different tasks:
- General purpose agent for basic queries
- Transfer/Swap agent for transaction operations
- Read agent for blockchain data queries
- Manager agent for routing and orchestration
- Environment-based configuration
- TypeScript implementation with full type safety
## Prerequisites
- Node.js (v16 or higher)
- pnpm package manager
- Solana development environment
## Installation
1. Clone the repository and navigate to the example directory:
```bash
cd examples/agent-kit-langgraph
```
2. Install dependencies:
```bash
pnpm install
```
3. Configure environment variables:
```bash
cp .env.example .env
```
Edit the `.env` file with your configuration:
- Add your OpenAI API key
- Configure any other required environment variables
## Project Structure
```
src/
├── agents/ # Individual agent implementations
├── helper/ # Helper utilities and examples
├── prompts/ # Agent prompts and templates
├── tools/ # Custom tools for agents
└── utils/ # Utility functions and configurations
```
## Usage
To run the example:
```bash
pnpm dev src/index.ts
```
The example demonstrates a workflow where:
1. The manager agent receives the initial query
2. Based on the query type, it routes to the appropriate specialized agent:
- General queries → Generalist Agent
- Transfer/Swap operations → TransferSwap Agent
- Blockchain data queries → Read Agent
## Dependencies
- `@langchain/community`: LangChain community tools and utilities
- `@langchain/core`: Core LangChain functionality
- `@langchain/langgraph`: Graph-based agent workflows
- `solana-agent-kit`: Solana Agent Kit for blockchain interactions
- `zod`: Runtime type checking
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
ISC License

View File

@@ -1,7 +1,9 @@
{
"node_version": "20",
"dockerfile_lines": [],
"dependencies": ["."],
"graphs": {
"solana-agent": "./index.ts:graph"
"solanaAgent": "./src/index.ts:graph"
},
"env": ".env",
"node_version": "20"
}
"env": ".env"
}

View File

@@ -0,0 +1,22 @@
import { createReactAgent } from "@langchain/langgraph/prebuilt";
import { gpt4o } from "../utils/model";
import { solanaAgentState } from "../utils/state";
import { HumanMessage } from "@langchain/core/messages";
import { agentKit } from "../utils/solanaAgent";
import {
SolanaBalanceTool,
SolanaFetchPriceTool,
} from "solana-agent-kit/dist/langchain";
const readAgent = createReactAgent({
llm: gpt4o,
tools: [new SolanaBalanceTool(agentKit), new SolanaFetchPriceTool(agentKit)],
});
export const readNode = async (state: typeof solanaAgentState.State) => {
const { messages } = state;
const result = await readAgent.invoke({ messages });
return { messages: [...result.messages] };
};

View File

@@ -3,3 +3,7 @@ import { HumanMessage } from "@langchain/core/messages";
export const generalQuestion = [
new HumanMessage("Who is the president of Ecuador?"),
];
export const solanaReadQuery = [new HumanMessage("what is the price of SOL")];
export const solanaWriteQuery = [new HumanMessage("swap 0.1 usdc to sol")];

View File

@@ -3,6 +3,7 @@ import { solanaAgentState } from "./utils/state";
import { generalistNode } from "./agents/generalAgent";
import { transferSwapNode } from "./agents/transferOrSwap";
import { managerNode } from "./agents/manager";
import { readNode } from "./agents/readAgent";
import { START, END } from "@langchain/langgraph";
import { managerRouter } from "./utils/route";
import { HumanMessage } from "@langchain/core/messages";
@@ -11,15 +12,17 @@ const workflow = new StateGraph(solanaAgentState)
.addNode("generalist", generalistNode)
.addNode("manager", managerNode)
.addNode("transferSwap", transferSwapNode)
.addNode("read", readNode)
.addEdge(START, "manager")
.addConditionalEdges("manager", managerRouter)
.addEdge("generalist", END)
.addEdge("transferSwap", END);
.addEdge("transferSwap", END)
.addEdge("read", END);
export const graph = workflow.compile();
const result = await graph.invoke({
messages: [new HumanMessage("swap 0.1 usdc to sol")],
messages: [new HumanMessage("what is the price of SOL")],
});
console.log(result);

View File

@@ -8,6 +8,8 @@ export const managerRouter = (state: typeof solanaAgentState.State) => {
return "generalist";
} else if (isSolanaWriteQuery) {
return "transferSwap";
} else if (isSolanaReadQuery) {
return "read";
} else {
return END;
}