본문 바로가기
프로그램 (PHP,Python)

Gemini API + AI Studio로 만드는 스마트 멀티모달 AI챗봇 설계 구축법

by 날으는물고기 2025. 5. 6.

Gemini API + AI Studio로 만드는 스마트 멀티모달 AI챗봇 설계 구축법

728x90

Google AI Studio는 구글이 제공하는 생성형 AI 모델(Gemini 등)을 빠르게 실험하고 프로토타이핑할 수 있는 웹 기반의 인터페이스입니다. 특히 개발자, 디자이너, 기획자 등 다양한 사용자가 Gemini 모델을 활용한 에이전트를 설계하고 테스트할 수 있도록 설계되어 있습니다.

Google AI Studio란?

Google AI Studio는 Google의 생성형 AI 플랫폼(Gemini 모델 포함)을 활용하여 다음과 같은 작업을 수행할 수 있는 개발 도구입니다.

  • Gemini API 체험 및 테스트
  • 에이전트 기반 대화형 시스템 설계
  • API 키를 활용한 코드 연동
  • 파인튜닝 없이도 프롬프트 조정 기반의 고급 활용 가능
  • 다중 호출 단계와 함수 호출(Tool calling) 설정 지원

공식 주소: https://aistudio.google.com/welcome

주요 특징 및 기능

Gemini 기반 모델 선택

  • Gemini 1.5 Pro (기본 모델): 긴 컨텍스트 길이와 멀티모달 기능 지원
  • Gemini 1.0 Pro, Gemini Flash 등 다양한 모델 테스트 가능

프롬프트 기반 UI 제공

  • 대화형 인터페이스로 프롬프트 작성 및 테스트 가능
  • Markdown, 코드 블록 등 형식 지원

Context 기능

  • 시스템 메시지, 사용자 메시지, 이전 대화 이력 등을 포함해 다중 턴 대화 설정 가능

Tool calling (함수 호출)

  • 외부 API 또는 내부 함수 정의를 통해 함수 호출 기반의 플로우 설계 가능
  • 예: 날씨 조회, 계산기, DB 쿼리 등 실제 응답과 연동되는 작업 가능
{
  "name": "get_weather",
  "description": "도시의 현재 날씨를 조회합니다.",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "조회할 도시명"
      }
    },
    "required": ["city"]
  }
}

입력 및 출력 포맷 설정

  • text, image, json, tool call 등 다양한 입력 지원
  • 출력 형식 제어 가능 (예: JSON 형태로 답변 요구)

활용 사례

개발자용 프로토타이핑

  • Gemini API 호출 테스트 후 생성된 코드 스니펫을 복사하여 IDE나 애플리케이션에 적용 가능
  • Python, Node.js 등 코드 샘플 자동 생성 기능

에이전트 설계

  • 특정 역할의 에이전트 생성: 예를 들어 "영문 이메일 교정 에이전트", "고객 질문 응답 에이전트" 등
  • 상태 기반 대화 흐름 설정 가능 (Agent의 memory 등)

비개발자도 사용 가능

  • 복잡한 코드 없이 프롬프트 조합만으로 원하는 AI 응답을 얻을 수 있음
  • 팀 기획용 POC 제작 및 테스트에 용이

보안 및 접근 제어 가이드

  • API Key 관리: 생성형 AI API 사용 시 반드시 Google Cloud Console에서 API Key를 생성하고 비공개로 보관해야 합니다.
  • 사용량 제한: 무료 사용량과 유료 요금제가 있으며, 과금 기준 및 트래픽 제한을 사전에 확인해야 함
  • 출력 데이터 점검: 개인 정보나 민감 데이터가 노출되지 않도록 프롬프트와 출력 결과를 점검해야 함

실제 사용 예 (Python 코드)

import google.generativeai as genai

genai.configure(api_key="YOUR_API_KEY")

model = genai.GenerativeModel("gemini-pro")
response = model.generate_content("생성형 AI가 무엇인가요?")
print(response.text)

