๐Ÿค– RAG with Gemini File Search ๊ธฐ๋ฐ˜ ์˜๋ฃŒ ์ง„๋‹จ ๊ธฐ๋ก ์นด์นด์˜คํ†ก ์ฑ—๋ด‡ ๊ฐœ๋ฐœ ๊ธฐ๋ก 2๏ธโƒฃ

0/ ๊ธฐ์กด ๋ฐฉ์‹์˜ ํ•œ๊ณ„

๐Ÿค– RAG with Gemini File Search ๊ธฐ๋ฐ˜ ์˜๋ฃŒ ์ง„๋‹จ ๊ธฐ๋ก ์นด์นด์˜คํ†ก ์ฑ—๋ด‡ ๊ฐœ๋ฐœ ๊ธฐ๋ก 1๏ธโƒฃ ์—์„œ๋Š”, Google Drive์— ์ €์žฅ๋œ ์˜๋ฃŒ ๋ฌธ์„œ๋ฅผ Gemini File Search Store๋ฅผ ํ™œ์šฉํ•ด ์ƒ‰์ธํ•˜๊ณ , ์นด์นด์˜คํ†ก ์ฑ—๋ด‡์—์„œ ํ™˜์ž ์ธ์ฆ ํ›„ ํ•ด๋‹น ํ™˜์ž์˜ ์˜๋ฃŒ ๊ธฐ๋ก๋งŒ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋‹ต๋ณ€ํ•˜๋Š” RAG ๊ธฐ๋ฐ˜ PoC๋ฅผ ๊ตฌํ˜„ํ•œ ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ๋‹ค.

์ฒ˜์Œ ๊ตฌํ˜„ํ•œ ์ „์ฒด ํ๋ฆ„์€ ์•„๋ž˜์™€ ๊ฐ™์•˜๋‹ค.

Google Drive
  โ””โ”€ ํ™˜์ž๋ณ„ PDF ์ง„๋‹จ ๊ธฐ๋ก
       โ†“
Document Sync
  โ””โ”€ PDF ๋ณ€๊ฒฝ ์—ฌ๋ถ€ ํ™•์ธ
  โ””โ”€ Gemini File Search Store ์—…๋กœ๋“œ
       โ†“
Gemini File Search Store
  โ””โ”€ ํ™˜์ž๋ณ„ Store ๋ถ„๋ฆฌ
       โ†“
KakaoTalk Chatbot
  โ””โ”€ ํ™˜์ž ์ธ์ฆ
  โ””โ”€ ํ•ด๋‹น ํ™˜์ž์˜ Store๋งŒ ์—ฐ๊ฒฐ
       โ†“
Gemini
  โ””โ”€ ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ๋‹ต๋ณ€ ์ƒ์„ฑ

๋น ๋ฅด๊ฒŒ MVP๋ฅผ ๋งŒ๋“ค๊ธฐ์—๋Š” ์ถฉ๋ถ„ํ–ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธํ•ด๋ณด๋‹ˆ ๋ชจ๋ธ์ด ์ƒ์„ฑํ•œ ์ž์—ฐ์–ด ๋‹ต๋ณ€์„ ๊ทธ๋Œ€๋กœ ์นด์นด์˜คํ†ก ๋ฉ”์‹œ์ง€๋กœ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์— ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

