[00:00]
자, LLM API 비용을
[00:02]
최대 90%까지 줄일 수 있는 방법이 있다면 어떨까요?
[00:06]
많은 개발자들이 이 방법을 활용하지 않고 있습니다.
[00:09]
모델이 더 강력해지고
[00:12]
컨텍스트 길이가 늘어나도,
[00:15]
사용량이 증가하면 비용이 급증할 수 있습니다.
[00:19]
이럴 때
[00:21]
컨텍스트 캐싱이라는 개념이
[00:24]
도움이 됩니다. 이 기술은
[00:27]
API 호출을 줄이고 비용을 절약할 뿐만 아니라,
[00:30]
소규모 문서의 경우
[00:33]
검색 증강 생성(RAG)의
[00:35]
대안이 될 수 있어서,
[00:38]
벡터 저장소와 인덱싱,
[00:41]
스토리지의 오버헤드를 피할 수 있습니다.
[00:45]
OpenAI, Anthropic, Google과 같은
[00:49]
주요 API 제공업체들이 컨텍스트 캐싱을 구현했습니다.
[00:51]
Google이 사실 처음으로
[00:53]
이를 도입했는데, 초기에는
[00:55]
32,000 토큰이 필요했습니다. 하지만 지금은
[00:59]
4,000 토큰으로 낮추어
[01:03]
더욱 접근성을 높였습니다.
[01:06]
이 영상에서는
[01:08]
Google의 컨텍스트 캐싱 구현 방법과
[01:10]
작동 방식, 그리고
[01:13]
컨텍스트 캐싱을 활용한 새로운 시스템 구축 방법을 보여드리겠습니다.
[01:17]
이 영상에서는 Google의
[01:20]
컨텍스트 캐싱 구현을 사용하는데,
[01:22]
이는 Anthropic이나
[01:24]
OpenAI의 구현보다
[01:27]
더 많은 제어 기능을 제공하기 때문입니다.
[01:30]
클라우드에서 컨텍스트 캐싱이나
[01:32]
프롬프트 캐싱을 사용하는 방법에 대한
[01:35]
영상이 있습니다. 관심 있으시다면
[01:37]
설명란에 링크가 있습니다.
[01:39]
컨텍스트 캐싱은 특히
[01:42]
대용량 PDF 파일이나 비디오 파일과 같은
[01:44]
큰 문서를 다룰 때 매우 유용하며,
[01:48]
사용자가 이러한 파일들과
[01:50]
반복적으로 상호작용할 때 효과적입니다.
[01:53]
이러한 파일들을 훨씬 저렴한 비용으로 한 번 캐시하고
[01:57]
사용자가 캐시된 파일들과
[01:59]
상호작용하도록 할 수 있습니다. 이는
[02:02]
속도와 비용 절감에 모두 도움이 됩니다.
[02:06]
Google에 따르면,
[02:08]
토큰이 자동으로 삭제되기 전까지
[02:10]
캐시 지속 시간을 선택할 수 있습니다.
[02:13]
기본적으로 유효 시간은 1시간이지만,
[02:16]
원한다면 몇 초로도
[02:18]
설정할 수 있습니다. 특정 경우에는
[02:21]
컨텍스트 캐싱이 RAG를
[02:24]
대체할 수 있습니다.
[02:26]
특히 벡터 저장소나
[02:28]
전처리, 임베딩의 추가 비용을 처리할 필요가 없습니다.
[02:32]
따라서 비교적 작은 문서를 다루고
[02:35]
사용자가
[02:36]
짧은 시간 동안
[02:38]
해당 문서와 상호작용하는 경우,
[02:41]
컨텍스트 캐싱을
[02:43]
활용할 수 있습니다. RAG를 넘어서,
[02:46]
인-컨텍스트 학습에도
[02:48]
활용할 수 있는데,
[02:50]
새로운 라이브러리에 대한 정보를 추가하면
[02:53]
Gemini가 해당 문서를 참고하여
[02:55]
이후 호출에서 활용할 수 있습니다.
[02:59]
이에 대한 예시는 나중에 보여드리겠습니다.
[03:04]
그전에, 캐싱의 주요 목적인
[03:07]
비용 절감에 대해 살펴보겠습니다.
[03:09]
얼마나 비용이 절감될까요?
[03:12]
Gemini 2.5 Pro의 경우,
[03:15]
200,000 토큰 이상 사용 시
[03:17]
다른 가격이 적용되지만,
[03:21]
일반적으로 프롬프트나
[03:24]
토큰을 캐시하면
[03:27]
기존 대비 약 75%의 비용 절감을 기대할 수 있습니다.
[03:32]
캐시되지 않은 토큰과 비교하면
[03:35]
멀티모달 토큰이나
[03:38]
텍스트 기반 토큰 모두에서 이 효과가 나타납니다.
[03:42]
Gemini 2.0 플래시에서도 비슷한 방식으로 작동하지만
[03:46]
Gemini 2.5 플래시에서는
[03:48]
아직 컨텍스트 캐싱을 사용할 수 없습니다.
[03:52]
곧 출시될 예정이며, 추가 저장 비용이
[03:55]
시간당 저장되는 토큰 수를
[03:57]
기준으로 측정됩니다.
[04:01]
프로 버전의 경우
[04:03]
시간당 백만 토큰당 4.5달러가 부과됩니다.
[04:07]
따라서 저장 비용과
[04:09]
토큰 보관 기간을
[04:12]
신중히 고려해야 합니다.
[04:14]
먼저 컨텍스트 캐싱의 작동 방식을
[04:16]
설명한 다음,
[04:18]
실제 예제를 통해
[04:20]
컨텍스트 학습에 적용해보겠습니다.
[04:24]
MCPS 파이썬 패키지의 문서를 활용하여
[04:26]
Gemini로 새로운 MCPS를
[04:30]
생성해보도록 하겠습니다.
[04:34]
먼저 Google Generative AI 패키지를
[04:37]
설치해야 합니다. 필요한 모든 패키지를
[04:41]
임포트하고,
[04:43]
Gemini 클라이언트를 시작합니다.
[04:46]
이 예제에서는
[04:48]
약 600페이지 분량의 비행 계획을 사용할 건데,
[04:53]
보시다시피 스캔된 문서입니다.
[04:57]
다행히 Gemini는
[05:00]
멀티모달 정보를 처리할 수 있어서
[05:02]
비전 기능을 통해
[05:04]
이 스캔된 문서를
[05:07]
이해할 수 있습니다. 먼저 문서의
[05:10]
URL을 제공한 다음, 문서를 추출하고
[05:14]
우리가 만든 클라이언트를 통해
[05:16]
문서를 업로드할 것입니다.
[05:19]
즉, 구글 클라우드에
[05:22]
문서를 저장하는 거죠.
[05:25]
이 예제에서는 Gemini 2.0 플래시를 사용합니다.
[05:27]
2.5 플래시는 아직 컨텍스트 캐싱을 지원하지 않습니다.
[05:31]
그리고 시스템 지시사항은
[05:34]
매우 단순합니다.
[05:36]
당신은 전문가입니다. 캐시 생성 방법은
[05:39]
다음과 같습니다. create_cache 함수를 사용해
[05:42]
모델 이름을 제공합니다.
[05:46]
설정에서는 원하는
[05:48]
시스템 지시사항과
[05:50]
캐시하고 싶은
[05:52]
내용을 제공할 수 있습니다.
[05:54]
시스템 지시사항이 매우 긴 경우
[05:57]
그것만 캐시하거나
[06:00]
이후 호출에 사용할
[06:02]
다른 문서들과 함께
[06:05]
캐시할 수 있습니다. 여기서 실수를 했는데,
[06:08]
Google API 키 대신
[06:11]
Grock API 키를 입력했네요.
[06:14]
모든 것을 다시 실행해서
[06:17]
문서가 제대로 업로드되도록 하겠습니다.
[06:20]
지금 캐시가 생성되고 있습니다.
[06:23]
이 과정은 몇 초 정도 걸리지만,
[06:25]
완료되면 우리의 캐시를
[06:27]
확인할 수 있을 것입니다.
[06:31]
캐시가 정확히 어디에 저장되어 있는지
[06:34]
알려주는 URL이 있을 거예요.
[06:36]
여기 저장된 전체 토큰 수는
[06:38]
약 16만 개입니다.
[06:40]
캐시가 생성되었고
[06:43]
이제 이 캐시를
[06:46]
일반 Gemini 모델처럼
[06:50]
Gemini API를 통해 상호작용할 수 있습니다.
[06:53]
이제 이 캐시를 후속 요청에서
[06:57]
사용해보겠습니다. 방법은
[06:59]
캐시된 콘텐츠를 가리키는
[07:03]
구성을 제공하는 것입니다.
[07:06]
여러 개의 캐시를 가질 수 있으며
[07:08]
여러 개의 캐시를 동시에 사용할 수 있습니다.
[07:11]
우리는 단순히 설정을 제공하고
[07:13]
사용자 요청을 처리하면 됩니다.
[07:16]
모델의 최종 응답을 보여주기 전에,
[07:18]
사용된 메타데이터를
[07:20]
살펴볼 수 있습니다. 이것은
[07:23]
내부에서 정확히 무슨 일이 일어났는지
[07:25]
이해하는데 매우 도움이 됩니다.
[07:28]
우리 요청에는 총 9개의 토큰이 있었고,
[07:31]
캐시된 토큰의 수는 여기 있으며
[07:34]
모델이 처리한 총 토큰 수는
[07:36]
이와 같습니다.
[07:38]
기본적으로 캐시된 토큰과
[07:42]
입력 토큰을 더한 것이고,
[07:45]
총 553개의 토큰이 생성되었습니다.
[07:49]
모든 것을 합치면,
[07:53]
약 16만 개의 토큰을
[07:56]
처리하게 됩니다. 모델은
[07:58]
캐시된 토큰과 캐시되지 않은 토큰을
[08:01]
구분하지 않습니다. 모델은
[08:04]
이들을 정확히 같은 방식으로 처리합니다.
[08:07]
여기 모델이 생성한 응답이
[08:09]
제공된 문서의 간단한 요약으로
[08:12]
나타나 있습니다.
[08:15]
600페이지 문서의 매우 간단한 요약입니다.
[08:20]
문맥 학습을 위한 캐싱 사용법을
[08:23]
보여주기 전에,
[08:26]
몇 가지 유용한 함수와
[08:28]
기술들을 살펴보겠습니다. 첫째,
[08:31]
여러 개의 캐시를 가질 수 있으므로,
[08:34]
이들을 반복하여
[08:36]
사용 가능한 모든 캐시를 나열할 수 있습니다.
[08:39]
둘째로, 매우 유용할 것 같은 기능은
[08:41]
캐시를 업데이트하는 것입니다.
[08:43]
기본적으로 TTL을 지정하지 않으면
[08:46]
1시간 동안 콘텐츠가 캐시되지만
[08:48]
캐시 기간을 동적으로
[08:51]
업데이트할 수 있습니다.
[08:54]
예를 들어, 여기서는
[08:57]
300초로 설정하고 있고,
[09:00]
이렇게 하면 캐시 기간이
[09:03]
300초로 업데이트됩니다. 하지만 사용자
[09:06]
세션이 만료된 후 캐시를
[09:08]
삭제하고 싶다면,
[09:10]
캐시의 삭제 함수를 사용하여
[09:13]
완전히 삭제할 수 있습니다.
[09:16]
영상의 나머지 부분에서는
[09:18]
Google DeepMind AI 개발자 경험 팀의
[09:20]
필립이 제공한 예제를
[09:23]
사용하겠습니다. 여기 아주
[09:26]
훌륭한 예제가 있는데,
[09:31]
MCPS 관련 GitHub 저장소의
[09:34]
내용을 캐싱하고 그 캐시된 내용을
[09:37]
사용하여 Gemini 모델로
[09:41]
후속 MCP 서버를 생성하는 것입니다.
[09:44]
캐시된 콘텐츠는 약 31센트의 비용이 들며,
[09:48]
이는 백만 토큰당
[09:51]
$1.25와 비교됩니다.
[09:54]
그의 코드를 같은 노트북에서 사용하겠지만
[09:57]
원본 노트북 링크를
[10:00]
제공하겠습니다. 먼저
[10:03]
git-ingest 패키지를 설치해야 합니다.
[10:07]
이전에 사용해보지 않았다면,
[10:09]
이것은 정말 멋진 패키지입니다.
[10:12]
모든 GitHub 저장소를
[10:16]
LLM이 읽을 수 있는 마크다운 파일로 변환할 수 있어서
[10:20]
전체 GitHub 저장소를
[10:23]
LLM 문서로 변환할 수 있습니다.
[10:26]
웹 버전은 사용해봤지만
[10:28]
파이썬 패키지가 있는지 몰랐네요.
[10:32]
GitHub 저장소에 가서
[10:36]
GitHub를 git-ingest로 바꾸면
[10:40]
새로운
[10:41]
git-ingest 웹 인터페이스로
[10:44]
이동하게 됩니다. 여기서 원하는 파일 유형을
[10:47]
어떤 유형의 파일을 포함하거나
[10:49]
제외할지 정의할 수 있고, 모든 내용이 담긴
[10:53]
단일 파일을 생성하는데, 이는 정말
[10:56]
놀라운 기능입니다. 이렇게 만든
[10:58]
파일들이나 단일 파일을 LLM에 입력하면
[11:01]
전체 GitHub 레포지토리의 모든 컨텍스트를
[11:03]
가질 수 있게 됩니다. 저는 이것을
[11:07]
많이 사용해왔지만, 파이썬 패키지가
[11:09]
있다는 것은 몰랐네요. 이제
[11:12]
설정을 위해 Gemini 모델을 위한
[11:14]
또 다른 클라이언트를 만들 겁니다. 이번에는
[11:18]
2.5 Pro를 사용할 건데요,
[11:20]
여기 시스템 지시사항이 있습니다.
[11:23]
우리가 하고자 하는 것은
[11:26]
FastAPI GitHub 레포지토리의 내용을 제공하고
[11:30]
Gemini가 그 내용을 기반으로 API 서버를
[11:34]
생성하도록 하는 것입니다. FastAPI는
[11:38]
API 서버를 만들 수 있게 해주는 파이썬 패키지입니다.
[11:41]
시작하는 방법과
[11:43]
API 서버 설정에 대한 훌륭한 문서가 있죠.
[11:46]
이제 시스템 지시사항을 보면
[11:50]
이 경우에는
[11:52]
'당신은 FastAPI GitHub 레포지토리
[11:53]
컨텍스트를 가진 도움이 되는 코딩 어시스턴트입니다.
[11:57]
사용자가 FastAPI나 API 서버 구축에 대해
[12:00]
질문하면 사용 가능한 정보를
[12:03]
활용하세요'라고 되어 있습니다.
[12:06]
그리고 우리는 이 레포지토리에서
[12:10]
JSON 파일, CSS, JS 그리고
[12:15]
가상 환경, GitHub 관련 파일들을 제외한
[12:19]
모든 것을 가져올 것입니다.
[12:23]
말씀드렸듯이, 이 파이썬 패키지는
[12:25]
몰랐었는데,
[12:27]
앞으로 더 자주
[12:29]
사용할 것 같네요. 이제
[12:31]
출력으로 정확히 무엇을 받는지
[12:34]
살펴보겠습니다. 약 13만 개의
[12:37]
토큰이 있는 것으로 추정됩니다.
[12:40]
트리를 보면,
[12:42]
레포지토리의 구조가 있고,
[12:45]
그리고 컨텐츠가 있는데, 이것이
[12:49]
우리 레포지토리의 실제 내용입니다.
[12:53]
다음으로 캐시를 생성할 건데요,
[12:55]
방법은 다시 한 번 클라이언트에서
[12:58]
create_cache 함수를 사용하는 것입니다.
[13:02]
그런 다음 우리의 모델을 사용하고,
[13:05]
PDF 파일에서 했던 것처럼
[13:07]
컨텐츠를 제공할 것입니다.
[13:10]
시스템 지시사항과 함께요.
[13:12]
이 모든 것이 캐시되고
[13:15]
이 경우 이미 300초의
[13:17]
유효 시간이 있습니다. 따라서 캐시는
[13:20]
300초 후에 자동으로 삭제됩니다.
[13:23]
약 15만 4천 개의 토큰이
[13:27]
캐시되었고, 75%의 비용 절감은
[13:31]
15만 개의 토큰을 고려하면 매우 큰 절감입니다.
[13:34]
이제 이 캐시된 컨텐츠와
[13:38]
평소처럼 상호작용할 수 있습니다.
[13:40]
시스템 프롬프트와 컨텍스트를 사용해서
[13:43]
정상적으로 작업하면 됩니다.
[13:46]
일반 API 클라이언트를 사용할 건데요,
[13:48]
프롬프트로 'temp API 아래에서
[13:52]
로컬 파일을 읽고 쓸 수 있는
[13:55]
간단한 API 서버를 만들어줘'라고 하겠습니다.
[13:59]
캐시의 이름만 제공하면 되고,
[14:01]
그 후에 메타데이터를 볼 수 있습니다.
[14:04]
약 15만 4천 개의 토큰 중 5만 5천 개가 캐시되었고,
[14:08]
18개의 토큰은 캐시되지 않았습니다. 이것들은
[14:12]
입력에서 온 토큰들입니다. 그리고
[14:15]
생각 과정을 위한 토큰들이 있는데,
[14:18]
이것들은 캐시되지 않았습니다.
[14:21]
그리고 더 적은 수의
[14:23]
출력 토큰이 있는데, 이것도
[14:25]
캐시되지 않았죠. 하지만 대부분은
[14:28]
토큰의 대부분이 캐시되어 있어서
[14:30]
이러한 토큰들에 대해 상당히 적은
[14:33]
비용만 지불하게 될 것입니다. 이제
[14:35]
응답에서 정확히 어떤 일이 일어났는지
[14:38]
살펴보겠습니다. 여기 간단한
[14:41]
빠른 MCP 서버가 있는데, 이는 특정
[14:44]
디렉토리 내에서 파일을 읽고
[14:46]
쓸 수 있게 해줍니다. MCP 서버를 만들었네요.
[14:49]
MCP 서버에 필요한 리소스들이 있고
[14:53]
그 도구들도 추가해야 합니다.
[14:56]
보시다시피 파일을 쓰기 위한
[14:58]
도구들을 만들었습니다. 그리고
[15:01]
파일을 읽기 위한 도구도
[15:04]
있을 것 같네요.
[15:06]
여기에 코드를 실행하는 방법과
[15:09]
코드가 어떻게 구현되었는지에 대한
[15:12]
자세한 설명이 있습니다.
[15:15]
Gemini는 MCP에 대해 전혀 모르지만
[15:17]
캐시된 콘텐츠를 보고
[15:20]
구현 방법을 제시할 수 있었습니다.
[15:24]
지금은 테스트하지 않을 건데,
[15:26]
아마 다른 영상을 만들 것 같습니다.
[15:28]
MCP 서버와 MCP가 일반 함수 호출과
[15:31]
어떻게 다른지에 대한 영상이 있습니다.
[15:35]
그래서 링크를
[15:37]
걸어두겠습니다. 관심 있으시다면
[15:39]
꼭 시청해 보세요.
[15:41]
이것이 컨텍스트 캐싱이 무엇이고
[15:43]
어떻게 시작하는지에 대한
[15:46]
간단한 예시였습니다. 구글만이 아닙니다.
[15:48]
Anthropic도 컨텐츠 캐싱 구현을
[15:51]
가지고 있는데, 이를 프롬프트 캐싱이라고
[15:54]
부릅니다. OpenAI도 자체
[15:57]
구현을 가지고 있습니다. 이에 대한
[15:59]
영상을 몇 개 만들었는데,
[16:02]
제가 본 바로는 구글이 OpenAI와
[16:05]
Anthropic에 비해 더 많은 제어 기능을 제공합니다.
[16:09]
이는 매우 중요한
[16:11]
개념이므로 API를 통해
[16:13]
LLM을 사용한다면 반드시 배워야 합니다.
[16:17]
비용을 상당히 줄일 수 있고
[16:20]
경우에 따라서는 지연 시간도
[16:23]
줄일 수 있습니다. 이런 기술적인
[16:26]
콘텐츠가 마음에 드신다면
[16:28]
구독해 주세요.
[16:30]
이 영상이 도움이 되었길 바랍니다.
[16:32]
시청해 주셔서 감사하고 다음 영상에서
[16:35]
만나뵙겠습니다.