<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>김진수의 엔지니어링 노트</title><link>https://blog.js-96.com</link><description>엔터프라이즈 LLM 에이전트 플랫폼에서 온톨로지 빌드 파이프라인, GraphRAG 검색, 에이전트 하네스를 설계하고 구현합니다.</description><language>ko</language><item><title>업로드마다 LLM을 부르는 빌드는 자동으로 켜 둘 수 없었습니다</title><link>https://blog.js-96.com/posts/field-llm-free-default-build/</link><guid>https://blog.js-96.com/posts/field-llm-free-default-build/</guid><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate><description>온톨로지가 문서를 올릴 때마다 만들어지려면 기본 빌드에는 호출 비용이 없어야 했습니다. 표 구조와 형태소, 한국어 패턴만으로 클래스·개체·상하위를 세우고 관계 추출은 옵션 단계로 분리한 과정과, 그 뒤 드러난 문서 500개 상한 결함을 정리합니다.</description></item><item><title>같은 질문에 근거가 매번 달랐던 이유는 정렬 없는 LIMIT이었습니다</title><link>https://blog.js-96.com/posts/field-search-determinism-library-split/</link><guid>https://blog.js-96.com/posts/field-search-determinism-library-split/</guid><pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate><description>같은 50문항을 두 번 검색하면 근거가 43문항에서만 같았습니다. 그래프 조회의 정렬 없는 LIMIT을 고치면서, 순위 알고리즘은 라이브러리가 맡고 저장소 조회는 제품 어댑터가 맡도록 경계를 다시 그은 과정입니다.</description></item><item><title>에이전트마다 빌드하면 같은 문서를 에이전트 수만큼 다시 읽어야 했습니다</title><link>https://blog.js-96.com/posts/field-agent-ontology-assembly/</link><guid>https://blog.js-96.com/posts/field-agent-ontology-assembly/</guid><pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate><description>은행 관리 설정에서 늘어나는 에이전트를 온톨로지로 보여 주려 했습니다. 문서 지식은 자산마다 한 번만 빌드하고, 에이전트의 소유·자산·배포·실행 관계는 설정 테이블에서 LLM 없이 구성해 규칙 인사이트까지 낸 과정입니다.</description></item><item><title>98 대 86으로 진 평가는 같은 조건의 비교가 아니었습니다</title><link>https://blog.js-96.com/posts/field-fair-agent-comparison/</link><guid>https://blog.js-96.com/posts/field-fair-agent-comparison/</guid><pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate><description>경쟁 클라우드 에이전트와 캐피탈 사내 규정 165문항으로 다시 비교하기 전에 문서 적재, 청크, 근거 개수, 평가기 시간을 하나씩 맞췄습니다. 같은 답변 모델과 같은 채점 모델로 한 번 실행한 결과는 80.0% 대 66.7%였습니다.</description></item><item><title>그래프 서버가 없는 곳에서 빌드는 트리플 0개로 완료되고 있었습니다</title><link>https://blog.js-96.com/posts/field-graph-store-postgres/</link><guid>https://blog.js-96.com/posts/field-graph-store-postgres/</guid><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate><description>폐쇄망 고객에게 별도 그래프 서버는 반입 심사와 승인, 운영 인력이 따로 드는 구성 요소였습니다. 지식그래프의 정본을 이미 있는 PostgreSQL 테이블 세 개로 옮기고, 같은 빌드 결과를 두 저장소에 이중 기록해 대조한 과정입니다.</description></item><item><title>재시도를 다 썼는데 같은 답을 계속 채점하고 있었습니다</title><link>https://blog.js-96.com/posts/harness-journey-10-feedback-freshness/</link><guid>https://blog.js-96.com/posts/harness-journey-10-feedback-freshness/</guid><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><description>품질 재시도가 상한을 전부 쓰고 끝났습니다. 기록을 따라가니 모델은 도구를 부르며 진행 중이었고 판정기는 직전 실패 답을 다시 채점하고 있었습니다. 점수와 후보의 수명을 한 회차로 묶은 과정입니다.</description></item><item><title>이름으로 만든 URI가 동명이인을 한 사람으로 합쳤습니다</title><link>https://blog.js-96.com/posts/ontology-journey-10-rdb-ingest/</link><guid>https://blog.js-96.com/posts/ontology-journey-10-rdb-ingest/</guid><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate><description>조회 결과를 CSV로 내보내 다시 빌드하던 경로를 걷어내고 데이터베이스의 타입과 키를 그대로 썼습니다. 표시 이름을 식별자로 쓰면 동명이인이 합쳐지고 개명하면 다른 행이 됩니다. 정체성과 스냅샷 교체를 다시 설계한 과정입니다.</description></item><item><title>도구가 목록에는 보이는데 부를 수는 없었습니다</title><link>https://blog.js-96.com/posts/harness-journey-9-context-design/</link><guid>https://blog.js-96.com/posts/harness-journey-9-context-design/</guid><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><description>검색 범위를 좁히려고 허용 목록을 걸었더니 사용자가 직접 연결한 도구까지 함께 빠졌습니다. 이름 공개와 스키마 공개와 실행 권한을 각각 다른 시점에 두게 된 과정입니다.</description></item><item><title>작업은 성공이라고 나왔는데 그래프가 비어 있었습니다</title><link>https://blog.js-96.com/posts/ontology-journey-9-adaptive-extraction/</link><guid>https://blog.js-96.com/posts/ontology-journey-9-adaptive-extraction/</guid><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><description>추출 모델을 로컬 소형 모델로 바꾸자 배치가 끝나지 않거나, 성공으로 기록된 작업이 빈 그래프를 남겼습니다. 잘린 JSON과 시간 초과가 빈 결과처럼 처리되고 있었습니다. 실패를 실패로 만든 과정입니다.</description></item><item><title>문서용 중복 정리가 정형 테이블을 합치고 있었습니다</title><link>https://blog.js-96.com/posts/ontology-journey-8-structured-incremental/</link><guid>https://blog.js-96.com/posts/ontology-journey-8-structured-incremental/</guid><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate><description>CSV 테이블 열 개를 빌드했는데 후처리가 끝난 그래프에는 클래스가 네 개였습니다. 문서 개념을 정리하는 규칙이 스키마 식별자까지 합친 것입니다. 생성 출처를 저장해 보호 범위를 만든 과정입니다.</description></item><item><title>규칙을 고친 뒤에도 남은 판정 흔들림은 공유 추론 서버에서 왔습니다</title><link>https://blog.js-96.com/posts/field-qa-verdict-batching/</link><guid>https://blog.js-96.com/posts/field-qa-verdict-batching/</guid><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate><description>대형 유통 품질검사 에이전트가 같은 서류에 합격과 불합격을 번갈아 냈습니다. 판정 규칙, 이미지 판독, 프롬프트, 부하를 하나씩 제외하고 같은 텍스트를 10번 넣는 실험으로 공유 서버의 배치 처리까지 좁힌 과정입니다.</description></item><item><title>가까운 기억이 항상 이기게 두면 안 됐습니다</title><link>https://blog.js-96.com/posts/harness-journey-8-memory-loop/</link><guid>https://blog.js-96.com/posts/harness-journey-8-memory-loop/</guid><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><description>세션 요청이 플랫폼 정책보다 구체적이니 우선해야 할 것 같았습니다. 그렇게 두면 사용자가 정책을 덮어쓸 수 있었습니다. 실행 간 기억의 범위와 종류를 나누고 충돌을 푼 과정입니다.</description></item><item><title>붉게 칠한 노드의 대부분은 근거가 아니었습니다</title><link>https://blog.js-96.com/posts/ontology-journey-7-evidence-ux/</link><guid>https://blog.js-96.com/posts/ontology-journey-7-evidence-ux/</guid><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><description>검색 품질을 높이고 그래프 뷰어에서 답을 검증하니 강조된 노드가 실제 근거보다 훨씬 많았습니다. 강조 범위를 줄이면서, 저희가 만든 것이 근거 추적이 아니라 문자열 대조였다는 것도 함께 확인했습니다.</description></item><item><title>30배 차이가 모델의 차이가 아니었습니다</title><link>https://blog.js-96.com/posts/harness-journey-7-qwen-vs-sonnet/</link><guid>https://blog.js-96.com/posts/harness-journey-7-qwen-vs-sonnet/</guid><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><description>같은 워크플로우에 두 모델을 연결하니 2,488초와 84초가 나왔습니다. 반복 횟수와 출력 상한을 맞추자 2,488초가 100초가 됐습니다. 모델을 비교하기 전에 무엇을 고정해야 하는지 정리합니다.</description></item><item><title>느리고 부정확하다는 결과가 빈 그래프를 잰 것이었습니다</title><link>https://blog.js-96.com/posts/ontology-journey-6-search-redesign/</link><guid>https://blog.js-96.com/posts/ontology-journey-6-search-redesign/</guid><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><description>멀티턴 검색이 더 느리고 정확도도 낮다는 A/B 결과가 나왔습니다. 실행 기록을 보니 평가가 데이터 없는 그래프를 조회하고 벡터 검색만으로 답하고 있었습니다. 다시 측정한 뒤 검색 구조를 바꾼 과정입니다.</description></item><item><title>검증셋을 떼어뒀다고 믿었는데 아니었습니다</title><link>https://blog.js-96.com/posts/harness-journey-6-self-forging/</link><guid>https://blog.js-96.com/posts/harness-journey-6-self-forging/</guid><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><description>설정을 자동으로 탐색하게 만들면서 승격 문턱과 검증셋을 뒀습니다. 구현을 다시 읽어보니 후보를 제안하는 쪽이 그 검증 기록을 보고 있었습니다. 자동 탐색기에 무엇을 맡길 수 있고 무엇을 맡길 수 없는지 정리합니다.</description></item><item><title>그래프를 정리하다가 정상 클래스 1,500개를 지웠습니다</title><link>https://blog.js-96.com/posts/ontology-journey-5-csv-cleanup-guards/</link><guid>https://blog.js-96.com/posts/ontology-journey-5-csv-cleanup-guards/</guid><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><description>인스턴스와 관계가 부족한 클래스를 자동 삭제했더니 정상 클래스 약 1,500개가 함께 사라졌습니다. 추출이 아직 만들지 못한 관계를 후처리가 불필요로 판정한 것입니다. 탐지와 삭제를 나눈 과정입니다.</description></item><item><title>제출 도구를 부르고도 실행이 멈추지 않았습니다</title><link>https://blog.js-96.com/posts/harness-journey-5-retry-termination/</link><guid>https://blog.js-96.com/posts/harness-journey-5-retry-termination/</guid><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><description>종착 도구가 성공했는데 실행이 계속됐고, 반대로 이전 회차의 기록만 보고 현재 회차를 일찍 끝내기도 했습니다. 다시 호출하는 이유와 종료를 소유하는 위치를 나눈 과정입니다.</description></item><item><title>트리플 수로는 지식그래프 품질을 알 수 없었습니다</title><link>https://blog.js-96.com/posts/ontology-journey-4-quality-baseline/</link><guid>https://blog.js-96.com/posts/ontology-journey-4-quality-baseline/</guid><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><description>같은 파이프라인이 한쪽에서는 25만 트리플을, 다른 쪽에서는 1천 트리플을 만들었습니다. 둘 다 문제가 있었고 방향은 정반대였습니다. 적재량·구조·출처·검색·답변을 나눠 재기 시작한 과정입니다.</description></item><item><title>답을 만든 모델에게 채점까지 맡기고 있었습니다</title><link>https://blog.js-96.com/posts/harness-journey-4-canvas-node-judge/</link><guid>https://blog.js-96.com/posts/harness-journey-4-canvas-node-judge/</guid><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate><description>같은 모델이 답을 만들고 이어서 자기 답이 규칙을 지켰는지 판단하면 생성 방법과 합격 기준이 한 컨텍스트에 섞입니다. 업무를 수행하는 책임과 결과를 채택하는 책임을 나누고, 나눈 뒤에도 남은 한계를 정리합니다.</description></item><item><title>몇 시간짜리 빌드를 캐시에 올려두고 있었습니다</title><link>https://blog.js-96.com/posts/ontology-journey-3-build-service/</link><guid>https://blog.js-96.com/posts/ontology-journey-3-build-service/</guid><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><description>빌드가 몇 시간으로 늘자 작업 상태를 공유 캐시에 복제했습니다. 캐시가 만료되면 취소와 재개 정보를 복원할 수 없었습니다. 실행 상태와 지식 결과를 서로 다른 저장소로 나눈 과정입니다.</description></item><item><title>설치는 됐는데 같은 실행이라고 부를 수 없었습니다</title><link>https://blog.js-96.com/posts/harness-journey-3-compile-wheel-mcp/</link><guid>https://blog.js-96.com/posts/harness-journey-3-compile-wheel-mcp/</guid><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><description>워크플로우를 wheel로 묶어 다른 환경에 설치했습니다. 도구를 호출하자 제품 안에서만 성립하던 전제가 드러났습니다. 포장 형식을 두 번 갈아엎으며 무엇을 고정해야 실행이 옮겨가는지 확인한 과정입니다.</description></item><item><title>컨텍스트를 줄이려고 자른 것이 답의 근거였습니다</title><link>https://blog.js-96.com/posts/ontology-journey-2-react-graph/</link><guid>https://blog.js-96.com/posts/ontology-journey-2-react-graph/</guid><pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate><description>관계를 여러 단계 따라가려고 멀티턴 검색을 넣었습니다. 컨텍스트가 커져 도구 결과를 500자로 잘랐더니 표와 긴 원문의 뒷부분이 합성 단계에 도달하지 못했습니다. 탐색을 넓히며 무엇을 잃었는지 정리합니다.</description></item><item><title>저장소를 나눴는데 의존성은 그대로였습니다</title><link>https://blog.js-96.com/posts/harness-journey-2-engine-separation/</link><guid>https://blog.js-96.com/posts/harness-journey-2-engine-separation/</guid><pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate><description>엔진을 별도 모듈로 옮겼지만 실행하려면 제품의 설정 객체와 데이터베이스 세션, 캔버스 노드를 먼저 불러와야 했습니다. 독립을 선언한 사흘 뒤부터 누수를 잡으며 배운, 경계가 닫혔는지 확인하는 방법입니다.</description></item><item><title>질문이 답의 범위까지 정하고 있었습니다</title><link>https://blog.js-96.com/posts/ontology-journey-1-cq-to-document/</link><guid>https://blog.js-96.com/posts/ontology-journey-1-cq-to-document/</guid><pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate><description>역량 질문을 먼저 정하고 답에 필요한 개념을 찾는 방식이었습니다. 배송과 반품을 묻는 질문만 있으면 원문의 예외 승인 절차는 그래프에 남지 않았습니다. 질문을 빌드에서 빼고 평가에 남긴 과정입니다.</description></item><item><title>재시도 횟수로는 실행을 설명할 수 없었습니다</title><link>https://blog.js-96.com/posts/harness-journey-1-rust-to-python/</link><guid>https://blog.js-96.com/posts/harness-journey-1-rust-to-python/</guid><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate><description>도구를 세 번 쓴 실행과 품질 검증에 세 번 실패한 실행이 같은 '재시도 3회'로 남았습니다. 생성·검증·도구 실행·재시도를 하나의 반복문에서 꺼내 명시적인 상태와 전이로 나눈 과정입니다.</description></item></channel></rss>