To build a research agent, you must define the event/context types, initialize the builder, define the tasks, and then assemble them.
1. Define Types
type AgentEvents = {
taskPlanner: { tasks: string[]; query: string; };
informationGatherer: { searchResults: string[]; };
informationAnalyzer: { analysis: string; insights: string[]; };
reportGenerator: { report: string; };
};
type AgentContext = {
query: string;
tasks: string[];
searchResults: string[];
analysis: string;
insights: string[];
report: string;
};
2. Initialize Components
import { OpenAI } from 'openai';
import { createTask } from 'task';
import { WorkflowBuilder } from './builder';
import { Context } from './context';
import { TypedEventEmitter } from './events';
const events = new TypedEventEmitter<AgentEvents>();
const builder = new WorkflowBuilder<AgentEvents, AgentContext>('research-agent', {
events,
context: new Context<AgentContext>({
query: '',
tasks: [],
searchResults: [],
analysis: '',
insights: [],
report: '',
}),
});
const llm = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
3. Define and Build Tasks
Each task uses createTask with an execute function and a route function. Tasks can also declare dependencies.
// Example Task Planner
const taskPlanner = createTask({
name: 'taskPlanner',
execute: async ({ context, data }) => {
// ... LLM logic to generate tasks ...
context?.set('query', userQuery);
context?.set('tasks', tasks);
return { tasks, query: userQuery };
},
route: () => 'informationGatherer',
});
// Assemble
builder.addTask(taskPlanner);
// ... add other tasks ...
const workflow = builder.build();
workflow.start('taskPlanner', { query: 'Research the impact of AI on healthcare' });
// Full assembly pattern
builder.addTask(taskPlanner);
builder.addTask(informationGatherer);
builder.addTask(informationAnalyzer);
builder.addTask(reportGenerator);
const workflow = builder.build();
workflow.start('taskPlanner', { query: 'Research the impact of AI on healthcare' });