<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: VoltAgent</title>
    <description>The latest articles on Forem by VoltAgent (@voltagent).</description>
    <link>https://forem.com/voltagent</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F10698%2Fa36edb42-a319-43d4-bcc4-960f9d8bb700.png</url>
      <title>Forem: VoltAgent</title>
      <link>https://forem.com/voltagent</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/voltagent"/>
    <language>en</language>
    <item>
      <title>100+ Claude Code Subagent Collection</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Tue, 05 Aug 2025 12:44:23 +0000</pubDate>
      <link>https://forem.com/voltagent/100-claude-code-subagent-collection-1eb0</link>
      <guid>https://forem.com/voltagent/100-claude-code-subagent-collection-1eb0</guid>
      <description>&lt;p&gt;Looking to supercharge your development workflow with specialized AI agents? We've been working on &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents" rel="noopener noreferrer"&gt;&lt;strong&gt;Awesome Claude Code Subagents&lt;/strong&gt;&lt;/a&gt; - a comprehensive collection of production-ready subagents for Claude Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintaining by &lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;VoltAgent Framework&lt;/a&gt; community&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📦 Get All 110+ Claude Code Subagents.
&lt;/h2&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents" rel="noopener noreferrer"&gt;Explore the full collection on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each subagent includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Production-ready configurations&lt;/li&gt;
&lt;li&gt;✅ MCP Tool integration&lt;/li&gt;
&lt;li&gt;✅ Best practices compliance&lt;/li&gt;
&lt;li&gt;✅ Regular updates&lt;/li&gt;
&lt;li&gt;✅ Community support&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Access subagent manager in Claude Code&lt;/span&gt;
/agents

&lt;span class="c"&gt;# 2. Create new agent or use existing ones&lt;/span&gt;
&lt;span class="c"&gt;# 3. Let Claude automatically delegate tasks&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🤝 Join the Community
&lt;/h2&gt;

&lt;p&gt;We're always looking for contributors! Whether you want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Submit new subagents&lt;/li&gt;
&lt;li&gt;Improve existing ones&lt;/li&gt;
&lt;li&gt;Share your use cases&lt;/li&gt;
&lt;li&gt;Report issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out our &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guidelines&lt;/a&gt; and join our &lt;a href="https://s.voltagent.dev/discord" rel="noopener noreferrer"&gt;Discord Community&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Subagents?
&lt;/h2&gt;

&lt;p&gt;Subagents are specialized AI assistants that enhance Claude Code's capabilities by providing task-specific expertise. Each operates with its own context window and domain-specific intelligence, making them perfect for focused development tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌟 All Categories with 110+ Specialized Subagents
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/tree/main/categories/01-core-development" rel="noopener noreferrer"&gt;&lt;strong&gt;Core Development&lt;/strong&gt;&lt;/a&gt; (9 subagents)
&lt;/h3&gt;

&lt;p&gt;Essential development subagents for everyday coding tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/01-core-development/frontend-developer.md" rel="noopener noreferrer"&gt;frontend-developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/01-core-development/backend-developer.md" rel="noopener noreferrer"&gt;backend-developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/01-core-development/fullstack-developer.md" rel="noopener noreferrer"&gt;fullstack-developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/01-core-development/mobile-developer.md" rel="noopener noreferrer"&gt;mobile-developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/01-core-development/electron-pro.md" rel="noopener noreferrer"&gt;electron-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/01-core-development/api-designer.md" rel="noopener noreferrer"&gt;api-designer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/01-core-development/graphql-architect.md" rel="noopener noreferrer"&gt;graphql-architect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/01-core-development/microservices-architect.md" rel="noopener noreferrer"&gt;microservices-architect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/01-core-development/websocket-engineer.md" rel="noopener noreferrer"&gt;websocket-engineer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/tree/main/categories/02-language-specialists" rel="noopener noreferrer"&gt;&lt;strong&gt;Language Specialists&lt;/strong&gt;&lt;/a&gt; (22 subagents)
&lt;/h3&gt;

&lt;p&gt;Language-specific experts with deep framework knowledge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/typescript-pro.md" rel="noopener noreferrer"&gt;typescript-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/sql-pro.md" rel="noopener noreferrer"&gt;sql-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/swift-expert.md" rel="noopener noreferrer"&gt;swift-expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/vue-expert.md" rel="noopener noreferrer"&gt;vue-expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/angular-architect.md" rel="noopener noreferrer"&gt;angular-architect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/cpp-pro.md" rel="noopener noreferrer"&gt;cpp-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/csharp-developer.md" rel="noopener noreferrer"&gt;csharp-developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/django-developer.md" rel="noopener noreferrer"&gt;django-developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/dotnet-core-expert.md" rel="noopener noreferrer"&gt;dotnet-core-expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/flutter-expert.md" rel="noopener noreferrer"&gt;flutter-expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/golang-pro.md" rel="noopener noreferrer"&gt;golang-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/java-architect.md" rel="noopener noreferrer"&gt;java-architect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/javascript-pro.md" rel="noopener noreferrer"&gt;javascript-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/kotlin-specialist.md" rel="noopener noreferrer"&gt;kotlin-specialist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/laravel-specialist.md" rel="noopener noreferrer"&gt;laravel-specialist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/nextjs-developer.md" rel="noopener noreferrer"&gt;nextjs-developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/php-pro.md" rel="noopener noreferrer"&gt;php-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/python-pro.md" rel="noopener noreferrer"&gt;python-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/rails-expert.md" rel="noopener noreferrer"&gt;rails-expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/react-specialist.md" rel="noopener noreferrer"&gt;react-specialist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/rust-engineer.md" rel="noopener noreferrer"&gt;rust-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/02-language-specialists/spring-boot-engineer.md" rel="noopener noreferrer"&gt;spring-boot-engineer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/tree/main/categories/03-infrastructure" rel="noopener noreferrer"&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;/a&gt; (12 subagents)
&lt;/h3&gt;

&lt;p&gt;DevOps, cloud, and deployment specialists:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/cloud-architect.md" rel="noopener noreferrer"&gt;cloud-architect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/database-administrator.md" rel="noopener noreferrer"&gt;database-administrator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/deployment-engineer.md" rel="noopener noreferrer"&gt;deployment-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/devops-engineer.md" rel="noopener noreferrer"&gt;devops-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/devops-incident-responder.md" rel="noopener noreferrer"&gt;devops-incident-responder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/incident-responder.md" rel="noopener noreferrer"&gt;incident-responder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/kubernetes-specialist.md" rel="noopener noreferrer"&gt;kubernetes-specialist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/network-engineer.md" rel="noopener noreferrer"&gt;network-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/platform-engineer.md" rel="noopener noreferrer"&gt;platform-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/security-engineer.md" rel="noopener noreferrer"&gt;security-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/sre-engineer.md" rel="noopener noreferrer"&gt;sre-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/03-infrastructure/terraform-engineer.md" rel="noopener noreferrer"&gt;terraform-engineer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/tree/main/categories/04-quality-security" rel="noopener noreferrer"&gt;&lt;strong&gt;Quality &amp;amp; Security&lt;/strong&gt;&lt;/a&gt; (12 subagents)
&lt;/h3&gt;

&lt;p&gt;Testing, security, and code quality experts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/accessibility-tester.md" rel="noopener noreferrer"&gt;accessibility-tester&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/architect-reviewer.md" rel="noopener noreferrer"&gt;architect-reviewer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/chaos-engineer.md" rel="noopener noreferrer"&gt;chaos-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/code-reviewer.md" rel="noopener noreferrer"&gt;code-reviewer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/compliance-auditor.md" rel="noopener noreferrer"&gt;compliance-auditor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/debugger.md" rel="noopener noreferrer"&gt;debugger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/error-detective.md" rel="noopener noreferrer"&gt;error-detective&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/penetration-tester.md" rel="noopener noreferrer"&gt;penetration-tester&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/performance-engineer.md" rel="noopener noreferrer"&gt;performance-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/qa-expert.md" rel="noopener noreferrer"&gt;qa-expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/security-auditor.md" rel="noopener noreferrer"&gt;security-auditor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/04-quality-security/test-automator.md" rel="noopener noreferrer"&gt;test-automator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/tree/main/categories/05-data-ai" rel="noopener noreferrer"&gt;&lt;strong&gt;Data &amp;amp; AI&lt;/strong&gt;&lt;/a&gt; (12 subagents)
&lt;/h3&gt;

&lt;p&gt;Data engineering, ML, and AI specialists:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/ai-engineer.md" rel="noopener noreferrer"&gt;ai-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/data-analyst.md" rel="noopener noreferrer"&gt;data-analyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/data-engineer.md" rel="noopener noreferrer"&gt;data-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/data-scientist.md" rel="noopener noreferrer"&gt;data-scientist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/database-optimizer.md" rel="noopener noreferrer"&gt;database-optimizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/llm-architect.md" rel="noopener noreferrer"&gt;llm-architect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/machine-learning-engineer.md" rel="noopener noreferrer"&gt;machine-learning-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/ml-engineer.md" rel="noopener noreferrer"&gt;ml-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/mlops-engineer.md" rel="noopener noreferrer"&gt;mlops-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/nlp-engineer.md" rel="noopener noreferrer"&gt;nlp-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/postgres-pro.md" rel="noopener noreferrer"&gt;postgres-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/05-data-ai/prompt-engineer.md" rel="noopener noreferrer"&gt;prompt-engineer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/tree/main/categories/06-developer-experience" rel="noopener noreferrer"&gt;&lt;strong&gt;Developer Experience&lt;/strong&gt;&lt;/a&gt; (9 subagents)
&lt;/h3&gt;

&lt;p&gt;Tooling and developer productivity experts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/06-developer-experience/build-engineer.md" rel="noopener noreferrer"&gt;build-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/06-developer-experience/cli-developer.md" rel="noopener noreferrer"&gt;cli-developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/06-developer-experience/dependency-manager.md" rel="noopener noreferrer"&gt;dependency-manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/06-developer-experience/documentation-engineer.md" rel="noopener noreferrer"&gt;documentation-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/06-developer-experience/dx-optimizer.md" rel="noopener noreferrer"&gt;dx-optimizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/06-developer-experience/git-workflow-manager.md" rel="noopener noreferrer"&gt;git-workflow-manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/06-developer-experience/legacy-modernizer.md" rel="noopener noreferrer"&gt;legacy-modernizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/06-developer-experience/refactoring-specialist.md" rel="noopener noreferrer"&gt;refactoring-specialist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/06-developer-experience/tooling-engineer.md" rel="noopener noreferrer"&gt;tooling-engineer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/tree/main/categories/07-specialized-domains" rel="noopener noreferrer"&gt;&lt;strong&gt;Specialized Domains&lt;/strong&gt;&lt;/a&gt; (10 subagents)
&lt;/h3&gt;

&lt;p&gt;Domain-specific technology experts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/07-specialized-domains/api-documenter.md" rel="noopener noreferrer"&gt;api-documenter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/07-specialized-domains/blockchain-developer.md" rel="noopener noreferrer"&gt;blockchain-developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/07-specialized-domains/embedded-systems.md" rel="noopener noreferrer"&gt;embedded-systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/07-specialized-domains/fintech-engineer.md" rel="noopener noreferrer"&gt;fintech-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/07-specialized-domains/game-developer.md" rel="noopener noreferrer"&gt;game-developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/07-specialized-domains/iot-engineer.md" rel="noopener noreferrer"&gt;iot-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/07-specialized-domains/mobile-app-developer.md" rel="noopener noreferrer"&gt;mobile-app-developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/07-specialized-domains/payment-integration.md" rel="noopener noreferrer"&gt;payment-integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/07-specialized-domains/quant-analyst.md" rel="noopener noreferrer"&gt;quant-analyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/07-specialized-domains/risk-manager.md" rel="noopener noreferrer"&gt;risk-manager&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/tree/main/categories/08-business-product" rel="noopener noreferrer"&gt;&lt;strong&gt;Business &amp;amp; Product&lt;/strong&gt;&lt;/a&gt; (10 subagents)
&lt;/h3&gt;

&lt;p&gt;Product management and business analysis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/08-business-product/business-analyst.md" rel="noopener noreferrer"&gt;business-analyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/08-business-product/content-marketer.md" rel="noopener noreferrer"&gt;content-marketer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/08-business-product/customer-success-manager.md" rel="noopener noreferrer"&gt;customer-success-manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/08-business-product/legal-advisor.md" rel="noopener noreferrer"&gt;legal-advisor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/08-business-product/product-manager.md" rel="noopener noreferrer"&gt;product-manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/08-business-product/project-manager.md" rel="noopener noreferrer"&gt;project-manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/08-business-product/sales-engineer.md" rel="noopener noreferrer"&gt;sales-engineer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/08-business-product/scrum-master.md" rel="noopener noreferrer"&gt;scrum-master&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/08-business-product/technical-writer.md" rel="noopener noreferrer"&gt;technical-writer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/08-business-product/ux-researcher.md" rel="noopener noreferrer"&gt;ux-researcher&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/tree/main/categories/09-meta-orchestration" rel="noopener noreferrer"&gt;&lt;strong&gt;Meta &amp;amp; Orchestration&lt;/strong&gt;&lt;/a&gt; (8 subagents)
&lt;/h3&gt;

&lt;p&gt;Agent coordination and meta-programming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/09-meta-orchestration/agent-organizer.md" rel="noopener noreferrer"&gt;agent-organizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/09-meta-orchestration/context-manager.md" rel="noopener noreferrer"&gt;context-manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/09-meta-orchestration/error-coordinator.md" rel="noopener noreferrer"&gt;error-coordinator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/09-meta-orchestration/knowledge-synthesizer.md" rel="noopener noreferrer"&gt;knowledge-synthesizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/09-meta-orchestration/multi-agent-coordinator.md" rel="noopener noreferrer"&gt;multi-agent-coordinator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/09-meta-orchestration/performance-monitor.md" rel="noopener noreferrer"&gt;performance-monitor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/09-meta-orchestration/task-distributor.md" rel="noopener noreferrer"&gt;task-distributor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/09-meta-orchestration/workflow-orchestrator.md" rel="noopener noreferrer"&gt;workflow-orchestrator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10. &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/tree/main/categories/10-research-analysis" rel="noopener noreferrer"&gt;&lt;strong&gt;Research &amp;amp; Analysis&lt;/strong&gt;&lt;/a&gt; (6 subagents)
&lt;/h3&gt;

&lt;p&gt;Research, search, and analysis specialists:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/10-research-analysis/research-analyst.md" rel="noopener noreferrer"&gt;research-analyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/10-research-analysis/search-specialist.md" rel="noopener noreferrer"&gt;search-specialist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/10-research-analysis/trend-analyst.md" rel="noopener noreferrer"&gt;trend-analyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/10-research-analysis/competitive-analyst.md" rel="noopener noreferrer"&gt;competitive-analyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/10-research-analysis/market-researcher.md" rel="noopener noreferrer"&gt;market-researcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents/blob/main/categories/10-research-analysis/data-researcher.md" rel="noopener noreferrer"&gt;data-researcher&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>llm</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>🚀 VoltAgent Launch Week #1 — What’s New?</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Wed, 18 Jun 2025 11:44:08 +0000</pubDate>
      <link>https://forem.com/voltagent/voltagent-launch-week-1-whats-new-hoc</link>
      <guid>https://forem.com/voltagent/voltagent-launch-week-1-whats-new-hoc</guid>
      <description>&lt;p&gt;Hey everyone! 👋&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We just kicked off &lt;a href="https://voltagent.dev/launch-week-june-25/" rel="noopener noreferrer"&gt;Launch Week #1 for VoltAgent&lt;/a&gt; — our open-source TypeScript framework for building and observing LLM agents.&lt;/p&gt;

&lt;p&gt;This is our first-ever launch week, and everything we’re shipping is shaped by community feedback over the past few months. Each day this week, we’re introducing new features designed to help you build, scale, and monitor AI agents more effectively.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6jxrsuugyy60mbtjai9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6jxrsuugyy60mbtjai9.png" alt=" " width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 What’s VoltAgent?
&lt;/h3&gt;

&lt;p&gt;VoltAgent is a flexible framework for orchestrating AI agents, with built-in support for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-agent workflows&lt;/li&gt;
&lt;li&gt;Tool integrations&lt;/li&gt;
&lt;li&gt;Custom routing &amp;amp; hooks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tracing &amp;amp; debugging via VoltOps&lt;/p&gt;

&lt;h3&gt;
  
  
  🔎 What’s VoltOps?
&lt;/h3&gt;

&lt;p&gt;VoltOps is our framework-agnostic observability layer for LLM apps. Even if you’re not using VoltAgent, you can still monitor your agents and see detailed traces using VoltOps. It now works with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vanilla JS / Python agents&lt;/li&gt;
&lt;li&gt;Vercel AI SDK&lt;/li&gt;
&lt;li&gt;LangChain, LangGraph (coming soon)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔥 Launch Week Highlights (So far)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🟢 Day 1 – Framework-Agnostic Observability
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fthgkj2zwmnuj3aeucxaf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fthgkj2zwmnuj3aeucxaf.jpeg" alt=" " width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;VoltAgent Developer Console is now VoltOps — supports observability across any framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  🟢 Day 2 – Streaming with fullStream
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhn8np8l596yj7kxz3v9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhn8np8l596yj7kxz3v9.png" alt=" " width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Capture every reasoning step, tool call, and completion signal — not just raw text.&lt;/p&gt;

&lt;h3&gt;
  
  
  🟢 Day 3 – Vercel AI UI Support
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu738ga8g7z4nh4qlhitr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu738ga8g7z4nh4qlhitr.png" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;br&gt;
VoltAgent now includes plug-and-play UI components for building agent UIs with Vercel AI SDK.&lt;/p&gt;

&lt;p&gt;(More days coming soon… 👀)&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;🙌 Join the Community&lt;/p&gt;

&lt;p&gt;We’re open source and community-driven. You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ Star the repo: &lt;a href="https://github.com/VoltAgent/voltagent" rel="noopener noreferrer"&gt;https://github.com/VoltAgent/voltagent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💬 Join our Discord: &lt;a href="https://s.voltagent.dev/discord" rel="noopener noreferrer"&gt;https://s.voltagent.dev/discord&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Thanks to everyone who’s given us feedback so far, it’s been amazing to see what people are building with VoltAgent.&lt;/p&gt;

&lt;p&gt;Let’s build better agents, together. 🦾&lt;/p&gt;

