Function Calling과 RAG는 서로 다른 역할입니다
Function Calling은 모델이 호출할 함수의 이름과 인자를 제안하고 애플리케이션이 실제 코드를 실행하도록 돕는 방식입니다. RAG는 질문과 관련된 문서 구간을 검색해 모델에 제공하여 답변 근거를 보강하는 방식입니다. 모델이 코드를 자동으로 실행한다거나 검색된 모든 내용이 반드시 정확하다고 가정해서는 안 됩니다.
참고: 공식 함수 호출 설명, 공식 임베딩 안내, Gemini API 시작하기.
1. 실제 동작 순서
- 개발자가 호출을 허용할 함수를 만들고 이름·입력 스키마를 선언합니다.
- 모델은 필요할 때 함수 호출용 인자를 구성합니다.
- 서버는 요청 인자를 검증하고 권한을 확인한 뒤 함수를 실행합니다.
- 함수 실행 결과를 모델에 전달하고, 모델이 결과를 설명하게 합니다.
자동 함수 호출을 지원하는 Python SDK 설정을 쓰더라도 보안 확인·권한 검사·실제 외부 서비스 호출은 개발자가 책임집니다. 결제, 메일 발송, 데이터 삭제처럼 영향을 되돌리기 어려운 작업에는 추가 승인이 필요합니다.
2. 고유 실습: 가상 서점 재고 조회 함수
실제 쇼핑몰과 연결하기 전에는 외부 시스템을 변경하지 않는 가상의 재고 함수로 시험해 보세요. 아래 예시는 함수를 도구로 전달하는 구조를 보여 줍니다. 모델 이름은 본인 프로젝트의 실제 사용 가능 모델로 바꾸어야 합니다.
import os
from google import genai
from google.genai import types
def lookup_book_stock(book: str) -> str:
"""가상의 서점에서 책 제목에 해당하는 재고를 조회합니다."""
sample_stock = {"파이썬 입문": 3, "엑셀 연습장": 0}
if book not in sample_stock:
return "등록된 예제 재고가 없습니다."
return f"{book}: {sample_stock[book]}권"
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
model = os.environ["GEMINI_MODEL"]
response = client.models.generate_content(
model=model,
contents="가상 서점에 파이썬 입문 재고가 몇 권 남았나요?",
config=types.GenerateContentConfig(tools=[lookup_book_stock]),
)
print(response.text)
이 예제는 Google GenAI Python SDK의 함수 전달 패턴을 이용합니다. 지원 모델, SDK 버전과 자동 함수 호출 옵션에 따라 동작이 달라질 수 있으므로 공식 함수 호출 문서의 현재 예제를 함께 확인하세요. 실제 주문번호·고객정보·결제 서비스는 연결하지 않습니다.
3. RAG 고유 실습: 세 문서에서 답변 근거 찾기
가상 서점 FAQ 3개를 준비합니다. ① ‘일반 배송은 결제 확인 다음 영업일에 발송’, ② ‘예약 도서는 발매일에 출고’, ③ ‘배송 문의는 주문번호를 확인 후 응대’입니다. 질문이 ‘예약 도서는 언제 출고되나요?’라면 ②를 검색 결과로 제공하고, 답변에 ‘발매일에 출고’라는 근거를 명시하도록 요구합니다. 문서에 없는 배송 완료일을 추측하면 오답 처리합니다.
문서가 많아지면 문서를 작은 구간으로 나누고, 임베딩 생성 및 유사도 검색으로 관련 구간을 고릅니다. Gemini의 client.models.embed_content(...)는 공식 문서에 소개된 방법이지만, 검색 인덱스·업데이트·접근 권한은 별도 구현해야 합니다.
4. 운영 전 확인표
- 데이터 출처와 문서 최종 수정일을 저장합니다.
- RAG 결과에 문서 제목 또는 구간 ID를 남깁니다.
- 사용자별 권한에 맞는 문서만 검색합니다.
- 함수 인자 유효성 검증 및 외부 API 호출 제한을 둡니다.
- 모델이 근거 없는 답을 제시하면 ‘자료에서 확인되지 않음’이라고 응답하도록 테스트합니다.
기초 설치와 키 관리는 Gemini API 키 발급과 Python 실습을 먼저 참고하세요. 본문은 가상 실습 구조이며 실제 운영 환경의 실행 결과를 보증하지 않습니다.