[자동화 프로젝트 #5] ChatGPT, Claude 등 다양한 AI 모델 연동하기

안녕하세요! 블로그 자동 포스팅 봇 만들기, 다섯 번째 시간입니다.

지난 4편 (바로가기)에서는 Flask를 이용해 클릭 한 번으로 포스팅을 시작할 수 있는 멋진 웹 UI를 만들었습니다.

하지만 지금 우리 봇은 오직 'Gemini'라는 AI 작가 한 명과만 일할 수 있죠.

 

오늘은 우리 봇을 한 단계 더 업그레이드해서, ChatGPT, Claude 등 세상의 쟁쟁한 AI 작가들을 마음대로 고용하고 해고할 수 있는 멋진 "에이전시 대표"로 만들어 보겠습니다!

새로운 AI 작가 영입 준비

새로운 AI 모델을 사용하려면, 각각의 모델에 맞는 새로운 Python 라이브러리를 설치해야 합니다. 마치 새로운 외국인 직원과 대화하기 위해 새로운 번역기를 설치하는 것과 같죠.

AI 모델 필요한 라이브러리 설치 명령어
ChatGPT (OpenAI) openai pip install openai
Claude (Anthropic) anthropic pip install anthropic

 

각 서비스의 API 키도 발급받아 .env 파일에 추가해두는 것을 잊지 마세요!

1 # .env 파일
2 GOOGLE_API_KEY="your-google-api-key"
3 OPENAI_API_KEY="your-openai-api-key"
4 ANTHROPIC_API_KEY="your-anthropic-api-key" 
5 # ... (기타 정보)

웹 UI에 선택 기능 추가

사용자가 웹 화면에서 직접 AI를 선택할 수 있도록 index.html 파일에 드롭다운 메뉴를 추가해야 합니다.

1 <!-- templates/index.html 파일의 form 태그 안에 추가 -->
2
3 <div class="form-section">
4     <div class="form-row">
5         <div class="form-group">
6             <label for="ai-model">AI 모델 선택</label>
7             <select id="ai-model" name="ai_model">
8                 <option value="gemini" selected>Gemini (기본)</option>
9                 <option value="chatgpt">ChatGPT (gpt-4o)</option>  
10                 <option value="claude">Claude (claude-3-sonnet)</option>
11             </select>
12         </div>
13         <div class="form-group">
14             <label for="topic">블로그 주제 선택</label>
15             <select id="topic" name="topic">
16                 <option value="random" selected>무작위</option>
17                 <option value="custom">직접 입력</option>
18                 <!-- 기타 주제들... -->
19             </select>
20         </div>
21     </div>
22     <!-- 주제 직접 입력을 위한 input 등... -->
23 </div>

 

이렇게 하면 사용자가 드롭다운 메뉴에서 원하는 AI를 선택하고, 그 선택값이 우리 app.py 서버로 전송됩니다.

선택에 따라 다른 AI 호출하기

이제 가장 중요한 부분입니다. main.py의 글 생성 함수(create_blog_post)를 수정하여, 웹에서 전달받은
ai_model 값에 따라 각기 다른 AI를 호출하도록 만들어야 합니다.

1 # main.py 파일
2
3 import google.generativeai as genai
4 import openai
5 import anthropic
6
7 def create_blog_post(log_queue, ai_model='gemini', test_mode=False, topic='random'):
8 # (프롬프트 준비 과정)
9
10 try:
11 log_queue.put(f"🤖 '{ai_model}' 모델에게 블로그 포스트 생성을 요청합니다...")
12 content = ""
13
14 if ai_model == 'gemini':
15 # Gemini 호출 코드...
16 api_key = get_api_key('GOOGLE_API_KEY')
17 genai.configure(api_key=api_key)
18 model = genai.GenerativeModel('gemini-1.5-flash')
19 response = model.generate_content(prompt)
20 content = response.text
21
22 elif ai_model == 'chatgpt':
23 # ChatGPT 호출 코드...
24 api_key = get_api_key('OPENAI_API_KEY')
25 client = openai.OpenAI(api_key=api_key)
26 response = client.chat.completions.create(
27 model="gpt-4o",
28 messages=[{"role": "user", "content": prompt}]
29 )
30 content = response.choices[0].message.content
31
32 elif ai_model == 'claude':
33 # Claude 호출 코드...
34 api_key = get_api_key('ANTHROPIC_API_KEY')
35 client = anthropic.Anthropic(api_key=api_key)
36 response = client.messages.create(
37 model="claude-3-sonnet-20240229",
38 max_tokens=4096,
39 messages=[{"role": "user", "content": prompt}]
40 )
41 content = response.content[0].text
42
43 # ... (이후 응답 처리 로직) ...
44 return title, body
45
46 except Exception as e:
47 # ... (오류 처리) ...

[핵심 로직]

if...elif...else 구문을 사용하여 웹 UI에서 전달된 ai_model 변수의 값('gemini', 'chatgpt',
'claude')에 따라, 각각 다른 라이브러리와 API 키를 사용하여 해당 AI 모델을 호출합니다.

다음 이야기

이제 우리 봇은 Gemini 뿐만 아니라 ChatGPT, Claude와도 자유롭게 대화할 수 있는 유능한 에이전시 대표가 되었습니다!

하지만 아직 뭔가 허전하죠? 바로 이미지입니다. 글만 빽빽한 블로그는 너무 삭막하니까요.

 

다음 포스팅에서는 DALL-E 3를 연동하여, AI가 글의 주제에 맞는 대표 이미지까지 자동으로 그려주는 마법 같은 기능을 추가해 보겠습니다.

 

 

반응형
쿠팡 광고 배너

※ 위 배너는 쿠팡 파트너스 활동의 일환으로 이에 따른 일정액의 수수료를 제공받습니다