Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,8 @@ test/ _plugins/와 글 린트의 minitest 단위 테스트
script/ lint-posts.rb (빌드 전 글 원본 규칙 검사)
validate-site.sh (빌드 후 검색 노출 검사)
check-plugin-output.rb (플러그인 훅이 글에 남긴 결과 검사,
validate-site.sh가 실행)
validate-site.sh가 실행), published-urls.txt (글이 게시된
적 있는 모든 URL)
_data/ post_conventions.yml (카테고리·표지·통제 태그·폐기 태그의
유일한 정본. scholar-lens도 읽음), covers.yml (표지마다 출처와
저작자 표시. 글 머리 이미지 아래에 표시)
Expand Down Expand Up @@ -177,7 +178,10 @@ _site/paper-reviews/language-models/2025/01/23/<slug>.html
```

그래서 **이미 게시된 글의 카테고리나 날짜를 바꾸면 URL이 바뀝니다.** 외부에서 걸린 링크와
검색 결과가 깨지므로, 한 번 정하면 그대로 둡니다.
검색 결과가 깨지므로, 한 번 정하면 그대로 둡니다. 게시된 URL은 모두
`script/published-urls.txt`에 있고, 그중 하나라도 빌드되지 않으면 `validate-site.sh`가 실패합니다.
꼭 바꿔야 한다면 예전 URL을 글의 `redirect_from`에 넣습니다. 글이 머지되면
`bundle exec ruby script/check-plugin-output.rb <site_dir> --record`로 그 URL을 기록합니다.

예전 규칙으로 게시된 옛 URL(`/paper%20reviews/…`)은 계속 동작합니다.
`_plugins/legacy_urls.rb`가 그 경로를 글의 `redirect_from`에 넣고, jekyll-redirect-from이 그
Expand Down
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,8 @@ test/ minitest unit tests for _plugins/ and the post lint
script/ lint-posts.rb (post sources vs the conventions, before the build)
validate-site.sh (post-build discoverability checks)
check-plugin-output.rb (each plugin hook's mark on the posts;
run by validate-site.sh)
run by validate-site.sh), published-urls.txt (every URL a
post has been published under)
_data/ post_conventions.yml (categories, covers, controlled and
retired tags — the one copy, also read by scholar-lens);
covers.yml (each cover's source and credit, shown under the hero)
Expand Down Expand Up @@ -184,7 +185,11 @@ _site/paper-reviews/language-models/2025/01/23/<slug>.html
```

So **changing the categories or date of a published post changes its URL**, which
breaks inbound links and search results. Set them once and leave them.
breaks inbound links and search results. Set them once and leave them. Every
published URL is listed in `script/published-urls.txt`, and `validate-site.sh`
fails when one is no longer built; if a change is unavoidable, add the old URL
to the post's `redirect_from`. After a post merges, record its URL with
`bundle exec ruby script/check-plugin-output.rb <site_dir> --record`.

Posts first published under the old unslugified form (`/paper%20reviews/…`) keep
working: `_plugins/legacy_urls.rb` adds that path to each post's `redirect_from`,
Expand Down
4 changes: 2 additions & 2 deletions _posts/2026-04-05-evolution-of-ai-agentic-patterns-en.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ This post has one thesis: **Engineering rigor never disappeared. It relocated.**

Each relocation was triggered by the previous era's failure. Let's trace that arc.

<a href="/assets/images/three-era-timeline.svg" class="glightbox" data-gallery="agentic-patterns" data-glightbox="title: Evolution timeline of AI agentic patterns">
<a href="/assets/images/three-era-timeline.svg" class="glightbox" data-gallery="post-images" data-glightbox="title: Evolution timeline of AI agentic patterns">
<img src="/assets/images/three-era-timeline.svg" alt="Evolution timeline of AI agentic patterns — Prompt → Context → Harness Engineering" />
</a>

Expand Down Expand Up @@ -285,7 +285,7 @@ The metric they called "the single most important metric" for production agents

Here's how KV-cache works. When you send a prompt to an LLM API, the model computes attention Keys and Values for each token. This computation is expensive. But if the **prefix** of the current request matches the previous request, that portion can reuse cached results — no recomputation needed. On Claude Sonnet, a cache hit reduces cost by **10x**. The difference between an agent re-computing the system prompt across 30 turns versus leveraging the cache is enormous.

