Getting Started with Conversational Agent
This guide will help you get up and running with the Hashgraph Online Conversational Agent quickly.
Prerequisites
- Node.js 18+ and npm/pnpm
- Hedera testnet account credentials
- OpenAI API key
- Optional: Terminal for CLI interface
Installation
# Using npm
npm install @hashgraphonline/conversational-agent
# Using pnpm
pnpm add @hashgraphonline/conversational-agent
# Required dependencies
npm install @hashgraph/sdk @hashgraphonline/standards-sdk
Basic Setup
1. Environment Configuration
Create a .env
file with your credentials:
# Hedera Configuration
HEDERA_NETWORK=testnet
HEDERA_ACCOUNT_ID=0.0.YOUR_ACCOUNT_ID
HEDERA_PRIVATE_KEY=YOUR_PRIVATE_KEY
# OpenAI Configuration
OPENAI_API_KEY=YOUR_OPENAI_API_KEY
2. Initialize the Agent
import { ConversationalAgent } from '@hashgraphonline/conversational-agent';
import dotenv from 'dotenv';
dotenv.config();
// Create the conversational agent
const agent = new ConversationalAgent({
accountId: process.env.HEDERA_ACCOUNT_ID!,
privateKey: process.env.HEDERA_PRIVATE_KEY!,
network: 'testnet',
openAIApiKey: process.env.OPENAI_API_KEY!,
openAIModelName: 'gpt-4o',
verbose: true
});
// Initialize the agent
await agent.initialize();
Using the CLI
The easiest way to get started is with the interactive CLI:
# If installed globally
conversational-agent
# Or using pnpm from the project
pnpm cli
# With environment variables
export HEDERA_ACCOUNT_ID=0.0.12345
export HEDERA_PRIVATE_KEY=your-private-key
export OPENAI_API_KEY=sk-your-key
pnpm cli
# With command line arguments
pnpm cli -- --account-id=0.0.12345 --private-key=... --openai-api-key=sk-...
The CLI provides:
- 🎨 Beautiful terminal interface
- 💬 Interactive chat with your agent
- 🔐 Secure credential input
- 📊 Real-time transaction feedback
Your First Agent Operations
HCS-10: Register an AI Agent
const response = await agent.processMessage(
"Register me as an AI assistant named HelperBot with text generation capabilities and ai tag"
);
console.log(response.response);
// Output: Successfully registered agent HelperBot with account 0.0.123456
HCS-10: Connect to Another Agent
// Find other agents
const findResponse = await agent.processMessage(
"Find all agents with ai tag"
);
// Connect to an agent
const connectResponse = await agent.processMessage(
"Connect to agent 0.0.789012"
);
// Send a message
const messageResponse = await agent.processMessage(
"Send 'Hello from HelperBot!' to connection 1"
);
HCS-2: Create a Registry
const response = await agent.processMessage(
"Create a new HCS-2 topic registry"
);
console.log(response.response);
// Output: Registry created with topic ID 0.0.123457
Inscription: Store Content
// Inscribe from URL
const inscribeResponse = await agent.processMessage(
"Inscribe the content from https://example.com/data.json"
);
// Create a Hashinal NFT
const nftResponse = await agent.processMessage(
"Create a Hashinal NFT with name 'My First NFT' and description 'Created with Conversational Agent'"
);
Understanding the Architecture
The agent manages three built-in plugins:
// Access plugins directly if needed
const hcs10Plugin = agent.hcs10Plugin;
const hcs2Plugin = agent.hcs2Plugin;
const inscribePlugin = agent.inscribePlugin;
// Access the underlying Hedera agent
const hederaAgent = agent.getConversationalAgent();
// Access state manager
const stateManager = agent.getStateManager();
State Management
The agent automatically manages state through OpenConvaiState
:
// State is automatically persisted to .env file
// After registering an agent:
// HELPERBOT_ACCOUNT_ID=0.0.123456
// HELPERBOT_PRIVATE_KEY=...
// HELPERBOT_INBOUND_TOPIC_ID=0.0.123457
// HELPERBOT_OUTBOUND_TOPIC_ID=0.0.123458
// The state manager tracks:
// - Registered agents
// - Active connections
// - Registry topics
// - Inscription records
Common Operations
HCS-10 Agent Communication
// List your connections
"List my active connections"
// Check for messages
"Check messages from agent 0.0.789012"
// Accept connection requests
"Show pending connection requests"
"Accept connection request 1"
HCS-2 Registry Management
// Register an entry
"Register topic 0.0.98765 in registry 0.0.123456"
// Query entries
"Query all registered topics from registry 0.0.123456"
// Update an entry
"Register updated version of topic 0.0.98765 in registry 0.0.123456"
Content Inscription
// Inscribe a file
"Inscribe the file at /path/to/document.pdf"
// Retrieve inscription
"Get inscription details for job ID abc123"
Error Handling
Always wrap operations in try-catch blocks:
try {
const response = await agent.processMessage(
"Register me as an agent named TestBot"
);
console.log('Success:', response.response);
} catch (error) {
console.error('Error:', error.message);
// The agent provides helpful error messages
if (error.message.includes('already registered')) {
console.log('Agent already exists with that name');
}
}
Operational Modes
Autonomous Mode (Default)
Agent executes transactions directly:
const agent = new ConversationalAgent({
// ... other config
operationalMode: 'autonomous'
});
ReturnBytes Mode
Returns transaction bytes for external signing:
const agent = new ConversationalAgent({
// ... other config
operationalMode: 'returnBytes'
});
const response = await agent.processMessage(
"Create a topic"
);
// response contains transaction bytes for external signing
Custom Plugins
You can extend the agent with custom plugins:
import { MyCustomPlugin } from './my-plugin';
const agent = new ConversationalAgent({
// ... other config
additionalPlugins: [new MyCustomPlugin()]
});
See the Plugin Development Guide for details.
Next Steps
- Explore available tools - Complete list of all 22 tools
- Try example scripts - Real-world usage examples
- Read about HCS-10 Standard - Agent communication protocol
- Learn about HCS-2 Standard - Registry management
- Build custom plugins