허세임
허세임
⚔️ 베테랑 파트너
📹 SNS 찐친

Make 뉴스레터 자동화를 LangChain으로(2): Flux, HTML, Dropbox

안녕하세요 오늘은 제가 진행 중인 AI 뉴스레터 생성기 프로젝트의 2단계 개발 과정을 공유합니다. Flux를 이용한 이미지 생성, HTML 콘텐츠 조합, 그리고 Dropbox 통합으로 이루어져있습니다. 다만 랭체인에 대한 부분은 html 만드는부분에만 쓰입니다.

1. Flux를 이용한 이미지 생성

먼저, FAL.ai의 Flux 모델을 사용하여 뉴스레터용 이미지를 자동으로 생성하는 기능을 구현했습니다.

import fal_client

def generate_image(prompt):
    handler = fal_client.submit(
        "fal-ai/flux/dev",
        arguments={
            "prompt": prompt,
            "image_size": "landscape_16_9",
            "num_inference_steps": 28,
            "guidance_scale": 3.5,
            "num_images": 1
        },
    )

    result = handler.get()
    return result["images"][0]["url"]

이 함수는 주어진 프롬프트를 기반으로 이미지를 생성하고, 생성된 이미지의 URL을 반환합니다. Flux 모델의 장점은 high-quality 이미지를 빠르게 생성할 수 있다는 점입니다.

2. HTML 콘텐츠 생성

다음으로, 생성된 텍스트 콘텐츠와 이미지 URL을 결합하여 HTML 형식의 뉴스레터를 만드는 기능을 추가했습니다.

def generate_html_content(newsletter_content: dict, html_prompt: str, anthropic_api_key: str) -> str:
    model = ChatAnthropic(
        model="claude-3-sonnet-20240229",
        temperature=0.2,
        max_tokens=4000,
        anthropic_api_key=anthropic_api_key
    )

    formatted_prompt = html_prompt.format(
        newsletter_content=json.dumps(newsletter_content, ensure_ascii=False),
        image_urls=json.dumps(newsletter_content.get("image_urls", {}), ensure_ascii=False)
    )

    response = model.invoke(formatted_prompt)
    html_content = response.content

    return html_content

이 함수는 Anthropic의 Claude 모델을 사용하여 HTML 템플릿에 콘텐츠를 삽입합니다. 텍스트 콘텐츠와 이미지 URL을 JSON 형식으로 전달하고, Claude가 이를 해석하여 완성된 HTML을 생성합니다.

3. Dropbox 통합

마지막으로, 생성된 HTML 뉴스레터를 Dropbox에 자동으로 업로드하는 기능을 구현했습니다.

import dropbox
from datetime import datetime
import re

dbx = dropbox.Dropbox(DROPBOX_API_KEY)

def upload_file_to_dropbox(file_content, dropbox_folder_path, file_name):
    try:
        dropbox_destination_path = f"{dropbox_folder_path}/{file_name}"
        dbx.files_upload(file_content.encode('utf-8'), dropbox_destination_path, mode=dropbox.files.WriteMode("overwrite"))
        print(f"파일이 성공적으로 Dropbox에 업로드되었습니다: {dropbox_destination_path}")
    except Exception as e:
        print(f"Dropbox 업로드 중 오류 발생: {str(e)}")

# 메인 함수 내에서 사용
today_date = datetime.now().strftime('%Y.%m.%d')
sanitized_habit = re.sub(r'[\\\\\\\\/*?:"<>|]', "", habit)
file_name = f"{today_date} - {sanitized_habit}.html"

dropbox_folder_path = '/!  New/뉴스레터자동화/보낸편지함'
upload_file_to_dropbox(html_content, dropbox_folder_path, file_name)

이 코드는 생성된 HTML 콘텐츠를 Dropbox의 지정된 폴더에 업로드합니다. 파일명은 현재 날짜와 뉴스레터의 주제(건강 습관)를 조합하여 생성됩니다.

에러가 계속.. 안고쳐져서 일단 여기까지 ㅠ

이제 버블이랑 합치는 마지막 단계가 남았군요... 다음주 기대가 됩니다.

1
1개의 답글

👉 이 게시글도 읽어보세요