로컬 에이전트가 시스템 프롬프트를 까먹은 이유 — Ollama num_ctx 무음 truncation을 직접 재봤다
로컬 에이전트가 긴 대화에서 갑자기 지시를 무시하길래, 프롬프트 맨 앞에 비밀 코드를 숨기고 길이를 늘여가며 recall을 측정했다. num_ctx를 넘기면 Ollama는 에러 없이 프롬프트 앞쪽을 잘라낸다. 그리고 기본값이 4096이라는 통설도 내 맥북에선 틀렸다.
jangwook.net
Personal technical notes on AI agents, automation, developer tools, and the process of building software.
Latest Notes
The root page stays intentionally small. Choose a language, then read the full archive and related posts there.
AI 에이전트, 자동화, 개발 도구, 소프트웨어 제작 과정을 한국어로 기록합니다.
로컬 에이전트가 긴 대화에서 갑자기 지시를 무시하길래, 프롬프트 맨 앞에 비밀 코드를 숨기고 길이를 늘여가며 recall을 측정했다. num_ctx를 넘기면 Ollama는 에러 없이 프롬프트 앞쪽을 잘라낸다. 그리고 기본값이 4096이라는 통설도 내 맥북에선 틀렸다.
잠깐 쉬었다가 에이전트를 다시 부르면 첫 응답이 유독 굼떴다. Ollama가 응답마다 주는 load_duration을 모델 크기별로 뜯어보니 2GB는 1.5초, 9.6GB는 최대 9.7초였다. keep_alive 하나로 이 콜드 스타트 비용이 어떻게 갈리는지 직접 측정해 정리했다.
같은 9,700토큰 프롬프트가 내 노트북에서 첫 토큰까지 55초 걸렸는데, 두 번째 호출은 65밀리초였다. Ollama 타임스탬프를 뜯어 prefill과 generation을 분리 측정하고, prefix 캐시가 왜 396배 빨랐는지, 에이전트 컨텍스트 설계에 어떻게 적용할지 정리했다.
Personal notes on AI agents, automation, developer tools, and building software.
My local agent kept ignoring its system prompt on long inputs. Past num_ctx, Ollama silently trims the front of the prompt — no error. I measured where it breaks.
After idling, my agent's first reply dragged. I pulled Ollama's load_duration across model sizes: 1.5s for 2GB up to 9.7s for 9.6GB, and split it by keep_alive.
A 9,700-token prompt took 55s to its first token, then 65ms on the identical second call. I split Ollama's timings into prefill vs generation to see why.
AIエージェント、自動化、開発ツール、ソフトウェア開発の記録です。
ローカルエージェントが長い会話で急に指示を無視しはじめた。プロンプトの先頭に秘密コードを隠し、長さを伸ばしながらrecallを測った。 num_ctxを超えるとOllamaはエラーも出さずプロンプトの前方を切り落とす。そして「既定値は4096」という通説も私のMacでは外れていた。
少し離れてからエージェントを呼び直すと、最初の応答だけやけに重い。Ollamaが応答ごとに返すload_durationをモデルサイズ別に 分解すると、2GBで1.5秒、9.6GBで最大9.7秒だった。しかも「コールド」には二種類あった。keep_alive一つでこの費用が どう分かれるかを実測してまとめた。
同じ9,700トークンのプロンプトが私のノートPCで最初のトークンまで55秒かかったのに、2回目の呼び出しは65ミリ秒だった。Ollamaのタイムスタンプを直接取り出してprefillとgenerationを分離測定し、prefixキャッシュがなぜ396倍速かったのか、エージェントのコンテキスト設計にどう活かすかをまとめた。
记录 AI 代理、自动化、开发工具和软件构建过程。
本地智能体在长输入下突然无视指令。我把一段秘密代码藏在提示开头,逐步加长输入直到 recall 崩掉。 一旦超过 num_ctx,Ollama 就不报错地砍掉提示前半段。而且"默认值是 4096"这个说法,在我的 MacBook 上是错的。
离开一会儿再叫回代理,第一条响应就格外迟钝。我把Ollama每次响应都返回的load_duration按模型大小拆开看:2GB是1.5秒, 9.6GB最高9.7秒。而且"冷"原来有两种。keep_alive一个开关如何决定这笔开销,我做了实测整理。
同样一段9,700 token的提示词,在我的笔记本上第一个token要等55秒,而第二次相同调用只用了65毫秒。我直接取出Ollama的时间戳,分离测量prefill与generation,弄清prefix缓存为何快了396倍,以及如何把它用到代理的上下文设计上。