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 на основе пользовательских запросов. Например:
- E-commerce: показ заказов, фильтрация товаров.
- Аналитика: рендеринг графиков и таблиц с данными.
- CRM: отображение информации о клиентах и их взаимодействиях.
Интеграция с существующими React-компонентами и использование Zod для описания пропсов делает процесс разработки максимально гибким и безопасным.
Заключение
Tambo 1.0 открывает новые возможности для создания интерактивных AI-функций в React-приложениях. Интеграция с Zod, динамический рендеринг компонентов и поддержка состояния делают этот инструмент мощным решением для разработчиков. Попробуйте Tambo в своих проектах и поделитесь обратной связью — это поможет сделать инструмент еще лучше.
Ресурсы:
- GitHub: Tambo Repo
- Документация: Tambo Docs
Источник: https://github.com/tambo-ai/tambo