#ChatGPT#LangChain
[LangChain] 블로그 본문을 자동으로 요약해보자 (feat. ChatGPT)
ChatGPT를 활용해 SEO 최적화를 위해 똑똑한 요약 기능 구현하는 방법 소개. Python과 FastAPI를 사용해 ChatGPT API를 활용하여 글 요약하는 방법 상세히 설명. 글 요약 결과를 활용하여 블로그 SEO 향상하는 방안 제시.
17 July 2024 / 09:16

똑똑한 ChatGPT를 이용해보자

SEO 최적화, 글 읽는 사람의 배려를 위해서도 있지만 결국은 내가 쓴 글을 내가 더 잘 이해하려 ChatGPT의 능력을 빌려보도록 합시다!. 물론 ChatGPT 사이트에 방문하여 수동으로 요약할 수 있지만 몇 번 하다 안할게 분명하니.. 자동화시키려 노력하였습니다.

LangChain은 Javascript와 Python만 지원하는데 FastAPI로 간단하게 구현하기 위해 Python을 사용하였다.

그런데 어디다 배포를 할 것이냐!

Oracle free tier를 이미 블로그 서버로 이용 중이기 때문에 fly.io에 배포하려 한다!

Python을 써본지가 오래되었고 FastAPI 또한 처음 써보는 것이라 알음알음 검색해가며 구현해보았습니다.

그래도 일단 작동하게 만드는게 중요하니까...!

ChatGPT가 내 블로그 글을 자동으로 요약하게 만들어보자

먼저 ChatGPT API Key를 발급받아보자. 검색해보니 API를 특정 한도까지 무료로 이용가능하다고 했는데 안되길래 5달러만 충전하니 그 뒤로는 잘되었다. 음.. 왜지? 어쨌든 키를 발급받고 langchain을 설치한다.

요약 기능을 수행할 클래스를 일단 만들어본다

import os
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from bs4 import BeautifulSoup as bs

블로그 본문이 html 태그도 같이 저장되어서 html 태그를 제거해주려 BeautifulSoup도 설치해주었다.

class LLM:
    llm = ChatOpenAI(openai_api_key=os.getenv("OPENAI_API_KEY"))
    prompt = ChatPromptTemplate.from_messages(
        [
            (
                "system",
                "너는 나의 충실한 조수이다. 그리고 너는 내가 제공하는 문서를 최대 3줄로 요약해 줄 것이다. 너가 요약한 문서는 SEO에 사용될 것이다.",
            ),
            ("human", "{text}"),
        ]
    )
    chain = prompt | llm

    def remove_html_tags(self, text):
        soup = bs(text, "lxml")
        clean_text = soup.text
        return clean_text

    def summarize_text(self, text):
        clean_text = self.remove_html_tags(text)
        summary = self.chain.invoke({"text": {clean_text}})
        return summary

LLM이라는 클래스를 한 개 만들었다. html 태그를 제거하고 chatGPT한테 요약할 본문을 넘겨준다.

그럼 아주 똑똑한 ChatGPT는 수준 높게 요약된 본문을 다시 나에게 넘겨준다

이제 컨트롤러를 만들어보자

먼저, main.py에 fastAPI를 설치한다.

그리고 간단하게 API_KEY를 발급하고 해당 키를 가지고있어야 chatGPT에 작업을 요청할 수 있게 해보자.

class Post(BaseModel):
    content: str

@app.post("/api/llm")
def summerize_post(post: Post, Authorization: Union[str, None] = Header(default=None)):
    if Authorization == os.getenv("API_KEY"):
        raw_content = post.content
        clean_text = llm.summarize_text(raw_content)
        return {"content": clean_text.content}
    else:
        raise HTTPException(status_code=401, detail="Unauthorized")

CORS 도 설정했다

origins = ["http://localhost:8080"]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["POST", "GET"],
    allow_headers=["*"],
)

요약은 아주 잘된다

요약이 잘되는 결과를 캡처하지 못하였으나 아주 똑똑하신 ChatGPT께서 3줄로 잘 요약하여 전달해준다.

블로그는 SEO가 중요하다고 한다. 그래서 Vue.js에서 Nuxt.js로 이사했다.

그리고 본문을 요약하고 meta tag description에 넣어준다.

이런게 얼마나 영향이 있는지 궁금하지만.. 그 전에 글이나 많이 써놓아야..

이제는 맞춤법을 어떻게 글 작성 창에서 바로 확인할지 고민해보아야겠다.

@Designed By gomdolog.