ํ…Œ์ŠคํŠธํ•œ ๊ฒฐ๊ณผ, ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์„ ํ™•์ธํ–ˆ๋‹ค.

  1. ์นด์นด์˜คํ†ก ํ™”๋ฉด์—์„œ ๊ธด ๋ฌธ๋‹จ์ด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ๊ธฐ ์–ด๋ ค์› ๋‹ค.
  2. *, ** ๊ฐ™์€ ๋งˆํฌ๋‹ค์šด ๊ธฐํ˜ธ๊ฐ€ ์นด์นด์˜คํ†ก ๋ฉ”์‹œ์ง€์— ์‚ฌ์šฉ๋˜๋Š”๋ฐ ๋ณด๊ธฐ ์–ด์ƒ‰ํ–ˆ๋‹ค.
  3. ํ™˜์ž ์„ฑํ•จ ์™ธ ๊ฐœ์ธ์ •๋ณด๋Š” ์ฐจ๋‹จํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค.
  4. ์˜๋ฃŒ ๊ธฐ๋ก ์ „๋ฌธ์„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด ์ถœ๋ ฅํ•˜๋Š” ์š”์ฒญ์„ ๋ง‰์•„์•ผ ํ–ˆ๋‹ค.
  5. ์ฒ˜๋ฐฉ์— ๋Œ€ํ•œ ์˜์‹ฌ, ๋ณ‘์› ๋ฐ ์˜๋ฃŒ์ง„ ๋น„๋‚œ์— ๋™์กฐํ•˜์ง€ ์•Š์•„์•ผ ํ–ˆ๋‹ค.
  6. ์‘๊ธ‰ ์ง•ํ›„๊ฐ€ ํฌํ•จ๋œ ์งˆ๋ฌธ์€ ์ผ๋ฐ˜ ๋‹ต๋ณ€๋ณด๋‹ค ์ฆ‰์‹œ ์˜๋ฃŒ๊ธฐ๊ด€ ๋ฐฉ๋ฌธ ๊ถŒ๊ณ ํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค.

์˜๋ฃŒ ๊ธฐ๋ก ๊ธฐ๋ฐ˜ ์ฑ—๋ด‡์—์„œ๋Š” ๋‹จ์ˆœํžˆ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด,

  1. ๋ฌธ์„œ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๋‹ตํ–ˆ๋Š”์ง€?
  2. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌป๋Š” ๊ฒƒ์—๋งŒ ํ™•์‹คํžˆ ๋‹ตํ–ˆ๋Š”์ง€?
  3. ๊ฐœ์ธ์ •๋ณด๋‚˜ ์˜๋ฃŒ ๊ธฐ๋ก๊ณผ ๋ฌด๊ด€ํ•œ ์งˆ๋ฌธ์„ ์ฐจ๋‹จํ–ˆ๋Š”์ง€?

๋ฅผ ๊ฒ€์ฆํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ๋А๊ปด์กŒ๋‹ค.

๊ทธ๋ž˜์„œ ๋ชจ๋ธ ๋‹ต๋ณ€์„ ๋ฐ”๋กœ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์—์„œ JSON ๊ตฌ์กฐํ™” ์ถœ๋ ฅ์œผ๋กœ ๋จผ์ € ๋ฐ›์€ ํ›„ ์„œ๋ฒ„์—์„œ ํ›„๊ฒ€์ฆํ•˜์—ฌ ๋‹ต๋ณ€์„ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

1/ ์™œย gemini-3-flash-preview ๋ชจ๋ธ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‚˜?

(preview์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ )

1๏ธโƒฃย gemini-2.5-flash ์ง€์› ์ข…๋ฃŒ ํ•œ ๋‹ฌ ๋‚จ์Œ

๊ธฐ์กด์—๋Š” gemini-2.5-flash๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ์†๋„, ๋น„์šฉ, ์ถœ๋ ฅ ์ •ํ™•๋„ ๋ชจ๋‘ ์ ์ ˆํ–ˆ๊ณ , *File Search๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. *Gemini File Search๋Š” Google์—์„œ ์ œ๊ณตํ•˜๋Š” โ€œRAG-as-a-Serviceโ€๋กœ, ๋ฌธ์„œ๋ฅผ import, chunking, indexingํ•œ ๋’ค ์งˆ๋ฌธ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•ด ๋ชจ๋ธ ์ปจํ…์ŠคํŠธ๋กœ ๋„ฃ์–ด์ฃผ๋Š” RAG ๋„๊ตฌ์ด๋‹ค.

https://ai.google.dev/gemini-api/docs/deprecations?hl=ko