향후 활용 제안

  • 내부 업무 자동화: 고객 응대 자동화, 사내 문서 요약, 코드 리뷰 지원
  • PoC 제작: 에이전트 기반 서비스 시연
  • 프롬프트 테스트 플랫폼: Prompt Engineering을 위한 실험 도구로 활용
  • GPT 대체 고려: Gemini 기반 서비스로 전환 가능성 테스트

 

아래는 Google에서 공식 제공하는 Gemini API 문서(https://ai.google.dev/gemini-api/docs)의 내용을 기반으로 정리한 가이드입니다. 이 문서는 Google Cloud의 생성형 AI 플랫폼인 Gemini API의 사용법, 모델 선택, 멀티모달 처리, 함수 호출 등의 다양한 기능을 설명합니다.

Gemini API란?

Gemini API는 Google DeepMind의 Gemini 모델 계열(ex. Gemini 1.5 Pro)을 사용하여 텍스트, 코드, 이미지, 오디오 등 다양한 입력을 처리할 수 있는 멀티모달 생성형 AI API입니다.

  • 멀티모달 입력 지원 (텍스트, 이미지, PDF 등)
  • 대화형 채팅 지원
  • Tool 호출 기능 (function calling)
  • JSON 기반 응답 처리
  • 긴 컨텍스트 지원 (최대 1M tokens, Gemini 1.5 기준)

주요 API 구성 요소

모델 종류

모델 이름 특징
gemini-pro 텍스트 기반 처리에 최적화
gemini-pro-vision 이미지 포함 멀티모달 처리 가능
gemini-1.5-pro-latest 가장 최신 버전, 긴 컨텍스트 지원

🧠 사용 예: gemini-1.5-pro-latest는 100만 토큰 문서를 요약하거나, 문서 QA에 적합합니다.

상호작용 방식

  1. generateContent()
    • 단일 입력 프롬프트 → 응답
    • 예: 질문 답변, 요약, 번역 등
  2. startChat()
    • 대화 상태 유지, 멀티턴 대화
    • 예: 상담봇, 코드 디버깅

사용 방법 (Python 기준)

설치

pip install google-generativeai

인증

import google.generativeai as genai
genai.configure(api_key="YOUR_API_KEY")

텍스트 생성

model = genai.GenerativeModel("gemini-pro")
response = model.generate_content("AI란 무엇인가요?")
print(response.text)

채팅 대화 (멀티턴)

chat = model.start_chat()
chat.send_message("안녕, 너 뭐할 수 있어?")

이미지 입력 처리

with open("image.jpg", "rb") as f:
    image_data = f.read()

response = model.generate_content(["이 이미지에 대해 설명해줘", image_data])
print(response.text)

gemini-pro-vision 모델 필요

Tool Calling (함수 호출)

Gemini가 외부 API나 툴을 자동으로 호출할 수 있도록 지원합니다.

함수 정의 예

functions = [
  {
    "name": "get_weather",
    "description": "도시의 날씨를 조회",
    "parameters": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string",
          "description": "도시 이름"
        }
      },
      "required": ["city"]
    }
  }
]

Tool 호출 예시

model = genai.GenerativeModel("gemini-pro", tools=functions)
response = model.generate_content("서울 날씨 알려줘")

응답 포맷 및 제어

  • 기본 응답은 .text로 단순 텍스트
  • .parts를 사용하면 멀티 파트 분석 가능
  • JSON 형태로 결과를 파싱하고자 한다면 프롬프트에 명시
response = model.generate_content("JSON 형식으로 보여줘")
print(response.parts)

파라미터 옵션

옵션 설명
temperature 생성 다양성 조절 (0.2~1.0)
top_k 높은 확률 토큰 중심 응답
top_p 누적 확률 기반 토큰 선택
max_output_tokens 최대 응답 길이

예시

