É possível uma automação como esta com Discourse AI hoje?

Há uma tarefa que fazemos hoje que consegui progredir bastante na automação usando n8n, mas estou me perguntando se é possível nativamente com o Discourse.

Temos uma categoria de rascunho onde os gerentes de marketing de produto redigem anúncios de produtos a serem enviados sobre seus produtos. Quando eles criam esse rascunho, olhamos o nome do produto, a versão, se é um lançamento principal/secundário/correção. Também pegamos o corpo do conteúdo do anúncio deles e o resumimos com um LLM para uma descrição de 4-7 palavras do conteúdo.

Em seguida, usamos isso para criar o banner de anúncio na Adobe, assim:

Sinto que isso poderia ser feito por um LLM e alguma lógica tradicional:

  • O fundo é apenas uma tonalidade por tipo de anúncio e existem quatro variações de cada cor — nós apenas selecionamos uma aleatoriamente.
  • O nome do produto e a versão são inseridos nas caixas no topo
  • A descrição no meio-centro do corpo lá
  • Usamos https://storyset.com/ para criar rapidamente uma ilustração para colocar à direita.

Sinto que tenho uma boa abordagem para fazer isso com n8n, mas me pergunto se poderia ser feito nativamente com o Discourse AI e outras ferramentas?

3 curtidas

A persona de Designer usando o excelente novo modelo GPT Image 1 é capaz de fazer coisas como esta:

Eu acho que você poderia configurar algo usando personas personalizadas e as ferramentas certas para alcançar muito disso, com certeza.

4 curtidas

Observação para uso de ferramentas personalizadas, desde que existam APIs REST adequadas, você pode se integrar facilmente, por exemplo, é assim que me integro à geração de imagens do 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: "Image generated successfully", prompt: prompt, url: image.url, seed: seed, negative_prompt: negative_prompt };
}

function details() {
  return prompt;
}

Você pode ver o post HTTP e o parsing da imagem base 64 na amostra.

5 curtidas

Se for fornecido um corpo de postagem, o ônus de transformar o conteúdo desse corpo em parâmetros válidos recai sobre o Discourse AI para ler o conteúdo e, em seguida, criar o objeto de solicitação? Ou o conteúdo bruto deve ser passado para a ferramenta e o ônus para um LLM analisar isso em busca dos dados necessários para construir uma entrada adequada para sua chamada de API existe lá?

1 curtida

Sim, nesse caso, a ferramenta já possui uma API para leitura de posts, então você pode simplesmente passar um ID.

2 curtidas

Você conseguiria me indicar a documentação disso por acaso?

Desculpe pela resposta tardia, é complicado, nossa documentação está evoluindo e a superfície da API está crescendo semanalmente.

Esse tipo de técnica fornece algumas milhas precisas e atualizadas, mas acho que precisamos esperar um pouco para que toda a API se estabilize antes de definir as coisas em pedra:

2 curtidas