<a href="/assets/images/kv-cache-mechanism.svg" class="glightbox" data-gallery="agentic-patterns" data-glightbox="title: How KV-cache works — the stable prefix determines cost">
<a href="/assets/images/kv-cache-mechanism.svg" class="glightbox" data-gallery="post-images" data-glightbox="title: How KV-cache works — the stable prefix determines cost">
<img src="/assets/images/kv-cache-mechanism.svg" alt="How KV-cache works — the stable prefix determines cost" />
</a>

Expand Down
4 changes: 2 additions & 2 deletions _posts/2026-04-05-evolution-of-ai-agentic-patterns.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ translation_id: evolution-of-ai-agentic-patterns

각 이동은 이전 시대의 실패가 촉발했습니다. 그 실패의 궤적을 추적해 보겠습니다.

<a href="/assets/images/three-era-timeline.png" class="glightbox" data-gallery="agentic-patterns" data-glightbox="title: AI 에이전틱 패턴의 진화 타임라인">
<a href="/assets/images/three-era-timeline.png" class="glightbox" data-gallery="post-images" data-glightbox="title: AI 에이전틱 패턴의 진화 타임라인">
<img src="/assets/images/three-era-timeline.png" alt="AI 에이전틱 패턴의 진화 타임라인 — Prompt → Context → Harness Engineering" />
</a>

Expand Down Expand Up @@ -285,7 +285,7 @@ Anthropic은 2025년 9월, "[Effective Context Engineering for AI Agents](https:

KV-cache(Key-Value Cache)의 작동 원리를 설명하겠습니다. LLM API에 프롬프트를 보내면, 모델은 각 토큰의 어텐션 키(Key)와 값(Value)을 계산합니다. 이 계산은 비용이 큽니다. 그런데 이전 요청의 프롬프트 **접두어**가 현재 요청과 동일하면, 그 부분은 재계산할 필요 없이 캐시된 결과를 사용할 수 있습니다. Claude Sonnet 기준 캐시 히트 시 비용이 **10분의 1**로 줄어듭니다. 에이전트가 30번의 턴을 거치면서 매번 시스템 프롬프트를 재계산하는 것과, 캐시를 활용하는 것의 차이는 어마어마합니다.

<a href="/assets/images/kv-cache-mechanism.png" class="glightbox" data-gallery="agentic-patterns" data-glightbox="title: KV-cache 작동 원리 — 안정 접두어가 비용을 결정한다">
<a href="/assets/images/kv-cache-mechanism.png" class="glightbox" data-gallery="post-images" data-glightbox="title: KV-cache 작동 원리 — 안정 접두어가 비용을 결정한다">
<img src="/assets/images/kv-cache-mechanism.png" alt="KV-cache 작동 원리 — 안정 접두어가 비용을 결정한다" />
</a>

Expand Down
23 changes: 19 additions & 4 deletions script/check-plugin-output.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,17 @@
# Checks that the _plugins/ hooks that change a post's page left their mark,
# that the search index parses and holds every post, that kramdown parsed the
# post's block HTML, that no listing shows a translation beside its original,
# that every cover is credited on its page, that no page repeats an id, and
# that the feed has room for every post.
# that every cover is credited on its page, that no page repeats an id, that
# the feed has room for every post, and that no published URL went missing.
#
# test/ covers the plugins' functions, not the Jekyll hooks that apply them, and
# with a hook gone the build still passes. Jekyll itself reads the posts here,
# so which posts exist (published, future, folders, slug) is its answer, not a
# second guess from the file names.
#
# Usage: bundle exec ruby script/check-plugin-output.rb <site_dir>
# Prints one line per problem; exits 1 when there is any.
# Usage: bundle exec ruby script/check-plugin-output.rb <site_dir> [--record]
# Prints one line per problem; exits 1 when there is any. --record adds every
# post's URL and redirect stub to script/published-urls.txt instead.

require "jekyll"
require "json"
Expand Down Expand Up @@ -45,6 +46,20 @@
# of an old paper never reaches it.
problems << "feed.posts_limit is #{limit} for #{posts.size} posts; raise it in _config.yml" if posts.size > limit