ํ•˜์ง€๋งŒ gemini-2.5-flash์ด 26๋…„ 6์›”์— ์ง€์›์ด ์ค‘๋‹จ๋œ๋‹ค๊ณ  ํ•ด, 6์›” ์ดํ›„์—๋„ ๊ณ„์† ์ง„ํ–‰ํ•  ๊ณ„ํš์ด๋ฏ€๋กœ preview์ด๋”๋ผ๋„ gemini-3-flash ๋ชจ๋ธ๋กœ ๋ฏธ๋ฆฌ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

2๏ธโƒฃย File Search์™€ JSON Structured Output ๋™์‹œ ์‚ฌ์šฉ

https://ai.google.dev/gemini-api/docs/structured-output?example=recipe

from google import genai
from pydantic import BaseModel, Field
from typing import List

class MatchResult(BaseModel):
    winner: str = Field(description="The name of the winner.")
    final_match_score: str = Field(description="The final match score.")
    scorers: List[str] = Field(description="The name of the scorer.")

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.1-pro-preview",
    contents="Search for all details for the latest Euro.",
    config={
        "tools": [
            {"google_search": {}},
            {"url_context": {}}
        ],
        "response_mime_type": "application/json",
        "response_json_schema": MatchResult.model_json_schema(),
    },
)

result = MatchResult.model_validate_json(response.text)
print(result)

๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•œ ๋” ํฐ ์ด์œ ๋Š” File Search์™€ JSON Structured Output์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ์˜€๋‹ค.

๊ธฐ์กด gemini-2.5-flash์—์„œ๋Š” File Search์™€ ๊ฐ™์€ Gemini built-in tools์™€ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” config๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ ํ”„๋กฌํ”„ํŠธ๋‚˜ ์„œ๋ฒ„์—์„œ ๋”ฐ๋กœ JSON schema๋ฅผ ๊ฐ•์ œํ–ˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ๋ถˆ์•ˆ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜์—ˆ๋‹ค.

๋ฐ˜๋ฉด Gemini 3 ๋ชจ๋ธ๋ถ€ํ„ฐ๋Š” File Search์™€ ๊ฐ™์€ built-in tools์™€ Structured Outputs๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ์•„์ง preview ๋ชจ๋ธ์ด๋ผ ์šด์˜ ์•ˆ์ •์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ gemini-3-flash-preview ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๋ง˜์„ ๊ตณํ˜”๋‹ค.

thinking_budget โžก๏ธย thinking_level

๊ธฐ์กด gemini-2.5-flash ์ฝ”๋“œ์™€ ํฐ ์ฐจ์ด๋Š” ์—†์ง€๋งŒ, geimini-3-flash๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ thinking_budget ์ด ์•„๋‹ˆ๋ผ thinking_level์„ ์‚ฌ์šฉํ•œ๋‹ค.

thinking_config=types.ThinkingConfig(thinking_budget=0), # -1, 0, 1024, ...

โžก๏ธ

 thinking_config=types.ThinkingConfig(
            thinking_level=thinking_level, # "minimal", "low", "medium", "high"
        ),

2/ JSON ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ ๋ฐ ํ”„๋กฌํ”„ํŠธ ๊ฐœ์„ 

๊ธฐ์กด์—๋Š” ๋ชจ๋ธ์ด ์ƒ์„ฑํ•œ ์ž์—ฐ์–ด ๋‹ต๋ณ€์„ ๊ทธ๋Œ€๋กœ ์นด์นด์˜คํ†ก ๋ฉ”์‹œ์ง€๋กœ ์ „์†กํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋ธ ์ถœ๋ ฅ์„ ๋” ๊ฒ€์ฆํ•˜๊ณ , ์•ˆ์ •ํ•˜๊ฒŒ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด JSON ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

1๏ธโƒฃย ํŽ˜๋ฅด์†Œ๋‚˜

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

