RubyLLM hizo de 2026 el año de los agentes Ruby AI. Los equipos de Rails que crean funciones de agentes dentro de aplicaciones existentes quieren integraciones HTTP primero, no SDK pesados. Este tutorial conecta RubyLLM más Scavio a una aplicación Rails con una herramienta de búsqueda funcional.
Requisitos previos
- Rieles 8+
- Rubí 3.3+
- Una clave API de Scavio
- La gema ruby_llm
Guia paso a paso
Paso 1: Agrega la gema ruby_llm
RubyLLM envía un agente DSL con soporte de herramientas.
bundle add ruby_llm
bundle add faradayPaso 2: Crear una clase de herramienta Scavio
Cualquier Ruby invocable funciona como una herramienta RubyLLM.
# app/agents/tools/scavio_search.rb
class ScavioSearch
include RubyLLM::Tool
description 'Search the web across Google, Reddit, and YouTube.'
param :query, type: :string
def execute(query:)
res = Faraday.post('https://api.scavio.dev/api/v1/search',
{ query: query }.to_json,
{ 'x-api-key' => ENV['SCAVIO_API_KEY'], 'Content-Type' => 'application/json' })
JSON.parse(res.body).dig('organic_results') || []
end
endPaso 3: Definir el agente
El agente DSL de RubyLLM vincula herramientas al bucle de chat.
# app/agents/research_agent.rb
class ResearchAgent < RubyLLM::Agent
model 'claude-sonnet-4-6'
tools ScavioSearch
system_prompt 'Research agent. Cite every claim.'
endPaso 4: Llamar al agente desde un controlador
Funciona en un controlador Rails o en un trabajo en segundo plano.
# app/controllers/research_controller.rb
class ResearchController < ApplicationController
def create
result = ResearchAgent.chat(params[:question])
render json: { answer: result }
end
endPaso 5: Cablear una ruta de prueba
Verifique de un extremo a otro en el navegador.
# config/routes.rb
post '/research', to: 'research#create'
# curl: curl -XPOST localhost:3000/research -d 'question=what is rubyllm'Ejemplo en Python
# Ruby tutorial; Python parity call:
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': 'rubyllm 2026'})
print(r.json().get('organic_results', [])[:3])Ejemplo en JavaScript
// Ruby tutorial; JS parity call:
const API_KEY = process.env.SCAVIO_API_KEY;
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: 'rubyllm 2026' })
});
console.log(((await r.json()).organic_results || []).slice(0, 3));Salida esperada
Rails endpoint returns agent answers grounded in Scavio search results. Works inside synchronous controllers or Sidekiq jobs.