&lt;p&gt;— VoltAgent Team ⚡&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>llm</category>
      <category>ai</category>
    </item>
    <item>
      <title>✨ What an LLM Agent Framework Looks Like in 2025</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Wed, 04 Jun 2025 10:03:08 +0000</pubDate>
      <link>https://forem.com/voltagent/what-an-llm-agent-framework-looks-like-in-2025-534l</link>
      <guid>https://forem.com/voltagent/what-an-llm-agent-framework-looks-like-in-2025-534l</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dh1qhkb41fv744rb2fl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dh1qhkb41fv744rb2fl.png" alt=" " width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"ChatGPT is amazing, but how do I integrate this into my own app?"&lt;/em&gt; - How many developers have heard this question...&lt;/p&gt;

&lt;p&gt;LLMs changed our lives, no doubt about it. Since ChatGPT came out, everyone sees &lt;em&gt;incredible&lt;/em&gt; possibilities. But let me tell you the truth as a developer: Using this power in our own applications is way harder than we thought.&lt;/p&gt;

&lt;p&gt;Most of us go through the same cycle. First there's &lt;strong&gt;excitement&lt;/strong&gt;: "I have an amazing AI idea!" Then &lt;strong&gt;quick start&lt;/strong&gt;: We do API integration, simple examples work, everything looks good. But when real users come... &lt;em&gt;that's when everything gets complicated.&lt;/em&gt; Code becomes unmanageable, every new feature breaks old code, debugging becomes a nightmare.&lt;/p&gt;

&lt;p&gt;Did you go through this cycle? You're not alone.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Real Problem: From API to Application
&lt;/h2&gt;

&lt;p&gt;When you look at AI development with the traditional approach, it looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Manual API call every time&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userInput&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Custom code for every feature...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No problem at first. But then user requests start coming: "Can it use this tool?", "Can it remember past conversations?", "Can it behave differently in different situations?" You write code from scratch for every request. You solve the same problems over and over.&lt;/p&gt;

&lt;p&gt;This is where an LLM agent framework comes in right here. They hide complexity behind abstraction layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define agent once, complexity handled by framework&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;customer-support&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Do customer support&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;orderTool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;refundTool&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;conversationMemory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See the difference? The framework handles those thousands of lines of boilerplate code, error handling, memory management, tool orchestration and gives you a chance to &lt;em&gt;just focus on business logic&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Out There?
&lt;/h2&gt;

&lt;p&gt;At this point, developers have three main options.&lt;/p&gt;

&lt;p&gt;Those who choose the &lt;strong&gt;DIY approach&lt;/strong&gt; want full control but their lives become &lt;em&gt;hell&lt;/em&gt;. They write everything from scratch, solve the same problems over and over. Might be reasonable for companies with big engineering teams but overkill for most projects.&lt;/p&gt;

&lt;p&gt;Those who choose &lt;strong&gt;no-code/low-code platforms&lt;/strong&gt; start fast but then hit walls. Visual editors are nice, don't require technical knowledge at first but when you want a custom feature, you get "you can't do that" as an answer. Vendor lock-in risk is also a pain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM agent framework&lt;/strong&gt; find a place between the two. They give you ready-made building blocks but don't compromise on flexibility. Production-ready, best practices built-in but you can customize however you want.&lt;/p&gt;

&lt;p&gt;When deciding which option to go with, think about these: How's the programming language support? Is switching between LLM providers easy? What's the performance and scalability situation? How's the documentation quality? Is there community support? Are error handling, monitoring, security features good?&lt;/p&gt;

&lt;h4&gt;
  
  
  Tip
&lt;/h4&gt;

&lt;p&gt;Start with a framework if you're building your first AI application. You can always migrate to custom solutions later when you understand your specific needs better.&lt;/p&gt;

&lt;h2&gt;
  
  
  Voltagent Example
&lt;/h2&gt;

&lt;p&gt;:::note&lt;br&gt;
The following examples show Voltagent's approach, but similar patterns exist in other frameworks like LangChain, AutoGen, and CrewAI. The concepts are transferable.&lt;br&gt;
:::&lt;/p&gt;

&lt;p&gt;At this point I want to give a concrete example. While developing Voltagent, we experienced exactly these problems and tried to solve them.&lt;/p&gt;

&lt;p&gt;Voltagent's design philosophy is: &lt;strong&gt;"Powerful defaults, infinite customization"&lt;/strong&gt; - meaning provide ready solutions for most use cases, but unlimited flexibility for special needs.&lt;/p&gt;

&lt;p&gt;One of our most important decisions was being &lt;strong&gt;TypeScript-first&lt;/strong&gt;. Why? Because type safety really saves lives. In complex agent systems, knowing which function takes what parameters is critical. We also made a modular package system - you only use what you need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Only use what you need&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@voltagent/core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;VoiceAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@voltagent/voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// If needed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Provider-agnostic design was also very important. We didn't want vendor lock-in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Easy provider switching&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;openaiAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VercelAIProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;anthropicAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AnthropicProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;claude-3-5-sonnet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  From Simple Agents to Complex Systems
&lt;/h3&gt;

&lt;p&gt;Creating an agent in its simplest form is really easy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My Assistant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Helpful and friendly assistant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VercelAIProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Usage is also simple&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the beautiful thing is, you can do much more complex stuff with the same API. For example &lt;strong&gt;structured data generation&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define schema for data extraction&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;personSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Full name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;number&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;occupation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;skills&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Ask agent for structured data&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Create a profile for a software developer named Alex.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;personSchema&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Type-safe JSON object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This feature is especially useful for &lt;strong&gt;data extraction&lt;/strong&gt; and &lt;strong&gt;API responses&lt;/strong&gt;. You're not saying "give it in JSON format" and then trying to parse it anymore.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tool Integration: Real World Connection
&lt;/h3&gt;

&lt;p&gt;We added MCP (Model Context Protocol) support in the tool integration part. This really became a game-changing feature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define local tool&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;weatherTool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createTool&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;get_weather&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Get the current weather for a specific location&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;City and state&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="na"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Real API call would be here&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;conditions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sunny&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Connect to external MCP server&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mcpTools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;connectMCPServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stdio://weather-server&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Weather Assistant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Can check weather using available tools&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VercelAIProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;weatherTool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;mcpTools&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Combine both&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent decides which tool to use when by itself. You just say "How's the weather in London?", it calls its own tool and brings you the result.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory: Context Management
&lt;/h3&gt;

&lt;p&gt;We also carefully designed the memory system. It's critical for agents to remember past conversations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;LibSQLStorage&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@voltagent/core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;memoryStorage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;LibSQLStorage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;file:local.db&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Assistant with Memory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Remember our conversation history&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VercelAIProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;memoryStorage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Automatic context management&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// First conversation&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My name is John and I love pizza&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Next conversation - will remember the previous one&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What's my favorite food?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// "Based on our previous conversation, you love pizza!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The framework automatically fetches relevant context and saves new interactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Agent Systems
&lt;/h3&gt;

&lt;p&gt;One of my favorite features is the sub-agent system. You can break complex tasks into small pieces and distribute them to expert agents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;researchAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Researcher&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Research topics thoroughly using web search&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;webSearchTool&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;writerAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Writer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Write engaging content based on research&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;contentGenerator&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;coordinator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Coordinator&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Coordinate research and writing tasks&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VercelAIProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;subAgents&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;researchAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;writerAgent&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Automatic delegate_task tool&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Complex workflow in a single call&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;coordinator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Write a blog post about quantum computing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Coordinator will give research to researcher, writing to writer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;:::important&lt;br&gt;
Memory management and tool integration are the foundation of production-ready agents. Without these, you'll hit scaling issues quickly as your application grows.&lt;br&gt;
:::&lt;/p&gt;
&lt;h3&gt;
  
  
  Debugging and Monitoring: Hooks System
&lt;/h3&gt;

&lt;p&gt;One of my favorite features is also the visual console for debugging. I saw this approach for the first time in the framework world. But there's also a hooks system at the code level:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hooks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createHooks&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;onStart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;requestId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`req-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;requestId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;requestId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`[&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] Started: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;requestId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;onToolStart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reqId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;requestId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`[&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reqId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] Tool starting: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;onToolEnd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reqId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;requestId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`[&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reqId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] Tool finished: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;onEnd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reqId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;requestId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`[&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reqId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] Operation complete`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Observable Agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// ... other config&lt;/span&gt;
  &lt;span class="nx"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Full traceability&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This system is very valuable in production. You can trace every tool call, every agent interaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Voice Capabilities
&lt;/h3&gt;

&lt;p&gt;Voice integration is also one of the features we added recently. We have both OpenAI and ElevenLabs support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ElevenLabsVoiceProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@voltagent/voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;voiceProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ElevenLabsVoiceProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ELEVENLABS_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;voice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rachel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Voice Assistant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A helpful voice assistant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VercelAIProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;voice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;voiceProvider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Generate text response&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tell me a short story&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Convert to voice&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;voice&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;audioStream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;voice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Save audioStream to file or play it&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Speech-to-text is there too, you can convert audio inputs to text.&lt;/p&gt;

&lt;h3&gt;
  
  
  VoltOps Platform Experience
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;span class="c"&gt;# ══════════════════════════════════════════════════&lt;/span&gt;
&lt;span class="c"&gt;# VOLTAGENT SERVER STARTED SUCCESSFULLY&lt;/span&gt;
&lt;span class="c"&gt;# ══════════════════════════════════════════════════&lt;/span&gt;
&lt;span class="c"&gt;# ✓ HTTP Server: http://localhost:3141&lt;/span&gt;
&lt;span class="c"&gt;# VoltOps Platform: https://console.voltagent.dev&lt;/span&gt;
&lt;span class="c"&gt;# ══════════════════════════════════════════════════&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkn14dttj80jlk8h2jpz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkn14dttj80jlk8h2jpz.gif" alt="VoltOps LLM Observability Platform Chat Example" width="600" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the console you can do real-time conversation monitoring, tool execution tracing, memory state inspection, performance metrics, error debugging. Debugging has never been this fun.&lt;/p&gt;

&lt;p&gt;The best part is, all these features are &lt;strong&gt;composable&lt;/strong&gt;. You can use whatever combination you want - just memory, just tools, just voice, or all of them together. The framework doesn't force you into anything but everything is ready when you need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real World Examples
&lt;/h2&gt;

&lt;p&gt;Examples from the community are really inspiring. Like an e-commerce customer support bot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;supportAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;support-bot&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;E-commerce customer support, can track orders&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;orderLookupTool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;refundProcessTool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;humanHandoffTool&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ConversationMemory&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This system achieved 35% less human escalation, 60% faster response time, 24/7 availability.&lt;/p&gt;

&lt;p&gt;A developer made a repository analysis tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;codeAnalyzer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;code-analyzer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Analyze repository, make suggestions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;githubConnector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;codeQualityAnalyzer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;documentationChecker&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Their feedback was: &lt;em&gt;"I made a production-ready tool in 3 days, normally it would take weeks!"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A company also set up a RAG system for their documentation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;retrieverAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;document-finder&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Find relevant documents from vector DB&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;vectorSearchTool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rankingTool&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;responderAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;answer-generator&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Create detailed answer using context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;subAgents&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;retrieverAgent&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Performance and Cost Reality
&lt;/h2&gt;

&lt;h4&gt;
  
  
  warning
&lt;/h4&gt;

&lt;p&gt;LLM costs can escalate quickly in production. A single poorly optimized agent can burn through hundreds of dollars per day. Always implement cost monitoring from day one.&lt;/p&gt;

&lt;p&gt;AI services are expensive, let's not forget that. But you can save serious money with the right optimizations. You can filter unnecessary tokens with smart context compression, you don't make API calls again for the same questions with response caching, you combine operations with batch processing.&lt;/p&gt;

&lt;p&gt;My favorite feature is intelligent model selection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;adaptiveAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;smart-agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;adaptiveModel&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;simple&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Simple tasks&lt;/span&gt;
    &lt;span class="na"&gt;complex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Complex reasoning&lt;/span&gt;
    &lt;span class="na"&gt;coding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;claude-3-5-sonnet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Code writing&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Typical results are around 30-50% token savings.&lt;/p&gt;

&lt;p&gt;Scaling challenges exist too of course. Memory management becomes difficult when thousands of agents run simultaneously, you need to be careful not to exceed provider API limits, the system should continue when an agent fails. To solve these, you need systems like connection pooling, circuit breaker pattern, automatic retry, graceful degradation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community and Ecosystem
&lt;/h2&gt;

&lt;p&gt;The most valuable asset of frameworks is their community. Open source frameworks have these advantages: community contributions, transparency, customization freedom, no vendor lock-in. Commercial solutions offer professional support, enterprise features, SLA guarantees.&lt;/p&gt;

&lt;p&gt;In Voltagent for example, MCP integration came from the community, now it's a core feature. Voice improvements, provider extensions, real-world examples - all community contributions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Trends
&lt;/h2&gt;

&lt;p&gt;Multi-modal agents are coming - text + vision + audio capabilities are combining. There's an autonomous learning trend - agents improving themselves. Agent-to-agent communication will become widespread, we'll see cross-organization agent networks. Edge deployment is also growing - lightweight agents running in browsers. No-code builders are developing for non-technical users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Tips
&lt;/h2&gt;

&lt;p&gt;When choosing a framework, start small, test with a pilot project. Evaluate the community - how are documentation, support, examples? Think about migration path - how hard will it be if you need to change frameworks?&lt;/p&gt;

&lt;p&gt;Build a simple chatbot first, then gradually add memory, tools, and multi-agent features. This approach helps you understand each component before building complex systems.&lt;/p&gt;

&lt;p&gt;During development give specific instructions - not "do everything", but clear tasks. Apply single responsibility principle in tool design. Think about your memory strategy - how much context, how long? Don't neglect error handling - graceful failures, user experience is important.&lt;/p&gt;

&lt;p&gt;When going to production don't forget monitoring setup - metrics, alerting, debugging. Keep API costs under control with rate limiting. Don't neglect security - input validation, output filtering. Do load testing, performance optimization for scalability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The AI agent space is evolving rapidly. What you build today should be flexible enough to adapt to new models, capabilities, and paradigms that will emerge in the coming months.&lt;/p&gt;

&lt;p&gt;LLM Agent Framework aren't just a technology. They're building the foundation of AI-first software development. By the end of 2025, every software company will have AI agents, LLM agent frameworks will become part of the standard development stack, multi-modal interaction will become normal, cost/performance ratio will improve dramatically.&lt;/p&gt;

&lt;p&gt;To get started, research existing frameworks - Voltagent, LangChain, AutoGen and others. Try with a small pilot project. Read documentation, check examples, join communities. Test with real users.&lt;/p&gt;

&lt;p&gt;This post is just the beginning. AI agent technology is developing so fast that in 6 months there will be new trends, new frameworks, new possibilities. What matters is being part of this transformation.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>llm</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What is Vercel AI SDK?</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Thu, 29 May 2025 09:10:01 +0000</pubDate>
      <link>https://forem.com/voltagent/what-is-vercel-ai-sdk-54ak</link>
      <guid>https://forem.com/voltagent/what-is-vercel-ai-sdk-54ak</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We all want to add those smart, cool features to our apps, but sometimes the tech side war can get a bit much for all of us. That's where tools like Vercel AI SDK come in, and I wanted to share a few notes on how they can simplify things. When I first looked into it, the practical solutions it offered really caught my eye.&lt;/p&gt;
&lt;h3&gt;
  
  
  A Quick Look at Vercel AI SDK
&lt;/h3&gt;

&lt;p&gt;So, in a nutshell, Vercel AI SDK is a library aimed at making it easier to build AI-powered user interfaces and apps. Its main goal is to make working with Large Language Models (LLMs) and other AI models smoother and more manageable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Basically, instead of wrestling with complex APIs and endless configs, it offers a more developer-friendly approach.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;
  
  
  When to Use What
&lt;/h4&gt;

&lt;p&gt;If you're building simple AI features like a chat interface or text completion, Vercel AI SDK alone might be enough. But for more complex, autonomous agents that need memory and advanced decision-making, consider combining it with VoltAgent as we'll discuss later.&lt;/p&gt;

&lt;p&gt;Of course, if your goal is to build more comprehensive, autonomous AI agents that can make their own decisions, then frameworks like VoltAgent are also worth checking out. I'll get to that in a bit.&lt;/p&gt;
&lt;h3&gt;
  
  
  What's Vercel AI SDK Got to Offer?
&lt;/h3&gt;

&lt;p&gt;So, what makes Vercel AI SDK so interesting for us developers? Let's take a closer look at some of its standout features:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk12vmhppwsp5zvm48l4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk12vmhppwsp5zvm48l4d.png" alt=" " width="800" height="904"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Broad Model Support and Flexibility&lt;/strong&gt;&lt;br&gt;
One of its biggest pluses, I think, is that it lets you work with popular model providers like OpenAI, Anthropic, Google Gemini, and Hugging Face through a single API. This saves you the hassle of dealing with different SDKs and integrations for each model.&lt;/p&gt;

&lt;p&gt;This kind of standardization can be a real time-saver in development. It usually auto-detects API keys like &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; or &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; that you define in your &lt;code&gt;.env&lt;/code&gt; files or system environment variables and sets up the connection. Easy peasy.&lt;/p&gt;

&lt;p&gt;:::note API Key Management&lt;br&gt;
Vercel AI SDK will automatically look for environment variables like &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; or &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;. Make sure these are properly set in your development environment or deployed application.&lt;br&gt;
:::&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Streaming and Ease of Use&lt;/strong&gt;&lt;br&gt;
You know how important streaming responses from AI is for user experience, especially in chat apps. Vercel AI SDK provides tools to make this easier.&lt;/p&gt;

