오늘 수행하는 작업 중 하나를 n8n을 활용해 자동화하는 데 상당한 진전을 이루었는데, Discourse에서 네이티브로 가능할지 궁금합니다.
제품 마케팅 매니저들이 자사 제품 발표문을 작성하기 위한 초안 카테고리가 있습니다. 초안을 생성하면 제품명, 버전, 그리고 메이저/마이너/패치 릴리스 중 어느 것인지 확인합니다. 또한 발표문의 본문 내용을 가져와 LLM으로 요약하여 4~7단어의 설명을 생성합니다.
이 정보를 활용해 Adobe에서 다음과 같은 발표 배너를 생성합니다:
Netwrix is pleased to announce the general availability of Netwrix PolicyPak build number 25.2. With this release, you will be able to benefit from the following: PolicyPak - General End-of-Life for 32-bit PolicyPak This is a reminder that...
Reading time: 3 mins 🕑
Likes: 16 ❤
LLM과 전통적인 로직을 활용하면 이 작업을 수행할 수 있을 것 같습니다:
배경은 발표 유형별로 하나의 색조만 사용되며, 각 색상은 4가지 변형이 있습니다—그중 하나를 무작위로 선택합니다.
제품명과 버전은 상단의 박스에 입력됩니다.
본문 중앙에는 요약된 설명이 배치됩니다.
https://storyset.com/ 을 활용해 우측에 배치할 빠른 일러스트를 생성합니다.
n8n을 활용해 이 작업을 수행하는 좋은 접근법을 가지고 있지만, Discourse AI 및 기타 도구를 네이티브로 활용하여도 될지 궁금합니다.
3개의 좋아요
sam
(Sam Saffron)
5월 1, 2025, 1:46오전
3
The Designer persona using the excellent new GPT Image 1 model is capable of doing stuff like this:
AI Conversation with Us.anthropic.claude-3-7-sonnet-20250219-v1:0
sam : Help me make an announcement banner for PolicyPak 25.3: Client-Side Extension Enhancements. it should look modern and and include a banner. A bit about PolicyPak: Netwrix PolicyPak
netwrix.com/endpoint
CUSTOMER FEEDBACK
“Netwrix PolicyPak makes it much easier to comply with federal security mandates. In fact, in some cases, we would simply have no way
to implement the mandated settings without…
sonnet-3-7-thinking : [A modern, professional announcement banner for PolicyPak 25.3 featuring 'Client-Side Extension Enhancements' as the focus. The banner should have a clean, corporate tech aesthetic with a blue and white color scheme. Include the Netwrix logo and PolicyPak branding. The design should visualize endpoint management with subtle icons representing devices (laptops, desktops, mobile) connected acro…
sam : [This image announces PolicyPak version 25.3, highlighting "Client-Side Extension Enhancements" with an illustration of a person on a laptop next to a password graphic. (Captioned by AI)]
I was thinking more about this type of style.
try another prompt that emulates it a bit better.
...
Read full transcript
I think you could wire something up using custom presona and using the right tools to achieve a lot of this, for sure.
4개의 좋아요
sam
(Sam Saffron)
5월 1, 2025, 3:23오전
4
Note for custom tool usage, as long as there are proper REST APIs you can integrate easily, for example this is how I integrate with flux image generation:
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 = `

`;
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;
}
You can see the HTTP post and the parsing of the base 64 image in the sample.
5개의 좋아요
If given a post body, does the burden for turning content from that body into valid parameters fall on Discourse AI to read the content and then create the request object? Or should the raw content be passed onto the tool and the burden for an LLM parsing that for the necessary data to construct a proper input for its API call exist there?
1개의 좋아요
sam
(Sam Saffron)
5월 1, 2025, 4:04오전
6
Yes in that case the tool has an api already for reading posts so you can just pass an id in
2개의 좋아요
Would you be able to point me to the docs for this by chance?
sam
(Sam Saffron)
5월 12, 2025, 1:35오전
10
답변이 늦어 죄송합니다. 상황이 다소 까다롭고, 문서가 계속 발전하는 중이며 API 범위도 매주 확장되고 있기 때문입니다.
이러한 기법은 비교적 정확하고 최신의 마일리지 데이터를 제공할 수 있지만, 모든 API가 안정화되기까지는 조금 더 기다린 후 관련 사항을 확정해야 한다고 생각합니다:
AI Conversation with Gemini-2.5-pro:
sam: I need you to read discourse-ai/lib/personas/tool_runner.rb at main · discourse/discourse-ai · GitHu… gemini-2.5-pro: Okay, I can help with that!
First, I’ll need to fetch the content of the tool_runner.rb...
2개의 좋아요