response = model.generate_content("한국 역사 요약", generation_config={
    "temperature": 0.7,
    "max_output_tokens": 1024,
})

보안 및 사용 제한

API 키 발급

  • Google Cloud Console > API & 서비스 > 자격 증명
  • Generative Language API 활성화 필요

사용량 제한

  • 무료 할당량 존재
  • 초과 시 과금 (사용자는 Gemini Pricing 참고)

개인정보 유출 주의

  • 사용자 입력 프롬프트에 민감정보 포함 금지
  • 응답 검증 필요

테스트 도구: AI Studio 연계

  • AI Studio를 통해 Prompt 설계 및 테스트 가능
  • 작성한 Prompt를 코드로 바로 전환 (Python/Node.js)
  • 시각적 Tool 호출 구성

참고 문서

300x250

아래는 Google Gemini API를 Node.js, cURL, Postman 세 가지 방식으로 사용하는 예제입니다. 프롬프트 전송, 응답 확인, 함수 호출(function calling)까지 포괄하는 구조입니다.

🗝️ API Key 생성

  • Google Cloud Console → Generative Language API 사용 설정
  • 서비스 계정 또는 사용자 API 키 발급

🌐 API Endpoint

  • 기본 텍스트 생성용 모델
    https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent
  • 멀티모달 (이미지 포함)
    https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent

Node.js 예제

설치

npm init -y
npm install axios dotenv

코드 예제 (텍스트 요청)

// gemini.js
require("dotenv").config();
const axios = require("axios");

const API_KEY = process.env.GEMINI_API_KEY;

async function generateContent() {
  const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=${API_KEY}`;

  const requestBody = {
    contents: [{
      parts: [{ text: "태양계에서 가장 큰 행성은?" }]
    }]
  };

  const response = await axios.post(url, requestBody, {
    headers: { "Content-Type": "application/json" }
  });

  console.log("응답 결과:", response.data.candidates[0].content.parts[0].text);
}

generateContent();

.env 파일

GEMINI_API_KEY=your_api_key_here

cURL 예제

텍스트 생성

curl -X POST \
  -H "Content-Type: application/json" \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=YOUR_API_KEY" \
  -d '{
    "contents": [
      {
        "parts": [
          { "text": "한국의 수도는 어디인가요?" }
        ]
      }
    ]
  }'

함수 호출 (Tool Calling) 예시

curl -X POST \
  -H "Content-Type: application/json" \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=YOUR_API_KEY" \
  -d '{
    "tools": [
      {
        "function_declarations": [
          {
            "name": "get_weather",
            "description": "도시의 현재 날씨를 알려줍니다.",
            "parameters": {
              "type": "object",
              "properties": {
                "city": { "type": "string", "description": "도시명" }
              },
              "required": ["city"]
            }
          }
        ]
      }
    ],
    "contents": [
      {
        "parts": [{ "text": "서울의 날씨 알려줘" }]
      }
    ]
  }'

📌 tool_calls가 응답에 포함되며, 이 호출 내용을 바탕으로 외부 API 호출을 직접 구현해야 합니다.

Postman 예제

요청 설정

  1. Method: POST
  2. URL: https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=YOUR_API_KEY
  3. Headers: Content-Type: application/json
  4. Body (raw JSON)
    {
      "contents": [
        {
          "parts": [
            { "text": "GPT와 Gemini의 차이점은?" }
          ]
        }
      ]
    }
  5. Send 클릭 → 아래와 같은 JSON 응답을 받게 됩니다.
    {
      "candidates": [
        {
          "content": {
            "parts": [
              {
                "text": "Gemini는 Google이 개발한 멀티모달 AI입니다..."
              }
            ]
          }
        }
      ]
    }

아래는 Gemini API에서 이미지 업로드 + base64 인코딩 처리 + 멀티모달 요청을 통해 "이미지를 이해하고 대답하는 채팅봇"을 만드는 예제를 Node.js, cURL, Postman 순으로 정리합니다.

🧠 Gemini API 이미지 기반 멀티모달 채팅봇 예제

텍스트와 이미지를 함께 입력하여 "이 이미지가 무엇인지 설명해줘", "이 이미지는 어떤 상태야?" 같은 멀티모달 질문이 가능한 구조입니다.

준비 사항 (공통)

  • 모델: gemini-pro-vision
  • API Endpoint: https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key=YOUR_API_KEY
  • 이미지: .jpg, .png 등의 파일을 base64로 인코딩하여 JSON에 포함

Node.js 예제

패키지 설치

npm install axios dotenv fs

코드 (image-chat.js)

require("dotenv").config();
const axios = require("axios");
const fs = require("fs");

const API_KEY = process.env.GEMINI_API_KEY;
const imagePath = "./cat.jpg"; // 분석할 이미지 파일

async function generateImageContent() {
  // 이미지 → base64 변환
  const imageBuffer = fs.readFileSync(imagePath);
  const base64Image = imageBuffer.toString("base64");

  const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key=${API_KEY}`;

  const requestBody = {
    contents: [
      {
        parts: [
          { text: "이 이미지에 대해 설명해줘." },
          {
            inline_data: {
              mime_type: "image/jpeg",
              data: base64Image
            }
          }
        ]
      }
    ]
  };

  const response = await axios.post(url, requestBody, {
    headers: { "Content-Type": "application/json" }
  });

  console.log("🔍 응답 결과:");
  console.log(response.data.candidates[0].content.parts[0].text);
}

