Возможна ли такая автоматизация с помощью Discourse AI сегодня?

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

У нас есть черновая категория, где менеджеры по продуктовому маркетингу готовят анонсы продуктов для публикации. Когда они создают черновик, мы анализируем название продукта, версию и тип релиза (основной/малый/патч). Кроме того, мы берем текст объявления и с помощью LLM генерируем краткое описание длиной от 4 до 7 слов.

Затем мы используем эти данные для создания баннера анонса в Adobe, как показано ниже:

Мне кажется, что это можно реализовать с помощью LLM и традиционной логики:

  • Фон — это один оттенок для каждого типа анонса, и существует четыре варианта каждого цвета; мы просто выбираем один случайным образом.
  • Название продукта и версия вносятся в поля в верхней части.
  • Описание размещается в центре по середине.
  • Мы используем https://storyset.com/, чтобы быстро создать иллюстрацию и разместить её справа.

У меня есть хороший подход к реализации этого через n8n, но я задаюсь вопросом: можно ли сделать это нативно с помощью Discourse AI и других инструментов?

3 лайка

Персона Дизайнера, использующая превосходную новую модель GPT Image 1, способна выполнять подобные задачи:

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

4 лайка

Примечание по использованию пользовательских инструментов: при наличии корректных REST API интеграция выполняется легко. Вот пример того, как я интегрируюсь с генерацией изображений Flux:

const apiKey = "password";
const model = "black-forest-labs/FLUX.1.1-pro";

let prompt;

function invoke(params) {
  let seed = parseInt(params.seed);
  if (!(seed > 0)) {
    seed = Math.floor(Math.random() * 1000000) + 1;
  }

  let height = parseInt(params.height);
  if (!height || height < 256 || height > 1440) {
      height = 768;
  }
  let width = parseInt(params.width);
  if (!width || width < 256 || width > 1440) {
      width = 1024;
  }
  
  width = width - (width % 32);
  height = height - (height %32);

  prompt = params.prompt;
  const negative_prompt = params.negative_prompt || "";
  const body = {
    model: model,
    prompt: prompt,
    width: width,
    height: height,
    steps: 10,
    n: 1,
    seed: seed,
    negative_prompt: negative_prompt,
    response_format: "b64_json",
  };

  const result = http.post("https://api.together.xyz/v1/images/generations", {
    headers: {
      "Authorization": `Bearer ${apiKey}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(body),
  });
  
  if (result.status !== 200) {
      return { error: true, body: result.body };
  }

  const base64Image = JSON.parse(result.body).data[0].b64_json;
  const image = upload.create("generated_image.png", base64Image);
  const raw = `
![${prompt}](${image.short_url})
`;
  
  if (!params.show_to_user === false) {
     chain.setCustomRaw(raw);
  }

  return { result: "Изображение успешно сгенерировано", prompt: prompt, url: image.url, seed: seed, negative_prompt: negative_prompt };
}

function details() {
  return prompt;
}

В примере вы можете увидеть HTTP-запрос POST и парсинг изображения в формате Base64.

5 лайков

Если предоставлено тело сообщения, лежит ли на Discourse AI обязанность прочитать это содержимое и преобразовать его в корректные параметры, создав объект запроса? Или же необработанное содержимое следует передать инструменту, и обязанность по парсингу этого содержимого языковой моделью (LLM) для извлечения необходимых данных и построения корректного ввода для её API-вызова должна лежать там?

1 лайк

Да, в этом случае у инструмента уже есть API для чтения постов, поэтому вы можете просто передать ID.

2 лайка

Не могли бы вы случайно подсказать мне документацию по этому вопросу?

Извините за задержку с ответом. Ситуация непростая: наша документация постоянно обновляется, а функционал API расширяется каждую неделю.

Такой подход позволяет получать достаточно точные и актуальные данные о пробеге, но, на мой взгляд, нам стоит немного подождать, пока API полностью стабилизируется, прежде чем принимать окончательные решения:

2 лайка