Gemini API - 3. ๋ชจ๋“ˆํ™”

๐Ÿ’ฌ ๋ชจ๋“ˆํ™”

์ค‘๋ณต์ฝ”๋“œ ์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด ๊ณตํ†ต์ ์œผ๋กœ ์“ฐ๋Š” ๋ถ€๋ถ„์€ ๋ชจ๋“ˆํ™” ๋ถ€ํ„ฐ ์ง„ํ–‰ํ•˜๊ณ  ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐˆ ์˜ˆ์ •์ž„

config.py

๋ฐ˜๋ณต์ ์œผ๋กœ ์ž…๋ ฅ๋˜๋Š” api ํ‚ค ๋ถ„๋ฆฌ

1
2
3
4
5
6
7
8
9
10
import os
from dotenv import load_dotenv

load_dotenv()

GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
if GOOGLE_API_KEY is None:
raise ValueError("GOOGLE_API_KEY environment variable not set.")

API_BASE_URL = "https://generativelanguage.googleapis.com/v1beta/openai/"

gpt_client.py

๋ชจ๋ธ์„ ์„ ํƒํ•˜๊ณ  ๋ชจ๋ธ์˜ api base url ์„ค์ •ํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import httpx
from langchain_openai import ChatOpenAI


class GPTClient:
def __init__(self, api_key, base_url, model="gemini-1.5-flash", temperature=0):
self.client = httpx.Client(verify=False, timeout=30) # Consider using verify=True for production
self.gpt = ChatOpenAI(
model=model,
temperature=temperature,
base_url=base_url,
api_key=api_key,
http_client=self.client,
)

def invoke(self, prompt):
try:
response = self.gpt.invoke(prompt)
return response.content
except httpx.HTTPError as e:
print(f"HTTP Error: {e}")
return None
except Exception as e:
print(f"An error occurred: {e}")
return None

prompt_templates.py

ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ

1
2
3
4
5
6
from langchain.prompts import PromptTemplate

def create_short_answer_prompt(question):
template = "{question}(500๊ธ€์ž ์ด๋‚ด๋กœ ๋‹ต๋ณ€)"
prompt = PromptTemplate.from_template(template=template)
return prompt.format(question=question)

101.py

์ฒซ๋ฒˆ์งธ ์˜ˆ์ œ : ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ดํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋จ

์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
from config import GOOGLE_API_KEY, API_BASE_URL
from gpt_client import GPTClient
from prompt_templates import create_short_answer_prompt

if __name__ == "__main__":
gpt_client = GPTClient(api_key=GOOGLE_API_KEY, base_url=API_BASE_URL)
prompt = create_short_answer_prompt("gemini api ๋Š” ๋ฌด์—‡์ธ๊ฐ€?")
response = gpt_client.invoke(prompt)
if response:
print(response)

์‹คํ–‰๊ฒฐ๊ณผ

Gemini API๋Š” ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœํ•œ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)์ธ Gemini๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ํ…์ŠคํŠธ ์ƒ์„ฑ, ๋ฒˆ์—ญ, ์งˆ๋ฌธ ์‘๋‹ต, ์ฝ”๋“œ ์ƒ์„ฑ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์„œ๋น„์Šค์— Gemini์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Gemini API๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ชจ๋ธ ํฌ๊ธฐ์™€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ๋ชจ๋ธ์€ ์†๋„์™€ ํšจ์œจ์„ฑ์„ ์ค‘์‹œํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๋ฉฐ, ํฐ ๋ชจ๋ธ์€ ๋”์šฑ ์ •๊ตํ•˜๊ณ  ๋ณต์žกํ•œ ์ž‘์—…์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, API๋Š” ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž์˜ ํŽธ์˜์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

Gemini API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ํ…์ŠคํŠธ ์ƒ์„ฑ: ์ด์•ผ๊ธฐ, ์ฝ”๋“œ, ์ด๋ฉ”์ผ, ๊ธฐํƒ€ ํ…์ŠคํŠธ ํ˜•์‹์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฒˆ์—ญ: ํ•œ ์–ธ์–ด์—์„œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ํ…์ŠคํŠธ๋ฅผ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค.
  • ์งˆ๋ฌธ ์‘๋‹ต: ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์š”์•ฝ: ๊ธด ํ…์ŠคํŠธ๋ฅผ ์š”์•ฝํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถ„๋ฅ˜: ํ…์ŠคํŠธ๋ฅผ ๋‹ค์–‘ํ•œ ๋ฒ”์ฃผ๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ์ƒ์„ฑ: ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Gemini API๋Š” ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์„ ํ†ตํ•ด ์ œ๊ณต๋˜๋ฉฐ, ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ๋น„์šฉ์ด ์ฒญ๊ตฌ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” API ๋ฌธ์„œ์™€ ๋‹ค์–‘ํ•œ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด Gemini API๋ฅผ ์‰ฝ๊ฒŒ ํ•™์Šตํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ LLM API์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ถœ๋ ฅ ๊ฒฐ๊ณผ์˜ ์ •ํ™•์„ฑ๊ณผ ์œค๋ฆฌ์ ์ธ ์ธก๋ฉด์„ ํ•ญ์ƒ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณต์œ ํ•˜๊ธฐ