generateImageContent();

✅ 이미지 확장자가 png이면 image/png로 mime type을 바꿔주세요.

cURL 예제

이미지 base64 인코딩

base64 -w 0 cat.jpg > image.b64

요청 본문 생성 (생략된 base64 값은 임의)

curl -X POST \
  -H "Content-Type: application/json" \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key=YOUR_API_KEY" \
  -d @- <<EOF
{
  "contents": [
    {
      "parts": [
        { "text": "이 이미지에서 무슨 일이 일어나고 있어?" },
        {
          "inline_data": {
            "mime_type": "image/jpeg",
            "data": "$(cat image.b64)"
          }
        }
      ]
    }
  ]
}
EOF

⚠️ base64가 길어지므로 대형 JSON 파일로 관리하는 것이 좋습니다.

Postman 예제

요청 구성

  1. Method: POST
  2. URL: https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key=YOUR_API_KEY
  3. Headers: Content-Type: application/json
  4. Body (raw > JSON)
    {
      "contents": [
        {
          "parts": [
            { "text": "이 이미지는 어떤 장면인가요?" },
            {
              "inline_data": {
                "mime_type": "image/png",
                "data": "여기에 base64 인코딩된 이미지 데이터 삽입"
              }
            }
          ]
        }
      ]
    }

base64는 온라인 툴(https://www.base64-image.de/)이나 Node.js, Python으로 쉽게 변환할 수 있습니다.

💬 실제 응답 예시

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "이 이미지는 귀여운 고양이가 소파 위에 앉아 있는 모습입니다. 조명이 자연스럽고, 고양이는 편안해 보입니다."
          }
        ]
      }
    }
  ]
}

🔐 보안 체크포인트

항목 설명
이미지 크기 업로드 크기 제한 있음 (~5MB 이하 권장)
포맷 검증 허용되는 포맷: jpeg, png 등
base64 처리 민감 이미지 처리 시 base64 노출 주의
응답 저장 응답 내용 로깅 시 마스킹 여부 고려

🎯 확장 활용 예

  • 이미지 기반 고객 질문 응답 챗봇
  • 제품 이미지 설명 챗봇 (ex. “이 가구 색상은 무엇인가요?”)
  • 문서 스캔 이미지 요약
  • 오류 스크린샷 분석 봇
  • 멀티모달 헬프데스크 자동화
728x90
그리드형(광고전용)

댓글