Tambo 1.0: open-source toolkit для создания агентов, рендерящих React-компоненты

#react#ai#zod#frontend#opensource

TL;DR: Tambo 1.0 — это open-source toolkit для создания AI-агентов, которые динамически рендерят React-компоненты на основе пользовательских запросов. Интеграция с Zod позволяет описывать пропсы компонентов, а агент автоматически выбирает и рендерит нужные компоненты с реальными данными.

Введение

Сегодня большинство AI-функций в приложениях ограничиваются чат-интерфейсами, которые выводят текстовые ответы. Однако, когда пользователь запрашивает что-то вроде “покажи мои последние заказы”, он ожидает увидеть интерактивную таблицу, а не текстовый блок. Tambo решает эту проблему, позволяя интегрировать AI-агентов с существующими React-компонентами и рендерить их динамически на основе пользовательских запросов.

Основная часть

Регистрация компонентов

Tambo позволяет регистрировать ваши React-компоненты и описывать их пропсы с использованием Zod-схем. Это делает компоненты доступными для агента, который может выбирать их в зависимости от контекста запроса.

Пример регистрации компонента:

import { z } from "zod";
import { registerComponent } from "@tambo/react";

const OrderTableProps = z.object({
  orders: z.array(z.object({
    id: z.string(),
    date: z.string(),
    total: z.number(),
  })),
});

registerComponent("OrderTable", OrderTableProps);

Динамический рендеринг

Когда пользователь делает запрос, агент анализирует контекст и выбирает подходящий компонент. Пропсы компонента генерируются динамически и передаются в режиме реального времени.

Пример использования:

import { useAgent } from "@tambo/react";

function App() {
  const { renderComponent } = useAgent();

  return (
    <div>
      {renderComponent("OrderTable", { orders: recentOrders })}
    </div>
  );
}

Состояние и идентификация

Состояние компонентов передается агенту, что позволяет ему отслеживать изменения и взаимодействовать с ними. Если в потоке появляются несколько экземпляров одного компонента, каждый из них сохраняет свою уникальную идентичность.

Пример обработки состояния:

function OrderTable({ orders }) {
  const [sortedOrders, setSortedOrders] = useState(orders);

  const handleSort = (key) => {
    const sorted = [...sortedOrders].sort((a, b) => (a[key] > b[key] ? 1 : -1));
    setSortedOrders(sorted);
  };

  return (
    <table>
      <thead>
        <tr>
          <th onClick={() => handleSort("date")}>Date</th>
          <th onClick={() => handleSort("total")}>Total</th>
        </tr>
      </thead>
      <tbody>
        {sortedOrders.map((order) => (
          <tr key={order.id}>
            <td>{order.date}</td>
            <td>{order.total}</td>
          </tr>
        ))}
      </tbody>
    </table>
  );
}

Практическое применение

Tambo идеально подходит для приложений, где требуется динамическая генерация UI на основе пользовательских запросов. Например:

Интеграция с существующими React-компонентами и использование Zod для описания пропсов делает процесс разработки максимально гибким и безопасным.

Заключение

Tambo 1.0 открывает новые возможности для создания интерактивных AI-функций в React-приложениях. Интеграция с Zod, динамический рендеринг компонентов и поддержка состояния делают этот инструмент мощным решением для разработчиков. Попробуйте Tambo в своих проектах и поделитесь обратной связью — это поможет сделать инструмент еще лучше.

Ресурсы:


Источник: https://github.com/tambo-ai/tambo