Gemini API ์ฝ๋ ์คํ ๊ธฐ๋ฅ์ ํตํด ๋ชจ๋ธ์ Python ์ฝ๋๋ฅผ ์์ฑ ๋ฐ ์คํํ๊ณ ์ต์ข ์ถ๋ ฅ์ ๋์ถํ ๋๊น์ง ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํ์ตํฉ๋๋ค. ์ด ์ฝ๋ ์คํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ฝ๋ ๊ธฐ๋ฐ ์ถ๋ก ์ ์ด์ ์ ํ์ฉํ๋ฉฐ ํ ์คํธ ์ถ๋ ฅ์ ์์ฑํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐฉ์ ์์ ํ๊ฑฐ๋ ํ ์คํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฝ๋ ์คํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Gemini API๋ ํจ์ ํธ์ถ๊ณผ ์ ์ฌํ๊ฒ ๋๊ตฌ๋ก์ ์ฝ๋ ์คํ์ ์ ๊ณตํฉ๋๋ค. ์ฝ๋ ์คํ์ ๋๊ตฌ๋ก ์ถ๊ฐํ๋ฉด ๋ชจ๋ธ์ ์ด๋ฅผ ์ฌ์ฉํ ์์ ์ ๊ฒฐ์ ํฉ๋๋ค.
์ฝ๋ ์คํ ํ๊ฒฝ์๋ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋ฉ๋๋ค. ์ฌ์ฉ์์ ๊ณ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์นํ ์ ์์ต๋๋ค.
- Altair
- Chess
- Cv2
- Matplotlib
- Mpmath
- NumPy
- Pandas
- Pdfminer
- Reportlab
- Seaborn
- Sklearn
- Statsmodels
- Striprtf
- SymPy
- Tabulate
์ง์๋๋ ๋ชจ๋ธ
๋ค์ ๋ชจ๋ธ์ ์ฝ๋ ์คํ ์ง์์ ์ ๊ณตํฉ๋๋ค.
์ฝ๋ ์คํ ์์ํ๊ธฐ
์ด ์น์ ์์๋ Gemini API ๋น ๋ฅธ ์์์ ํ์๋ ์ค์ ๋ฐ ๊ตฌ์ฑ ๋จ๊ณ๋ฅผ ์๋ฃํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ชจ๋ธ์์ ์ฝ๋ ์คํ ์ฌ์ฉ ์ค์
์ฌ๊ธฐ์ ํ์๋ ๊ฒ์ฒ๋ผ ๊ธฐ๋ณธ ์ฝ๋ ์คํ์ ์ฌ์ฉ ์ค์ ํ ์ ์์ต๋๋ค.
REST
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
GENERATE_RESPONSE_METHOD
: ๋ชจ๋ธ์์ ์์ฑํ๋ ค๋ ์๋ต ์ ํ์ ๋๋ค. ๋ชจ๋ธ์ ์๋ต์ ๋ฐํํ ๋ฐฉ๋ฒ์ ์์ฑํ๋ ๋ฉ์๋๋ฅผ ์ ํํฉ๋๋ค.streamGenerateContent
: ์ง์ฐ ์๊ฐ์ ๋ํ ์ธ์์ ์ค์ด๊ธฐ ์ํด ์๋ต์ด ์์ฑ๋๋ ๋์ ์คํธ๋ฆฌ๋ฐ๋ฉ๋๋ค.generateContent
: ์๋ต์ ์์ ํ ์์ฑ๋ ํ์ ๋ฐํ๋ฉ๋๋ค.
LOCATION
: ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฆฌ์ ์ ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.ํด๋ฆญํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์ ์ ์ผ๋ถ ๋ชฉ๋ก ํผ์น๊ธฐ
us-central1
us-west4
northamerica-northeast1
us-east4
us-west1
asia-northeast3
asia-southeast1
asia-northeast1
PROJECT_ID
: ํ๋ก์ ํธ ID์ ๋๋ค.MODEL_ID
: ์ฌ์ฉํ๋ ค๋ ๋ชจ๋ธ์ ๋ชจ๋ธ ID์ ๋๋ค.ROLE
: ์ฝํ ์ธ ์ ์ฐ๊ฒฐ๋ ๋ํ์ ์ญํ ์ ๋๋ค. ์ฑ๊ธํด ์ฌ์ฉ ์ฌ๋ก์์๋ ์ญํ ์ ์ง์ ํด์ผ ํฉ๋๋ค. ํ์ฉ๋๋ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.USER
: ์ ์กํ ์ฝํ ์ธ ๋ฅผ ์ง์ ํฉ๋๋ค.MODEL
: ๋ชจ๋ธ์ ์๋ต์ ์ง์ ํฉ๋๋ค.
ํ๋กฌํํธ์ ํฌํจํ ํ ์คํธ ์์ฒญ ์ฌํญ์ ๋๋ค.TEXT
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค.
curl
์์ฒญ ๋ณธ๋ฌธ์ request.json
ํ์ผ์ ์ ์ฅํฉ๋๋ค.
ํฐ๋ฏธ๋์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์ด ํ์ผ์ ๋ง๋ค๊ฑฐ๋ ๋ฎ์ด์๋๋ค.
cat > request.json << 'EOF' { "tools": [{'codeExecution': {}}], "contents": { "role": "ROLE", "parts": { "text": "TEXT" } }, } EOF
๊ทธ๋ฐ ํ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ REST ์์ฒญ์ ์ ์กํฉ๋๋ค.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD"
PowerShell
์์ฒญ ๋ณธ๋ฌธ์ request.json
ํ์ผ์ ์ ์ฅํฉ๋๋ค.
ํฐ๋ฏธ๋์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์ด ํ์ผ์ ๋ง๋ค๊ฑฐ๋ ๋ฎ์ด์๋๋ค.
@' { "tools": [{'codeExecution': {}}], "contents": { "role": "ROLE", "parts": { "text": "TEXT" } }, } '@ | Out-File -FilePath request.json -Encoding utf8
๊ทธ๋ฐ ํ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ REST ์์ฒญ์ ์ ์กํฉ๋๋ค.
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ์์ ๋ฉ๋๋ค.
Gen AI SDK for Python
์ค์น
pip install --upgrade google-genai
Vertex AI์์ ์์ฑํ AI SDK๋ฅผ ์ฌ์ฉํ๋๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค.
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=us-central1 export GOOGLE_GENAI_USE_VERTEXAI=True
์ฑํ ์์ ์ฝ๋ ์คํ ์ฌ์ฉ
์ฑํ ์ ์ผ๋ถ๋ก ์ฝ๋ ์คํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/test-project/locations/us-central1/publishers/google/models/gemini-2.0-flash-001:generateContent -d \
$'{
"tools": [{'code_execution': {}}],
"contents": [
{
"role": "user",
"parts": {
"text": "Can you print \"Hello world!\"?"
}
},
{
"role": "model",
"parts": [
{
"text": ""
},
{
"executable_code": {
"language": "PYTHON",
"code": "\nprint(\"hello world!\")\n"
}
},
{
"code_execution_result": {
"outcome": "OUTCOME_OK",
"output": "hello world!\n"
}
},
{
"text": "I have printed \"hello world!\" using the provided python code block. \n"
}
],
},
{
"role": "user",
"parts": {
"text": "What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50."
}
}
]
}'
์ฝ๋ ์คํ๊ณผ ํจ์ ํธ์ถ ๋น๊ต
์ฝ๋ ์คํ๊ณผ ํจ์ ํธ์ถ์ ๋น์ทํ ํน์ฑ์ ์ง๋๋๋ค.
- ์ฝ๋ ์คํ์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ธ์ด ๊ณ ์ ๋๊ณ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์ API ๋ฐฑ์๋์์ ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค.
- ํจ์ ํธ์ถ์ ์ฌ์ฉํ๋ฉด ๋ฌด์์ด๋ ์ํ๋ ํ๊ฒฝ์์ ๋ชจ๋ธ์ด ์์ฒญํ๋ ํจ์๋ฅผ ์คํํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ๋ฉด ์ฝ๋ ์คํ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฝ๋ ์คํ์ ์ฌ์ฉ ์ค์ ๋ง ํ๋ฉด ๋๋ฏ๋ก ์ฌ์ฉํ๊ธฐ์ ๊ฐํธํ๊ณ ๋จ์ผ GenerateContent
์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ํจ์ ํธ์ถ์์๋ ๊ฐ ํจ์ ํธ์ถ์์ ์ถ๋ ฅ์ ๋ค์ ๋ณด๋ด๊ธฐ ์ํ ์ถ๊ฐ GenerateContent
์์ฒญ์ด ์ฌ์ฉ๋ฉ๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ก์ปฌ๋ก ์คํํ๋ ค๋ ์์ฒด ํจ์๊ฐ ์์ผ๋ฉด ํจ์ ํธ์ถ์ ์ฌ์ฉํ๊ณ , API๊ฐ ์๋์ผ๋ก Python ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋๋ก ํ๋ ค๋ฉด ์ฝ๋ ์คํ์ ์ฌ์ฉํฉ๋๋ค.
์ฒญ๊ตฌ
Gemini API์์ ์ฝ๋ ์คํ์ ์ฌ์ฉ ์ค์ ํ๋ ๋ฐ์๋ ์ถ๊ฐ ๋น์ฉ์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ์ฌ์ฉ ์ค์ธ Gemini ๋ชจ๋ธ์ด ๋ฌด์์ธ์ง์ ๋ฐ๋ผ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ํ ํฐ์ ํ์ฌ ์์จ๋ก ๋น์ฉ์ด ์ฒญ๊ตฌ๋ฉ๋๋ค.
์ฝ๋ ์คํ์ ์ฒญ๊ตฌ์ ๋ํด ๋ช ๊ฐ์ง ์ค์ํ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ชจ๋ธ์ ์ ๋ฌํ๋ ์ ๋ ฅ ํ ํฐ๊ณผ ์ฝ๋ ์คํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์ค๊ฐ ์ ๋ ฅ ํ ํฐ์ ๋ํด์๋ ๋น์ฉ์ด ํ ๋ฒ๋ง ์ฒญ๊ตฌ๋ฉ๋๋ค.
- API ์๋ต์์ ์ฌ์ฉ์์๊ฒ ๋ฐํ๋ ์ต์ข ์ถ๋ ฅ ํ ํฐ์ ๋ํด ๋น์ฉ์ด ์ฒญ๊ตฌ๋ฉ๋๋ค.
- ์ฌ์ฉ ์ค์ธ Gemini ๋ชจ๋ธ์ด ๋ฌด์์ธ์ง์ ๋ฐ๋ผ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ํ ํฐ์ ํ์ฌ ์์จ๋ก ๋น์ฉ์ด ์ฒญ๊ตฌ๋ฉ๋๋ค.
- ์๋ต์ ์์ฑํ ๋ Gemini์ ์ฝ๋ ์คํ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ์๋ณธ ํ๋กฌํํธ, ์์ฑ๋ ์ฝ๋, ์คํ๋ ์ฝ๋ ๊ฒฐ๊ณผ๊ฐ ์ค๊ฐ ํ ํฐ ๋ผ๋ฒจ๋ก ํ์๋๊ณ ์ ๋ ฅ ํ ํฐ์ผ๋ก ์ฒญ๊ตฌ๋ฉ๋๋ค.
- ๊ทธ๋ฐ ํ Gemini๊ฐ ์์ฝ์ ์์ฑํ๊ณ ์์ฑ๋ ์ฝ๋, ์คํ๋ ์ฝ๋ ๊ฒฐ๊ณผ, ์ต์ข ์์ฝ์ ๋ฐํํฉ๋๋ค. ์ด๊ฒ๋ค์ ์ถ๋ ฅ ํ ํฐ์ผ๋ก ์ฒญ๊ตฌ๋ฉ๋๋ค.
- Gemini API์๋ API ์๋ต์ ์ค๊ฐ ํ ํฐ ์๊ฐ ํฌํจ๋๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ํ๋กฌํํธ๋ก ์ ๋ฌ๋ ๊ฒ ์ด์์ผ๋ก ์ถ๊ฐ๋ ์ ๋ ฅ ํ ํฐ์ ์ถ์ ํ ์ ์์ต๋๋ค.
์์ฑ๋ ์ฝ๋์๋ ํ ์คํธ ๋ฐ ๋ฉํฐ๋ชจ๋ฌ ์ถ๋ ฅ(์: ์ด๋ฏธ์ง)์ด ๋ชจ๋ ํฌํจ๋ ์ ์์ต๋๋ค.
์ ํ์ฌํญ
- ๋ชจ๋ธ์ ์ฝ๋๋ฅผ ์์ฑ ๋ฐ ์คํํ ์๋ง ์์ต๋๋ค. ๋ฏธ๋์ด ํ์ผ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ํฐํฉํธ๋ ๋ฐํํ ์ ์์ต๋๋ค.
- ์ด ๊ธฐ๋ฅ์ ๋นํ ์คํธ ์ถ๋ ฅ(์: ๋ฐ์ดํฐ ํ๋กฏ ๋๋ CSV ํ์ผ ์ ๋ก๋)์ด ๊ด๋ จ๋ ์ฌ์ฉ ์ฌ๋ก ๋๋ ํ์ผ I/O๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
- ์ฝ๋ ์คํ์ ํ์์์๋๊ธฐ ์ ๊น์ง ์ต๋ 30์ด ๋์ ์คํ๋ ์ ์์ต๋๋ค.
- ์ผ๋ถ ๊ฒฝ์ฐ์ ์ฝ๋ ์คํ์ ์ฌ์ฉ ์ค์ ํ๋ฉด ๋ชจ๋ธ ์ถ๋ ฅ์ ๋ค๋ฅธ ์์ญ(์: ์คํ ๋ฆฌ ์์ฑ)์์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.