๋˜ํ•œ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ๋ชจ๋ธ์ด ์กฐ๊ธˆ ๋” ์นœ์ ˆํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ๋А๊ปด ์ „๋ฌธ์ ์œผ๋กœ ์„ค๋ช…ํ•˜๋ฉด์„œ ํ™˜์ž์˜ ๊ฑฑ์ •์—๋Š” ๋”ฐ๋œปํ•˜๊ฒŒ ๊ณต๊ฐํ•˜๋„๋ก ํ–ˆ๋‹ค.

- ์ „๋ฌธ์„ฑ: ๋ชจ๋“  ๋‹ต๋ณ€์˜ ๊ทผ๊ฑฐ๋Š” ์˜ค์ง ์ œ๊ณต๋œ ์˜๋ฃŒ ๋ฌธ์„œ ๋‚ด์— ์žˆ์–ด์•ผํ•˜๋ฉฐ ์ฐจ๋ถ„ํ•˜๊ณ  ๊ฐ๊ด€์ ์œผ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
- ์ •์ค‘ํ•œ ๊ต์ •: ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ์˜ํ•™ ์ •๋ณด๋‚˜ ์˜คํ•ด๋ฅผ ์–ธ๊ธ‰ํ•˜๋ฉด, ์ œ๊ณต๋œ ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์ •์ค‘ํ•˜๊ฒŒ ์‚ฌ์‹ค์„ ๋ฐ”๋กœ์žก์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
- ๋”ฐ๋œปํ•œ ๊ณต๊ฐ: ์‚ฌ์šฉ์ž์˜ ๊ฑฑ์ •์— ๊ณต๊ฐํ•˜๋ฉฐ ๋”ฐ๋œปํ•˜๊ฒŒ ๋‹ต๋ณ€ํ•˜์„ธ์š”.
- ์—ญํ•  ์ œํ•œ: ์ƒˆ๋กœ์šด ์ง„๋‹จ, ์ฒ˜๋ฐฉ ๋ณ€๊ฒฝ ๋“ฑ ์˜์‚ฌ์˜ ์—ญํ• ์„ ๋Œ€์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
- ์ค‘๋ฆฝ์„ฑ: ์˜๋ฃŒ์ง„, ๋ณ‘์›, ์˜๋ฃŒ ์ฒด๊ณ„์— ๋Œ€ํ•œ ๋น„ํŒ์ด๋‚˜ ๋ถ€์ •์ ์ธ ์˜๊ฒฌ์— ๋™์กฐํ•˜๊ฑฐ๋‚˜ ์–ธ๊ธ‰ํ•˜์ง€ ๋งˆ์„ธ์š”. ์ค‘๋ฆฝ์ ์ธ ํƒœ๋„๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃย ์นด์นด์˜คํ†ก ํ™”๋ฉด์—์„œ ๋ณด๊ธฐ ํŽธํ•œ ๋‹ต๋ณ€ ํ˜•์‹

ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ์ œ์ผ ๋А๊ผˆ๋˜ ๋ฌธ์ œ๋Š” ์นด์นด์˜คํ†ก ํ™”๋ฉด์—์„œ์˜ ๊ฐ€๋…์„ฑ์ด์—ˆ๋‹ค. ๋ชจ๋ธ์ด ๋ณดํ†ต ๊ธด ๋ฌธ๋‹จ์œผ๋กœ ๋‹ต๋ณ€ํ•˜๊ฑฐ๋‚˜ ๋งˆํฌ๋‹ค์šด ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ด๋Š” ์นด์นด์˜คํ†ก์—์„œ๋Š” ๋ณด๊ธฐ ์–ด์ƒ‰ํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์„œ์‹ ๋„๊ตฌ๋ฅผ ์ง€์ •ํ•˜๊ณ , ์นด์นด์˜คํ†ก์—์„œ ๋ณด๊ธฐ ์ข‹์€ ๋‹ต๋ณ€์„ ์ž‘์„ฑํ•˜๋„๋ก ํ–ˆ๋‹ค.

  1. ๋งˆํฌ๋‹ค์šด ์‚ฌ์šฉ ๊ธˆ์ง€
  2. ๊ธด ๋ฌธ๋‹จ ๊ธˆ์ง€
  3. ๋ฌธ๋‹จ ์‚ฌ์ด ์ค„๋ฐ”๊ฟˆ ์‚ฌ์šฉ
  4. ์ด๋ชจ์ง€ ์„น์…˜ ํ—ค๋” ์‚ฌ์šฉ
  5. ์ค‘์š”ํ•œ ํ‚ค์›Œ๋“œ๋Š” [๋Œ€๊ด„ํ˜ธ]๋กœ ๊ฐ•์กฐ
  6. ๋ฆฌ์ŠคํŠธ๋Š” ํ•˜์ดํ”ˆ ๊ธฐํ˜ธ(-) ์‚ฌ์šฉ