&lt;p&gt;It supports streaming not just text, but also structured data like JSON. Plus, if you're working with frameworks like Next.js, the React hooks and helper functions like &lt;code&gt;useChat&lt;/code&gt; and &lt;code&gt;useCompletion&lt;/code&gt; provided by Vercel AI SDK make building common AI interactions like chat and autocomplete on the UI side pretty straightforward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Other Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;generateText&lt;/code&gt; / &lt;code&gt;streamText&lt;/code&gt;&lt;/strong&gt;: These are the basic functions for text-based interactions and instant responses. Core stuff for Vercel AI SDK.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;generateObject&lt;/code&gt; / &lt;code&gt;streamObject&lt;/code&gt;&lt;/strong&gt;: Super useful when you need to generate structured data (like JSON). It works integrated with schema definition libraries like Zod, so you can get the model to produce data in a specific structure. This can be a lifesaver, especially for data extraction or scenarios requiring formatted output. Keep in mind, support for these functions might depend on the capabilities of the underlying model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function Calling&lt;/strong&gt;: Compatible models can call predefined external functions or tools, which seriously boosts the agents' capabilities. For example, an agent can fetch data from an external API or perform an action this way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-modal Support&lt;/strong&gt;: It also supports models that can process inputs in different formats, not just text, like images. Vercel AI SDK passes these multi-modal message structures to the underlying model if it supports them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provider-Specific Options&lt;/strong&gt;: Sometimes, even when you're using a higher-level tool like VoltAgent, you might want to use a very specific parameter offered by Vercel AI SDK or a specific model provider underneath it (like OpenAI). Vercel AI SDK gives you the flexibility to pass these provider-specific options (under the &lt;code&gt;provider&lt;/code&gt; object) directly to the underlying SDK functions during calls. This means more fine-tuning and control for you.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Performance Tip
&lt;/h4&gt;

&lt;p&gt;When using features like &lt;code&gt;streamObject()&lt;/code&gt; with large response structures, consider implementing progressive UI rendering to maintain responsiveness, as the validation process might cause slight delays in complex response schemas.&lt;/p&gt;

&lt;p&gt;So yeah, the speed, flexibility, and ease of use that Vercel AI SDK offers developers probably explain why it's become so popular.&lt;/p&gt;
&lt;h2&gt;
  
  
  VoltAgent: For Building More Advanced AI Agents
&lt;/h2&gt;

&lt;p&gt;Now let's talk a bit about &lt;a href="https://github.com/VoltAgent/voltagent/" rel="noopener noreferrer"&gt;&lt;strong&gt;VoltAgent&lt;/strong&gt;.&lt;/a&gt; While Vercel AI SDK makes interacting with LLMs easier, VoltAgent is a TypeScript framework designed for creating more complex and autonomous AI agents. With VoltAgent, you can develop agents that can perform specific tasks, make decisions, and interact with various tools.&lt;/p&gt;
&lt;h3&gt;
  
  
  Core Components of VoltAgent
&lt;/h3&gt;

&lt;p&gt;At the heart of VoltAgent is the &lt;code&gt;Agent&lt;/code&gt; class, which defines the agent's behaviors and capabilities. An agent basically consists of these components: instructions (defining the agent's purpose and behavior), an LLM Provider (managing communication with the model), and, of course, the specific model to be used.&lt;/p&gt;

&lt;p&gt;There are also some additional features that make VoltAgent particularly powerful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt;: Allow agents to interact with the outside world, use APIs, or gather data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt;: Stores conversation history or important information to provide more consistent and context-aware interactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-Agents&lt;/strong&gt;: Allows complex tasks to be broken down and delegated to smaller, specialized agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Providers&lt;/strong&gt;: These are the interfaces that define how VoltAgent communicates with different LLM services. And this is where our integration with Vercel AI SDK comes into play.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  VoltAgent and Vercel AI SDK Working Together
&lt;/h3&gt;

&lt;p&gt;The integration between VoltAgent and Vercel AI SDK is handled quite elegantly through the &lt;code&gt;@voltagent/vercel-ai&lt;/code&gt; Provider. This provider acts as a bridge between VoltAgent and Vercel AI SDK, allowing VoltAgent agents to easily use Vercel AI SDK's core functions like &lt;code&gt;generateText&lt;/code&gt;, &lt;code&gt;streamText&lt;/code&gt;, and &lt;code&gt;generateObject&lt;/code&gt;. If you're curious about the details, you can check out our documentation in the &lt;code&gt;website/docs/providers/vercel-ai.md&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So How Does This Integration Work in Practice?&lt;/strong&gt;&lt;br&gt;
When you create an &lt;code&gt;Agent&lt;/code&gt; with VoltAgent, you use an instance of &lt;code&gt;VercelAIProvider&lt;/code&gt; as the LLM provider and Vercel AI SDK's model definition functions (e.g., &lt;code&gt;openai("gpt-4o")&lt;/code&gt; via &lt;code&gt;@ai-sdk/openai&lt;/code&gt;) for the model. This way, model selection and management are done according to Vercel AI SDK's standards.&lt;/p&gt;

&lt;p&gt;Below is a basic code example from our VoltAgent documentation that shows this integration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@voltagent/core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;VercelAIProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@voltagent/vercel-ai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Model definitions come from Vercel AI SDK's respective packages&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@ai-sdk/openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// If you want to use a different model, for example Anthropic:&lt;/span&gt;
&lt;span class="c1"&gt;// import { anthropic } from "@ai-sdk/anthropic";&lt;/span&gt;

&lt;span class="c1"&gt;// An example agent using an OpenAI model via Vercel AI SDK&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Vercel Powered Assistant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;This assistant uses an OpenAI model via Vercel AI SDK.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VercelAIProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="c1"&gt;// The Vercel AI Provider&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;// OpenAI model defined with Vercel AI SDK&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Now you can call methods like generateText, streamText on this 'agent' instance&lt;/span&gt;
&lt;span class="c1"&gt;// using the Vercel AI SDK infrastructure.&lt;/span&gt;
&lt;span class="c1"&gt;// For example:&lt;/span&gt;
&lt;span class="c1"&gt;// async function testAgent() {&lt;/span&gt;
&lt;span class="c1"&gt;//   const response = await agent.generateText("Hello, world!");&lt;/span&gt;
&lt;span class="c1"&gt;//   console.log(response.text);&lt;/span&gt;
&lt;span class="c1"&gt;// }&lt;/span&gt;
&lt;span class="c1"&gt;// testAgent();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Installation Note
&lt;/h4&gt;

&lt;p&gt;Don't forget to install both packages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @voltagent/core @voltagent/vercel-ai @ai-sdk/openai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And ensure you have the appropriate API keys in your environment.&lt;/p&gt;

&lt;p&gt;As you can see in this example, an &lt;code&gt;Agent&lt;/code&gt; can be easily configured using &lt;code&gt;VercelAIProvider&lt;/code&gt; and Vercel AI SDK's model definition functions (&lt;code&gt;openai&lt;/code&gt;, &lt;code&gt;anthropic&lt;/code&gt;, etc.). This allows you to combine VoltAgent's agent capabilities with Vercel AI SDK's model variety and ease of use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Are the Advantages of This Integration for Us Developers?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy access to the wide range of models supported by Vercel AI SDK through VoltAgent.&lt;/li&gt;
&lt;li&gt;Leveraging Vercel AI SDK's powerful capabilities for text and structured data generation within VoltAgent.&lt;/li&gt;
&lt;li&gt;Easier integration of features like multi-modal support into VoltAgent agents with Vercel AI SDK's backing.&lt;/li&gt;
&lt;li&gt;And of course, our documentation at &lt;a href="https://voltagent.dev/docs/providers/vercel-ai/" rel="noopener noreferrer"&gt;&lt;code&gt;Vercel AI Provider docs&lt;/code&gt;&lt;/a&gt; serves as a practical example of this integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Use Cases
&lt;/h3&gt;

&lt;p&gt;We can think of a few scenarios where this integration can be practically useful:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example 1: Chat Applications with Streaming Responses&lt;/strong&gt;&lt;br&gt;
If you're developing a chatbot for customer service or information queries, providing quick and streaming responses to user questions is crucial. By using VoltAgent with &lt;code&gt;VercelAIProvider&lt;/code&gt; and leveraging the &lt;code&gt;streamText&lt;/code&gt; feature, you can ensure that responses flow to the user instantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example 2: Extracting Structured Data from Text&lt;/strong&gt;&lt;br&gt;
Let's say you need to extract specific information (like keywords from an article or technical specs from a product description) from long texts into a structured format like JSON. VoltAgent can help you automate such tasks by using Vercel AI SDK's &lt;code&gt;generateObject&lt;/code&gt; capability and schema definition tools like Zod.&lt;/p&gt;

&lt;h4&gt;
  
  
  Common Integration Pitfall
&lt;/h4&gt;

&lt;p&gt;When working with schema validation in &lt;code&gt;generateObject&lt;/code&gt;, avoid overly complex nested schemas in your initial implementation. Start with simpler structures and gradually build complexity, as deeply nested objects can sometimes cause validation errors that are difficult to debug.&lt;/p&gt;

&lt;p&gt;Also, as we mentioned in our Vercel AI Provider file, it's also possible to pass specific configuration options (provider-specific options) for Vercel AI SDK through VoltAgent if you need to. This gives you flexibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  A General Assessment
&lt;/h3&gt;

&lt;p&gt;In short, Vercel AI SDK offers a really useful toolkit for modern AI application development. It saves us all time by simplifying interactions with LLMs. VoltAgent, on the other hand, provides a platform to build more complex and autonomous AI agents on top of this solid foundation. The combination of these two tools offers us developers quite a wide range of possibilities for creating various AI solutions.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Next? And What's This About AI SDK 5
&lt;/h3&gt;

&lt;p&gt;The Vercel team recently announced &lt;strong&gt;AI SDK 5&lt;/strong&gt; - a complete redesign of the SDK's protocol and architecture. Based on two years of real-world usage, they've rebuilt the foundation to better support today's more complex LLM capabilities.&lt;/p&gt;

&lt;h4&gt;
  
  
  What's New in AI SDK 5
&lt;/h4&gt;

&lt;p&gt;AI SDK 5 represents a fundamental redesign based on real-world usage. The original protocol was designed when LLMs mainly generated text or tool calls, but today's models can generate reasoning, sources, images, and much more. The new protocol is designed to support these advanced capabilities and emerging use cases like computer-using agents.&lt;/p&gt;

&lt;p&gt;Why the change? Simply put, the LLM landscape has evolved dramatically. Modern models do far more than just text generation - they reason, cite sources, create visuals, and even control computers. The old architecture wasn't designed for these capabilities, so a fresh start was needed.&lt;/p&gt;

&lt;h4&gt;
  
  
  warning: Migration Considerations
&lt;/h4&gt;

&lt;p&gt;If you're already using Vercel AI SDK v3/v4 and planning to upgrade to v5, be prepared for breaking changes. The protocol has been completely redesigned, so you'll need to update your integration code. Consider creating a migration plan and testing thoroughly before deploying to production.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>Building a Data-Aware Chatbot with VoltAgent and Peaka</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Tue, 27 May 2025 06:44:29 +0000</pubDate>
      <link>https://forem.com/voltagent/building-a-data-aware-chatbot-with-voltagent-and-peaka-lma</link>
      <guid>https://forem.com/voltagent/building-a-data-aware-chatbot-with-voltagent-and-peaka-lma</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this article, I'll demonstrate how we can use the Model Context Protocol (MCP) by integrating &lt;strong&gt;VoltAgent&lt;/strong&gt; and &lt;strong&gt;Peaka&lt;/strong&gt; to create an AI agent with data retrieval capabilities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/VoltAgent/voltagent/tree/main/examples/with-peaka-mcp" rel="noopener noreferrer"&gt;Refer to example project built in this post.&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Wait, What's Peaka?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtuu2pskerj45t1we7pb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtuu2pskerj45t1we7pb.png" alt=" " width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Right, before I show you the code stuff, let me tell you about &lt;a href="https://www.peaka.com/" rel="noopener noreferrer"&gt;Peaka&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Their idea is pretty simple: make it less annoying to work with data. Think of it like a data middleman. You hook up your databases, spreadsheets, whatever, to Peaka. Then you can ask it questions (using fancy SQL code or just regular English), and it pulls the info together from all those places for you.&lt;/p&gt;

&lt;p&gt;Usually, connecting different data sources is a real pain and costs a lot. Peaka feels like a simpler option, especially if you're not a huge company or just don't want to mess with complicated data pipelines. They wanna be the easy button for getting data.&lt;/p&gt;
&lt;h2&gt;
  
  
  And VoltAgent?
&lt;/h2&gt;

&lt;p&gt;It's our toolkit for putting together AI powered applications. We provide the core engine (&lt;code&gt;@voltagent/core&lt;/code&gt;) to get you started, and then you can add extra capabilities, like voice interaction (&lt;code&gt;@voltagent/voice&lt;/code&gt;) or support for different LLMs (OpenAI, Google, etc.). VoltAgent handles the complex stuff (like history and tool connections) so you can focus on your agent's unique features.&lt;/p&gt;

&lt;p&gt;We designed VoltAgent to hit a nice sweet spot. It gives you more helpful structure than trying to build everything from raw AI libraries, but it offers a lot more freedom and customization than the simpler no-code platforms out there.&lt;/p&gt;

&lt;p&gt;We also built the &lt;a href="https://console.voltagent.dev" rel="noopener noreferrer"&gt;VoltAgent Console&lt;/a&gt; a web interface that lets you monitor your agents, see exactly how they're working, and chat with them directly. We find it incredibly useful ourselves for debugging and testing!&lt;/p&gt;
&lt;h2&gt;
  
  
  Making My Agent Talk to Peaka
&lt;/h2&gt;

&lt;p&gt;Okay, so my plan was: build a chatbot with VoltAgent that could answer questions by checking data in Peaka.&lt;/p&gt;

&lt;p&gt;To make these two talk, I used something called &lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt;. It sounds fancy, but it's basically just a standard way for different programs to give each other tasks. If you wanna know more, I wrote about &lt;a href="https://voltagent.dev/blog/what-is-mcp/" rel="noopener noreferrer"&gt;what MCP is over here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For this project, it lets VoltAgent tell Peaka, "Hey, go run this data query!"&lt;/p&gt;

&lt;p&gt;To follow along, you'll want to sign up for a free Peaka account first over at &lt;a href="https://www.peaka.com/" rel="noopener noreferrer"&gt;https://www.peaka.com/&lt;/a&gt;. For this example, I'm just using the sample data they provide, which you'll have access to once you sign up.&lt;/p&gt;

&lt;p&gt;Here's how I did it.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Starting a New VoltAgent Project
&lt;/h3&gt;

&lt;p&gt;First up, I needed a blank VoltAgent project. Their setup tool makes this easy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create voltagent-app@latest my-peaka-agent
&lt;span class="c"&gt;# Answer the questions it asks&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;my-peaka-agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That just makes a folder with the basic files I need to get started.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Telling VoltAgent About Peaka (The MCP Bit)
&lt;/h3&gt;

&lt;p&gt;This is where the magic happens. I had to edit the main code file (&lt;code&gt;src/index.ts&lt;/code&gt;) to tell VoltAgent how to find and talk to the Peaka tool using MCP.&lt;/p&gt;

&lt;p&gt;This is the key chunk of code I put in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/index.ts&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;VoltAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;MCPConfiguration&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@voltagent/core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;VercelAIProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@voltagent/vercel-ai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Using Vercel's helper stuff for the AI&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@ai-sdk/openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// And using OpenAI's model&lt;/span&gt;

&lt;span class="c1"&gt;// 1. Set up the connection to the Peaka MCP tool&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MCPConfiguration&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;peaka-mcp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Just a nickname for this setup&lt;/span&gt;
  &lt;span class="na"&gt;servers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Here's the info for the Peaka tool&lt;/span&gt;
    &lt;span class="na"&gt;peaka&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stdio&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Means it runs like a command-line program&lt;/span&gt;
      &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;npx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// The command to start it&lt;/span&gt;
      &lt;span class="c1"&gt;// npx is neat, it grabs the latest Peaka MCP tool automatically&lt;/span&gt;
      &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;-y&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@peaka/mcp-server-peaka@latest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="c1"&gt;// Gotta give it my Peaka API key (stored safely elsewhere!)&lt;/span&gt;
      &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;PEAKA_API_KEY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PEAKA_API_KEY&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// 2. Find out what the Peaka tool can actually *do*&lt;/span&gt;
&lt;span class="c1"&gt;// (Need this `async` stuff because it takes a moment to connect)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Ask the MCP connection: "What tools does Peaka give us?"&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getTools&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// 3. Create our actual chatbot agent&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Peaka Data Agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I can look things up in Peaka's data.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VercelAIProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="c1"&gt;// Which AI service to use&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;// Which specific AI brain&lt;/span&gt;
    &lt;span class="nx"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// &amp;lt;-- Super important! Give the agent the tools from Peaka!&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// 4. Fire up VoltAgent&lt;/span&gt;
  &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VoltAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;agents&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// Make our agent live&lt;/span&gt;
      &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;VoltAgent is running with Peaka powers!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, what's happening here?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;&lt;code&gt;MCPConfiguration&lt;/code&gt;&lt;/strong&gt;: I'm telling VoltAgent, "There's this Peaka tool you can run. Use &lt;code&gt;npx&lt;/code&gt; to find the &lt;code&gt;@peaka/mcp-server-peaka&lt;/code&gt; thing, and give it my API key when you run it." The &lt;code&gt;stdio&lt;/code&gt; part just means it runs like a regular program on my computer.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;&lt;code&gt;mcp.getTools()&lt;/code&gt;&lt;/strong&gt;: This is the clever bit. VoltAgent starts the Peaka tool and then asks it, "What can you do?" Peaka sends back a list of its abilities (like querying data).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;&lt;code&gt;new Agent(...)&lt;/code&gt;&lt;/strong&gt;: I'm making the chatbot itself. I give it a name, tell it what AI brain to use (&lt;code&gt;gpt-4o-mini&lt;/code&gt;), and crucially, pass in those &lt;code&gt;tools&lt;/code&gt; I got from Peaka. Now the chatbot knows it has these extra data powers.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;&lt;code&gt;new VoltAgent(...)&lt;/code&gt;&lt;/strong&gt;: This just starts the main VoltAgent system with my new agent included.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before running, I needed my API keys. I made a file called &lt;code&gt;.env&lt;/code&gt; in the project folder and put them in there:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//".env"

PEAKA_API_KEY=your_secret_peaka_key
# Don't forget your OpenAI key!
OPENAI_API_KEY=your_secret_openai_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Use your real keys, obviously! Keep 'em secret!)&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Running It and Asking Stuff
&lt;/h3&gt;

&lt;p&gt;Okay, code's ready, keys are in place. Time to run it!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My terminal showed VoltAgent starting up, and it also started the Peaka tool automatically in the background. I saw something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;══════════════════════════════════════════════════
  VOLTAGENT SERVER STARTED SUCCESSFULLY
══════════════════════════════════════════════════
  ✓ HTTP Server: http://localhost:3141

  Developer Console:    https://console.voltagent.dev
