{
  "title": "컨텍스트 엔지니어링: 왜 프롬프트 엔지니어링만으로는 충분하지 않았는가",
  "excerpt": "2026년까지, 현대 AI 시스템에서 진짜 작업은 영리한 프롬프트를 작성하는 것이 아닙니다. 모델이 무엇을, 언제 보는지, 그리고 그 컨텍스트가 어떻게 구조화되고, 유지되며, 지속적인 메모리로 전환되는지를 결정하는 것입니다.",
  "content_html": "<p>한동안 '프롬프트 엔지니어링'은 대규모 언어 모델에서 좋은 결과를 얻기 위한 기술을 일컫는 이름이었습니다. 초기에는 말이 되었습니다. 대부분의 사람들이 일회성 상호작용을 사용하고 있었고, 주요 수단은 실제로 문구를 다듬는 것처럼 느껴졌습니다. 더 명확하게 질문하고, 예시를 추가하고, 형식을 제한하면 모델이 더 잘 작동했습니다.</p>\n<p>이제 그 프레임은 실제 문제에 비해 너무 좁습니다.</p>\n<p>AI 시스템이 프로덕션에서 실패할 때, 문제는 대개 시스템 프롬프트에 한 문장 더 영리하게 추가해야 하는 것이 아닙니다. 문제는 모델이 올바른 정보를 보지 못했거나, 너무 많은 관련 없는 정보를 보았거나, 올바른 정보를 잘못된 형식으로 보았거나, 한 단계에서 다음 단계로 올바른 상태를 전달하지 못한 것입니다. 즉, 문제는 프롬프트만이 아니었습니다. 문제는 <strong>전체 컨텍스트 파이프라인</strong>이었습니다.</p>\n<p>그렇기 때문에 <strong>컨텍스트 엔지니어링</strong>이라는 용어가 자리 잡았습니다. 이 문구는 2025년 중반, Tobi Lütke와 Andrej Karpathy가 '프롬프트 엔지니어링'이 신뢰할 수 있는 LLM 시스템을 구축하는 실제 작업을 과소평가한다고 주장하면서 주류 AI 논의에 들어왔습니다.[1] 그러나 근본적인 분야는 그 이름보다 오래되었습니다. RAG, 도구 호출, 메모리 시스템, 요약 또는 평가 루프를 구축해 본 적이 있다면 이미 컨텍스트 엔지니어링의 일부를 수행한 것입니다. 달라진 점은 마침내 전체 작업을 설명하는 이름이 생겼다는 것입니다.</p>\n<h2>간단한 정신 모델</h2>\n<p>가장 간단한 그림을 원한다면, 컨텍스트 엔지니어링은 외부 세계와 모델의 작업 메모리 사이의 계층입니다.</p>\n<pre><code class=\"language-mermaid\">flowchart TD\n    U[\"User request\"] --&gt; CE[\"Context engine\"]\n\n    I[\"Instructions and policies\"] --&gt; CE\n    R[\"Retrieved knowledge\"] --&gt; CE\n    M[\"Memory and saved state\"] --&gt; CE\n    T[\"Tool definitions and results\"] --&gt; CE\n    H[\"Recent conversation history\"] --&gt; CE\n\n    CE --&gt; W[\"Model context window\"]\n    W --&gt; L[\"LLM reasons and acts\"]\n    L --&gt; O[\"Answer or tool call\"]\n    O --&gt; S[\"New memory, logs, and state\"]\n    S --&gt; CE\n</code></pre>\n<p>이것이 전부입니다.</p>\n<p>모델은 추론 엔진입니다. 컨텍스트 엔진은 모델이 추론할 대상을 결정합니다.</p>\n<h2>이름은 새롭다. 작업은 그렇지 않다.</h2>\n<p>이 용어가 공감을 얻는 한 가지 이유는 별도로 발전해 오던 여러 흐름을 하나로 묶기 때문입니다.</p>\n<p>Retrieval-Augmented Generation(RAG)은 모델이 추론 시점에 외부 지식에 접근해야 한다는 것을 가르쳐 주었습니다.[2] ReAct는 모델이 도구를 호출하고, 결과를 관찰하고, 그로부터 계속 진행할 때 추론과 행동이 더 잘 작동한다는 것을 가르쳐 주었습니다.[3] 메모리 연구는 장기 실행 어시스턴트가 끝없는 대화 기록 축적보다는 인덱싱, 검색 및 읽기 전략이 필요하다는 것을 가르쳐 주었습니다.[4] 긴 컨텍스트 평가는 단순히 더 많은 토큰을 모델에 집어넣는 것이 더 나은 작업 메모리를 제공하는 것과 같지 않다는 것을 보여주었습니다.[5][6][7]</p>\n<p>이렇게 보면, 컨텍스트 엔지니어링은 이러한 아이디어들을 대체하는 것이 아닙니다. 그것은 이들 위에 있는 포괄적인 개념입니다.</p>\n<p>이 포괄적인 개념이 중요한 이유는 현대 AI 시스템이 더 이상 고립된 프롬프트가 아니기 때문입니다. 이들은 지침, 문서, 구조화된 데이터, 도구 출력 및 이전 상태를 다음 단계를 위한 임시 컨텍스트 창으로 조립하는 동적 시스템입니다. LangChain은 컨텍스트 엔지니어링을 LLM이 작업을 <em>그럴듯하게 완료</em>할 수 있도록 올바른 형식으로 올바른 정보와 도구를 제공하는 작업이라고 정의하면서 이를 잘 설명했습니다.[8]</p>\n<p>'그럴듯하게 작업을 완료한다'는 표현은 많은 의미를 담고 있습니다. 그것은 올바른 테스트입니다.</p>\n<p>에이전트가 실패하면, 첫 번째 질문은 '프롬프트를 어떻게 더 똑똑하게 만들까?'가 되어서는 안 됩니다.</p>\n<p>첫 번째 질문은 '모델이 성공하는 데 필요한 것을 실제로 제공했는가?'여야 합니다.</p>\n<h2>프롬프트 엔지니어링이 너무 작아진 이유</h2>\n<p>프롬프트 엔지니어링은 여전히 중요합니다. 다만 더 큰 분야의 하위 집합이 되었을 뿐입니다.</p>\n<p>기존의 정신 모델은 다음과 같았습니다:</p>\n<table>\n<thead>\n<tr>\n<th>프롬프트 엔지니어링</th>\n<th>컨텍스트 엔지니어링</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>더 나은 지침 작성</td>\n<td>전체 정보 환경 구축</td>\n</tr>\n<tr>\n<td>단일 요청에 집중</td>\n<td>다단계 시스템에 집중</td>\n</tr>\n<tr>\n<td>대부분 정적</td>\n<td>동적이고 상태 저장</td>\n</tr>\n<tr>\n<td>문구 최적화</td>\n<td>선택, 구조, 메모리 및 도구 최적화</td>\n</tr>\n<tr>\n<td>단일 모델 호출 개선</td>\n<td>전체 루프 개선</td>\n</tr>\n</tbody>\n</table>\n<p>이 구분은 에이전트를 구축하는 순간 명확해집니다.</p>\n<p>엔터프라이즈 소프트웨어용 지원 에이전트를 구축한다고 가정해 보겠습니다. 사용자가 'API 요청이 왜 시간 초과되는 거죠?'라고 묻습니다.</p>\n<p>프롬프트 측면에서만 생각한다면 문구를 개선할 수 있습니다.</p>\n<ul>\n<li>모델에게 간결하게 요청하도록 함</li>\n<li>증거를 인용하도록 요청</li>\n<li>단계별로 생각하도록 요청</li>\n</ul>\n<p>이것들은 훌륭한 개선 사항입니다. 하지만 충분하지 않습니다.</p>\n<p>실제 시스템 질문은 더 어렵습니다:</p>\n<ul>\n<li>에이전트가 인시던트 런북에 접근할 수 있습니까?</li>\n<li>최신 로그와 상태 페이지를 볼 수 있습니까?</li>\n<li>이 계정이 어떤 고객 등급에 속하는지 알고 있습니까?</li>\n<li>대화의 이전 차례를 기억합니까?</li>\n<li>티켓 시스템을 조회할 수 있습니까?</li>\n<li>오래된 문서와 최신 문서를 구분할 수 있습니까?</li>\n<li>너무 많은 컨텍스트를 받으면 무엇이 잘립니까?</li>\n</ul>\n<p>이것이 컨텍스트 엔지니어링입니다.</p>\n<p>프롬프트는 그 안에 있는 한 줄 항목입니다.</p>\n<h2>컨텍스트로 간주되는 것</h2>\n<p>실제로 컨텍스트는 모델이 추론 시점에 보는 모든 것을 포함하며, 보이는 프롬프트만을 의미하지 않습니다.[8][9]</p>\n<p>여기에는 일반적으로 다음이 포함됩니다:</p>\n<ul>\n<li>시스템 지침</li>\n<li>현재 사용자 요청</li>\n<li>검색된 문서</li>\n<li>JSON, 테이블, 스키마 및 레코드와 같은 구조화된 데이터</li>\n<li>도구 정의</li>\n<li>도구 출력</li>\n<li>최근 대화 기록</li>\n<li>장기 메모리 또는 저장된 노트</li>\n<li>보안, 정책 및 형식 제약 조건</li>\n<li>파일, 탭, 티켓 또는 작업 디렉토리와 같은 환경 상태</li>\n</ul>\n<p>이것이 '컨텍스트 창 채우기'라는 문구가 매우 중요해진 이유입니다. 컨텍스트 창은 단지 텍스트가 들어가는 곳이 아닙니다. 그것은 모델의 임시 작업 메모리입니다. 그 안에 들어오는 모든 것은 주의를 위해 경쟁합니다.</p>\n<p>그리고 경쟁이 핵심 단어입니다.</p>\n<p>모든 추가 토큰은 단순한 추가 정보가 아닙니다. 그것은 또한 추가적인 방해 요소입니다.</p>\n<h2>더 큰 컨텍스트 창이 문제를 해결하지 못한 이유</h2>\n<p>현재 AI 시장에서 가장 흔한 오해 중 하나는 더 큰 컨텍스트 창이 컨텍스트 엔지니어링의 중요성을 낮췄다는 것입니다.</p>\n<p>연구는 반대 방향을 가리킵니다.</p>\n<p><em>Lost in the Middle</em>은 모델이 종종 긴 컨텍스트를 고르지 않게 사용하여, 관련 정보가 시작이나 끝 부분에 나타날 때 더 잘 수행하고 중요한 정보가 중간에 있을 때 더 나쁘게 수행한다는 것을 보여주었습니다.[5] Databricks의 긴 컨텍스트 RAG 연구는 더 많은 검색된 문서를 추가하는 것이 도움이 될 수 있지만, 최첨단 모델 중 소수만이 64k 토큰 이상에서 강력한 성능을 유지한다는 것을 발견했습니다.[6] Chroma의 <em>Context Rot</em> 보고서는 더 나아가 입력 길이가 증가함에 따라, 특히 모호성과 방해 요소가 도입될 때 간단한 작업조차 덜 신뢰할 수 있게 된다고 밝혔습니다.[7]</p>\n<p>이것은 많은 팀이 어렵게 배우는 부분입니다.</p>\n<p>더 큰 창은 선택의 필요성을 없애지 않습니다. 그것은 나쁜 선택의 대가를 처음에는 덜 명확하게 하고 나중에는 더 고통스럽게 만듭니다.</p>\n<p>긴 프롬프트는 적어도 네 가지 다른 방식으로 실패할 수 있습니다:</p>\n<ol>\n<li><strong>컨텍스트 중독</strong>: 잘못된 사실, 환각 또는 오래된 결과가 전달됩니다.</li>\n<li><strong>컨텍스트 산만</strong>: 관련성이 있지만 중요하지 않은 세부 사항이 핵심 작업을 압도합니다.</li>\n<li><strong>컨텍스트 혼란</strong>: 서로 다른 컨텍스트 조각이 서로 모순됩니다.</li>\n<li><strong>컨텍스트 낭비</strong>: 유용한 토큰이 중복되거나 가치가 낮은 자료 아래에 묻힙니다.</li>\n</ol>\n<p>이것이 컨텍스트 엔지니어링이 토큰을 최대화하는 것이 아니라 컨텍스트 창 내에서 <strong>신호 밀도</strong>를 최대화하는 것에 관한 이유입니다.</p>\n<h2>검색에서 탐색으로</h2>\n<p>여기서 가장 좋은 최신 아이디어 중 하나가 등장합니다.</p>\n<p>Jason Liu는 고전적인 청크 기반 RAG 이후의 다음 단계는 '가장 유사한 구절'에 대해서만 생각하는 것을 멈추고 <strong>검색 공간의 형태</strong>에 대해 생각하기 시작하는 것이라고 주장했습니다.[10] 그의 프레임은 많은 팀이 이미 거쳐 가고 있는 진행 과정을 매핑하기 때문에 특히 유용합니다:</p>\n<ol>\n<li>최소 청크</li>\n<li>소스 메타데이터가 있는 청크</li>\n<li>멀티모달 및 구조화된 콘텐츠에 대한 더 나은 처리</li>\n<li>패싯 및 쿼리 개선</li>\n</ol>\n<p>처음 세 가지는 검색되는 내용의 개선 사항입니다.</p>\n<p>네 번째는 더 흥미롭습니다. 에이전트가 <strong>코퍼스 자체에 대해</strong> 배우는 것을 개선합니다.</p>\n<p>패싯은 모델에게 주변 시야와 같은 것을 제공합니다. 상위 몇 개의 청크만 반환하는 대신 시스템은 집계된 메타데이터도 반환할 수 있습니다:</p>\n<ul>\n<li>결과 세트에서 어떤 문서 유형이 지배적인지</li>\n<li>어떤 팀이나 소유자가 가장 자주 나타나는지</li>\n<li>어떤 날짜가 함께 클러스터링되는지</li>\n<li>상위 결과에 어떤 범주가 존재하지만 과소 대표되는지</li>\n</ul>\n<p>유사성 검색은 검사하기에 가장 중요한 것이 아니라 일치시키기 가장 쉬운 쪽으로 편향되어 있기 때문에 이것은 중요합니다.[10] 검색 시스템은 잘 문서화된 해결된 인시던트를 과도하게 표면화하고 드물고 아직 열려 있는 인시던트를 과소 표면화할 수 있습니다. 법적 검색은 서명된 계약을 과도하게 표면화하고 실제로 주의가 필요한 서명되지 않은 계약을 숨길 수 있습니다. 패싯은 에이전트가 '무엇이 일치했는지'뿐만 아니라 '근처에 무엇이 더 있는지'를 볼 수 있도록 도와줍니다.</p>\n<p>이것은 주요 개념적 전환입니다.</p>\n<p>RAG는 주로 검색에 관한 것이었습니다.</p>\n<p>컨텍스트 엔지니어링은 점점 <strong>탐색</strong>에 관한 것이 되고 있습니다.</p>\n<h2>컨텍스트 엔지니어링의 여섯 가지 작업</h2>\n<p>컨텍스트 엔지니어링을 구체적으로 만드는 가장 쉬운 방법은 그것이 수행하는 실제 작업으로 나누는 것입니다.</p>\n<h3>1. 선택</h3>\n<p>첫 번째 작업은 무엇이 창에 들어갈 자격이 있는지 결정하는 것입니다.</p>\n<p>여기에는 검색, 순위 지정, 필터링, 소스 선택 및 신선도 확인이 포함됩니다. 당연해 보이지만, 여전히 품질의 많은 부분이 결정되거나 상실되는 곳입니다. BRIGHT와 같은 벤치마크는 현실적인 검색이 표면적인 의미론적 일치가 암시하는 것보다 훨씬 어렵다는 것을 보여줍니다.[11] 검색 품질이 약하면, 아무리 많은 다운스트림 프롬프트 다듬기로도 결과를 완전히 구할 수 없습니다.</p>\n<p>선택은 단지 '관련 청크 찾기'가 아닙니다. 그것은:</p>\n<ul>\n<li>올바른 소스 선택</li>\n<li>올바른 세분성 선택</li>\n<li>올바른 양 선택</li>\n<li>올바른 순서 선택</li>\n</ul>\n<p>좋은 시스템은 종종 순진한 시스템보다 덜 검색하지만, 더 의도적으로 검색합니다.</p>\n<h3>2. 구조</h3>\n<p>두 번째 작업은 선택된 컨텍스트가 어떻게 표현되는지 결정하는 것입니다.</p>\n<p>동일한 정보는 형식에 따라 도움이 될 수도 있고 쓸모없을 수도 있습니다. Anthropic의 도구 사용 지침은 이에 대해 명시적입니다. 도구 설명과 인터페이스는 모델 동작을 강하게 형성합니다.[9] 긴 컨텍스트 프롬프팅 지침은 XML 태깅, 소스 레이블링 및 명확하게 분리된 문서 섹션에 대해 유사한 권장 사항을 제공합니다.[12]</p>\n<p>실제로 구조는 다음을 의미합니다:</p>\n<ul>\n<li>소스 레이블 지정</li>\n<li>데이터와 지침 분리</li>\n<li>복잡한 문서를 일관된 마크업으로 래핑</li>\n<li>중요할 때 테이블을 테이블로 유지</li>\n<li>증거와 함께 인용 및 메타데이터 반환</li>\n</ul>\n<p>짧고 잘 레이블된 결과는 종종 거대한 JSON blob보다 성능이 뛰어납니다.</p>\n<h3>3. 압축</h3>\n<p>세 번째 작업은 중요한 것을 파괴하지 않고 컨텍스트를 줄이는 것입니다.</p>\n<p>이것은 많은 에이전트 시스템이 훨씬 더 좋아지거나 훨씬 더 나빠지는 지점입니다.</p>\n<p>압축은 다음을 의미할 수 있습니다:</p>\n<ul>\n<li>이전 차례 요약</li>\n<li>오래된 기록 정리</li>\n<li>마지막 몇 개의 사용자 차례만 그대로 유지</li>\n<li>긴 스레드에서 내구성 있는 사실 추출</li>\n<li>비용과 지연 시간을 줄이기 위해 안정적인 접두사 캐싱</li>\n</ul>\n<p>OpenAI의 프롬프트 캐싱 문서는 프롬프트 순서가 인지적으로뿐만 아니라 경제적으로도 중요하다는 것을 보여줍니다. 정적 공유 접두사는 캐시 적중이 정확한 접두사 재사용에 의존하기 때문에 앞쪽에 배치될 때 더 저렴하고 빠릅니다.[13] OpenAI의 새로운 Responses API의 압축 작업은 장기 실행 에이전트 기록을 창이 가득 차기 전에 더 토큰 효율적인 표현으로 압축해야 하는 것으로 취급함으로써 동일한 아이디어를 더욱 발전시킵니다.[14]</p>\n<p>압축은 선택 사항이 아닙니다. 유일한 질문은 의도적으로 수행하느냐, 아니면 컨텍스트 창이 스스로 저하되도록 내버려 두느냐입니다.</p>\n<h3>4. 메모리</h3>\n<p>네 번째 작업은 현재 차례를 넘어 무엇이 지속되어야 하는지 결정하는 것입니다.</p>\n<p>이것은 많은 팀이 같은 실수를 하는 부분입니다. 그들은 메모리를 대화 기록 보존과 혼동합니다.</p>\n<p>하지만 좋은 메모리는 '모든 것을 영원히 보관하는 것'이 아닙니다. LongMemEval은 장기 메모리를 인덱싱, 검색 및 읽기의 세 단계 문제로 구성합니다.[4] 그것이 올바른 사고 방식입니다. 메모리 시스템은 모델이 올바른 순간에 올바른 이전 사실을 복구할 수 있도록 도와야 하며, 완전한 과거에 빠뜨리지 않아야 합니다.</p>\n<p>이것은 유용한 구분으로 이어집니다:</p>\n<ul>\n<li><strong>작업 메모리</strong>: 현재 작업에 필요한 단기 컨텍스트</li>\n<li><strong>참조 메모리</strong>: 나중에 다시 로드할 수 있는 외부화된 사실, 요약, 노트 또는 아티팩트</li>\n</ul>\n<p>모든 것이 작업 메모리에 남아 있으면 모델은 산만해집니다.<br />\n모든 것이 밀려나면 모델은 연속성을 잃습니다.</p>\n<p>컨텍스트 엔지니어링은 각 계층에 무엇이 속하는지 결정합니다.</p>\n<h3>5. 도구 및 인터페이스 설계</h3>\n<p>다섯 번째 작업은 도구를 모델이 이해할 수 있게 만드는 것입니다.</p>\n<p>이것은 과소평가된 분야의 일부입니다. 도구 표면은 단순한 소프트웨어 API 설계가 아닙니다. 그것은 또한 컨텍스트 설계입니다.</p>\n<p>모델은 다음을 이해해야 합니다:</p>\n<ul>\n<li>도구가 무엇을 하는지</li>\n<li>언제 사용해야 하는지</li>\n<li>각 매개변수가 무엇을 의미하는지</li>\n<li>출력이 무엇을 의미하는지</li>\n<li>결과를 본 후 다음에 무엇을 해야 하는지</li>\n</ul>\n<p>이것이 도구 설명이 그렇게 중요한 이유입니다.[9] 또한 Jason Liu가 도구 결과를 강조하는 이유이기도 합니다.[10] 도구의 출력은 단순히 현재 쿼리에 답하는 것이 아닙니다. 그것은 에이전트에게 다음 쿼리에 대해 어떻게 생각해야 하는지 가르칩니다.</p>\n<p>도구 표면이 MCP와 같은 프로토콜을 통해 표준화되면 이것은 더욱 중요해집니다. MCP는 도구, 리소스 및 프롬프트를 LLM 애플리케이션에 연결하는 것을 더 쉽게 만들지만, 어떤 정보를 표면화해야 하는지, 어떻게 필터링해야 하는지, 또는 얼마나 많은 정보를 다음 모델 호출에 주입해야 하는지는 결정하지 않습니다.[15] 프로토콜은 배관입니다. 컨텍스트 엔지니어링은 여전히 기술입니다.</p>\n<h3>6. 격리 및 오케스트레이션</h3>\n<p>여섯 번째 작업은 언제 컨텍스트를 공유하지 않을지 결정하는 것입니다.</p>\n<p>이것은 장난감 데모와 프로덕션 에이전트의 가장 큰 차이점 중 하나입니다.</p>\n<p>때로는 정답이 더 큰 공유 프롬프트가 아니라 격리된 범위를 가진 여러 개의 더 작은 프롬프트입니다.</p>\n<p>Anthropic의 다중 에이전트 연구 시스템은 강력한 예입니다.[16] 그들의 하위 에이전트는 별도의 컨텍스트 창으로 병렬 실행되어, 모든 중간 세부 사항으로 서로를 오염시키지 않고 문제의 다른 분기를 탐색할 수 있습니다. LangChain은 '격리'라는 제목으로 유사한 패턴을 설명합니다. 때로는 에이전트 신뢰성을 개선하는 가장 좋은 방법은 컨텍스트를 축적하는 대신 분할하는 것입니다.[17]</p>\n<p>공유 컨텍스트에는 숨겨진 비용이 있기 때문에 이것은 중요합니다. 그것은 경로 의존성을 만듭니다. 하나의 잘못된 분기가 다음 단계, 그 다음 단계, 그리고 그 다음 단계에 영향을 미칠 수 있습니다.</p>\n<p>격리는 폭발 반경을 제한하는 방법입니다.</p>\n<h2>2026년에 달라진 점</h2>\n<p>2025년에 컨텍스트 엔지니어링은 주로 사람들이 이미 느끼고 있던 문제에 대한 유용한 이름이었습니다. 2026년에는 그것이 아키텍처로 굳어지기 시작했습니다.</p>\n<p>첫 번째 큰 변화는 빌더들이 지속적인 상태를 원시 컨텍스트 창 <strong>밖</strong>으로 옮기고 있다는 것입니다. Anthropic의 컨텍스트 편집 및 메모리 도구는 작업 창에 활성 상태로 남아 있는 것과 세션 간에 지속되어야 하는 것을 명시적으로 분리합니다.[18] OpenAI의 2026년 1월 개인화 쿡북은 다른 형태로 동일한 움직임을 보여줍니다. 실행 간에 지속되고 각 실행 시작 시 작업 메모리에 의도적으로 다시 주입되는 구조화된 상태 객체입니다.[19] OpenAI의 Responses API는 기본 압축을 통해 이 아이디어를 한 단계 더 발전시켜, 장기 실행 에이전트 루프가 모든 팀이 처음부터 맞춤형 요약 하위 시스템을 구축할 필요가 없도록 합니다.[14]</p>\n<p>Anthropic의 Managed Agents는 기본 패턴을 매우 명시적으로 만듭니다: <strong>세션은 모델의 컨텍스트 창이 아닙니다</strong>.[20] 이것은 중요한 2026년 아이디어입니다. 창은 일시적인 작업 메모리입니다. 세션 로그는 지속적인 객체입니다. 하네스는 그 지속적인 컨텍스트를 다음 모델 호출로 다시 슬라이스, 압축 및 재수화하는 방법을 결정합니다.</p>\n<p>두 번째 변화는 검색이 더 <strong>적시에</strong> 이루어지고 더 인터페이스에 가까워지고 있다는 것입니다. 팀들은 가능한 모든 토큰을 미리 로드하는 대신, 에이전트에게 이미 작동 방식을 알고 있는 검색 표면을 제공하고 있습니다. Mintlify의 ChromaFs는 좋은 예입니다. 문서 검색을 위해 전체 샌드박스를 부팅하는 대신, <code>ls</code>, <code>cat</code> 및 <code>grep</code>으로 탐색 가능한 가상 파일 시스템으로 문서를 제공하여 p90 세션 생성 시간을 약 46초에서 약 100밀리초로 줄였습니다.[21] Turso의 AgentFS는 일반 에이전트 실행을 위해 동일한 직관을 밀어붙입니다. 쓰기 시 복사 파일 시스템 추상화와 휴대용 단일 파일 저장소 및 내장 감사 기능을 제공합니다.[22]</p>\n<p>세 번째 변화는 <strong>컨텍스트 그래프</strong>가 단순한 은유가 아니라 구현 방향이 되고 있다는 것입니다. Foundation Capital의 테제는 이 용어를 가시화했지만, 더 강력한 주장은 아키텍처적입니다. 에이전트가 실행 경로에 있을 때, 최종 출력만 내보내는 것이 아니라 결정 추적을 지속적인 아티팩트로 캡처할 수 있습니다.[26][27] Graphiti와 같은 오픈 소스 시스템과 Zep과 같은 상용 플랫폼은 이를 시간적 유효성 창, 출처 에피소드, 의미론, 키워드 및 그래프 구조 전반의 하이브리드 검색을 갖춘 시간적 컨텍스트 그래프로 운영화합니다.[23] TrustGraph는 컨텍스트를 버전 관리된 아티팩트로 취급하는 관련 접근 방식을 취합니다. 그래프, 임베딩, 증거 및 정책이 빌드 출력처럼 승격되거나 롤백될 수 있는 휴대용 '컨텍스트 코어'로 묶입니다.[24][25]</p>\n<p>네 번째 변화는 컨텍스트 엔지니어링이 이제 플랫폼 블로그뿐만 아니라 실제 소프트웨어 실무에서도 볼 수 있다는 것입니다. 2026년 MSR의 오픈 소스 소프트웨어 내 컨텍스트 엔지니어링에 관한 연구는 466개의 저장소를 조사했으며, <code>AGENTS.md</code>와 같은 AI 컨텍스트 파일이 확산되고 있지만 아직 안정적인 콘텐츠 구조가 없음을 발견했습니다.[28] 이것은 이론에서 운영 아티팩트로의 이동을 의미하기 때문에 중요합니다. 컨텍스트는 더 이상 런타임에만 추론되는 것이 아닙니다. 그것은 소프트웨어 수명 주기의 일부로 작성되고, 버전 관리되고, 검토되고, 채굴되고 있습니다.</p>\n<p>2026년의 정신 모델을 한 장의 그림으로 원한다면, 다음과 같습니다:</p>\n<pre><code class=\"language-mermaid\">flowchart LR\n    E[\"Session log / events\"] --&gt; A[\"Context assembler\"]\n    F[\"Files, docs, and tools\"] --&gt; A\n    G[\"Context graph / memory\"] --&gt; A\n    P[\"Policies and AGENTS.md\"] --&gt; A\n\n    A --&gt; W[\"Working context window\"]\n    W --&gt; X[\"Agent action\"]\n\n    X --&gt; E\n    X --&gt; G\n</code></pre>\n<p>이것은 '프롬프트 + 벡터 검색'과는 매우 다른 아키텍처입니다.</p>\n<h2>컨텍스트 그래프가 실제로 들어맞는 곳</h2>\n<p>이 대화가 혼란스러워지는 한 가지 이유는 사람들이 <strong>컨텍스트 엔지니어링</strong>과 <strong>컨텍스트 그래프</strong>를 같은 의미로 사용하기 때문입니다. 그렇지 않습니다.</p>\n<p>컨텍스트 엔지니어링은 더 넓은 분야입니다. 그것은 다음 컨텍스트 창에 무엇을 넣을지, 무엇을 뺄지, 무엇을 압축할지, 무엇을 필요에 따라 검색할지 결정하는 작업입니다.</p>\n<p>컨텍스트 그래프는 그 더 큰 시스템 내에서 가능한 하나의 장기 메모리 기반입니다.</p>\n<p>모든 유용한 에이전트에 컨텍스트 그래프가 필요한 것은 아니기 때문에 이 구분은 중요합니다. 대부분 정적인 콘텐츠에 대한 문서 어시스턴트는 좋은 검색, 도구 설계 및 압축이 필요할 수 있지만 그래프는 필요하지 않을 수 있습니다. 코딩 에이전트는 저장소 지침, 지속적인 세션 로그 및 파일 시스템 추상화로 놀라울 정도로 멀리 갈 수 있습니다.[20][21][22][28]</p>\n<p>컨텍스트 그래프는 문제에 네 가지 특성이 있을 때 설득력을 얻습니다:</p>\n<ul>\n<li><strong>시간적 진실이 중요합니다.</strong> 지금 무엇이 사실인지뿐만 아니라 결정 시점에 무엇이 사실이었는지 알아야 합니다.[23]</li>\n<li><strong>출처가 중요합니다.</strong> 사실을 그것을 생성한 에피소드, 문서 또는 상호작용으로 추적해야 합니다.[23][24]</li>\n<li><strong>선례가 중요합니다.</strong> 작업은 예외 및 승인을 포함하여 유사한 사례가 이전에 어떻게 처리되었는지에 따라 달라집니다.[26][27]</li>\n<li><strong>교차 엔터티 추론이 중요합니다.</strong> 유용한 메모리는 평평한 노트가 아니라 사람, 정책, 인시던트, 계정, 티켓 및 결과의 네트워크입니다.[23][25]</li>\n</ul>\n<p>이것이 제 관점에서 컨텍스트 그래프의 최고의 정의가 'AI를 위한 그래프 데이터베이스'가 아니라 <strong>선례의 지속적인 표현</strong>인 이유입니다.</p>\n<p>그렇기 때문에 결정 추적이 그렇게 중요한 이유이기도 합니다. Foundation Capital의 프레임은 여기서 유용합니다. 규칙은 에이전트에게 일반적으로 무엇이 일어나야 하는지 알려줍니다. 결정 추적은 특정 사례에서 실제 제약 조건, 실제 예외와 함께 무엇이 일어났는지 알려줍니다.[26] 이러한 추적이 엔터티와 시간을 넘어 연결되면, 일반 메모리보다 훨씬 더 가치 있는 것을 얻을 수 있습니다. 검색 가능한 판단력을 얻는 것입니다.</p>\n<h2>2026년에 어떻게 구축할 것인가</h2>\n<p>오늘날 진지한 컨텍스트 엔지니어링 스택을 구축한다면, 그래프부터 시작하지 않을 것입니다. 인터페이스와 승격 규칙부터 시작할 것입니다.</p>\n<h3>1. 먼저 지속적인 세션 계층 구축</h3>\n<p>모든 작업, 도구 결과, 관찰 및 중요한 중간 아티팩트는 추가 전용 세션 로그 또는 이벤트 저장소에 기록되어야 합니다. 이것이 복구 가능한 컨텍스트 객체입니다.[14][20]</p>\n<p>활성 컨텍스트 창을 진실의 원천과 혼동하지 마십시오.</p>\n<p>창은 추론을 위한 것입니다.<br />\n세션은 복구, 재생, 디버깅 및 선택적 재수화를 위한 것입니다.</p>\n<h3>2. 컨텍스트 어셈블러를 제품 표면으로 취급</h3>\n<p>어셈블러는 다음을 명시적으로 관리해야 합니다:</p>\n<ul>\n<li>토큰 예산</li>\n<li>소스 우선순위</li>\n<li>신선도</li>\n<li>압축 임계값</li>\n<li>기록 정리</li>\n<li>인용 형식</li>\n<li>캐시 인식 순서</li>\n</ul>\n<p>이것은 모델이 <em>지금</em> 무엇을 볼지 결정하는 계층입니다. 관찰 가능하고, 테스트 가능하며, 변경하기 쉬워야 합니다.[18][19][14]</p>\n<h3>3. 적시 검색을 미리 채우기보다 선호</h3>\n<p>모델에게 먼저 가벼운 핸들을 제공하십시오: 파일 경로, 객체 ID, URL, 쿼리 템플릿, 티켓 ID, 인시던트 ID. 그런 다음 필요할 때만 세부 정보를 가져오도록 하십시오.[9][18][21]</p>\n<p>이것이 파일 시스템, MCP 도구, 검색 API 및 구조화된 쿼리가 거대한 top-K 덤프보다 더 가치 있게 되는 지점입니다.</p>\n<h3>4. 높은 가치의 상태만 장기 메모리로 승격</h3>\n<p>모든 것이 메모리가 되어서는 안 됩니다.</p>\n<p>네 가지 클래스의 아티팩트를 승격할 것입니다:</p>\n<ul>\n<li>안정적인 사용자 또는 계정 기본 설정</li>\n<li>출처가 있는 내구성 있는 사실</li>\n<li>중요한 중간 요약</li>\n<li>결정 추적 및 예외</li>\n</ul>\n<p>다른 모든 것은 승격될 자격이 있음을 증명할 때까지 세션 로그에 남아 있어야 합니다.</p>\n<h3>5. 컨텍스트 그래프를 승격된 메모리 계층으로 구축</h3>\n<p>이것은 많은 팀이 뒤집는 부분입니다.</p>\n<p>그래프는 그래프 형태의 원시 대화 기록이 되어서는 안 됩니다. 그것은 세션 위와 실시간 어셈블리 아래에 있는 큐레이션된 계층이어야 합니다:</p>\n<ul>\n<li>엔터티</li>\n<li>관계</li>\n<li>시간 유효성</li>\n<li>소스 에피소드</li>\n<li>승인</li>\n<li>예외</li>\n<li>결과</li>\n</ul>\n<p>승격 단계를 건너뛰면 그래프는 쓰레기장이 됩니다.<br />\n승격을 올바르게 수행하면 그래프는 조직이 실제로 추론하는 방식의 메모리가 됩니다.[23][26]</p>\n<h3>6. 컨텍스트를 코드처럼 패키징</h3>\n<p>2026년까지 가장 유망한 아이디어 중 하나는 컨텍스트를 버전 관리된 아티팩트로 취급하는 것입니다. 소프트웨어 프로젝트에서 이것은 <code>AGENTS.md</code> 및 기타 저장소별 컨텍스트 파일로 나타납니다.[28] 그래프 네이티브 시스템에서는 컨텍스트 코어로 나타납니다: 온톨로지, 그래프 구조, 임베딩, 출처 및 검색 정책의 휴대용 번들입니다.[24][25]</p>\n<p>컨텍스트 변경에는 코드 변경과 동일한 운영 규율이 필요하기 때문에 이것은 중요합니다:</p>\n<ul>\n<li>검토</li>\n<li>버전 관리</li>\n<li>롤백</li>\n<li>환경 승격</li>\n<li>평가</li>\n</ul>\n<p>일단 컨텍스트가 아티팩트가 되면, 관리 가능해집니다.</p>\n<h3>7. 관찰 가능성과 지능 분리</h3>\n<p>둘 다 필요합니다:</p>\n<ul>\n<li><strong>에이전트 실행의 관찰 가능성</strong></li>\n<li><strong>컨텍스트 시스템의 관찰 가능성</strong></li>\n</ul>\n<p>그것들은 같은 것이 아닙니다.</p>\n<p>알고 싶은 것은:</p>\n<ul>\n<li>모델이 무엇을 보았는지</li>\n<li>무엇을 보지 못했는지</li>\n<li>무엇이 압축되었는지</li>\n<li>무엇이 적시에 검색되었는지</li>\n<li>무엇이 메모리로 승격되었는지</li>\n<li>어떤 그래프 이웃이 탐색되었는지</li>\n<li>어떤 선례가 실제로 행동에 영향을 미쳤는지</li>\n</ul>\n<p>이러한 질문에 답할 수 없다면, 여전히 어둠 속에서 프롬프트를 디버깅하고 있는 것입니다.</p>\n<h2>실용적인 성숙도 모델</h2>\n<p>자신의 시스템이 어디에 있는지 평가하려는 경우, 이 성숙도 모델은 추상적인 정의보다 더 유용합니다.</p>\n<h3>레벨 0: 프롬프트 전용</h3>\n<p>시스템 프롬프트, 사용자 메시지 및 몇 가지 예시가 있습니다.</p>\n<p>이것은 좁은 작업에 대해 놀랍도록 잘 작동할 수 있습니다. 작업에 최신 지식, 지속성 또는 도구가 필요할 때 빠르게 깨집니다.</p>\n<h3>레벨 1: 검색 강화</h3>\n<p>런타임에 문서를 추가합니다.</p>\n<p>이것은 많은 팀이 멈추는 지점입니다. 또한 많은 팀이 순진한 청킹, 순위 지정 및 컨텍스트 비대의 한계를 보기 시작하는 지점이기도 합니다.</p>\n<h3>레벨 2: 에이전트 인식</h3>\n<p>이제 기록, 도구 결과, 메모리 및 형식을 의도적으로 관리합니다.</p>\n<p>이것은 '컨텍스트 엔지니어링'이 유용한 용어가 되는 첫 번째 레벨입니다. 시스템이 더 이상 단순히 프롬프트와 검색이 아니기 때문입니다. 여러 형태의 컨텍스트를 동적으로 조립하고 있습니다.</p>\n<h3>레벨 3: 적응형</h3>\n<p>시스템은 작업에 따라 컨텍스트를 구축하는 방식을 변경합니다.</p>\n<p>다음을 수행할 수 있습니다:</p>\n<ul>\n<li>소스 중에서 선택</li>\n<li>오래된 기록 압축</li>\n<li>메모리를 선택적으로 다시 로드</li>\n<li>작업을 전문 도구로 라우팅</li>\n<li>하위 문제를 별도의 컨텍스트로 격리</li>\n</ul>\n<p>이 시점에서 컨텍스트 구성은 애플리케이션의 핵심 로직의 일부입니다.</p>\n<h3>레벨 4: 컨텍스트 네이티브</h3>\n<p>시스템은 컨텍스트를 일급 엔지니어링 표면으로 취급합니다.</p>\n<p>다음을 갖추고 있습니다:</p>\n<ul>\n<li>명시적인 컨텍스트 예산</li>\n<li>검색 및 생성 평가</li>\n<li>메타데이터 및 패싯 인식 탐색</li>\n<li>메모리 정책</li>\n<li>실패 모드에 대한 관찰 가능성</li>\n<li>비용 인식 프롬프트 어셈블리</li>\n</ul>\n<p>이것이 가장 강력한 프로덕션 시스템이 향하는 방향입니다.</p>\n<h2>실제로 좋은 컨텍스트 엔지니어링의 모습</h2>\n<p>전체 분야를 체크리스트로 축소해야 한다면, 다음과 같을 것입니다:</p>\n<ol>\n<li>프롬프트가 아닌 작업부터 시작하십시오. 먼저 성공이 무엇인지 정의하십시오.</li>\n<li>모델이 필요로 할 수 있는 컨텍스트 소스를 열거하십시오. 지침, 문서, 도구, 메모리, 상태, 정책.</li>\n<li>작업 메모리와 참조 메모리를 분리하십시오. 모든 것이 활성 창에 있어야 하는 것은 아닙니다.</li>\n<li>의도를 가지고 검색하십시오. 더 많은 청크가 더 나은 재현율과 같지 않습니다.</li>\n<li>모델이 빠르게 구문 분석할 수 있도록 컨텍스트를 구조화하십시오. 레이블, 소스, 테이블 및 경계가 중요합니다.</li>\n<li>도구가 프롬프트의 일부인 것처럼 설계하십시오. 그렇기 때문입니다.</li>\n<li>공격적으로 정리하십시오. 인간에게 다시 읽으라고 요청하지 않을 것이라면 모델에게 강제로 다시 읽게 하지 마십시오.</li>\n<li>검색과 생성을 별도로 측정하십시오. 그렇지 않으면 잘못된 문제를 진단하게 됩니다.</li>\n<li>작업이 분기되거나 병렬로 실행될 수 있을 때 격리된 컨텍스트를 사용하십시오.</li>\n<li>내구성 있는 사실과 결정 추적을 의도적으로 승격하십시오. 모든 대화 기록이 장기 메모리에 속하는 것은 아닙니다.</li>\n<li>중요한 컨텍스트를 코드처럼 패키징하십시오. 지침, 정책 및 그래프 아티팩트는 버전 관리되어야 합니다.</li>\n<li>컨텍스트 버그를 소프트웨어 버그처럼 취급하십시오. 관찰 가능하고, 재현 가능하며, 수정 가능해야 합니다.</li>\n</ol>\n<p>이것들 중 어느 것도 화려하지 않습니다. 그것이 바로 중요한 이유입니다.</p>\n<p>프롬프트 엔지니어링은 지름길처럼 들렸기 때문에 인기를 얻었습니다.</p>\n<p>컨텍스트 엔지니어링은 실제 작업을 설명하기 때문에 중요합니다.</p>\n<h2>진짜 핵심</h2>\n<p>AI의 중심은 이동하고 있습니다.</p>\n<p>최전선 질문은 <strong>모델이 얼마나 똑똑한가?</strong>였습니다.</p>\n<p>응용 질문은 점점 <strong>모델이 행동하기 전에 무엇을 볼 수 있는가?</strong>가 되고 있습니다.</p>\n<p>이것은 다른 엔지니어링 문제입니다. 단일 프롬프트보다는 시스템 설계에 더 가깝습니다. 문구보다는 정보 흐름에 더 가깝습니다. 일회성 출력 품질보다는 에이전트가 시간이 지남에 따라 신뢰성을 유지할 수 있는지 여부에 더 가깝습니다.</p>\n<p>이것이 컨텍스트 엔지니어링이 계속해서 성장하는 분야가 될 이유입니다. 모델이 더 좋아질수록, 남은 실패는 컨텍스트 실패처럼 보입니다. 누락된 상태. 잘못된 도구. 나쁜 검색. 비대해진 기록. 잘못된 형식. 상충되는 증거. 약한 메모리. 무제한 루프.</p>\n<p>아이러니는 이것이 AI 시스템을 덜 새롭고 더 고전적인 소프트웨어처럼 느끼게 만든다는 것입니다. 우리는 파이프라인, 인터페이스, 상태 머신, 메모리 계층 구조, 캐시 및 관찰 가능성 계층을 구축하는 것으로 돌아왔습니다. 새로운 점은 이러한 모든 조각이 이제 확률적 추론 엔진을 위해 존재한다는 것입니다.</p>\n<p>이름은 새로울 수 있습니다. 방향은 그렇지 않습니다.</p>\n<p>신뢰할 수 있는 AI 시스템은 컨텍스트를 일급 제품 표면으로 취급하는 팀에 의해 구축될 것입니다.</p>\n<p>다른 모든 사람들은 계속해서 모델을 변덕스럽다고 부를 것입니다.</p>\n<p><strong>참고문헌:</strong></p>\n<p>[1] <a href=\"https://simonwillison.net/2025/Jun/27/context-engineering/\">Simon Willison. (2025, June 27). <em>Context engineering</em>.</a></p>\n<p>[2] <a href=\"https://arxiv.org/abs/2005.11401\">Lewis, P. et al. (2020). <em>Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks</em>.</a></p>\n<p>[3] <a href=\"https://arxiv.org/abs/2210.03629\">Yao, S. et al. (2023). <em>ReAct: Synergizing Reasoning and Acting in Language Models</em>.</a></p>\n<p>[4] <a href=\"https://arxiv.org/abs/2410.10813\">Wu, D. et al. (2025). <em>LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory</em>.</a></p>\n<p>[5] <a href=\"https://arxiv.org/abs/2307.03172\">Liu, N. F. et al. (2023). <em>Lost in the Middle: How Language Models Use Long Contexts</em>.</a></p>\n<p>[6] <a href=\"https://arxiv.org/abs/2411.03538\">Leng, Q. et al. (2024). <em>Long Context RAG Performance of Large Language Models</em>.</a></p>\n<p>[7] <a href=\"https://www.trychroma.com/research/context-rot\">Hong, K., Troynikov, A., and Huber, J. (2025, July 14). <em>Context Rot: How Increasing Input Tokens Impacts LLM Performance</em>.</a></p>\n<p>[8] <a href=\"https://blog.langchain.com/the-rise-of-context-engineering\">LangChain. (2025, June 23). <em>The rise of 'context engineering'</em>.</a></p>\n<p>[9] <a href=\"https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/implement-tool-use\">Anthropic. <em>How to implement tool use</em>.</a></p>\n<p>[10] <a href=\"https://jxnl.co/writing/2025/08/27/facets-context-engineering/\">Jason Liu. (2025, August 27). <em>Beyond Chunks: Why Context Engineering is the Future of RAG</em>.</a></p>\n<p>[11] <a href=\"https://arxiv.org/abs/2407.12883\">Su, H. et al. (2025). <em>BRIGHT: A Realistic and Challenging Benchmark for Reasoning-Intensive Retrieval</em>.</a></p>\n<p>[12] <a href=\"https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/long-context-tips\">Anthropic. <em>Long context prompting tips</em>.</a></p>\n<p>[13] <a href=\"https://platform.openai.com/docs/guides/prompt-caching\">OpenAI. <em>Prompt caching</em>.</a></p>\n<p>[14] <a href=\"https://openai.com/index/equip-responses-api-computer-environment\">OpenAI. (2026, March 19). <em>From model to agent: Equipping the Responses API with a computer environment</em>.</a></p>\n<p>[15] <a href=\"https://modelcontextprotocol.io/\">Model Context Protocol. <em>What is the Model Context Protocol (MCP)?</em></a></p>\n<p>[16] <a href=\"https://www.anthropic.com/engineering/built-multi-agent-research-system\">Anthropic. (2025, June 13). <em>How we built our multi-agent research system</em>.</a></p>\n<p>[17] <a href=\"https://blog.langchain.com/context-engineering-for-agents/\">LangChain. (2025, July 2). <em>Context Engineering</em>.</a></p>\n<p>[18] <a href=\"https://claude.com/blog/context-management\">Anthropic. (2025, September 29). <em>Managing context on the Claude Developer Platform</em>.</a></p>\n<p>[19] <a href=\"https://developers.openai.com/cookbook/examples/agents_sdk/context_personalization\">Okcular, E. (2026, January 5). <em>Context Engineering for Personalization - State Management with Long-Term Memory Notes using OpenAI Agents SDK</em>.</a></p>\n<p>[20] <a href=\"https://www.anthropic.com/engineering/managed-agents\">Anthropic. <em>Scaling Managed Agents: Decoupling the brain from the hands</em>.</a></p>\n<p>[21] <a href=\"https://www.mintlify.com/blog/how-we-built-a-virtual-filesystem-for-our-assistant\">Mintlify. (2026, March 24). <em>How we built a virtual filesystem for our Assistant</em>.</a></p>\n<p>[22] <a href=\"https://docs.turso.tech/agentfs/introduction\">Turso. <em>AgentFS</em>.</a></p>\n<p>[23] <a href=\"https://github.com/getzep/graphiti\">Zep. <em>Graphiti: Build Real-Time Knowledge Graphs for AI Agents</em>.</a></p>\n<p>[24] <a href=\"https://github.com/trustgraph-ai/trustgraph\">TrustGraph. <em>The context development platform</em>.</a></p>\n<p>[25] <a href=\"https://docs.trustgraph.ai/guides/context-cores/\">TrustGraph. <em>Working with Context Cores</em>.</a></p>\n<p>[26] <a href=\"https://foundationcapital.com/ideas/context-graphs-ais-trillion-dollar-opportunity\">Gupta, J., and Garg, A. (2025, December 22). <em>AI's trillion-dollar opportunity: Context graphs</em>.</a></p>\n<p>[27] <a href=\"https://foundationcapital.com/ideas/why-context-graphs-are-the-missing-layer-for-ai\">Garg, A. (2026, January 16). <em>Why context graphs are the missing layer for AI</em>.</a></p>\n<p>[28] <a href=\"https://arxiv.org/abs/2510.21413\">Mohsenimofidi, S., Galster, M., Treude, C., and Baltes, S. (2026). <em>Context Engineering for AI Agents in Open-Source Software</em>.</a></p>",
  "source_hash": "sha256:3f3faa38dd809a893509e9f3c2de70a7ec3778cc6cef2fa58967b63bd169d7d9",
  "model": "deepseek/deepseek-v4-flash",
  "generated_at": "2026-08-07T08:11:29.590497+00:00"
}