Research Agent Example
This example demonstrates how to build a research agent that can gather, analyze, and synthesize information from various sources.
Overview
The research agent is designed to perform comprehensive research on a given topic by searching across multiple sources, extracting relevant information, and producing a structured report.
Implementation
Step 1: Set up the basic agent structure
import { Agent, Orchestrator } from '@agent-swarm/sdk';
const researchAgent = new Agent({
name: 'research-agent',
description: 'Performs comprehensive research on specified topics',
capabilities: ['web-search', 'content-extraction', 'summarization', 'fact-checking']
});
Step 2: Define the research task interface
interface ResearchTask {
topic: string;
depth: 'basic' | 'comprehensive' | 'expert';
sources?: string[];
maxSources?: number;
format?: 'markdown' | 'html' | 'text';
includeCitations: boolean;
}
interface ResearchResult {
summary: string;
keyFindings: string[];
sources: {
title: string;
url: string;
relevance: number;
extractedInfo: string;
}[];
fullReport: string;
citations: Record<string, string>;
}
Step 3: Implement the research handler
researchAgent.registerHandler('research', async (task) => {
const researchParams: ResearchTask = task.inputs;
// Step 1: Search for relevant sources
const sources = await findSources(researchParams.topic, researchParams.sources, researchParams.maxSources);
// Step 2: Extract information from each source
const extractedInfo = await Promise.all(
sources.map(source => extractInformation(source, researchParams.topic))
);
// Step 3: Synthesize information
const synthesis = synthesizeInformation(extractedInfo, researchParams.topic, researchParams.depth);
// Step 4: Generate report
const report = generateReport(synthesis, researchParams.format || 'markdown', researchParams.includeCitations);
return report;
});
Step 4: Implement research functions
async function findSources(topic: string, preferredSources: string[] = [], maxSources: number = 10) {
// Implement search logic to find relevant sources
// This could use web search APIs, database queries, or other data sources
// Example implementation
const searchResults = await webSearchAPI.search(topic, { limit: maxSources * 2 });
// Filter and rank results
const rankedSources = rankSourcesByRelevance(searchResults, topic);
// Return top sources
return rankedSources.slice(0, maxSources);
}
async function extractInformation(source, topic) {
// Implement logic to extract relevant information from a source
// This could involve web scraping, text processing, etc.
// Example implementation
const content = await fetchContent(source.url);
const relevantContent = extractRelevantContent(content, topic);
return {
...source,
extractedInfo: relevantContent
};
}
function synthesizeInformation(extractedInfo, topic, depth) {
// Implement logic to synthesize information from multiple sources
// This could involve summarization, fact checking, etc.
// Example implementation
const allContent = extractedInfo.map(info => info.extractedInfo).join('\n\n');
const summary = generateSummary(allContent, depth);
const keyFindings = extractKeyFindings(allContent, topic);
return {
summary,
keyFindings,
sources: extractedInfo
};
}
function generateReport(synthesis, format, includeCitations) {
// Implement logic to generate a formatted report
// Example implementation
const report = formatReport(synthesis, format);
// Add citations if requested
const citations = includeCitations ? generateCitations(synthesis.sources) : {};
return {
...synthesis,
fullReport: report,
citations
};
}
Step 5: Start the agent
// Connect to orchestrator
const orchestrator = new Orchestrator('http://localhost:3000');
researchAgent.connect(orchestrator);
// Start the agent
const port = 8081;
researchAgent.start(port);
console.log(`Research agent started on port ${port}`);
Usage
To use the research agent:
// Client-side code
const response = await fetch('http://localhost:3000/api/v1/tasks', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
type: 'research',
description: 'Research on renewable energy technologies',
inputs: {
topic: 'Recent advancements in solar panel efficiency',
depth: 'comprehensive',
sources: ['academic', 'news', 'industry-reports'],
maxSources: 15,
format: 'markdown',
includeCitations: true
},
agents: ['research-agent']
})
});
const result = await response.json();
console.log(result.outputs.summary); // Research summary
console.log(result.outputs.fullReport); // Complete research report
Extensions
The research agent can be extended with additional capabilities:
- Multi-agent collaboration: Collaborate with specialized agents for deeper analysis
- Periodic updates: Schedule regular research updates on evolving topics
- Interactive research: Allow users to refine research direction interactively
- Visual data: Include charts and visualizations in research reports
- Expert validation: Submit findings to domain expert agents for validation