์ดํ›„ ๋‹ต๋ณ€์ด ์นด์นด์˜คํ†ก ํ™”๋ฉด์—์„œ ํ›จ์”ฌ ์ฝ๊ธฐ ํŽธํ•˜๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.

3๏ธโƒฃย JSON Schema ์ •์˜

๋ชจ๋ธ ์ถœ๋ ฅ์€ ๋‹ค์Œ JSON ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๋„๋ก ํ–ˆ๋‹ค.

{
  "evidence": "ํŒ๋‹จ์˜ ๊ทผ๊ฑฐ๊ฐ€ ๋œ ๋ฌธ์„œ ๋‚ด ์‹ค์ œ ๋ฌธ๊ตฌ",
  "status": "ok | emergency | blocked | out_of_scope | cost_block | full_doc_block | cannot_verify",
  "kakaotalk_render": "์นด์นด์˜คํ†ก์— ํ‘œ์‹œํ•  ์ตœ์ข… ๋ฉ”์‹œ์ง€",
  "used_source_ids": ["์ฐธ์กฐํ•œ ๋ฌธ์„œ ID"]
}

์—ฌ๊ธฐ์„œ status๋Š” โ€œ์ƒํƒœ ์ฝ”๋“œโ€ ํ•„๋“œ๋กœ, ๊ฐ ์ƒํƒœ์˜ ์˜๋ฏธ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

ok: ๋ฌธ์„œ ๊ทผ๊ฑฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ •์ƒ ๋‹ต๋ณ€ ๊ฐ€๋Šฅ
cannot_verify: ์ œ๊ณต๋œ ๋ฌธ์„œ์—์„œ ํ™•์ธ ๋ถˆ๊ฐ€
blocked: ์„ฑํ•จ ์™ธ ๊ฐœ์ธ์ •๋ณด ์š”์ฒญ
emergency: ์‘๊ธ‰ ์ง•ํ›„ ๊ฐ์ง€
out_of_scope: ์˜๋ฃŒ ๊ธฐ๋ก๊ณผ ๋ฌด๊ด€ํ•œ ์งˆ๋ฌธ
cost_block: ๋น„์šฉ, ๋ณดํ—˜, ์ฒญ๊ตฌ ๊ด€๋ จ ์งˆ๋ฌธ
full_doc_block: ๋ฌธ์„œ ์ „๋ฌธ ๋˜๋Š” ์ „์ฒด ์›๋ฌธ ์š”์ฒญ

4๏ธโƒฃย ๊ฐœ์ธ์ •๋ณด, ์˜๋ฃŒ ๊ธฐ๋ก๊ณผ ๋ฌด๊ด€ํ•œ ์งˆ๋ฌธ ์ฐจ๋‹จ