# A post's URL comes from its `date:` and categories, so an edit to either moves
# it, and legacy_urls.rb's stub moves with it: both indexed URLs then 404.
# Every URL listed here must still be built, as a page or a redirect stub.
published = File.join(root, "script/published-urls.txt")
listed = File.file?(published) ? File.readlines(published, chomp: true).grep(%r{\A/}) : []
if ARGV.include?("--record")
urls = posts.flat_map { |p| [p.url] + Array(p.data["redirect_from"]).map { |u| Jekyll::URL.escape_path(u) } }
File.write(published, File.read(published).lines.grep_v(%r{\A/}).join + (listed | urls).sort.join("\n") + "\n")
exit
end
listed.each do |url|
problems << "#{url}: published but no longer built; add it to the post's redirect_from" unless File.file?(built.call(url))
end

# search.json, with search_index.rb's plain_text: an index that does not parse
# leaves js/search.js finding nothing, and saying nothing either.
index = begin
Expand Down
68 changes: 68 additions & 0 deletions script/published-urls.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Every URL a post has been published under, so none goes missing when a post's
# date or categories change (script/check-plugin-output.rb). After a post
# merges, run: bundle exec ruby script/check-plugin-output.rb <site_dir> --record
/insights/agentic-ai/2026/03/31/claude-code-architecture-analysis.html
/insights/agentic-ai/2026/03/31/claude-code-source-map-leak-analysis-en.html
/insights/agentic-ai/2026/03/31/claude-code-source-map-leak-analysis.html
/insights/agentic-ai/2026/04/05/evolution-of-ai-agentic-patterns-en.html
/insights/agentic-ai/2026/04/05/evolution-of-ai-agentic-patterns.html
/insights/agentic-ai/2026/04/12/agentcore-harness-engineering-analysis.html
/insights/data-architecture/2026/07/27/ai-ready-data-semantic-layer-knowledge-graph-en.html
/insights/data-architecture/2026/07/27/ai-ready-data-semantic-layer-knowledge-graph.html
/paper%20reviews/finetuning/2022/12/15/constitutional-ai-harmlessness-from-ai-feedback.html
/paper%20reviews/finetuning/2023/05/23/qlora-efficient-finetuning-of-quantized-llms.html
/paper%20reviews/finetuning/2023/05/29/direct-preference-optimization-your-language-model-is-secretly-a-reward-model.html
/paper%20reviews/language-models/2023/02/27/llama-open-and-efficient-foundation-language-models.html
/paper%20reviews/language-models/2023/07/18/llama-2-open-foundation-and-fine-tuned-chat-models.html
/paper%20reviews/language-models/2023/10/10/mistral-7b.html
/paper%20reviews/language-models/2024/01/05/deepseek-llm-scaling-open-source-language-models-with-longtermism.html
/paper%20reviews/language-models/2024/01/08/mixtral-of-experts.html
/paper%20reviews/language-models/2024/01/11/deepseekmoe-towards-ultimate-expert-specialization-in-mixture-of-experts-language-models.html
/paper%20reviews/language-models/2024/01/25/deepseek-coder-when-the-large-language-model-meets-programming-the-rise-of-code-intelligence.html
/paper%20reviews/language-models/2024/02/05/deepseekmath-pushing-the-limits-of-mathematical-reasoning-in-open-language-models.html
/paper%20reviews/language-models/2024/05/07/deepseek-v2-a-strong-economical-and-efficient-mixture-of-experts-language-model.html
/paper%20reviews/language-models/2024/07/31/gemma-2-improving-open-language-models-at-a-practical-size.html
/paper%20reviews/language-models/2024/07/31/the-llama-3-herd-of-models.html
/paper%20reviews/language-models/2024/11/22/tulu-3-pushing-frontiers-in-open-language-model-post-training.html
/paper%20reviews/language-models/2024/12/27/deepseek-v3-technical-report.html
/paper%20reviews/language-models/2025/01/22/deepseek-r1-incentivizing-reasoning-capability-in-llms-via-reinforcement-learning.html
/paper%20reviews/language-models/2025/05/14/qwen3-technical-report.html
/paper%20reviews/language-models/2025/07/28/kimi-k2-open-agentic-intelligence.html
/paper%20reviews/language-models/2025/12/02/deepseek-v3.2-pushing-the-frontier-of-open-large-language-models.html
/paper%20reviews/multimodal-learning/2023/12/19/gemini-a-family-of-highly-capable-multimodal-models.html
/paper%20reviews/multimodal-learning/2024/10/09/pixtral-12b.html
/paper%20reviews/multimodal-learning/2025/03/25/gemma-3-technical-report.html
/paper%20reviews/multimodal-learning/2025/07/07/gemini-2.5-pushing-the-frontier-with-advanced-reasoning-multimodality-long-context-and-next-generation-agentic-capabilities.html
/paper%20reviews/retrieval-augmented-generation/2024/01/31/raptor-recursive-abstractive-processing-for-tree-organized-retrieval.html
/paper%20reviews/retrieval-augmented-generation/2024/04/24/from-local-to-global-a-graph-rag-approach-to-query-focused-summarization.html
/paper%20reviews/retrieval-augmented-generation/2024/10/08/lightrag-simple-and-fast-retrieval-augmented-generation.html
/paper%20reviews/retrieval-augmented-generation/2025/01/20/zep-a-temporal-knowledge-graph-architecture-for-agent-memory.html
/paper-reviews/finetuning/2022/12/15/constitutional-ai-harmlessness-from-ai-feedback.html
/paper-reviews/finetuning/2023/05/23/qlora-efficient-finetuning-of-quantized-llms.html
/paper-reviews/finetuning/2023/05/29/direct-preference-optimization-your-language-model-is-secretly-a-reward-model.html
/paper-reviews/language-models/2023/02/27/llama-open-and-efficient-foundation-language-models.html
/paper-reviews/language-models/2023/07/18/llama-2-open-foundation-and-fine-tuned-chat-models.html
/paper-reviews/language-models/2023/10/10/mistral-7b.html
/paper-reviews/language-models/2024/01/05/deepseek-llm-scaling-open-source-language-models-with-longtermism.html
/paper-reviews/language-models/2024/01/08/mixtral-of-experts.html
/paper-reviews/language-models/2024/01/11/deepseekmoe-towards-ultimate-expert-specialization-in-mixture-of-experts-language-models.html
/paper-reviews/language-models/2024/01/25/deepseek-coder-when-the-large-language-model-meets-programming-the-rise-of-code-intelligence.html
/paper-reviews/language-models/2024/02/05/deepseekmath-pushing-the-limits-of-mathematical-reasoning-in-open-language-models.html
/paper-reviews/language-models/2024/05/07/deepseek-v2-a-strong-economical-and-efficient-mixture-of-experts-language-model.html
/paper-reviews/language-models/2024/07/31/gemma-2-improving-open-language-models-at-a-practical-size.html
/paper-reviews/language-models/2024/07/31/the-llama-3-herd-of-models.html
/paper-reviews/language-models/2024/11/22/tulu-3-pushing-frontiers-in-open-language-model-post-training.html
/paper-reviews/language-models/2024/12/27/deepseek-v3-technical-report.html
/paper-reviews/language-models/2025/01/22/deepseek-r1-incentivizing-reasoning-capability-in-llms-via-reinforcement-learning.html
/paper-reviews/language-models/2025/05/14/qwen3-technical-report.html
/paper-reviews/language-models/2025/07/28/kimi-k2-open-agentic-intelligence.html
/paper-reviews/language-models/2025/12/02/deepseek-v3.2-pushing-the-frontier-of-open-large-language-models.html
/paper-reviews/multimodal-learning/2023/12/19/gemini-a-family-of-highly-capable-multimodal-models.html
/paper-reviews/multimodal-learning/2024/10/09/pixtral-12b.html
/paper-reviews/multimodal-learning/2025/03/25/gemma-3-technical-report.html
/paper-reviews/multimodal-learning/2025/07/07/gemini-2.5-pushing-the-frontier-with-advanced-reasoning-multimodality-long-context-and-next-generation-agentic-capabilities.html
/paper-reviews/retrieval-augmented-generation/2024/01/31/raptor-recursive-abstractive-processing-for-tree-organized-retrieval.html
/paper-reviews/retrieval-augmented-generation/2024/04/24/from-local-to-global-a-graph-rag-approach-to-query-focused-summarization.html
/paper-reviews/retrieval-augmented-generation/2024/10/08/lightrag-simple-and-fast-retrieval-augmented-generation.html
/paper-reviews/retrieval-augmented-generation/2025/01/20/zep-a-temporal-knowledge-graph-architecture-for-agent-memory.html
/paper-summaries/agentic-ai/2025/11/26/toolorchestra-elevating-intelligence-via-efficient-model-and-tool-orchestration-summary.html