══════════════════════════════════════════════════
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the fun test:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; I popped open the &lt;a href="https://console.voltagent.dev" rel="noopener noreferrer"&gt;VoltAgent Console&lt;/a&gt; in my browser.&lt;/li&gt;
&lt;li&gt; Found my agent ("Peaka Data Assistant").&lt;/li&gt;
&lt;li&gt; Opened the chat window.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Asked it something that needed data from Peaka, maybe like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Hey, what was my Stripe balance yesterday?"&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's the cool part of what goes on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The chatbot AI gets my question.&lt;/li&gt;
&lt;li&gt;It figures out I need data and sees it has that Peaka tool.&lt;/li&gt;
&lt;li&gt;It decides to use the tool.&lt;/li&gt;
&lt;li&gt;VoltAgent sends the request over to the Peaka tool (using MCP).&lt;/li&gt;
&lt;li&gt;The Peaka tool does its thing, querying my actual Stripe data (or whatever I connected).&lt;/li&gt;
&lt;li&gt;Peaka sends the answer back to VoltAgent.&lt;/li&gt;
&lt;li&gt;VoltAgent gives the raw answer back to the chatbot AI.&lt;/li&gt;
&lt;li&gt;The AI turns that raw data into a normal sentence and shows it to me in the chat.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Getting Peaka hooked up to my VoltAgent bot with MCP wasn't too bad! It's pretty awesome to have a chatbot that can actually use real-time data from different places. I can see this being useful for building smarter internal tools, helpdesk bots that know current info, or anything where the AI needs to know more than just what it was trained on.&lt;/p&gt;

&lt;p&gt;Definitely worth playing around with if you're building AI stuff!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What is LLM Orchestration?</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Mon, 26 May 2025 06:11:33 +0000</pubDate>
      <link>https://forem.com/voltagent/what-is-llm-orchestration-1b5e</link>
      <guid>https://forem.com/voltagent/what-is-llm-orchestration-1b5e</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;If you look around, it's pretty much impossible not to have heard something about AI, especially these Large Language Models (LLMs), right? As if you knew these GPTs, Llamas, Claudes, and all that. As if these have already become part of our lives.&lt;/p&gt;

&lt;p&gt;It's lovely to ask an LLM one question and get one answer. But how about giving it your entire customer support operation? Or asking it to handle a big research project from beginning to end? This is where a standalone LLM, no matter how smart, falls a little short. It's like having a super-powerful brain but no arms or legs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Let me make an analogy
&lt;/h3&gt;

&lt;p&gt;A single LLM is like a wonderful solo musician. It can perform wonders. But sometimes you require a symphony-an &lt;em&gt;orchestra&lt;/em&gt; where various instruments play in coordination with each other in perfect harmony. That is precisely what LLM Orchestration is!&lt;/p&gt;

&lt;p&gt;And &lt;em&gt;right at this critical point&lt;/em&gt;, in comes &lt;strong&gt;LLM Orchestration&lt;/strong&gt;. No more just whispering things to an LLM; it is making it talk to a bunch of other tools and data sources and even other LLMs to perform bigger, more complex, and more &lt;em&gt;useful&lt;/em&gt; tasks.&lt;/p&gt;

&lt;p&gt;In this post, we're going to break down this "LLM Orchestration" thing for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's This LLM Orchestration Thing Everyone's Talking About?
&lt;/h2&gt;

&lt;p&gt;Okay, we're tossing the term "orchestration" around and all that, but what is it, actually? Let me try defining it in the simplest way:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM Orchestration&lt;/strong&gt; is basically the art of &lt;em&gt;intelligently coordinating and managing&lt;/em&gt; one or more LLM calls with other third-party tools (whether it's a search engine, a database, or maybe an API you built yourself), data sources, and other software components.&lt;/p&gt;

&lt;p&gt;So you hand an LLM and say: "Listen, pal, this is your assignment. But in order to finish off that assignment, you would utilize this tool there, fetch that data from there, then take the result and pass it on to this other LLM that will mold it like so."&lt;br&gt;
It's all about instructional flow management.&lt;/p&gt;

&lt;h3&gt;
  
  
  Think about it:
&lt;/h3&gt;

&lt;p&gt;An orchestrator is similar to a chef at a restaurant. They have great ingredients; the LLMs are amazing, yet they need to also direct the other tools in the kitchen, knives, ovens – our "tools" – and other cooks, possibly other services or LLMs, to prepare a delicious meal, the successful outcome. No one would work like this, right?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihqavlhki9crx14pxmk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihqavlhki9crx14pxmk6.png" alt="supervisor" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, what is the key point here?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To break down &lt;strong&gt;the big and complicated problems into smaller, bite-sized pieces&lt;/strong&gt; that LLMs can handle.&lt;/li&gt;
&lt;li&gt;To enhance the wonderful language capabilities of LLMs with &lt;strong&gt;real world-knowledge and actions&lt;/strong&gt;. And let's be honest, LLMs don't know everything or can't do everything. &lt;em&gt;yet&lt;/em&gt;.
-To build even more &lt;strong&gt;trustworthy, consistent-and-most importantly "stateful"&lt;/strong&gt; (the ability to "remember" the situation) AI applications. That is, make systems that do not leave a conversation midway and say, "what are we talking about?" and can remember context. That's probably one of the most important points for me because in my very first experiences playing around with LLMs, that "memorylessness" really drove me nuts!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, thanks to orchestration, LLMs no longer remain simple machines that produce theoretical knowledge and become more sophisticated assistants capable of performing practical tasks. Is the picture clearer now?&lt;/p&gt;

&lt;h2&gt;
  
  
  But Why Bother? Aren't LLMs Good Enough on Their Own?
&lt;/h2&gt;

&lt;p&gt;Now, some of you may ask, "Hey, aren't those LLMs quite already smart enough? Why bother with all these chains, tools and stuff, making things even more complicated?" Indeed, LLMs achieve incredible things on their own. However, real world problems may quite often result in a "devil is in the details" situation.&lt;/p&gt;

&lt;p&gt;Some Key Points Where LLMs Alone Can Struggle and Orchestration is We Give It a Call "Must Have":&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;The Memory Issue and That Forgetfulness!&lt;/strong&gt;
They have a "context window." They can remember only a certain part of a conversation or text in their "mind." If the conversation gets a little too long, and the text to be analyzed is huge, they might forget the things at the very beginning. You know when you're telling your friend something and then five minutes later they're like, "What did you say again?" Sort of like that. &lt;em&gt;I have to admit, I was quite disappointed when first I encountered this. I felt really like speaking with a different person each time.&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- **What Orchestration Does:** That is where it comes in and manages the conversation history. If necessary, it summarizes the old data and reminds the LLM, or splits long texts into pieces, gets each piece analyzed separately, and then combines the outcomes together. In short, it expands the LLM's "memory."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Real-World Knowledge and the Up-to-Date Problem: "I Only Know Things Up to September 2021."&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most LLMs are trained up until a specific date. So, you cannot expect it to know about yesterday's headlines, the latest technologies, or your business's most recent product prices. In case you ask it, "What is the weather today?" it would probably say something like, "I do not know beyond my cut-off date."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What Orchestration Does: It connects the LLM to the external world!&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This also feeds in the latest and freshest flow of information to the LLM via "tools" like search engines, news APIs, or databases within the company.&lt;/p&gt;

&lt;p&gt;It can even further allow it to &lt;em&gt;act&lt;/em&gt; by having the LLM act with such tools, such as sending an email or creating a calendar event. They have so cool names for this, like "Retrieval Augmented Generation," which, I think is one of the most revolutionary things.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Complex Tasks and Step-by-Step Thinking Ability&lt;/strong&gt;
LLMs are excellent at text generation, sure. But if you present them with a multi-step, complicated task such as "Make a business plan for me, analyze the risks for this plan, and prepare presentation slides," they can get stuck sometimes. Even if they complete each step flawlessly, they may not be able to link these steps together in a logical flow.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What Orchestration Does :&lt;/strong&gt; Well, here come the "chains" and the "agents".
The huge, hard job will be divided up into smaller, tractable sub-lets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An LLM does its thing, that output feeds in to be an input for the next thing, maybe another LLM or a tool comes in at that point. That's what that factory assembly line did: each station did their piece, and at the end, this finished product. When first exposed to using agents, I felt like I had literally given the LLM a brain and a bunch of arms and legs!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Consistency and Reliability: "What Will It Say This Time?"&lt;/strong&gt;
LLM responses sometimes tend to be a bit. variable. You may get two entirely different answers if you ask the same question twice, once today and once tomorrow. While this may be a wonderful feature for creative tasks, it becomes quite a pain when you want consistency and accuracy.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What Orchestration Does:&lt;/strong&gt; It can arrange for mechanisms that verify the outputs ensuring that, for example, the response from the LLM is in the right format or even ask the LLM to repeat the question with a different approach if the answer doesn't do justice. In other words, it tries to reduce those "I wonder" moments.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cost and Performance: Every Click is Gold!&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Operating LLMs, most especially the big and powerful ones, is not cheap, in the first place. Every API call is going to be an arm and a leg. If you are generating dozens of LLM calls just to wastefully do some task, both your bill increases, and your application slows down.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What Orchestration Does:&lt;/strong&gt; it optimizes the calls. Either probably to some easy tasks it is dealing with a more trivial, rule based rather than querying the LLM. Or maybe it is caching results of oft used things so that it doesn't trouble the LLM again and again. In other words, it considers both your time and pocket.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Important Note:
&lt;/h3&gt;

&lt;p&gt;LLMs are not magic wands. They are great tools, of course, but they are no panacea. The key to their successful use is knowing what they are good at and what they are not, and supplementing the weaknesses with intelligent approaches such as orchestration.&lt;/p&gt;

&lt;p&gt;You can sense that orchestration is far from any "add-on." In fact, it's often a &lt;em&gt;requirement&lt;/em&gt; to make LLMs actually powerful and useful applications. So, what does this thing called orchestration comprise? What are the building blocks that come together to create magic?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Basics of LLM Orchestration: Chains, Agents, Memory, and More!
&lt;/h2&gt;

&lt;p&gt;Excellent, we understand why orchestration is such a key thing. So, how does this system function? What are the fundamental building blocks? Now, let's have a closer look at some of the concepts you'll encounter most frequently, and these will be the crux of it all.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chains: The Dance of LLM Calls
&lt;/h3&gt;

&lt;p&gt;One of the simplest orchestration concepts is called "chains." You string multiple steps together as implied by its name. Those steps could be LLM calls, using a tool, or just about any form of data processing step.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple Chains&lt;/strong&gt;: The most straightforward logic. Ask a question to an LLM, receive its answer, forward that answer to another LLM, receive its answer. and so forth. You could, for instance, first summarize some text and then convert that summary into keywords.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Smarter Chains:&lt;/strong&gt; Add a bit of logic. For example: If the LLM's answer is 'yes,' do this; if 'no,' do that. Or you take multiple results generated by one LLM and tell another LLM, "Choose the best one among these."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;One of my earliest "Aha! All I had just used a chain to get them to classify a user's request with some initial classification and then send it to a specific LLM for that classification. All I had done was get them to share the workload!&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agents &amp;amp; Tools: Letting LLMs Make the Decisions!
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ho5jxsaxegu25ttcoa3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ho5jxsaxegu25ttcoa3.png" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where things get &lt;em&gt;really&lt;/em&gt; interesting. Agents transform LLMs from purely taking commands into creatures that think for themselves, decide how to apply which tool when, and make a plan to reach a goal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What is an Agent? At the heart of an agent is an LLM. This LLM understands the task, thinks over what tools it has, and goes through a thought process very much like, "To achieve this task, I first need to do this, then I ought to use this tool, and with the output from that, I should do that."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What Can Tools Be?&lt;/strong&gt; Anything you can imagine!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Web Search:&lt;/strong&gt; Searching the internet for up-to-date information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Calculator:&lt;/strong&gt; For mathematical operations. (Yes, LLMs can sometimes mess up even simple math; a calculator tool is a lifesaver!)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code Interpreter:&lt;/strong&gt; See running the code that's generated by the LLM and the result it produces.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Database Querying:&lt;/strong&gt; Retrieving information from your company's database.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API Calls:&lt;/strong&gt; Using the API of any external service, such as the weather, maps, and calendar, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Custom Tools:&lt;/strong&gt; Your own custom-written tools that accomplish some specific task.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ReAct (Reason + Act) Pattern:&lt;/strong&gt; Agents most often apply this very common thought pattern.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The LLM &lt;em&gt;reasons&lt;/em&gt;, like: What should I do? Which tool should I select? Then it &lt;em&gt;acts&lt;/em&gt;-that is to say, applies the tool. Then &lt;em&gt;observes&lt;/em&gt;-looks at what the tool provides and repeats the cycle as long as needed to be done. When I first saw this, I felt like I was literally reading an AI's "inner voice." Very impressive!&lt;/p&gt;

&lt;h3&gt;
  
  
  Imagine an Agent
&lt;/h3&gt;

&lt;p&gt;Suppose that you asked an agent, "Find the lowest fare flight ticket from Los Angeles to San Francisco for tomorrow and send it in my mail." Then the agent might think like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Thought:&lt;/em&gt; "I need to find a flight ticket. For this, I should use the 'flight search' tool."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Action:&lt;/em&gt; Utilizes the flight search tool to look for Los Angeles to San Francisco tickets for tomorrow's date.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Observation:&lt;/em&gt; Receives the results from the tool (a list of flights and prices).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt; "I should select the cheapest one and send e-mail. I should select by price, select the cheapest, and then send the e-mail."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Action:&lt;/em&gt; Selects the cheapest ticket, passing this selection onto the send e-mail function.&lt;br&gt;
And voilà! Ticket information right into your inbox. How cool is that?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory: No More "What Were We Talking About?"&lt;br&gt;
As we said, LLMs have a short memory. "Memory" modules are there to solve this problem. They contextualize the LLM by keeping the record of a process or a conversation.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Conversation Memory&lt;br&gt;
The most common type. This saves all the conversation with the user or important parts of it. Now the LLM can reference earlier steps in the conversation to say something like, "Regarding that X topic you brought up earlier."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Entity Memory:&lt;/strong&gt; Pick up and store important entities mentioned in the conversation (names of people, places, products, etc.) and information related to them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Knowledge Graph Memory:&lt;/strong&gt; The LLM can make deeper inferences by storing even more complex relationships in a graph structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Long-Term Memory with Vector Databases:&lt;/strong&gt; A bit more advanced, but really powerful. You can take any document, old conversation or text data of your interest and convert them into numerical forms called "vector embeddings" and store them in special databases such as Pinecone, Chroma, FAISS, etc. When an LLM gives a response to a question, the database offers the most relevant information, which is incorporated into the response from the database.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is RAG (Retrieval Augmented Generation) itself! It becomes as if your own personal Google.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Ingestion &amp;amp; Retrieval (RAG): Feed LLMs Your Own Information
&lt;/h3&gt;

&lt;p&gt;This is actually very close to the Memory topic, especially the vector databases part. RAG is the key to making LLMs talk to your own private data, company documents, content on your website, or any pool of information.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How the Process Works (Simplified):&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Loading:&lt;/strong&gt; You are loading your own documents (PDF, TXT, HTML etc) in the system&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chunking:&lt;/strong&gt; The inputted data is subdivided into smaller bits.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Creation of Embeddings:&lt;/strong&gt; The text is transformed into a numeric vector, which semantically interprets it with the help of an embedding model, itself an LLM.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stored in Vector Database:&lt;/strong&gt; These vectors and the pieces of text itself are stored inside the vector database.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;When a User Query Comes In:&lt;/strong&gt; - The user's question is also passed through the same embedding model, and a query vector is created.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This question vector is compared against the other vectors stored in the database. The words in the text that are semantically closest-that is, most relevant to the question-are located. These relevant pieces, combined with the user's original question, are input into an LLM as a "prompt."&lt;/p&gt;

&lt;p&gt;The LLM utilizes the question and this additional information to create far more precise, contextually appropriate responses to your data.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;When I first implemented RAG and had an LLM talk to my own notes, I was just blown away. It felt like the LLM became an extension of my brain!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Callbacks &amp;amp; Logging: What's Going On Behind the Scenes?&lt;/p&gt;

&lt;p&gt;As the flows of orchestrations become more complex, questions like "What step are we on now?", "What was the LLM response?", "What tool did we use?" matter a great deal. Callbacks and logging enable you to trace this process, debug issues, and examine performance. Frameworks like LangChain have this built in.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Warning!
&lt;/h4&gt;

&lt;p&gt;If you don't log a complex orchestration flow, finding the problem when something goes wrong is like looking for a needle in a haystack. Setting up a good logging strategy from the start is &lt;em&gt;very important&lt;/em&gt;. Trust me on this!&lt;/p&gt;

&lt;h4&gt;
  
  
  A Quick Analogy
&lt;/h4&gt;

&lt;p&gt;Think of an LLM as a super-smart intern. They can write, summarize, and even code a bit. But to tackle a big project, they need a manager (the orchestrator) to break down tasks, provide the right documents (tools/RAG), help them remember past conversations (memory), and ensure their final work is polished and useful (parsing/output formatting).&lt;/p&gt;

&lt;h3&gt;
  
  
  Dive Deeper: Key Orchestration Concepts in Action
&lt;/h3&gt;