์˜๋ฃŒ ๊ธฐ๋ก ๊ธฐ๋ฐ˜ ์ฑ—๋ด‡์—์„œ ๋‹ตํ•  ์ˆ˜ ์—†๋Š” ์งˆ๋ฌธ ์œ ํ˜•์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ฐœ์ธ์ •๋ณด ์š”์ฒญ, ์˜๋ฃŒ ๊ธฐ๋ก๊ณผ ๋ฌด๊ด€ํ•œ ์งˆ๋ฌธ ๋“ฑ์—๋Š” Gemini ์ƒ์„ฑ ๋‹ต๋ณ€์ด ์•„๋‹ˆ๋ผ ๊ณ ์ • ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.

5๏ธโƒฃย ์„œ๋ฒ„ ํ›„๊ฒ€์ฆ & ์ถœ์ฒ˜ ํ‘œ์‹œ

JSON ๊ตฌ์กฐํ™” ์ถœ๋ ฅ์„ ๋ฐ”๊พผ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ์„œ๋ฒ„์—์„œ ํ›„๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด์„œ์˜€๋‹ค.

1. status๊ฐ€ ok์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
2. ok๊ฐ€ ์•„๋‹ˆ๋ฉด ์„œ๋ฒ„์— ์ •์˜๋œ ๊ณ ์ • ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
3. ok์ธ๋ฐ evidence๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด cannot_verify๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
4. kakaotalk_render๊ฐ€ ๋น„์–ด ์žˆ์–ด๋„ cannot_verify๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
5. ๋‚ด๋ถ€ ์‹๋ณ„์ž๋‚˜ ๊ธˆ์ง€ ํ† ํฐ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด cannot_verify๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
6. used_source_ids๊ฐ€ READY ๋ฌธ์„œ ๋ชฉ๋ก๊ณผ ๋งค์นญ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
7. ๊ฒ€์ฆ๋œ source๋งŒ ์‚ฌ์šฉํ•ด ์„œ๋ฒ„๊ฐ€ ์ถœ์ฒ˜ ์„น์…˜์„ ๋งŒ๋“ ๋‹ค.

๋ชจ๋ธ์ด JSON์„ ๋ฐ˜ํ™˜ํ•œ ํ›„ ๋ฐ”๋กœ ์นด์นด์˜คํ†ก์œผ๋กœ ์ „์†กํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„์—์„œ ์ตœ์ข… ๊ฒ€์ฆํ•œ ๋’ค ์ „์†กํ•˜๋„๋ก ํ–ˆ๋‹ค.

์ถœ์ฒ˜๋Š” ๋ชจ๋ธ์ด ์•„๋‹ˆ๋ผ ์„œ๋ฒ„๊ฐ€ ๋ Œ๋”๋ง

์ฒ˜์Œ์—๋Š” ๋ชจ๋ธ์ด ์ถœ์ฒ˜๊นŒ์ง€ ๋ฉ”์‹œ์ง€์— ํฌํ•จํ•˜๋„๋ก ํ–ˆ๋Š”๋ฐ, ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ๋™์ผํ•œ ๋ฌธ์„œ๊ฐ€ ์ค‘๋ณต ์ถœ๋ ฅ๋˜๋Š”, ๋ชจ๋ธ์ด ๋ฉ‹๋Œ€๋กœ ์ถœ์ฒ˜๋ฅผ ๊พธ๋ฉฐ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋“ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ถœ์ฒ˜ ์„น์…˜์€ ์•ˆ์ „ํ•˜๊ฒŒ ์„œ๋ฒ„๊ฐ€ ๋งŒ๋“ค๋„๋ก ์ˆ˜์ •ํ–ˆ๋‹ค. READY ๋ฌธ์„œ ๋ชฉ๋ก๊ณผ ๋งค์นญ๋œ source๋งŒ ์‚ฌ์šฉํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ •๋ฆฌํ•œ๋‹ค.

๐Ÿ“„ ์ถœ์ฒ˜ (2๊ฑด)
1. ๊ฒ€์‚ฌ๊ฒฐ๊ณผ์ง€, 2026-04-29
2. ์ง„๋ฃŒ๊ธฐ๋ก๋ถ€, 2026-04-29