В мы рассмотрели роль Опала как управляющего рабочим процессом ИИ в стеке оптимиза. Теперь давайте пойдем глубже и посмотрим, как вы можете продлить Opal с помощью своего собственного кода. Opal-это не просто интерфейс чата-он может вызвать пользовательские конечные точки HTTP («Инструменты») и включить результаты непосредственно в многоэтапные рабочие процессы.
Этот пост показывает, как:
- Создайте пользовательский инструмент Opal в TypeScript (и .NET для сравнения)
- Выставить его на опал через конечную точку обнаружения
- Вызовы с оптимизированными API (ODP или экспериментированием функции) внутри инструмента
- Подключить его в агент, который работает внутри рабочего процесса
Opal обнаруживает ваш инструмент через конечную точку Discovery (/opal/discovery) это описывает доступные функции. Во время выполнения Opal опубликует JSON в вашу конечную точку выполнения, а ваш инструмент возвращает структурированный JSON обратно.
Эта модель позволяет легко закрепить пользовательскую логику. Ваш инструмент может позвонить:
- Оптимизированная платформа данных (ODP) для данных клиента или продукта
- Особенности экспериментов для создания или чтения экспериментов
- Внутренние API, такие как PIM, плотины или аналитические услуги
Пока вы возвращаете JSON, который соответствует вашей заявленной схеме, Opal может использовать ее внутри агента или рабочего процесса.
Давайте создадим минимальный инструмент, который получает детали продукта от SKU.
// server.ts
import express from "express";
import { z } from "zod";
const app = express();
app.use(express.json());
// Discovery endpoint
app.get("/opal/discovery", (_req, res) => {
res.json({
toolId: "com.example.catalog",
name: "Catalog Lookup Tool",
description: "Lookup product details by SKU",
endpoints: [
{
id: "catalog-lookup",
method: "POST",
path: "/tools/catalog-lookup",
inputSchema: {
type: "object",
properties: { sku: { type: "string" } },
required: ["sku"]
},
outputSchema: {
type: "object",
properties: {
sku: { type: "string" },
title: { type: "string" },
price: { type: "number" },
availability: { type: "string" }
},
required: ["sku", "title"]
}
}
]
});
});
// Execution endpoint
app.post("/tools/catalog-lookup", (req, res) => {
const Input = z.object({ sku: z.string().min(1) });
const parsed = Input.safeParse(req.body);
if (!parsed.success) return res.status(400).json({ error: parsed.error });
const { sku } = parsed.data;
// TODO: replace with ODP or Commerce API call
res.json({
sku,
title: "Contoso Road Helmet",
price: 129.99,
availability: "in_stock"
});
});
app.listen(3000, () => console.log("Opal tool listening on :3000"));
Опал теперь сможет обнаружить и вызов эта функция.
.Net минимальная версия API
Вот та же концепция в .net 8:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/opal/discovery", () => Results.Json(new {
toolId = "com.example.catalog",
name = "Catalog Lookup Tool",
endpoints = new [] {
new {
id = "catalog-lookup",
method = "POST",
path = "/tools/catalog-lookup",
inputSchema = new {
type = "object",
properties = new { sku = new { type = "string" } },
required = new [] { "sku" }
},
outputSchema = new {
type = "object",
properties = new {
sku = new { type = "string" },
title = new { type = "string" },
price = new { type = "number" },
availability = new { type = "string" }
},
required = new [] { "sku", "title" }
}
}
}
}));
app.MapPost("/tools/catalog-lookup", (CatalogInput input) =>
{
if (string.IsNullOrWhiteSpace(input?.sku))
return Results.BadRequest(new { error = "sku required" });
return Results.Json(new {
sku = input.sku,
title = "Contoso Road Helmet",
price = 129.99,
availability = "in_stock"
});
});
app.Run();
record CatalogInput(string sku);
- Разверните свой инструмент (например, служба приложений Azure, контейнер или внутренний шлюз API).
- В Opal создайте специализированный агент и прикрепите свой инструмент в качестве доступного действия.
- Напишите инструкции по чистоту агента, например:
Agent name: Catalog QA Agent
Purpose: Validate marketing copy against live catalog data.
Tools allowed: com.example.catalog.catalog-lookup
Guidance: Always call the tool with the SKU to verify product name and availability.
- Оставьте агента в шаг рабочего процесса в строителе Opal (например, после генерации контента, до проверки управления).
Ваш инструмент не должен быть игрушкой – он может оптимизировать API с оптимизацией, чтобы привлечь или нажимать данные:
Reample:
const odpResp = await fetch("https://api.zaius.com/v3/products?sku=" + sku, {
headers: { Authorization: `Bearer ${process.env.ODP_API_TOKEN}` }
});
const product = await odpResp.json();
Пример эксперимента:
await fetch("https://api.optimizely.com/v2/flags", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.OPTLY_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ key: "new_headline_test", /* ... */ })
});
С этими API ваш агент мог:
- Проверьте доступность продукта перед запуском кампаний
- Флаги или эксперименты с авто-созданием
- Персонализировать копию на основе сегментов клиентов
Операционные заметки
- Проверить входы/выходы (Zod, Fluentvalidation) для предсказуемых схем
- Используйте токены носителя через секреты опала, а не жесткие ключи
- Запросы на журнал с Опалом
requestIdДля наблюдения - Держите задержку низкой; Рабочие процессы могут перейти или параллелизировать шаги
- Версия конечные точки; Разрывные изменения должны получить новые идентификаторы
Заключение
Opal не ограничивается встроенным агентом, оптимизированным. Распределяя свои собственные конечные точки как пользовательские инструменты, вы можете расширить рабочие процессы с логикой, которые связываются непосредственно с вашими данными и API. В этой статье мы прошли через как:
- Создайте простой инструмент в TypeScript или .net с конечной точкой Discovery и конечной точкой выполнения JSON
- Возвращать структурированные, предсказуемые данные, чтобы опальные агенты могли надежно потреблять результаты
- Зарегистрируйте инструмент с помощью Opal и подключите его в специализированный агент для использования в рабочих процессах
- Вызовите реальные услуги с оптимизированным, таким как эксперименты ODP и функции для проверки данных, создания экспериментов или персонализировать выходы
- Применить передовые практики для обеспечения безопасности, проверки, наблюдения и управления версиями
Конечным результатом является то, что Opal становится больше, чем оркестратор рабочего процесса-это становится способом внедрить ваш собственный системный интеллект в процессы, управляемые искусственным интеллектом. Для разработчиков и архитекторов это обеспечивает практический и управляемый путь к соединению корпоративных систем с агентом ИИ.
Ещё по этой теме

