본문 바로가기
[자동화프로그램구현하기]

챗GPT 연동해서 주제에 적합한 블로그 포스팅 생성(GPT API , Streamlit)

by 슬쨩! 2024. 5. 15.

 

안녕하세요 Open ai API를 연동해서 데이터를 불러오는 작업을 진행해 보겠습니다.

Streamlit이라는 페이지 라이브러리를 이용해서 제목과 목적을 사용자에게 입력 받고,

블로그 포스팅 글을 생성하는 작업입니다!!

 

블로그 주제와 목적만 정한다면 데이터를 뽑아서 자신의 인사이트에 맞게 이용할 수 있어요!!
저는 네이버 블로그 포스팅에 작성할 꺼랍니다!!(다음 편에는 네이버 포스팅 자동화 프로그램에 대해서 작성할 예정입니다)

 

사용 방법

  1. Streamlit 실행: 터미널에서 streamlit run 이름.py를 실행하여 웹 애플리케이션을 실행합니다.
  2. 주제 및 목적 입력: 웹 애플리케이션에서 주제와 목적을 입력합니다.
  3. 블로그 포스트 생성: "Generate Blog Post" 버튼을 클릭하여 블로그 포스트를 생성합니다.

 

 

사전 준비


 

1. https://platform.openai.com/

링크로 가서 가입을 합니다!!

2. 셋팅 -> 빌링항목으로 가서 신용카드를 등록해야 API를 유효하게 사용 할 수 있어요
그리고 5달러 이상 충전해야해요!!

 

* 참고 Tip : 카드 등록 전  발급한 API는 사용되지 않습니다. 카드 등록 후 API 발급 다시해서 최신으로 사용해야합니다. 직접 경험했습니다! 

 

 

 

3. API keys 페이지로 넘어가서 Create를 해 줍니다!!

그리고 생성된 key는 꼭 별도로 저장해 두어야 합니다. 

 

4. 시스템 환경 변수에서 변수 OPENAI_API_KEY 와 값은 발급받은 key로 설정해 줍니다.

 

 

 

 

 

 코드 작성


 

1) get_input_from_user() : 주제와 목적을 입력한 값을 각각 변수에 넣어 줍니다.

def get_input_from_user():
    topic = st.text_input("주제를 입력해주세요")
    purpose = st.text_input("목적을 입력해주세요")
    return topic, purpose

 

 

2) choose_model() : 챗 GPT 모델을 선택 합니다.

def choose_model():
    choice = st.radio("Choose a model", ('gpt-4-turbo-preview', 'gpt-3.5-turbo'))
    return 'gpt-4-turbo-preview' if choice == 'gpt-4-turbo-preview' else 'gpt-3.5-turbo'

 

 

3) write_to_csv() : csv 파일을 생성하고 작성합니다.

def write_to_csv(topic, purpose, blog_post, filename="blog_post1.csv"):
    with open(filename, mode='w', newline='', encoding='utf-8-sig') as file:
        writer = csv.writer(file)
        writer.writerow(['Topic', 'Description', 'Blog Post'])
        writer.writerow([topic, purpose, blog_post])

 

 

4) main(): API와 연동하여 입력한 topic, purpose와 model를 받아서 챗 프롬프트를 작성하고 요청합니다.

def main():
    st.title("Blog Post Generator")

    topic, purpose = get_input_from_user()
    model = choose_model()

    if st.button("Generate Blog Post"):
        try:
            api_key = os.getenv("OPENAI_API_KEY")
            if not api_key:
                raise ValueError("API Key not found in environment variables")

            openai.api_key = api_key

            system_prompt = f"당신은 {topic}를 잘 알고 있는 네이버 블로그 SEO 전문가입니다."
            user_prompt = f"블로그 글의 목적은 {purpose}입니다. 이 목적을 참고하여 {topic}에 대한 블로그 글을 생성해 주세요."

            assistant_prompt = f"네이버 SEO를 고려하여 글의 제목을 추천해 주세요. \
                                그리고, 추천 해시태그를 작성된 글의 끝 부분에 추가해 주세요.\
                                단락 마다 단락의 내용에 대한 소제목을 붙여 주세요. "

            response = openai.ChatCompletion.create(
                model=model,
                messages=[
                    {"role": "system", "content": system_prompt},
                    {"role": "user", "content": user_prompt},
                    {"role": "assistant", "content": assistant_prompt},
                ]
            )

            blog_post = response['choices'][0]['message']['content']
            st.success("Blog post generated successfully.")
            st.text_area("Generated Blog Post", value=blog_post, height=300)

            # Write results to CSV
            write_to_csv(topic, purpose, blog_post)
            st.success("Blog post has been saved to 'blog_post1.csv'.")

        except Exception as e:
            st.error(f"An error occurred: {e}")

if __name__ == "__main__":
    main()

 

사용자가 입력한 주제와 목적을 바탕으로 GPT 모델을 통해 블로그 포스트를 생성하고, 이를 웹 인터페이스를 통해 표시하는 것입니다. 사용자는 주제와 목적을 입력하고, 모델을 선택한 후 "Generate Blog Post" 버튼을 클릭하여 블로그 포스트를 생성할 수 있습니다. 생성된 블로그 포스트는 화면에 표시되며, CSV 파일로 저장됩니다.

 

 

 실행 화면


 

포스팅 생성 웹페이지가 완성되었어요~~~

주제와 목적을 입력해 보겠습니다!!

 

곧 여름 철이라 다이어트에 관심이 많습니다 ^^

gtp 모델까지 선택해 주고 Generate 버튼을 선택합니다.

 

 

오른쪽 상단에 실행중이라고 뜨네요. 좀 기다려 주어야 합니다.

 

 

--- 다이어트 블로그 포스팅 출력 -----

 

 

 다이어트 관련 포스팅이 출력되었습니다. blog_post1.csv 파일로 생성되어 아래와 같이 확인 할 수 있습니다

 

 

 

 

 

 

 

 

다음 편은 이 포스팅을 자동으로 네이버 블로그에 작성해주는 코드를 작성해보겠습니다!!!