&lt;p&gt;Think of it like this: your LLM is a brilliant chef (GPT-4, Claude, etc.), but it only knows how to cook what's in its recipe book (its training data). If you ask for a dish using ingredients it hasn't seen (recent news, your company's private data), it might struggle or make something up.&lt;/p&gt;

&lt;p&gt;RAG is like giving that chef a tablet connected to a massive, constantly updated grocery database and your personal pantry list. Here's a simplified flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;You Ask a Question:&lt;/strong&gt; "What were our Q3 sales figures for Product X based on the latest internal report?"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Retrieve Relevant Information:&lt;/strong&gt; The LLM retrieves relevant information from the database or external sources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generate Response:&lt;/strong&gt; The LLM uses the retrieved information to generate a response.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt; The response is presented to the user.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's Out There? Popular LLM Orchestration Framework
&lt;/h2&gt;

&lt;p&gt;When it comes to bringing LLM orchestration to life, developers have several powerful frameworks and tools at their disposal. These tools aim to simplify the complexities of building, managing, and monitoring sophisticated AI applications. Popular open-source frameworks like &lt;strong&gt;LangChain&lt;/strong&gt; and &lt;strong&gt;LlamaIndex&lt;/strong&gt; provide comprehensive components for creating chains, managing agents, and implementing Retrieval Augmented Generation (RAG) pipelines. They are widely adopted and boast extensive community support and a wealth of examples.&lt;/p&gt;

&lt;p&gt;Alongside these established players, other specialized tools and frameworks continue to emerge, each offering unique strengths. For developers particularly focused on TypeScript and seeking strong built-in observability from the ground up, &lt;strong&gt;VoltAgent&lt;/strong&gt; presents a compelling option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VoltAgent: A TypeScript Framework with a Keen Eye on Observability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;VoltAgent is an open-source TypeScript framework specifically designed for building and orchestrating AI agents and LLM applications. It provides developers with the tools to create sophisticated workflows where LLMs can interact with various data sources, external APIs, and other services. A key focus for VoltAgent is its &lt;strong&gt;observability&lt;/strong&gt; features. The &lt;a href="https://console.voltagent.dev/" rel="noopener noreferrer"&gt;VoltAgent Console&lt;/a&gt; allows developers to visualize the entire execution flow of their agents on an n8n-style canvas. This makes it significantly easier to debug, trace decision-making processes, monitor performance, and understand LLM costs associated with each step in an agent's operation. This visual approach to observability helps demystify the "black box" nature of complex LLM chains and agentic behaviors, making development and maintenance more manageable.&lt;/p&gt;

&lt;p&gt;If you're looking for a modern, TypeScript-first approach to LLM orchestration with built-in visual debugging and tracing, VoltAgent is definitely worth exploring. You can find its &lt;a href="https://voltagent.dev/docs/quick-start" rel="noopener noreferrer"&gt;documentation here&lt;/a&gt; and the &lt;a href="https://github.com/VoltAgent/voltagent" rel="noopener noreferrer"&gt;project on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Your Hands Dirty: Tips for Starting with LLM Orchestration
&lt;/h3&gt;

&lt;p&gt;Alright, theory is great, but how do you actually &lt;em&gt;start&lt;/em&gt; building with these concepts? It might seem daunting, but here are a few practical tips:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Get a Strong Foundation:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;How Do LLMs Work?&lt;/strong&gt; It's very useful to know, at a basic level, what LLMs are, how they are trained, and what "prompt engineering" means. Explore the question, "How do I get the answer I want from an LLM?"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python (or JavaScript):&lt;/strong&gt; Orchestration frameworks that are super popular nowadays, such as LangChain, are usually based on Python or JavaScript. Familiarity with at least one of them will make your life much easier. Python seems to be ahead of other languages in this field regarding community support and library diversity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Find a Problem to Solve (Or Make One Up!):&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It often makes more sense to begin with a practical problem than to get mired in theory. A question might be: "Could I automate this annoying X task with LLMs and orchestration?" or "What if I made my own personal Y assistant?"&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;My first project was simple: an agent that would fetch new articles on my favorite blogs, summarize them for me, and rank them according to my interests. It wasn't that complicated, but it was enough to send me on a path of discovery of basic concepts!&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Select an Orchestration Framework and Start Tinkering:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;LangChain, which we mentioned earlier, is overall an excellent starting point for newcomers; their documentation is quite extensive, and they have numerous pre-written examples (cookbooks).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Installation: Go ahead and install the selected framework: in most cases, you begin with something such as: &lt;code&gt;pip install langchain.&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Write Your "Hello World": Create a chain that makes a very simple LLM call. Then gradually add a tool to it, get acquainted with a memory module.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Proceed Step by Step, Start Simple:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Don't try to build the most complex agent or the largest RAG system right away. First:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a simple &lt;strong&gt;chain&lt;/strong&gt;: Ask the LLM a question, get its answer. - Add a &lt;strong&gt;tool&lt;/strong&gt;: Make the LLM use a calculator or search the web. - Add &lt;strong&gt;memory&lt;/strong&gt;: Make a chatbot that remembers the conversation history.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Try RAG on your own data&lt;/strong&gt;: Upload a small text file through a tool like LlamaIndex and ask the LLM questions about this file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Every small success will motivate you to take the next step. I also got confused at first by trying to do everything at once, but then things got easier when I said, "Hold on, let me just get this one step done first."&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Review lots of sample code and watch tutorials&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The official documentation for tools like LangChain and LlamaIndex is worth its weight in gold. They contain hundreds of sample codes and use cases.

&lt;ul&gt;
&lt;li&gt;You can find countless tutorials and guides on those topics on YouTube, Medium, and any number of blogs. Searching for something like "LangChain tutorial for beginners" suffices.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Look at open-source projects on GitHub. How others use these tools is highly instructive.&lt;/li&gt;

&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Be Patient and Have Fun!&lt;/strong&gt; Building with LLMs and orchestration is an evolving field. There will be trial and error. Embrace the learning process, celebrate small wins, and don't be afraid to experiment. The AI landscape is moving fast, and being hands-on is the best way to keep up.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Wrapping It All Up: The Future is Orchestrated
&lt;/h2&gt;

&lt;p&gt;Yes, dear friends, we have started our journey into this exciting world called LLM orchestration. We found that it is not only a collection of cool technical terms but actually one of the keys to artificial intelligence becoming smarter, more capable, and useful in every area of life.&lt;/p&gt;

&lt;p&gt;Now it is your turn. &lt;em&gt;What are you going to do with this knowledge? What problem are you going to sweat and grind to solve?&lt;/em&gt; Probably you will begin with a tiny hobby, or maybe you will lay the foundation for the next big startup. Whatever happens, do not stop learning, trying, and, above all, dreaming.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>What is LLaMA Factory? LLM Fine-Tuning</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Wed, 21 May 2025 06:27:51 +0000</pubDate>
      <link>https://forem.com/voltagent/what-is-llama-factory-llm-fine-tuning-1d23</link>
      <guid>https://forem.com/voltagent/what-is-llama-factory-llm-fine-tuning-1d23</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Large Language Models (LLMs) are gigantic AI models which generate text and code for a variety of tasks. Although such models are very powerful, however, they sometimes need to be tailored for specific purposes even more. Fine-tuning an LLM will accomplish this, but the process can be tricky without the right tools.&lt;/p&gt;

&lt;p&gt;That's where I came across LLaMA-Factory, which made it much simpler for me to personalize the model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4k18clkl4ua3lg4bbbsk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4k18clkl4ua3lg4bbbsk.png" alt="llama-factory" width="800" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the Big Deal with LLaMA-Factory?
&lt;/h2&gt;

&lt;p&gt;Basically, &lt;a href="https://github.com/hiyouga/LLaMA-Factory/" rel="noopener noreferrer"&gt;LLaMA-Factory&lt;/a&gt; is just this totally awesome open-source thing by some great dev dude hiyouga. It's a one-stop-shop for fiddling with data from over 100 different LLMs and even VLMs (those are the ones which get visual). People &lt;em&gt;love&lt;/em&gt; this thing. It doesn't surprise me. It takes some serious headache out of fiddling around.&lt;/p&gt;

&lt;p&gt;It's also mostly &lt;strong&gt;platform-agnostic&lt;/strong&gt;, meaning it gets along with models and datasets from the big boys such as Hugging Face and ModelScope.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Under the Hood? (Spoiler: A Lot of Great Stuff)
&lt;/h3&gt;

&lt;p&gt;This is not boilerplate code; LLaMA-Factory is &lt;em&gt;chock full&lt;/em&gt; of features. It's as though they thought of just about everything.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Beat of the Beast: Models and Fine-Tuning Ability
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A Whole Set of Models&lt;/strong&gt; Seriously, it's an LLM smorgasbord: LLaMAs (all varieties!), Mistrals, &lt;strong&gt;ChatGLM&lt;/strong&gt;, Qwens, Gemmas, DeepSeeks. and so on. If you've ever heard of it, LLaMA-Factory probably helps fine-tune it. When I needed to try out a newer, more obscure model, this was my source, and voilà! It was available.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tune It Your Way – So Many Approaches!:&lt;/strong&gt; It gets &lt;em&gt;really&lt;/em&gt; interesting from here.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Classics:&lt;/strong&gt; You've got your standard &lt;strong&gt;Supervised Fine-Tuning (SFT)&lt;/strong&gt; – my default, normally. Feel like taking a gamble? You can even attempt &lt;strong&gt;(Continuous) Pre-training&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fancy Preference Tuning:&lt;/strong&gt; Familiar with &lt;strong&gt;PPO, DPO, KTO, or ORPO&lt;/strong&gt;? They're high-falutin' techniques for matching models to human preferences or bespoke goals, and LLaMA-Factory makes them accessible. No longer coding it up from scratch – an &lt;em&gt;enormous&lt;/em&gt; time saver.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;QLoRA and LoRA to the Rescue:&lt;/strong&gt; And then there are of course, &lt;strong&gt;QLoRA&lt;/strong&gt; and &lt;strong&gt;QLoRA (Low-Rank Adaptation)&lt;/strong&gt;. They are &lt;em&gt;life savers&lt;/em&gt; for reduced VRAM training. QLoRA, with its various bit quantizations (2, 3, 4, 5, 6, or 8-bit), enables you to train surprisingly large models on hardware that otherwise can't. I've seen fantastic results with 4-bit QLoRA!&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Beyond the Basics: Efficiency, Usability, and the Full Toolkit
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lean, Mean, Tuning Machine – Efficiency is the Name of the Game:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full Power or Light Touch:&lt;/strong&gt; 16-bit full-tuning is the choice if you can afford the horse power, or freeze-tuning for the light touch.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Smart Optimizations:&lt;/strong&gt; It has the latest algorithms and real-world hacks like &lt;strong&gt;FlashAttention-2&lt;/strong&gt; and &lt;strong&gt;Unsloth&lt;/strong&gt; for speed. For those who are serious about efficient training, there is support for techniques like &lt;strong&gt;GaLore (Gradient Low-Rank Projection)&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quantization Galore:&lt;/strong&gt; Apart from QLoRA, it also supports other quantization techniques like &lt;strong&gt;AQLM, AWQ, and GPTQ&lt;/strong&gt;, all in pursuit of the most compute bang for your buck.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;No PhD Required (Mostly!):&lt;/strong&gt; Sure, LLMs are complex, but LLaMA-Factory tries to simplify it. It has a command-line interface (CLI) that's fairly straightforward, at least with their sample configs. The actual gem for most, however? The &lt;strong&gt;LLaMA Board&lt;/strong&gt; – web UI! You can essentially point-and-click your way through making a fine-tuning task. That's rather cool, huh?&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  More Than Training – The Whole Shebang
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Task Flexibility:&lt;/strong&gt; You can train for multi-turn dialogue, tool use, image understanding, visual grounding, video classification, audio understanding. it's very varied, ranging from LLMs to VLMs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep an Eye on Things:&lt;/strong&gt; Experiment tracking is built into packages like &lt;strong&gt;LlamaBoard, TensorBoard, Wandb, MLflow, and SwanLab&lt;/strong&gt;. Seeing those loss curves decrease is &lt;em&gt;so&lt;/em&gt; satisfying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Showtime! (Deployment &amp;amp; Inference):&lt;/strong&gt; Ready when you are, it offers faster inference modes, including an &lt;strong&gt;OpenAI-style API&lt;/strong&gt; and support for workers like the &lt;strong&gt;vLLM worker or SGLang worker&lt;/strong&gt;. You can also chat up your fine-tuned model in a hurry with &lt;code&gt;llamafactory-cli chat your_model_config.yaml&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Okay, But &lt;em&gt;Why&lt;/em&gt; This One? (The Good, and a Note of Realism)
&lt;/h2&gt;

&lt;p&gt;Great observation! Yes, there are alternatives available, but LLaMA-Factory possesses this magic sweet spot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It simply &lt;em&gt;works:&lt;/em&gt;&lt;/strong&gt; Be you a veteran ML engineer or just LLM-curious, it reduces the curve of learning. I've watched newbies get up and running on it pretty quickly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Saves Your Sanity (and GPU budget):&lt;/strong&gt; Efficiency focus is a massive win. Tuning can be computational hell, and anything that keeps it in line is a winner to me.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Pro Tip: Stay on the Cutting Edge!
&lt;/h4&gt;

&lt;p&gt;Hi, check it out - LLaMA-Factory is always completely up-to-date! The coders jump on new models right away, and since it's open-source, individuals continually enhance it. Pretty cool, eh? You're basically getting the latest technology without all the hassle!&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to Try It Out? Getting Your Hands Dirty with LLaMA-Factory
&lt;/h2&gt;

&lt;p&gt;Alright, convinced enough to give it a shot? Or simply interested in it? Here is an absurdly abbreviated overview of how to begin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check Out the Specs &amp;amp; Get the Goods (Installation)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;First, check the LLaMA-Factory GitHub for their &lt;strong&gt;hardware requirements table&lt;/strong&gt; (GPU, RAM, etc.), as requirements vary with model size and tuning process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next, clone their GitHub repo:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Next, &lt;code&gt;cd LLaMA-Factory&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;pip install:&lt;/strong&gt; It's Python, so use a virtual environment (future you will thank you, trust me). Then &lt;code&gt;pip install -e ".[torch,metrics]"&lt;/code&gt; is where you start. They also have extras options, e.g., &lt;code&gt;bitsandbytes&lt;/code&gt; for QLoRA, or &lt;code&gt;vllm&lt;/code&gt; for fast inference.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Alternative - Docker:&lt;/strong&gt; If Docker is your thing, they've got Dockerfiles! Look at the &lt;code&gt;docker&lt;/code&gt; directory in their repo for configurations for CUDA, NPU, and ROCm. This can simplify environment management.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Their &lt;code&gt;README&lt;/code&gt; has all the install options for your target OS and hardware.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;A Note on Production Scale&lt;br&gt;
A Grain of Reality: LLaMA-Factory is wonderful for experimenting and tuning, and even comes with deployment APIs, but scaling a model to a super-scalled, high-load &lt;em&gt;production&lt;/em&gt; environment with lots of traffic might still require some more, special MLOps tools and some additional, manual tuning on top of what LLaMA-Factory can provide out of the box. It gets you &lt;em&gt;really&lt;/em&gt; far, but it is worth noting for high-scale deployments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Feeding the Beast (Data Preparation)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Your data needs to be LLaMA-Factory-readable format, usually JSON files. You might have &lt;strong&gt;customer support dialogs to learn from, or product descriptions to write in some specific witty tone.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;One key file to note here is &lt;code&gt;data/dataset_info.json&lt;/code&gt;. You'll edit this to tell LLaMA-Factory about your own custom dataset – where it is, what format it's in, etc. It supports local datasets, Hugging Face datasets, and ModelScope Hub content.&lt;/li&gt;
&lt;li&gt;Their &lt;code&gt;data/README.md&lt;/code&gt; is &lt;em&gt;read-once&lt;/em&gt; for this step. It specifies formats and has example datasets to show the structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Let's Get Tuning! (Running a Job)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The CLI Way:&lt;/strong&gt; For users who love the command line, you'll typically run fine-tuning via the &lt;code&gt;llamafactory-cli&lt;/code&gt; tool. It might look something like this:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That sorcery is in that &lt;code&gt;.yaml&lt;/code&gt; file. LLaMA-Factory have plenty of sample YAML config files within their &lt;code&gt;examples&lt;/code&gt; directory (e.g., LoRA SFT on Llama 3, or DPO on Mistral). They're great to use as a starting point. You simply copy one, adapt it to your model and data, set your hyperparameters (learning rate, epochs, batch size), and off it goes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The LLaMA Board (Web UI):&lt;/strong&gt; If YAML files make your eyes squint, or you prefer getting through a GUI, get the web UI up and running!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;llamafactory-cli webui&lt;/code&gt;&lt;br&gt;
This puts up a Gradio interface where you select your model, dataset, fine-tuning method, and parameters using dropdowns and input fields. Good for experimenting and learning the options, especially if you're new to this.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quick Chat After Fine-Tuning:&lt;/strong&gt; Once tuned, attempt quickly with:
&lt;code&gt;llamafactory-cli chat path_to_your_finetuned_model_or_adapter_config.yaml&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  "Where's the &lt;em&gt;Real&lt;/em&gt; Full Manual?" (Documentation is Your Friend)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;em&gt;real&lt;/em&gt; treasure map is the official doc: &lt;code&gt;https://llamafactory.readthedocs.io/en/latest/&lt;/code&gt;. Bookmark it. Seriously.&lt;/li&gt;
&lt;li&gt;And don't overlook the &lt;code&gt;examples&lt;/code&gt; directory in the GitHub repository. It's packed with scripts and configurations. I catch myself going back to them often.&lt;/li&gt;
&lt;li&gt;Struggling? GitHub Issues have answers, or you can ask your own question.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Taking It Further (Advanced Bits)
&lt;/h2&gt;

&lt;p&gt;Once you have a model you're happy with, share or use it more widely. LLaMA-Factory helps you with that too:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exporting Your Model:&lt;/strong&gt; They provide an &lt;code&gt;export_model.py&lt;/code&gt; script (or &lt;code&gt;llamafactory-cli export your_config.yaml&lt;/code&gt; command). Convenient to merge LoRA adapters into the base model for an independent fine-tuned model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hugging Face Hub Sharing:&lt;/strong&gt; Once exported, it's simple to share your new model on the Hugging Face Hub. The exported format is largely compatible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So yea, that's LLaMA-Factory in a nutshell, with a bit more on how you'd actually get up and running with it. If you're interested in getting your toes wet in the waters of LLM fine-tuning and need a tool that's powerful, agile, and won't cost you a kidney to be able to afford compute time (almost!), then you should &lt;em&gt;definitely&lt;/em&gt; give it a look.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dive Deeper
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Source of All Goodness (GitHub):&lt;/strong&gt; &lt;a href="https://github.com/hiyouga/LLaMA-Factory" rel="noopener noreferrer"&gt;hiyouga/LLaMA-Factory&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Manual (Docs):&lt;/strong&gt; &lt;a href="https://llamafactory.readthedocs.io/en/latest/" rel="noopener noreferrer"&gt;llamafactory.readthedocs.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Brainy Paper (ACL 2024):&lt;/strong&gt; &lt;a href="https://arxiv.org/abs/2403.13372" rel="noopener noreferrer"&gt;LlamaFactory: Unified Efficient Fine-Tuning of 100+ Language Models&lt;/a&gt; (For when you feel like being &lt;em&gt;extra&lt;/em&gt; smart!)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>llm</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What is Multimodal RAG</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Mon, 19 May 2025 08:27:35 +0000</pubDate>
      <link>https://forem.com/voltagent/what-is-multimodal-rag-pf8</link>
      <guid>https://forem.com/voltagent/what-is-multimodal-rag-pf8</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's a term out there in the AI community today that everybody's using: &lt;strong&gt;Multimodal RAG&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's Start from Scratch: What's This RAG Thing Anyway?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl9hmbhlg332kki3n09rm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl9hmbhlg332kki3n09rm.png" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's get this "RAG" out of the way before we dive into Multimodal RAG. RAG stands for &lt;strong&gt;Retrieval-Augmented Generation&lt;/strong&gt;. Think of it like this: "Go find some helpful info, mix it with what you know, and then give me a smart answer."&lt;/p&gt;

&lt;p&gt;Here's the deal - you know those AI chatbots like ChatGPT that seem super smart?&lt;/p&gt;

&lt;p&gt;Well, they've learned tons of stuff, but they have some problems. Sometimes their knowledge is outdated, or when you ask about something really specific, they just shrug and say "Sorry, no idea." That's where RAG comes to the rescue. Before the AI answers you, it acts like a detective.&lt;/p&gt;

&lt;p&gt;It searches through fresh databases, company documents, maybe even the internet, to find the most up-to-date and relevant information about what you asked. Then it blends this new info with what it already knows and gives you a much better, more current answer. Pretty cool, right?&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay, But Is Text-Enough? What's With Old-School RAG?
&lt;/h2&gt;

&lt;p&gt;Traditional RAG systems primarily work with text. The query is text, the information it retrieves is text, and the answer it generates is text. This approach works well for many scenarios, but it has limitations. Our world contains much more than just text. Think about diagrams in instruction manuals, charts in presentations, or important details in medical images.&lt;/p&gt;

&lt;p&gt;These visual elements contain valuable information that's difficult to capture in words alone. This is where traditional text-based RAG systems fall short - they simply can't process or understand non-textual information effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  And Stage Left Enters: Multimodal RAG
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29qnhu85wxv98vukhz73.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29qnhu85wxv98vukhz73.png" alt=" " width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just at the moment when we can say, "Text is not enough!" &lt;strong&gt;Multimodal RAG&lt;/strong&gt; comes storming in. "Multimodal" means simply "many channels" or "many forms." Thus, this friend here is not all text; it's a RAG system that is aware of and uses &lt;strong&gt;images, audio, video, those less-than-famous Excel spreadsheets, graphs&lt;/strong&gt;, etc. Just like us! When we learn, we read, we scan through images, we watch videos, don't we?&lt;/p&gt;

&lt;p&gt;All because of this new-gen RAG, AI is now able to "read" that graph in the PDF you uploaded ahead, "see" that hairline scratch on the product photo, and "hear" that critical emphasis in the record of that meeting. Then it gathers all this data tweezed out from everywhere and gives you an answer so comprehensive, it's like it had a better grasp of the subject than me or you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multimodal RAG Explorer
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Why Should I Care About Multimodal RAG?
&lt;/h2&gt;

&lt;p&gt;Okay, so you're thinking now, "Sounds cool, but what am I gonna do with it?"&lt;/p&gt;

&lt;p&gt;That's all around us is not just bland plain text. Slideshows, articles, tweets, scientific papers. They're a complete mess: there's text, there's pictures somewhere, a video somewhither and there's another graph somewhere.&lt;/p&gt;

&lt;p&gt;And that is where the alchemy of Multimodal RAG begins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deep Water Swimming:&lt;/strong&gt; Instead of just reading through the text on the surface, it recognizes objects from pictures, reads graphs for trends, and works out hidden relations in tables. Thus, it does not scratch the surface but goes deep.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Answers Are More on Point:&lt;/strong&gt; Particularly for questions that require visual or audio information (such as "What is the car model in this photo?"), it can provide on-the-dot answers since it handles that data natively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Making Complex Stuff Simple:&lt;/strong&gt; It can take those pages and pages of number-laden tables nobody wants to read, or those immensely complex diagrams, and say, "Buddy, here's the bottom line."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Using with Real-World Data:&lt;/strong&gt; It handles mixed-format data, just like the real world displays, much more effectively.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Isn't There a Catch? What Are the Hard Places?
&lt;/h3&gt;

&lt;p&gt;Of course, every rose has a thorn, and every tech has a "but" or two. Constructing Multimodal RAG is not quite a walk in the park:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every Modality is an Individual Things:&lt;/strong&gt; Text analysis is one thing, interpreting an image or decoding a sound recording something else again. Every form of data has its quirks. Think about it, achieving that "vibe" in a holiday photo is different from being able to pick up a millimeter detail on an architect's plan, isn't it?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Combining Different Worlds:&lt;/strong&gt; The integration of diverse data modalities presents a significant technical challenge. Effectively synthesizing semantic information from disparate sources—such as correlating graphical elements with their textual explanations—requires sophisticated algorithms that can create coherent, unified representations while preserving the unique contextual value of each modality.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  So How Do the Pros Construct These Systems? Basic Strategies
&lt;/h2&gt;

&lt;p&gt;Our engineering wizards have gotten together and come up with a few broad strategies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"All for One" (Common Embedding Space):&lt;/strong&gt; All data types get thrown into one shared mathematical space using clever models like CLIP. It's like putting apples and oranges in the same fruit basket to compare them. Makes using existing RAG stuff easier, but you need beefy models that can handle all the details.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"Let Me Speak Your Language"&lt;/strong&gt; (Translating One Modality to Another): Just turn everything into text first. Like, "This image shows a cat on grass under clear sky." Then feed these descriptions to a regular RAG. Works when text does the job, saves you from building new models. Downside? You lose some of the original image's magic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"Everyone on Their Own Team, Meet in the Finals"&lt;/strong&gt; (Separate Stores and Re-ranking): Use different storage boxes for different data types. When asked something, each box grabs its best stuff. Then a smart filter (re-ranker) picks the most relevant bits. Makes specializing easier but adds complexity at the filtering stage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"The Mixtape"&lt;/strong&gt; (Hybrid Approaches): Mix and match these approaches for best results. Like making your own custom playlist.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What Do We Need if We're Building a Multimodal RAG?
&lt;/h2&gt;

&lt;p&gt;For a Multimodal RAG system, generally, one must use the following on the pitch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multimodal Large Language Models (MLLMs):&lt;/strong&gt; These are the operation's brainy super-geniuses. Special LLMs that can understand text, images, sound, etc., and generate useful responses from all of them. When you see names like LLaVa, GPT-4V, Qwen-VL, realize that these are what they refer to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedding Models:&lt;/strong&gt; These are the translators. They convert text or images into a semantic equivalent that can be used by computers (i.e., vectors full of numbers). CLIP and Sentence-BERT are the masters of this trick.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector Databases:&lt;/strong&gt; Special storage that stores these numerical equivalents (vectors) and allows us to query through them at lightning speed. Think Chroma DB, Milvus, FAISS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Parsing/Extraction Tools:&lt;/strong&gt; You see those PDFs, Word documents, etc.? Those are little programs that pull out the text, images, and tables from them. Unstructured.io, for example, is quite good at it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Orchestra Conductor (Orchestration Tools):&lt;/strong&gt; Tools that orchestrate the workflow and make all these different pieces play together in harmony without stepping on each other's toes. LangChain is a widely used conductor for that.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let's Get Practical: Step-by-Step, How Does Multimodal RAG Work?
&lt;/h2&gt;

&lt;p&gt;Theory aside, if you ask, "How does this stuff actually work in real life?" it generally goes like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The Warm-Up (Data Preprocessing):&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Extraction Operation:&lt;/strong&gt; Texts on one side, images on the other – they're separated from the documents we have (like those notorious PDFs).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Who's Who? (Classification):&lt;/strong&gt; Images are taken into consideration and a categorization is created, e.g., "Is it a graph, or is it a picture of our friend Necati's holidays?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Giving Images a Voice (Summarization/Captioning):&lt;/strong&gt; Short descriptions are generated for images, e.g., "This image has X, doing Y." Especially for graphs, models like DePlot can translate the figures and lines to text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everybody Gets an ID (Embedding):&lt;/strong&gt; Semantic ID cards (embeddings) in machine-readable form are generated for images (or their image descriptions) and text passages.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Storage Strike Time:&lt;/strong&gt; These created ID cards (vectors) are dumped into a dedicated vector database where they can be quickly found when needed. Every now and then, a reference to the original image file is also stored, labeled "True Copy."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Question In, Brains On! (Retrieval and Generation):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The user's query is taken in, and an ID card (vector) is created for it too.&lt;/li&gt;
&lt;li&gt;The database is queried and the most appropriate text and/or image IDs are fetched and called in along with their respective owners.&lt;/li&gt;
&lt;li&gt;Those most suitable texts and (if any) images are provided to our super-brain Multimodal LLM (MLLM) as "Here's your material."&lt;/li&gt;
&lt;li&gt;The MLLM uses the question and this extensive content laid out before it to create a rich, satisfying answer for the user. If it is simply inquiring outright about an image (like "How many individuals are in this photo?"), then the MLLM flaunts its visual question answering (VQA) capabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Uses Cases of Multi Modal Rag
&lt;/h2&gt;

&lt;p&gt;Actually, you should be asking, "Where &lt;em&gt;can't&lt;/em&gt; we use it?" But for a couple of well-known examples, here they are anyway:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reports Such as Mixed Nuts:&lt;/strong&gt; Perfect for breaking down those large reports, financial reports, or market research reports that contain graphs, tables, and lots and lots of text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seeing Chatbots:&lt;/strong&gt; Smart aides that are able to answer questions like, "What is the function of this button on the screen?" or "What type of architecture is this in the picture?" – ones that are able to see the same thing you do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dancing with Manuals:&lt;/strong&gt; You recognize those instruction manuals full of pictures, or user guides for high-tech devices? Guiding users who ask, "Where do I put this screw?" through them immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;News from the Sectors:&lt;/strong&gt; Familiarizing physicians in health care with X-rays, identifying patterns from live stock market charts in finance, providing interactive, multi-channel course materials for students in education. And many more!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's on the Horizon? Where Is This Headed?
&lt;/h2&gt;

&lt;p&gt;This Multimodal RAG topic is still super fresh. But it's already giving us a glimpse of what we can expect in the future:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Information will be retrieved not just by typing, but by asking, "Hey assistant, who is the person in this picture?" or sending an audio file.&lt;/li&gt;
&lt;li&gt;AI output won't be text anymore either. Maybe it'll graph something out for you, or possibly show you what it's talking about in a picture.&lt;/li&gt;
&lt;li&gt;We'll see "multimodal agents" – systems that can plan and execute much more advanced tasks in a step-by-step manner, working with various forms of data simultaneously.&lt;/li&gt;
&lt;li&gt;Complaints like "This image resolution is too low, I can't make anything out" will recede, as AI becomes better at understanding all sorts of visuals.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rag</category>
      <category>webdev</category>
      <category>programming</category>
      <category>llm</category>
    </item>
    <item>
      <title>LLM Observability: Beginner Guide</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Fri, 16 May 2025 06:41:09 +0000</pubDate>
      <link>https://forem.com/voltagent/llm-observability-beginner-guide-15ke</link>
      <guid>https://forem.com/voltagent/llm-observability-beginner-guide-15ke</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Alright, so you're playing around with LLMs – maybe building something cool. But here's the thing: getting them to work reliably? That's the tricky part. Sometimes they give you exactly what you want, and other times the output makes no sense at all. When it goes wrong, how do you figure out &lt;em&gt;why&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;That's where LLM Observability comes into the play.&lt;/p&gt;

&lt;p&gt;Yeah, "Observability." Sounds like another one of &lt;em&gt;those&lt;/em&gt; tech terms, doesn't it? Maybe a bit overused. But look, if you want to build AI stuff that actually works, that doesn't break in weird ways, and that you can actually understand, then we gotta pay attention to this.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the Big Deal with LLM Observability Anyway?
&lt;/h2&gt;

&lt;p&gt;Think about the software you usually build. When something goes sideways, you've got logs, metrics, traces – a whole set of tools to figure out what broke. You can &lt;em&gt;see&lt;/em&gt; what's happening.&lt;/p&gt;

&lt;p&gt;They can often feel like a total black box. You feed them a prompt, they do some incredible (and often mysterious) internal processing, and out pops an answer. But what &lt;em&gt;actually happened in between&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;LLM observability is all about getting those crucial insights.&lt;/p&gt;

&lt;h3&gt;
  
  
  It really boils down to figuring out:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Why&lt;/strong&gt; on earth your LLM said what it said.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How&lt;/strong&gt; well it's actually performing (or not performing).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where&lt;/strong&gt; things might be going wrong.&lt;/li&gt;
&lt;li&gt;And yeah, &lt;strong&gt;how much&lt;/strong&gt; all this magic is costing you.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why You Absolutely Need LLM Observability
&lt;/h2&gt;

&lt;p&gt;Okay, so it helps you see inside the LLM. Sounds good. But what does that &lt;em&gt;really&lt;/em&gt; mean for you and your cool new AI project? Let's break it down into why this isn't just a nice-to-have, but a must-have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No More Hair-Pulling Over Bugs:&lt;/strong&gt; Your LLM gives a weird answer, "Where did &lt;em&gt;that&lt;/em&gt; come from?" Observability tools help you trace the problem, whether it's a bad prompt, an issue with the data it's using, or the model just having an off day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build AI People Can Actually Trust:&lt;/strong&gt; Let's face it, users want AI that feels dependable and makes sense. By keeping a close eye on your LLM's behavior, you can ensure the quality, safety, and fairness of what it puts out. That's how you build trust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep Your Wallet and Your Watch in Check:&lt;/strong&gt; LLMs can use a lot of resources. Good observability lets you track critical things like token usage (which hits your budget directly) and how fast your model is spitting out answers (latency). Nobody's a fan of a slow or surprisingly pricey app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Catch Problems Early:&lt;/strong&gt; Models aren't static; they can "drift" over time. This means their performance can degrade or change in unexpected ways. Solid observability helps you spot these shifts early, so you can tweak, retrain, or adjust before it becomes a major problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Happier Users, Happier You:&lt;/strong&gt; At the end of the day, understanding your LLM better leads to a better product and a smoother ride for your users. And happy users? That's the name of the game.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Core Pieces: What Should You Be Watching?
&lt;/h2&gt;

&lt;p&gt;Alright, convinced? Ready to get this "observability" thing sorted? The next question is, what exactly should you be keeping an eye on? It can seem like a lot, but here are the main parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Prompt &amp;amp; Input Tracking: Know Your Starting Point&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- What kind of prompts are people (or your system) actually sending? You'd be surprised!
- Are there patterns? What makes a prompt successful? What makes one fail badly?
- And importantly, is anyone trying to be sneaky and trick your LLM with "prompt injection"? You need to log them to understand them.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Output &amp;amp; Response Monitoring: What's It Actually Saying?&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Definitely log the text the LLM generates.
- But also, how good _is_ it? Think about relevance, if it makes sense (coherence), and super importantly, if it's saying anything problematic – like toxic language or generating incorrect information (often called "hallucinations").
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Following the Breadcrumbs (Especially for Agents/Chains):&lt;/strong&gt; If your LLM isn't working alone – maybe it's part of an agent that uses tools or follows a chain of thought – you'll want to see those intermediate steps.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Which tools did it decide to use? And why?
- What was its internal "reasoning" process (as much as we can see it)?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Performance Check-Up: The Vital Signs&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- **Latency:** How long are users waiting for a response? Too long, and they're gone.
- **Throughput:** How many requests can your setup handle? Planning for scale is key.
- **Token Counts:** How many tokens are being used for inputs and outputs? This one's important for cost!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Counting the Beans: Cost Tracking&lt;/strong&gt; Seriously, keep an eye on those API bills.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- How much is each request, or each user, or each feature _really_ costing?
- Can you spot any features that are surprisingly expensive?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Listen to Your Users: The Feedback Loop&lt;/strong&gt; Your users are an incredible source of truth. Make it easy for them to tell you what they think.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Simple thumbs up/down on responses can be very valuable.
- What are they saying about the AI's helpfulness in general? Are they getting what they need?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Grading the Model: Is It Doing Its Job Well?&lt;/strong&gt; Beyond individual responses, how well is the model &lt;em&gt;actually&lt;/em&gt; doing its job over time?

&lt;ul&gt;
&lt;li&gt;Track accuracy scores or other relevant metrics.&lt;/li&gt;
&lt;li&gt;Use specific evaluation datasets and benchmarks to see how it compares.&lt;/li&gt;
&lt;li&gt;And always, always be on the lookout for model "drift."&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Phew! That &lt;em&gt;does&lt;/em&gt; sound like a lot, doesn't it? But here's the good news: you don't have to do everything at once. Start with what feels most critical for &lt;em&gt;your&lt;/em&gt; specific app and build from there.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Not-So-Easy Parts: Why LLM Observability Can Be Tricky
&lt;/h2&gt;

&lt;p&gt;Now, if getting full observability on LLMs was easy, everyone would have it all figured out already. The truth is, there are some unique problems that make it a bit more challenging than your average software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Good" Can Be Super Subjective:&lt;/strong&gt; What makes a "correct" or "high-quality" answer from an LLM? Sometimes it's obvious, but often it's pretty fuzzy and depends heavily on context. This makes setting up automated quality checks a real challenge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's an Ocean of Information:&lt;/strong&gt; LLMs process large amounts of text – tons and tons of it. Logging, storing, and then actually &lt;em&gt;analyzing&lt;/em&gt; all that data can be a big job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Need for Speed (Real-Time):&lt;/strong&gt; If your LLM is interacting with users live, you often need to monitor what's happening in real-time. Catching issues as they happen is crucial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Still Developing:&lt;/strong&gt; Honestly, standards for LLM observability are still developing. Different models and platforms do things their own way, so it's not always plug-and-play.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy is Paramount:&lt;/strong&gt; Prompts and responses can easily contain sensitive, personal information. You've got to be incredibly careful and responsible about how you log, store, and protect this data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Toolkit: How to Actually &lt;em&gt;Do&lt;/em&gt; LLM Observability
&lt;/h2&gt;

&lt;p&gt;Alright, enough about the challenges – let's talk solutions! What tools and techniques can you actually use to get a better handle on your LLMs?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Good Ol' Logging, But Smarter:&lt;/strong&gt; Don't throw out your existing logging practices! Adapt them. Standard logging frameworks are your first line of defense, but make sure you're capturing LLM-specific stuff like prompts, full responses, token counts, and maybe even those intermediate thoughts if you can get them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracing the Journey (Hello, OpenTelemetry!):&lt;/strong&gt; For anything more complex than a single LLM call (think microservices, or chains of LLM calls), distributed tracing is your best friend. Tools like OpenTelemetry can help you see the entire lifecycle of a request as it bounces between different parts of your system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector Databases to the Rescue:&lt;/strong&gt; These are becoming super handy. You can store embeddings of your prompts and responses, then search for similar ones. This is great for spotting common issues, finding anomalies, or even powering some clever automated quality checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard Superstars (Prometheus, Grafana, Datadog, etc.):&lt;/strong&gt; If you're already using platforms like these for your other apps, you can often hook them up to your LLM data too. They're awesome for visualizing metrics, creating dashboards, and setting up alerts when things go weird.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;So, How Do You Grade an LLM, Anyway? (Evaluation Techniques):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Human Review is Often King:&lt;/strong&gt; Sometimes, you just need a human to look at the output and say, "Yep, that's good," or "Nope, that's way off."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model-Based Eval (AI Judging AI):&lt;/strong&gt; Using another LLM (or a simpler, more focused model) to score the output of your main LLM. It's not perfect, but it can help scale your checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run it Through Benchmarks:&lt;/strong&gt; Test your LLM against standard datasets and benchmarks to see how it compares against others or its own past performance.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Case Study: VoltAgent's Visual Approach to Observability
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f7ebrttii16vhp6kro9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f7ebrttii16vhp6kro9.png" alt="AI chat" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Speaking of specialized platforms, it's insightful to see how observability can be a foundational principle. When we were building &lt;a href="https://github.com/VoltAgent/voltagent/" rel="noopener noreferrer"&gt;VoltAgent&lt;/a&gt;, we ran smack into the same "black box" problem many developers face with AI agents.&lt;/p&gt;

&lt;p&gt;Our biggest frustration? It was just so darn hard to understand &lt;em&gt;why&lt;/em&gt; our agents made certain decisions. What steps did they take? Which tools did they pick, and when? And when an error inevitably popped up, figuring out exactly what went wrong felt like detective work without enough clues. Standard logs helped a bit, but they just weren't cutting it as interactions got more complicated.&lt;/p&gt;

&lt;p&gt;We got a lot of inspiration from the visual debugging power of tools like n8n. We thought, "Why can't we have something that clear for AI agents?" So, we decided to build observability right into the core experience. The key differentiator for VoltAgent became our &lt;strong&gt;&lt;a href="https://console.voltagent.dev/" rel="noopener noreferrer"&gt;VoltAgent Console&lt;/a&gt;&lt;/strong&gt;. This console isn't just another dashboard; it lets you visualize the &lt;em&gt;entire&lt;/em&gt; lifecycle of your agents—we're talking LLM interactions, tool usage, state changes, even their internal reasoning—all laid out on an &lt;strong&gt;n8n-style canvas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With this kind of visual approach, you can suddenly do things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clearly see the step-by-step execution flow your agent actually takes – no more guessing!&lt;/li&gt;
&lt;li&gt;Debug errors much, much more easily by pinpointing exactly where things went sideways on the canvas.&lt;/li&gt;
&lt;li&gt;Track your agent's performance and, crucially, LLM costs tied to specific steps in the flow.&lt;/li&gt;
&lt;li&gt;Easily compare results and execution paths when you're experimenting with different LLMs or tweaking your prompts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our whole goal with this visual, canvas-based observability is to make the agent "black box" transparent and understandable. If you're curious to see this approach in action, you can &lt;a href="https://voltagent.dev/docs/quick-start" rel="noopener noreferrer"&gt;check out the VoltAgent documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started: Best Practices for Sanity (and Success!)
&lt;/h2&gt;

&lt;p&gt;Ready to actually start implementing? Awesome. Here are a few tips to make your LLM observability journey a bit smoother and save you some difficulties down the road:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Know Your "Why" (Seriously!):&lt;/strong&gt; Don't just start logging &lt;em&gt;everything&lt;/em&gt; because you can. That's a quick way to get overwhelmed. Ask yourself: What questions are you &lt;em&gt;really&lt;/em&gt; trying to answer? What problems are you desperately trying to solve? Start with clear goals, and let those guide your efforts.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Start Small, Then Grow Smart:&lt;/strong&gt; You don't need to implement every single main part of observability on day one. Begin by logging the data points that are most critical for &lt;em&gt;your&lt;/em&gt; app. You can always add more layers and sophistication later as you get a better feel for what you need.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Figure Out What's "Normal" (Establish Those Baselines):&lt;/strong&gt; You can't spot problems if you don't know what "good" or "normal" actually looks like for your specific LLM setup. Track your key metrics over time to get a feel for your baseline performance and cost.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Build It In, Don't Just Add It Awkwardly Later:&lt;/strong&gt; If you can, try to think about observability from the very start of your project. Weaving it into your development lifecycle early is a &lt;em&gt;lot&lt;/em&gt; easier (and usually more effective) than trying to force it in after everything's already built.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Humans + Machines = The Dream Team:&lt;/strong&gt; Automated monitoring is fantastic, and you should use it. But don't forget the human element. Combine those automated checks with human oversight and evaluation, especially for the really nuanced stuff like output quality and fairness.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Handle Data with Care (Especially the Sensitive Stuff):&lt;/strong&gt; This one's huge. If you're logging prompts and responses (and you probably should be), make absolutely sure you're anonymizing, redacting, or otherwise protecting any personal or sensitive information. Seriously, don't mess this one up.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Wrapping It Up: Observability is Your LLM's Best Friend (Really!)
&lt;/h2&gt;

&lt;p&gt;So, after all that, is LLM observability just &lt;em&gt;another&lt;/em&gt; thing to pile onto your already massive to-do list? Well, yeah, it kind of is. But here's the important point: it's one of those things that can genuinely save you a ton of difficulties, a surprising amount of money, and a whole lot of user frustration down the line.&lt;/p&gt;

&lt;p&gt;When you start to truly understand what your LLM is doing and why it's doing it, you shift from being a hopeful operator just crossing your fingers, to a confident architect of intelligent systems. You get the power to build AI applications that are more reliable, more efficient, and, importantly, more trustworthy.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>llm</category>
    </item>
    <item>
      <title>🌟Top 5 AI Agent Frameworks in 2025🌟</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Thu, 08 May 2025 08:11:04 +0000</pubDate>
      <link>https://forem.com/voltagent/top-5-ai-agent-frameworks-in-2025-4gab</link>
      <guid>https://forem.com/voltagent/top-5-ai-agent-frameworks-in-2025-4gab</guid>
      <description>&lt;p&gt;AI is evolving fast. AI agents are a key part of this growth. These are AI programs that can reason, plan, and use tools to achieve goals. Building them from zero is hard. Luckily, frameworks and innovative projects are coming out. They handle many complex parts, so developers can focus on the agent's logic.&lt;/p&gt;

&lt;p&gt;Many tools are available now. Which ones should you look at? We explored several options. Here are 5 that stand out. &lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;a href="https://langchain-ai.github.io/langgraph/" rel="noopener noreferrer"&gt;LangGraph (Python)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;LangGraph is built on the LangChain ecosystem. It focuses on making stateful applications with multiple actors (like agents) using a graph approach. These workflows can manage loops and branching logic. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LangGraph Offers:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwgn3fzzxll38hdpy9kt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwgn3fzzxll38hdpy9kt.png" alt=" " width="800" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Graph-Based Structure:&lt;/strong&gt; Define agent steps and logic as nodes and edges in a graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Management:&lt;/strong&gt; It handles keeping track of the agent's state during the workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supports Complex Logic:&lt;/strong&gt; You can build workflows with loops, conditional logic, and human intervention points.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverages LangChain Ecosystem:&lt;/strong&gt; You can use all the tools and integrations from LangChain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⭐ &lt;strong&gt;Source: &lt;a href="https://langchain-ai.github.io/langgraph/" rel="noopener noreferrer"&gt;LangGraph&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;VoltAgent (TypeScript)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's an open-source TypeScript observability-first framework. It's for better developer experience for building AI agents.&lt;/p&gt;

&lt;p&gt;Code gave us flexibility. But we lost the clear visual view that tools like n8n had. We tried standard AIOps tools for observability. They helped, but didn't give the same clear, step-by-step view of the &lt;em&gt;agent's&lt;/em&gt; execution flow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0rf3f5cahh026sk6srj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0rf3f5cahh026sk6srj.png" alt="Flow" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VoltAgent Offers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript/JavaScript Native:&lt;/strong&gt; It works directly with Node.js/Web code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-source &amp;amp; Code-First:&lt;/strong&gt; You get full flexibility and control because you write the code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Core Building Blocks:&lt;/strong&gt; It provides essential parts like tools, memory management, and state handling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM Agnostic &amp;amp; Multi-Agent:&lt;/strong&gt; It works with different large language models (LLMs). You can also coordinate multiple agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual Debugging Console:&lt;/strong&gt; This is a key feature. You connect it locally to your running agent. It shows you visually how the agent thinks step-by-step. You can inspect messages and see the execution flow. It brings the clarity of visual tools to your coded agents. Your data stays on your machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⭐ &lt;strong&gt;Source: &lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;VoltAgent&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;a href="https://www.crewai.com/" rel="noopener noreferrer"&gt;CrewAI (Python)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjzx2ts4o41hzfj9zoo7u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjzx2ts4o41hzfj9zoo7u.png" alt="Image Crew" width="800" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CrewAI is a framework made for orchestrating autonomous AI agents. Its goal is to help them collaborate to achieve goals. It focuses on letting you define roles, tasks, and processes for a "crew" of agents. This makes it easier to build complex workflows where specialization and collaboration are important.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CrewAI Offers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Role-Based Agent Design:&lt;/strong&gt; Create agents with specific roles, backgrounds, and capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task Management:&lt;/strong&gt; Assign clear tasks for agents to complete.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Process Orchestration:&lt;/strong&gt; Set up how agents work together (like doing tasks in order or in parallel).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool Integration:&lt;/strong&gt; Give agents access to external tools easily.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⭐ &lt;strong&gt;Source: &lt;a href="https://www.crewai.com/" rel="noopener noreferrer"&gt;CrewAI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;a href="https://agpt.co/" rel="noopener noreferrer"&gt;AutoGPT (Python)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7n7lv9k4934m2vm8zpl5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7n7lv9k4934m2vm8zpl5.png" alt=" " width="800" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AutoGPT is a very influential open-source project. It's not a framework to build &lt;em&gt;other&lt;/em&gt; agents in the usual way. It's more like a finished AI agent program that shows what a truly autonomous agent can do. It tries to achieve goals you define. It does this by breaking them down, managing its own prompts, using tools, and learning by trying. Its architecture and code have inspired many other agent projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AutoGPT Offers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autonomous Goal Achievement:&lt;/strong&gt; It's designed to operate with minimal human help once given a goal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task Decomposition &amp;amp; Management:&lt;/strong&gt; It tries to break big goals into smaller, manageable steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensive Tool Use:&lt;/strong&gt; It can use many tools like Browse the internet or running code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspiration &amp;amp; Learning:&lt;/strong&gt; It's a concrete example of a complex autonomous agent. You can study its open code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⭐ &lt;strong&gt;Source: &lt;a href="https://agpt.co/" rel="noopener noreferrer"&gt;AutoGPT&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;a href="https://microsoft.github.io/autogen/stable/" rel="noopener noreferrer"&gt;AutoGen (Python)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdwu6i3tdslt8uf0wh947.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdwu6i3tdslt8uf0wh947.png" alt=" " width="800" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AutoGen is developed by Microsoft. It lets you create multiple agents that can converse with each other. They talk to work together and solve tasks. It focuses on building systems where agents interact through conversational patterns. Humans can often be included in the loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AutoGen Offers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Conversational Agents:&lt;/strong&gt; It's made for systems where agents collaborate via chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible Conversation Patterns:&lt;/strong&gt; Supports different ways agents talk and work together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Execution &amp;amp; Tool Use:&lt;/strong&gt; Agents can run code and use tools within the conversation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⭐ &lt;strong&gt;Source: &lt;a href="https://microsoft.github.io/autogen/stable/" rel="noopener noreferrer"&gt;AutoGen&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the Right Tool
&lt;/h2&gt;

&lt;p&gt;The best choice for you depends on your project needs. It also depends on your preferred programming language (TypeScript/JS or Python) and the complexity of your agents.&lt;/p&gt;

&lt;p&gt;Trying them is the best way. Read their docs. Build a simple agent with a couple of them. See which one fits your workflow and project goals best.&lt;/p&gt;

&lt;p&gt;Are there other tools you think should be on this list? Share your thoughts and experiences in the comments.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>ai</category>
    </item>
    <item>
      <title>Implementing your first MCP: A Google Drive Chatbot 🤖</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Mon, 05 May 2025 06:52:39 +0000</pubDate>
      <link>https://forem.com/voltagent/implementing-your-first-mcp-a-google-drive-chatbot-2lmk</link>
      <guid>https://forem.com/voltagent/implementing-your-first-mcp-a-google-drive-chatbot-2lmk</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;We're excited to share something cool we've put together: a chatbot that can actually search through your Google Drive files.&lt;/p&gt;

&lt;p&gt;To build this we'll use &lt;a href="https://github.com/VoltAgent/voltagent" rel="noopener noreferrer"&gt;VoltAgent&lt;/a&gt;, along with some neat tools like &lt;a href="https://composio.dev/" rel="noopener noreferrer"&gt;Composio&lt;/a&gt; and the &lt;a href="https://modelcontextprotocol.io/introduction" rel="noopener noreferrer"&gt;Model Context Protocol (MCP)&lt;/a&gt;. If those names sound a bit technical, no worries, we'll explain everything as we go.&lt;/p&gt;
&lt;h3&gt;
  
  
  What's the Goal Here?
&lt;/h3&gt;

&lt;p&gt;Imagine asking a chatbot, &lt;code&gt;Find my presentation about Q3 results,&lt;/code&gt; and &lt;em&gt;bam&lt;/em&gt;, it digs through your Google Drive and gives you the link.&lt;/p&gt;

&lt;p&gt;That's exactly the kind of thing we wanted to enable an AI agent that can securely connect to your personal tools, like Google Drive in this case.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5gk5j60tpq3w5pevq0p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5gk5j60tpq3w5pevq0p.png" alt="Image 1" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9c02g5yh9fegd5pnr7l2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9c02g5yh9fegd5pnr7l2.png" alt="Image 2" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyja0bs6mna0mzrzejuri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyja0bs6mna0mzrzejuri.png" alt="Image 3" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The Tools We Need
&lt;/h2&gt;

&lt;p&gt;To make this chatbot work, we needed a few essential pieces:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. VoltAgent: Our Agent Framework
&lt;/h3&gt;

&lt;p&gt;So, first things first: &lt;a href="https://github.com/VoltAgent/voltagent" rel="noopener noreferrer"&gt;VoltAgent&lt;/a&gt;. This is our baby, an open-source TypeScript framework we built specifically to make creating AI agents less painful. We've all been there, trying to cobble together different AI models, memory systems, and tool connections. It gets messy fast!&lt;/p&gt;

&lt;p&gt;VoltAgent provides a structured way to do this. We designed it to be modular, so you can easily swap AI models (like GPT-4), manage how the agent remembers things, and crucially for this example hook up external tools and data sources, like Google Drive.&lt;/p&gt;

&lt;p&gt;Our goal was to help developers (including ourselves!) build sophisticated agents faster while keeping the codebase clean and maintainable.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Composio: The Secure Bridge for Tools
&lt;/h3&gt;

&lt;p&gt;Now, how does our VoltAgent-powered agent actually &lt;em&gt;talk&lt;/em&gt; to Google Drive? We needed a secure and straightforward way to handle that connection. Wrestling with Google's APIs and authentication flows directly can be time-consuming.&lt;/p&gt;

&lt;p&gt;This is where we decided to use &lt;a href="https://composio.dev/" rel="noopener noreferrer"&gt;Composio&lt;/a&gt;. They offer ready-made, secure connections to a &lt;em&gt;ton&lt;/em&gt; of applications (&lt;a href="https://mcp.composio.dev/" rel="noopener noreferrer"&gt;hundreds, actually!&lt;/a&gt;), including the &lt;a href="https://mcp.composio.dev/googledrive" rel="noopener noreferrer"&gt;Google Drive&lt;/a&gt; integration we needed.&lt;/p&gt;

&lt;p&gt;Instead of us building and maintaining the whole OAuth dance and API logic, Composio provides a secure "bridge" or tool that our agent can use. And the way it provides this tool is through a standard called MCP.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. MCP (Model Context Protocol): A Common Language for Agents and Tools
&lt;/h3&gt;

&lt;p&gt;Think of MCP as a universal translator. It's a standardized way for AI agents (like those built with VoltAgent) and external tools (like the Google Drive connection from Composio) to communicate securely and effectively.&lt;/p&gt;

&lt;p&gt;We made sure VoltAgent understands MCP precisely because it simplifies integrations so much. Composio's tool speaks MCP, VoltAgent speaks MCP, and &lt;em&gt;boom&lt;/em&gt; they can talk to each other without us needing to write a bunch of custom glue code.&lt;/p&gt;

&lt;p&gt;It's like having standard USB ports for AI tools. Composio conveniently hosts these MCP connection points (called "servers" or "endpoints"), so we didn't even need to worry about running or deploying that part ourselves.&lt;/p&gt;

&lt;p&gt;### &lt;strong&gt;The TL;DR:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VoltAgent:&lt;/strong&gt; Our framework for building the agent's logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composio:&lt;/strong&gt; Provides the pre-built, secure Google Drive tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP:&lt;/strong&gt; The standard protocol that lets VoltAgent use Composio's tool easily.
###&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Let's Get it Running!
&lt;/h2&gt;

&lt;p&gt;The best part? We've packaged everything into a ready-to-use template, no need to start from scratch. Since we'll be sharing many VoltAgent tutorials, in this post we'll focus on an example MCP integration rather than walking through a full VoltAgent setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Grab the Example Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pop open your terminal and run this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm create voltagent-app@latest -- --example with-google-drive-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command uses our &lt;code&gt;create-voltagent-app&lt;/code&gt; tool to fetch the complete project code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Jump Into the Project Directory&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;with-google-drive-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Install Dependencies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our example has two main parts: the &lt;code&gt;server&lt;/code&gt; (where the VoltAgent logic runs) and the &lt;code&gt;client&lt;/code&gt; (the simple chat interface you'll see in your browser). We need to install the necessary Node.js packages for both.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install server dependencies&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;server
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Go back and install client dependencies&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ../client
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Go back to the project root&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Configure Your API Keys&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The agent needs credentials to talk to OpenAI (for the AI model) and Composio (for the Google Drive tool).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate into the &lt;code&gt;server&lt;/code&gt; directory (&lt;code&gt;cd server&lt;/code&gt; if you're in the root).&lt;/li&gt;
&lt;li&gt;Create a new file named &lt;code&gt;.env&lt;/code&gt; (just &lt;code&gt;.env&lt;/code&gt;, no name before the dot).&lt;/li&gt;
&lt;li&gt;Paste the following into your new &lt;code&gt;server/.env&lt;/code&gt; file:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  # Get your Composio API key from https://app.composio.dev/developers
  COMPOSIO_API_KEY="your_composio_api_key"

  # Get your Google Drive Integration ID from Composio (https://app.composio.dev/app/googledrive)
  # You might need to add the Google Drive app in Composio first.
  GOOGLE_INTEGRATION_ID="your_google_integration_id"

  # Get your OpenAI API key from https://platform.openai.com/api-keys
  OPENAI_API_KEY="your_openai_api_key"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Now, replace the placeholder values:

&lt;ul&gt;
&lt;li&gt;Log into &lt;a href="https://app.composio.dev/" rel="noopener noreferrer"&gt;Composio&lt;/a&gt;. Find your API Key under Developer settings and paste it in.&lt;/li&gt;
&lt;li&gt;In Composio, go to the Apps section, find (or add) Google Drive, and copy its Integration ID. Paste that in.&lt;/li&gt;
&lt;li&gt;Head over to &lt;a href="https://platform.openai.com/api-keys" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt; to get your API key and paste it in.&lt;/li&gt;
&lt;li&gt;Save the &lt;code&gt;.env&lt;/code&gt; file. &lt;strong&gt;Remember to keep these keys private!&lt;/strong&gt; Don't commit them to Git.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Start the App&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You'll need two separate terminal windows for this.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terminal 1: Start the Server&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="c"&gt;# Make sure you're in the project root `with-google-drive-mcp` first&lt;/span&gt;
  &lt;span class="nb"&gt;cd &lt;/span&gt;server
  npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see some output indicating the server is running, usually on &lt;code&gt;http://localhost:3000&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terminal 2: Start the Client&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="c"&gt;# Make sure you're in the project root `with-google-drive-mcp` first&lt;/span&gt;
  &lt;span class="nb"&gt;cd &lt;/span&gt;client
  npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command usually opens the chat interface automatically in your default web browser (likely at &lt;code&gt;http://localhost:5173&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Connect Google Drive &amp;amp; Start Chatting!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first time you load the web interface, Composio will likely guide you through a quick process to authorize access to your Google Account (securely, using OAuth). Once you've done that, you're ready! You can start asking the chatbot to find files in your Google Drive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seeing What's Going On: Observability
&lt;/h2&gt;

&lt;p&gt;When we build agents, figuring out &lt;em&gt;why&lt;/em&gt; they did something (or why they failed) is super important. That's observability. We knew this would be critical, so we built observability features right into VoltAgent.&lt;/p&gt;

&lt;p&gt;You can easily connect your VoltAgent applications to the &lt;a href="https://console.voltagent.dev" rel="noopener noreferrer"&gt;VoltAgent Console&lt;/a&gt;. It gives you detailed logs and traces, showing exactly what steps the agent took, which tools it called (like the Google Drive search), the data flowing in and out, and any errors that occurred. It makes debugging and just understanding the agent's behavior &lt;em&gt;so&lt;/em&gt; much easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;And that's pretty much it! By combining our VoltAgent framework with Composio's handy MCP-based tool integration, we were able to quickly spin up a useful chatbot that talks securely to Google Drive. We think this example really shows the power of using standardized protocols like MCP and frameworks like VoltAgent to accelerate agent development.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;create-voltagent-app&lt;/code&gt; command makes trying out examples like this a breeze. We encourage you to grab the code, play around with it, check out the &lt;a href="https://voltagent.dev/docs/" rel="noopener noreferrer"&gt;VoltAgent documentation&lt;/a&gt;, and see what kinds of cool agents &lt;em&gt;you&lt;/em&gt; can build. Let us know what you create!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Building a RAG Chatbot with VoltAgent</title>
      <dc:creator>Necati Özmen</dc:creator>
      <pubDate>Fri, 25 Apr 2025 10:50:31 +0000</pubDate>
      <link>https://forem.com/voltagent/building-a-rag-chatbot-with-voltagent-oo6</link>
      <guid>https://forem.com/voltagent/building-a-rag-chatbot-with-voltagent-oo6</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/voltagent/voltagent" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t62q2lmxg6lp76jfwte.png" alt=" " width="800" height="266"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Chatbots have become incredibly useful, haven't they? From customer support to personal assistants, they handle conversations pretty well. But sometimes, standard chatbots hit a wall – their knowledge is limited to what they were trained on.&lt;/p&gt;

&lt;p&gt;What if you want your chatbot to answer questions based on specific documents, recent data, or a private knowledge base?&lt;/p&gt;

&lt;p&gt;That's where &lt;strong&gt;Retrieval-Augmented Generation (RAG)&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;Steps we'll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What RAG (Retrieval-Augmented Generation) is and why it's useful.&lt;/li&gt;
&lt;li&gt;How VoltAgent's Retriever system facilitates RAG.&lt;/li&gt;
&lt;li&gt;Setting up a VoltAgent project.&lt;/li&gt;
&lt;li&gt;Implementing a custom &lt;code&gt;BaseRetriever&lt;/code&gt; with a simple knowledge base.&lt;/li&gt;
&lt;li&gt;Creating a VoltAgent &lt;code&gt;Agent&lt;/code&gt; that uses the retriever directly.&lt;/li&gt;
&lt;li&gt;Running and testing the RAG chatbot using the VoltAgent Console.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What is RAG, and Why Use It?
&lt;/h2&gt;

&lt;p&gt;At its core, RAG is a technique that helps Large Language Models (LLMs) like the ones powering chatbots become smarter by giving them access to external information &lt;em&gt;before&lt;/em&gt; they generate a response.&lt;/p&gt;

&lt;p&gt;Think of it like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval:&lt;/strong&gt; When you ask a RAG-enabled chatbot a question, it first &lt;em&gt;retrieves&lt;/em&gt; relevant snippets of information from a predefined data source (like documents, databases, or websites).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Augmentation:&lt;/strong&gt; This retrieved information (the "context") is then &lt;em&gt;added&lt;/em&gt; to your original question.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generation:&lt;/strong&gt; Finally, the LLM receives the combined prompt (your question + the retrieved context) and &lt;em&gt;generates&lt;/em&gt; an answer that's grounded in that specific information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result? Chatbots that can provide more accurate, up-to-date, and contextually relevant answers, going beyond their built-in knowledge. I find this incredibly powerful for building bots that need to know about specific product documentation, internal company policies, or recent news.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0rf3f5cahh026sk6srj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0rf3f5cahh026sk6srj.png" alt="Flow" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Introducing VoltAgent
&lt;/h2&gt;

&lt;p&gt;Before we dive into building, let me briefly mention &lt;a href="https://github.com/VoltAgent/voltagent" rel="noopener noreferrer"&gt;&lt;strong&gt;VoltAgent&lt;/strong&gt;&lt;/a&gt;. It's a TypeScript framework I've been working with that makes building sophisticated AI agents (like our RAG chatbot) much simpler. It handles a lot of the boilerplate, letting me focus on the core logic of my agents, including how they retrieve and use information.&lt;/p&gt;
&lt;h2&gt;
  
  
  VoltAgent's Retriever System
&lt;/h2&gt;

&lt;p&gt;VoltAgent provides a streamlined way to implement RAG through its &lt;strong&gt;Retriever&lt;/strong&gt; system. The key component is the &lt;code&gt;BaseRetriever&lt;/code&gt; abstract class (you can find it in &lt;code&gt;@voltagent/core&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;To add RAG capabilities to your agent, you essentially need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Create a Custom Retriever:&lt;/strong&gt; Extend &lt;code&gt;BaseRetriever&lt;/code&gt; and implement the &lt;code&gt;retrieve&lt;/code&gt; method. This method contains your logic for fetching relevant data from your chosen source based on the user's input.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Connect it to an Agent:&lt;/strong&gt; VoltAgent offers two main ways to do this, as detailed in the &lt;a href="https://dev.to/docs/agents/retriever"&gt;Retriever documentation&lt;/a&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Direct Attachment (&lt;code&gt;agent.retriever&lt;/code&gt;):&lt;/strong&gt; The retriever runs automatically &lt;em&gt;before every&lt;/em&gt; LLM call for that agent. Simple, ensures context is always fetched.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;As a Tool (&lt;code&gt;agent.tools&lt;/code&gt;):&lt;/strong&gt; The LLM decides &lt;em&gt;when&lt;/em&gt; to call the retriever tool based on the conversation. More efficient and flexible, especially if retrieval isn't always needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;For this tutorial, we'll use the &lt;strong&gt;direct attachment&lt;/strong&gt; method for simplicity. Our agent will always try to fetch context from its small knowledge base before answering.&lt;/p&gt;
&lt;h2&gt;
  
  
  Let's Build a Simple RAG Chatbot
&lt;/h2&gt;

&lt;p&gt;Okay, theory's great, but let's get hands-on. I'll show you how I built a basic RAG chatbot using VoltAgent that answers questions based on a small, hardcoded set of facts about VoltAgent itself.&lt;/p&gt;
&lt;h3&gt;
  
  
  Setting Up the Project
&lt;/h3&gt;

&lt;p&gt;The easiest way to start a new VoltAgent project is using the &lt;code&gt;create-voltagent-app&lt;/code&gt; CLI tool. For this example, let's name our project &lt;code&gt;with-rag-chatbot&lt;/code&gt;. Open your terminal and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create voltagent-app@latest with-rag-chatbot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will guide you through the setup process. (For more details on using the CLI or setting up manually, check the &lt;a href="https://dev.to/docs/quick-start"&gt;Quick Start guide&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;After the setup, navigate into your new project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;with-rag-chatbot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CLI sets up a standard project structure for you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;with-rag-chatbot/
├── src/
│   └── index.ts     # Our main agent logic will go here
├── package.json     # Project dependencies
├── tsconfig.json    # TypeScript config
├── .gitignore       # Git ignore rules
└── .env             # API keys (important!) - created automatically or you add it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The generated &lt;code&gt;package.json&lt;/code&gt; will be similar to these (though versions might differ slightly):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;package.json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(Example)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(scripts,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;name:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"with-rag-chatbot"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;etc.)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@ai-sdk/openai"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;chosen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;LLM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;SDK&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@voltagent/core"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@voltagent/vercel-ai"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;chosen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;provider&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"zod"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(devDependencies)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, let's focus on the code inside &lt;code&gt;src/index.ts&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementing the Retriever and Agent
&lt;/h3&gt;

&lt;p&gt;This is where the magic happens. In &lt;code&gt;src/index.ts&lt;/code&gt;, I defined a simple retriever and an agent that uses it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//src/index.ts

import { VoltAgent, Agent, BaseRetriever, type BaseMessage } from "@voltagent/core";
import { VercelAIProvider } from "@voltagent/vercel-ai";
import { openai } from "@ai-sdk/openai";

// --- Simple Knowledge Base Retriever ---

class KnowledgeBaseRetriever extends BaseRetriever {
  // Our tiny "knowledge base"
  private documents = [
    {
      id: "doc1",
      content: "What is VoltAgent? VoltAgent is a TypeScript framework for building AI agents.",
    },
    {
      id: "doc2",
      content:
        "What features does VoltAgent support? VoltAgent supports tools, memory, sub-agents, and retrievers for RAG.",
    },
    { id: "doc3", content: "What is RAG? RAG stands for Retrieval-Augmented Generation." },
    {
      id: "doc4",
      content:
        "How can I test my agent? You can test VoltAgent agents using the VoltAgent Console.",
    },
  ];

  // Reverting to simple retrieve logic
  async retrieve(input: string | BaseMessage[]): Promise&amp;lt;string&amp;gt; {
    const query = typeof input === "string" ? input : (input[input.length - 1].content as string);
    const queryLower = query.toLowerCase();
    console.log(`[KnowledgeBaseRetriever] Searching for context related to: "${query}"`);

    // Simple includes check
    const relevantDocs = this.documents.filter((doc) =&amp;gt;
      doc.content.toLowerCase().includes(queryLower)
    );

    if (relevantDocs.length &amp;gt; 0) {
      const contextString = relevantDocs.map((doc) =&amp;gt; `- ${doc.content}`).join("\n");
      console.log(`[KnowledgeBaseRetriever] Found context:\n${contextString}`);
      return `Relevant Information Found:\n${contextString}`;
    }

    console.log("[KnowledgeBaseRetriever] No relevant context found.");
    return "No relevant information found in the knowledge base.";
  }
}

// --- Agent Definition ---

// Instantiate the retriever
const knowledgeRetriever = new KnowledgeBaseRetriever();

// Define the agent that uses the retriever directly
const ragAgent = new Agent({
  name: "RAG Chatbot",
  description: "A chatbot that answers questions based on its internal knowledge base.",
  llm: new VercelAIProvider(), // Using Vercel AI SDK Provider
  model: openai("gpt-4o-mini"), // Using OpenAI model via Vercel
  // Attach the retriever directly
  retriever: knowledgeRetriever,
});

// --- VoltAgent Initialization ---

new VoltAgent({
  agents: {
    // Make the agent available under the key 'ragAgent'
    ragAgent,
  },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Code Breakdown:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;KnowledgeBaseRetriever&lt;/code&gt;:&lt;/strong&gt; Extends &lt;code&gt;BaseRetriever&lt;/code&gt;. It holds a small array of &lt;code&gt;documents&lt;/code&gt;. The &lt;code&gt;retrieve&lt;/code&gt; method performs a simple case-insensitive search. If it finds matches, it formats them into a string prefixed with "Relevant Information Found:"; otherwise, it returns a "not found" message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ragAgent&lt;/code&gt;:&lt;/strong&gt; An &lt;code&gt;Agent&lt;/code&gt; instance.

&lt;ul&gt;
&lt;li&gt;We give it a name and description.&lt;/li&gt;
&lt;li&gt;We configure the &lt;code&gt;llm&lt;/code&gt; provider and &lt;code&gt;model&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Crucially, we set &lt;code&gt;retriever: knowledgeRetriever&lt;/code&gt;. This tells VoltAgent to automatically run our retriever before calling the LLM.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;systemPrompt&lt;/code&gt; is important here. It explicitly tells the LLM to base its answers &lt;em&gt;only&lt;/em&gt; on the "Relevant Information Found" (which our retriever provides) and what to do if no information is found. This helps prevent the LLM from falling back on its general knowledge.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;new VoltAgent(...)&lt;/code&gt;:&lt;/strong&gt; Initializes the VoltAgent server and registers our &lt;code&gt;ragAgent&lt;/code&gt;.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Running the Agent
&lt;/h3&gt;

&lt;p&gt;Before running, you need an API key for your chosen LLM provider (like OpenAI).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Create &lt;code&gt;.env&lt;/code&gt; file:&lt;/strong&gt; In the root of your &lt;code&gt;with-rag-chatbot&lt;/code&gt; project folder, create a file named &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Add API Key:&lt;/strong&gt; Add your key like this:&lt;br&gt;
&lt;code&gt;bash title=".env"&lt;br&gt;
OPENAI_API_KEY=your_openai_api_key_here&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
(Replace &lt;code&gt;your_openai_api_key_here&lt;/code&gt; with your actual key).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install Dependencies:&lt;/strong&gt; Open your terminal &lt;em&gt;inside&lt;/em&gt; the &lt;code&gt;with-rag-chatbot&lt;/code&gt; directory and run:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Start the Agent:&lt;/strong&gt; Run the development server:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the VoltAgent server startup message, including a link to the Developer Console:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;══════════════════════════════════════════════════
  VOLTAGENT SERVER STARTED SUCCESSFULLY
══════════════════════════════════════════════════
  ✓ HTTP Server: http://localhost:3141

  Developer Console:    https://console.voltagent.dev
══════════════════════════════════════════════════
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Testing in the Console
&lt;/h3&gt;

&lt;p&gt;Now for the fun part!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Open Console:&lt;/strong&gt; Go to &lt;a href="https://console.voltagent.dev" rel="noopener noreferrer"&gt;&lt;code&gt;https://console.voltagent.dev&lt;/code&gt;&lt;/a&gt; in your browser.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Find Agent:&lt;/strong&gt; You should see your "RAG Chatbot" listed. Click on it.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Chat:&lt;/strong&gt; Click the chat icon (usually bottom-right) to open the chat window.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Ask Questions:&lt;/strong&gt; Try asking questions related to the &lt;code&gt;documents&lt;/code&gt; in our retriever:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;What is VoltAgent?&lt;/code&gt; (Should use doc1)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;What features does VoltAgent support?&lt;/code&gt; (Should use doc2)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;How can I test my agent?&lt;/code&gt; (Should use doc4)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;What is the capital of France?&lt;/code&gt; (Should state it can't answer based on its knowledge base, because of our system prompt and lack of relevant documents).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Observe the responses. They should be directly based on the content from the &lt;code&gt;documents&lt;/code&gt; array we provided! You can also check your terminal where you ran &lt;code&gt;npm run dev&lt;/code&gt; - you'll see the logs from the &lt;code&gt;KnowledgeBaseRetriever&lt;/code&gt; showing what context (if any) was found for each query.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;As you can see, implementing a basic RAG system with VoltAgent is quite straightforward. By creating a custom &lt;code&gt;BaseRetriever&lt;/code&gt; and attaching it to an &lt;code&gt;Agent&lt;/code&gt;, I could quickly build a chatbot grounded in specific external knowledge.&lt;/p&gt;

&lt;p&gt;This simple example uses hardcoded data, but you could easily adapt the &lt;code&gt;KnowledgeBaseRetriever&lt;/code&gt; to fetch data from a real database, API, or vector store for much more powerful applications. RAG opens up a lot of possibilities for creating smarter, more knowledgeable AI agents, and I think VoltAgent makes it significantly easier to get started.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
