[{"data":1,"prerenderedAt":2352},["ShallowReactive",2],{"blog-article-/ko-kr/blog/zero-hallucination-qa":3,"blog-list-ko-kr":1439},{"id":4,"title":5,"body":6,"config":1423,"date":1424,"description":1425,"draft":1426,"extension":1427,"image":1423,"meta":1428,"navigation":1429,"path":1430,"seo":1431,"stem":1432,"tags":1433,"toolbar":1423,"translationKey":1437,"updated":1424,"__hash__":1438},"blog/ko-kr/blog/zero-hallucination-qa.md","리더에서 「제로 환각」 Q&A를 구현한 방법",{"type":7,"value":8,"toc":1387},"minimark",[9,17,32,35,40,47,52,57,75,80,93,98,132,135,139,157,164,168,183,188,224,227,231,244,269,274,392,402,409,411,415,422,437,444,464,469,471,475,478,485,487,491,514,524,585,593,604,614,621,623,627,634,640,647,651,658,666,673,677,685,727,738,744,746,750,765,773,780,783,826,836,844,851,858,862,871,877,888,890,894,900,904,911,915,938,949,951,955,962,1019,1024,1026,1030,1037,1060,1064,1084,1095,1097,1101,1112,1115,1137,1148,1154,1156,1160,1179,1190,1192,1196,1217,1228,1230,1234,1253,1259,1261,1265,1353,1360,1371],[10,11,12],"p",{},[13,14],"img",{"alt":15,"src":16},"표지: 제로 환각 Q&A","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-cover.png",[18,19,20],"blockquote",{},[10,21,22,23,27,28,31],{},"이 글은 AI 리더 ",[24,25,26],"strong",{},"제로 환각 Q&A","의 엔지니어링 구현을 공유합니다. 답변은 현재 책 원문에 엄격히 기반하며, 핵심 논지는 ",[24,29,30],{},"한 번의 클릭","으로 구체적인 단락까지 추적할 수 있습니다. AI 독서, 문서 QA, RAG 유형 애플리케이션을 개발 중이라면, 세 번의 반복을 거친 경험과 최종 아키텍처가 참고가 되길 바랍니다.",[33,34],"hr",{},[36,37,39],"h2",{"id":38},"_1-실천-과정-세-단계의-진화","1. 실천 과정: 세 단계의 진화",[10,41,42,43,46],{},"제로 환각 Q&A는 처음부터 완벽하게 설계된 것이 아닙니다. ",[24,44,45],{},"비용, 지연 시간, 정확도"," 사이의 긴장 속에서 점진적으로 진화했습니다. 아래는 시간 순서대로 세 단계를 돌아보며, 현재 아키텍처가 왜 이렇게 되었는지 이해하기 쉽게 정리한 내용입니다.",[48,49],"mermaid",{":config":50,"code":51},"config","flowchart%20LR%0A%20%20%20%20P1%5B1%EB%8B%A8%EA%B3%84%3A%20%EC%A0%84%EB%AC%B8%20%EC%A7%81%EC%A0%91%20%EC%82%BD%EC%9E%85%5D%20--%3E%20P2%5B2%EB%8B%A8%EA%B3%84%3A%20LLM%20%ED%95%B5%EC%8B%AC%20%EB%AC%B8%EC%9E%A5%20%EC%B6%94%EC%B6%9C%5D%0A%20%20%20%20P2%20--%3E%20P3%5B3%EB%8B%A8%EA%B3%84%3A%20%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%8A%B8%20%EC%9D%B8%EB%8D%B1%EC%8A%A4%20%2B%20Tool%20%EA%B2%80%EC%83%89%5D%0A%20%20%20%20P1%20-.-%3E%7C%EB%8A%90%EB%A6%BC%2C%20%EB%B9%84%EC%9A%A9%20%EB%86%92%EC%9D%8C%2C%20%EC%9E%A5%ED%8E%B8%20%EB%B6%80%EC%A0%95%ED%99%95%7C%20X1%5B%ED%8F%90%EA%B8%B0%5D%0A%20%20%20%20P2%20-.-%3E%7C%EC%84%B8%EB%B6%80%20%EC%A0%95%EB%B3%B4%20%EC%86%90%EC%8B%A4%2C%20%EC%97%AC%EC%A0%84%ED%9E%88%20%EB%8A%90%EB%A6%BC%7C%20X2%5B%ED%8F%90%EA%B8%B0%5D%0A%20%20%20%20P3%20--%3E%7C%ED%98%84%EC%9E%AC%20%EB%B0%A9%EC%95%88%7C%20OK%5B%EC%A0%9C%EB%A1%9C%20%ED%99%98%EA%B0%81%20%2B%20%EC%B6%94%EC%A0%81%20%EA%B0%80%EB%8A%A5%5D",[53,54,56],"h3",{"id":55},"_1단계-전문을-context에-직접-삽입-가장-단순하지만-가장-먼저-문제가-드러남","1단계: 전문을 Context에 직접 삽입 (가장 단순하지만 가장 먼저 문제가 드러남)",[10,58,59,62,63,66,67,70,71,74],{},[24,60,61],{},"방법:"," 사용자가 책을 열고 질문할 때, 추출한 ",[24,64,65],{},"전체 본문","을 System Prompt 또는 User 메시지에 넣고 대화 모델에 답변을 요청합니다. 책 전체가 약 ",[24,68,69],{},"40만 문자","를 초과하면 ",[24,72,73],{},"하드 트렁케이션","—앞부분만 남기고 이후 장은 모델에 보이지 않습니다.",[10,76,77],{},[24,78,79],{},"장점:",[81,82,83,87,90],"ul",{},[84,85,86],"li",{},"구현 비용이 매우 낮고, 거의 전처리가 필요 없음;",[84,88,89],{},"짧은 책이나 구조가 단순한 문서에서는 효과가 괜찮음—모델이 실제로 「책 전체」를 「봤음」;",[84,91,92],{},"상호작용이 단순함: 질문하면 바로 답변, 「분석을 기다려 주세요」 같은 대기 상태 없음.",[10,94,95],{},[24,96,97],{},"단점 (곧 용납하기 어려워짐):",[81,99,100,106,112,122],{},[84,101,102,105],{},[24,103,104],{},"응답이 느림",": 매 질문마다 방대한 텍스트를 모델에 전송, 첫 Token 지연과 총 소요 시간이 책 길이에 비례해 악화;",[84,107,108,111],{},[24,109,110],{},"Token 비용이 높음",": 같은 책에 질문할 때마다 전문 입력 비용을 반복 지불;",[84,113,114,117,118,121],{},[24,115,116],{},"장편에서 심각한 왜곡",": 40만 문자 초과 후 잘림, 후반부·부록·결론 장은 존재하지 않는 것과 같고, UI는 종종 ",[24,119,120],{},"잘림을 명확히 알리지 않음",";",[84,123,124,127,128,131],{},[24,125,126],{},"검색 세분화가 제로",": 모델이 수십만 자 가운데 「바늘 찾기」를 해야 함—세부를 놓치기 쉽고, ",[24,129,130],{},"그럴듯하지만 근거 없는"," 요약을 만들기 더 쉬움—독서 시나리오에서 가장 피해야 할 환각.",[10,133,134],{},"1단계는 MVP 검증에는 적합하지만, 제품 수준 방안으로는 부적합합니다.",[53,136,138],{"id":137},"_2단계-경량-llm으로-핵심-문장-추출-context-압축-하지만-너무-과하게-압축","2단계: 경량 LLM으로 핵심 문장 추출 (Context 압축, 하지만 너무 과하게 압축)",[10,140,141,143,144,147,148,151,152,156],{},[24,142,61],{}," 질문 전(또는 책을 처음 열 때) ",[24,145,146],{},"비용이 더 낮은 모델","로 본문을 한 번 전처리: Spine 기준으로 장별(또는 책 전체를 분할) ",[24,149,150],{},"핵심 문장","을 추출하고, 출력 시 ",[153,154,155],"code",{},"[f파일-시작-끝]"," 형식의 위치 마커를 유지한 뒤, 발췌문을 짧은 텍스트로 이어 붙여 이후 Q&A의 Context로 사용.",[10,158,159,160,163],{},"전형적인 파이프라인은 ",[24,161,162],{},"Extract → Cache → Chat",": 먼저 오프라인 또는 필요 시 추출을 실행하고 DB에 저장, 이후 매 질문마다 같은 「핵심 문장 모음」을 재사용. 많은 문서 QA 프로토타입의 「문서를 먼저 압축하고, 압축 결과로 QA」와 같은 사고이며, 2단계에서 실제로 사용했던 경로입니다.",[10,165,166],{},[24,167,79],{},[81,169,170,177,180],{},[84,171,172,173,176],{},"매 질문마다 모델에 보내는 텍스트가 ",[24,174,175],{},"눈에 띄게 짧아짐",", 1단계 대비 단일 Token 소비가 크게 감소;",[84,178,179],{},"전처리 결과를 캐시할 수 있어, 같은 책에 매번 추출을 다시 할 필요 없음;",[84,181,182],{},"위치 마커를 도입하여 이후 추적의 기반을 마련.",[10,184,185],{},[24,186,187],{},"단점 (장편 시나리오에서도 여전히 버티기 어려움):",[81,189,190,196,205,214],{},[84,191,192,195],{},[24,193,194],{},"세부 정보가 대량 손실",": 「핵심 문장」은 모델이 주관적으로 선별, 논증 사슬의 한정 조건·반례 등이 쉽게 빠짐, 답변이 「맞지만 편향적」이 되기 쉬움;",[84,197,198,201,202,121],{},[24,199,200],{},"장편에서 Context가 여전히 큼",": 대작이라도 핵심 문장만 남겨도 이어 붙인 입력은 여전히 상당함, ",[24,203,204],{},"지연과 비용은 완화될 뿐 근본 해결은 아님",[84,206,207,210,211,121],{},[24,208,209],{},"이중 LLM 오차",": 추출 단계에서 누락, Q&A 단계에서 발췌 오독—오류가 ",[24,212,213],{},"누적",[84,215,216,219,220,223],{},[24,217,218],{},"정적 Context",": 사용자가 특정 장 세부를 묻든 전체 구조를 묻든, 모델에 들어가는 것은 ",[24,221,222],{},"동일한 사전 추출 텍스트","—질문에 따라 동적으로 범위를 좁힐 수 없음.",[10,225,226],{},"이 단계의 교훈은 분명합니다: **문제는 「압축했느냐」가 아니라 「압축이 필요에 따라 이루어지고, 원문으로 돌아갈 수 있느냐」**입니다.",[53,228,230],{"id":229},"_3단계-세그먼트-인덱스-tool-필요-시-검색-원문-반환-현재-방안","3단계: 세그먼트 인덱스 + Tool 필요 시 검색 + 원문 반환 (현재 방안)",[10,232,233,235,236,243],{},[24,234,61],{}," 기본 사상은 ",[237,238,242],"a",{"href":239,"rel":240},"https://github.com/VectifyAI/PageIndex",[241],"nofollow","PageIndex","를 참고했으며, 2단계 대비 핵심 변화는 세 가지입니다:",[245,246,247,253,263],"ol",{},[84,248,249,252],{},[24,250,251],{},"전처리 산출물은 구조화된 인덱스","(목차 수준 요약 + 정확한 문자 span)이며, 발췌문을 Q&A Context로 직접 쓰지 않음;",[84,254,255,258,259,262],{},[24,256,257],{},"매 질문마다 모델이 Tool Calling으로 필요 시 검색","한 뒤, ",[24,260,261],{},"위치 마커가 붙은 원문","을 가져와 답변;",[84,264,265,268],{},[24,266,267],{},"System Prompt와 프론트엔드 연동","으로 인용 형식을 제약하고, 클릭 시 각주로 이동·원문 하이라이트를 지원.",[10,270,271],{},[24,272,273],{},"세 단계 비교:",[275,276,277,296],"table",{},[278,279,280],"thead",{},[281,282,283,287,290,293],"tr",{},[284,285,286],"th",{},"차원",[284,288,289],{},"1단계 (전문 직접 삽입)",[284,291,292],{},"2단계 (핵심 문장 추출)",[284,294,295],{},"3단계 (현재)",[297,298,299,318,332,346,360,378],"tbody",{},[281,300,301,305,308,311],{},[302,303,304],"td",{},"단일 질문 Context",[302,306,307],{},"책 전체 (또는 잘린 앞부분)",[302,309,310],{},"사전 추출 핵심 문장 모음",[302,312,313,314,317],{},"질문과 관련된 소량 ",[24,315,316],{},"원문"," 조각만",[281,319,320,323,326,329],{},[302,321,322],{},"장편 정확도",[302,324,325],{},"40만 문자 초과 후 심각히 하락",[302,327,328],{},"추출 품질에 의존, 세부 손실",[302,330,331],{},"목차/span 검색, 전체 길이 하드 트렁케이션 없음",[281,333,334,337,340,343],{},[302,335,336],{},"응답 속도",[302,338,339],{},"느림",[302,341,342],{},"다소 개선, 장편은 여전히 느림",[302,344,345],{},"검색 + 짧은 Context, 눈에 띄게 빠름",[281,347,348,351,354,357],{},[302,349,350],{},"Token 비용",[302,352,353],{},"매우 높음",[302,355,356],{},"중간~높음",[302,358,359],{},"전처리 분산 + 필요 시 과금",[281,361,362,365,368,371],{},[302,363,364],{},"추적 능력",[302,366,367],{},"약함 (출처 표기 어려움)",[302,369,370],{},"위치 마커 있으나 내용은 2차 선별",[302,372,373,374,377],{},"각주가 ",[24,375,376],{},"실제 원문 span","에 대응",[281,379,380,383,386,389],{},[302,381,382],{},"엔지니어링 복잡도",[302,384,385],{},"낮음",[302,387,388],{},"중간",[302,390,391],{},"높음",[10,393,394,397,398,401],{},[24,395,396],{},"3단계에서 멈춘 이유:"," 독서 시나리오의 제로 환각에서 핵심은 「모델이 최대한 많은 글자를 보게 하는 것」이 아니라 **「답변 전에 질문과 관련된 원문 증거를 반드시 확보하는 것」**입니다. 1·2단계는 Context ",[24,399,400],{},"용량","을 다루었고, 3단계는 파이프라인을 **「인덱스(전처리) → 검색(Tool) → 증거 수집(원문) → 답변(제약 생성)」**으로 분리하여 정확도·비용·추적 가능성을 동시에 만족합니다.",[10,403,404,405,408],{},"아래에서는 ",[24,406,407],{},"3단계"," 구현 세부를 펼칩니다.",[33,410],{},[36,412,414],{"id":413},"_2-문제-정의-독서-시나리오에서-환각은-일반-chat보다-더-치명적","2. 문제 정의: 독서 시나리오에서 환각은 일반 Chat보다 더 치명적",[10,416,417,418,421],{},"일반 ChatBot의 가끔 오류는 사용자가 종종 용납합니다. ",[24,419,420],{},"책 QA","에서는 환각의 대가가 더 큽니다:",[81,423,424,431,434],{},[84,425,426,427,430],{},"사용자는 ",[24,428,429],{},"이 책","이 무엇이라고 했는지 묻는 것이지, 모델의 parametric memory를 묻는 것이 아님;",[84,432,433],{},"그럴듯한 「책의 관점」 한 마디가 노트·인용·2차 전파를 오도할 수 있음;",[84,435,436],{},"출처가 없으면 사용자가 검증할 수 없고, 제품 신뢰 구축이 어려움.",[10,438,439,440,443],{},"따라서 「제로 환각」은 엔지니어링에서 다음 세 가지 ",[24,441,442],{},"실행 가능한"," 규칙으로 구체화됩니다:",[245,445,446,452,458],{},[84,447,448,451],{},[24,449,450],{},"책 내 질문은 먼저 책을 조회",": 현재 책과 관련될 수 있는 모든 질문은 모델이 먼저 검색(Tool)을 거친 뒤 답을 구성해야 함;",[84,453,454,457],{},[24,455,456],{},"답변은 반드시 추적 가능",": 핵심 결론에 원문 위치 마커를 붙이고, 프론트엔드가 파싱하여 이동·하이라이트 가능;",[84,459,460,463],{},[24,461,462],{},"찾을 수 없으면 찾을 수 없다고 말함",": 책에 없는 내용은 명확히 알리고, 일반 지식으로 「책의 관점」을 가장하지 않음.",[10,465,404,466,468],{},[24,467,407],{}," 데이터 흐름에 따라 위 규칙이 어떻게 구현되는지 설명합니다.",[33,470],{},[36,472,474],{"id":473},"_3-전체-아키텍처-전처리-tool-검색-제약-생성-클릭-가능한-추적","3. 전체 아키텍처: 전처리 → Tool 검색 → 제약 생성 → 클릭 가능한 추적",[48,476],{":config":50,"code":477},"flowchart%20TB%0A%20%20%20%20subgraph%20prep%20%5B%EC%98%A4%ED%94%84%EB%9D%BC%EC%9D%B8%2F%EC%B5%9C%EC%B4%88%20%EC%A0%84%EC%B2%98%EB%A6%AC%5D%0A%20%20%20%20%20%20%20%20A%5B%EB%AA%A9%EC%B0%A8%20%EB%98%90%EB%8A%94%20%EA%B8%B8%EC%9D%B4%EB%A1%9C%20%EC%B1%85%20%EB%B6%84%ED%95%A0%5D%20--%3E%20B%5BLLM%20%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%8A%B8%20%EC%9A%94%EC%95%BD%20%EC%83%9D%EC%84%B1%5D%0A%20%20%20%20%20%20%20%20B%20--%3E%20C%5B%EB%A1%9C%EC%BB%AC%20Segment%20%EC%BA%90%EC%8B%9C%20%EC%98%81%EA%B5%AC%20%EC%A0%80%EC%9E%A5%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20ask%20%5B%EC%82%AC%EC%9A%A9%EC%9E%90%20%EC%A7%88%EB%AC%B8%5D%0A%20%20%20%20%20%20%20%20D%5B%EC%82%AC%EC%9A%A9%EC%9E%90%20%EC%9E%85%EB%A0%A5%5D%20--%3E%20E%7BSegment%20%EC%BA%90%EC%8B%9C%20%EC%9E%88%EC%9D%8C%3F%7D%0A%20%20%20%20%20%20%20%20E%20--%3E%7C%EC%95%84%EB%8B%88%EC%98%A4%7C%20F%5B%EC%A0%84%EB%AC%B8%20%EC%B6%94%EC%B6%9C%20%2F%20%EC%A0%84%EC%B2%98%EB%A6%AC%20%EC%97%AC%EB%B6%80%20%ED%99%95%EC%9D%B8%5D%0A%20%20%20%20%20%20%20%20F%20--%3E%20prep%0A%20%20%20%20%20%20%20%20E%20--%3E%7C%EC%98%88%7C%20G%5BTool%20Calling%20%EB%93%B1%EB%A1%9D%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20retrieve%20%5BTool%20%EA%B2%80%EC%83%89%5D%0A%20%20%20%20%20%20%20%20G%20--%3E%20H%7B%EC%A7%88%EB%AC%B8%20%EC%9C%A0%ED%98%95%7D%0A%20%20%20%20%20%20%20%20H%20--%3E%7C%EC%A0%84%EC%B2%B4%20%EA%B0%9C%EC%9A%94%2F%EC%84%9C%ED%8F%89%7C%20I%5Bget_full_book_segment_summaries%5D%0A%20%20%20%20%20%20%20%20H%20--%3E%7C%EA%B5%AC%EC%B2%B4%EC%A0%81%20%EC%82%AC%EC%8B%A4%2F%EC%9D%B8%EB%AC%BC%2F%EC%9E%A5%7C%20J%5Bget_related_segment_summaries%5D%0A%20%20%20%20%20%20%20%20J%20--%3E%20K%5BLLM%EC%9D%B4%20%EC%9A%94%EC%95%BD%20%EB%AA%A9%EB%A1%9D%EC%97%90%EC%84%9C%20%EA%B4%80%EB%A0%A8%20%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%8A%B8%20ID%20%EC%84%A0%ED%83%9D%5D%0A%20%20%20%20%20%20%20%20K%20--%3E%20L%5Bspan%EC%9C%BC%EB%A1%9C%20%EC%9B%90%EB%AC%B8%20%2B%20%EC%9C%84%EC%B9%98%20%EB%A7%88%EC%BB%A4%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%5D%0A%20%20%20%20%20%20%20%20I%20--%3E%20M%5B%EC%A0%84%EC%B2%B4%20%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%8A%B8%20%EC%9A%94%EC%95%BD%20%EC%9D%B4%EC%96%B4%20%EB%B6%99%EC%9D%B4%EA%B8%B0%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20answer%20%5B%EC%83%9D%EC%84%B1%20%EB%B0%8F%20%ED%91%9C%EC%8B%9C%5D%0A%20%20%20%20%20%20%20%20L%20--%3E%20N%5BTool%20%EA%B2%B0%EA%B3%BC%EB%A5%BC%20%EB%AA%A8%EB%8D%B8%EC%97%90%20%EB%B0%98%ED%99%98%5D%0A%20%20%20%20%20%20%20%20M%20--%3E%20N%0A%20%20%20%20%20%20%20%20N%20--%3E%20O%5BSystem%20Prompt%20%EC%9D%B8%EC%9A%A9%20%ED%98%95%EC%8B%9D%20%EC%A0%9C%EC%95%BD%5D%0A%20%20%20%20%20%20%20%20O%20--%3E%20P%5B%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D%20%EB%8B%B5%EB%B3%80%20%2B%20%EC%9C%84%EC%B9%98%20%EA%B0%81%EC%A3%BC%5D%0A%20%20%20%20%20%20%20%20P%20--%3E%20Q%5B%ED%81%B4%EB%A6%AD%20%EA%B0%80%EB%8A%A5%ED%95%9C%20%EC%9D%B8%EC%9A%A9%20%EA%B0%81%EC%A3%BC%20%EB%A0%8C%EB%8D%94%EB%A7%81%5D%0A%20%20%20%20%20%20%20%20Q%20--%3E%20R%5B%ED%81%B4%EB%A6%AD%20%E2%86%92%20%EC%9B%90%EB%AC%B8%20%EB%AF%B8%EB%A6%AC%EB%B3%B4%EA%B8%B0%20%E2%86%92%20%EC%9D%B4%EB%8F%99%20%ED%95%98%EC%9D%B4%EB%9D%BC%EC%9D%B4%ED%8A%B8%5D%0A%20%20%20%20end",[10,479,480,481,484],{},"핵심 사상을 한 줄로: ",[24,482,483],{},"모델이 「기억으로 답하지」 않게 하고, 「먼저 증거를 수집하고, 답한 뒤, 출처를 표시」하게 한다","는 것입니다.",[33,486],{},[36,488,490],{"id":489},"_4-전처리-책-전체를-검색-가능한-세그먼트-인덱스로-변환","4. 전처리: 책 전체를 검색 가능한 「세그먼트 인덱스」로 변환",[10,492,493,494,497,498,501,502,505,506,509,510,513],{},"매 질문마다 ",[24,495,496],{},"1단계","의 전문 Context를 쓰면 장편에서 Token이 폭발하고 검색 세분화도 너무 거칩니다. 3단계 해결책: 사용자가 특정 책에 대해 AI 대화를 처음 시작할 때, 백그라운드에서 ",[24,499,500],{},"세그먼트 요약 작업","을 비동기 실행—",[24,503,504],{},"목차 구조"," 또는 ",[24,507,508],{},"텍스트 길이","로 책을 여러 ",[153,511,512],{},"Segment","로 나누고, 각 조각에 요약을 생성한 뒤 로컬 IndexedDB에 영구 저장.",[10,515,516,517,519,520,523],{},"각 ",[153,518,512],{},"는 데이터 구조상 요약과 ",[24,521,522],{},"본문 물리적 위치","를 포함:",[275,525,526,536],{},[278,527,528],{},[281,529,530,533],{},[284,531,532],{},"필드",[284,534,535],{},"의미",[297,537,538,552,565,575],{},[281,539,540,549],{},[302,541,542,545,546],{},[153,543,544],{},"startFileIndex"," / ",[153,547,548],{},"endFileIndex",[302,550,551],{},"Spine 파일 인덱스 (PDF는 페이지당 하나)",[281,553,554,562],{},[302,555,556,545,559],{},[153,557,558],{},"startOffset",[153,560,561],{},"endOffset",[302,563,564],{},"문자 수준 시작/끝 오프셋",[281,566,567,572],{},[302,568,569],{},[153,570,571],{},"sequence",[302,573,574],{},"선형 독서 순서",[281,576,577,582],{},[302,578,579],{},[153,580,581],{},"title",[302,583,584],{},"해당 목차 제목",[10,586,587,588,592],{},"분할 전략은 정밀도와 비용을 균형 있게: 단일 목차 본문이 약 20KB 이하면 해당 노드만 요약; 동급 목차는 배치(15KB",[589,590,591],"del",{},"20KB)로 병합 후 LLM 호출; 목차 없는 큰 본문은 3","4만 문자 구간으로 분할.",[10,594,595,596,599,600,603],{},"요약 생성 시 System Prompt는 ",[24,597,598],{},"원문 위치 마커 유지","를 요구(형식 ",[153,601,602],{},"[f숫자-숫자-숫자]",")하여 이후 Tool이 원문을 반환할 때 위치 정보가 spine 문자 오프셋과 일치하도록 함. 핵심 제약은 다음과 같습니다:",[605,606,612],"pre",{"className":607,"code":609,"language":610,"meta":611},[608],"language-text","If summary content relates to a passage, keep the trailing position tag [fNumber-Number-Number] (e.g. [f1-90-109]).\nTags are atomic—do not alter, merge, or omit any character or digit.\n","text","",[153,613,609],{"__ignoreMap":611},[10,615,616,617,620],{},"전처리 완료 후 Q&A는 「책 전체 Context」가 아니라 ",[24,618,619],{},"구조화된 세그먼트 인덱스","에 의존—장편 시나리오에서 제로 환각의 엔지니어링 전제입니다.",[33,622],{},[36,624,626],{"id":625},"_5-위치-마커-체계-출처를-텍스트에-인코딩","5. 위치 마커 체계: 「출처」를 텍스트에 인코딩",[10,628,629,630,633],{},"제로 환각은 내용이 원문에서 와야 할 뿐 아니라, ",[24,631,632],{},"출처가 기계적으로 파싱 가능하고 UI에서 이동 가능","해야 합니다. 인라인 위치 마커를 사용합니다:",[605,635,638],{"className":636,"code":637,"language":610},[608],"[f{fileIndex}-{startChar}-{endChar}]\n",[153,639,637],{"__ignoreMap":611},[10,641,642,643,646],{},"예: ",[153,644,645],{},"[f5-123-165]","는 5번째 Spine 파일(0부터 시작)에서 문자 오프셋 123~165 구간의 텍스트를 의미합니다.",[53,648,650],{"id":649},"_51-마커를-본문에-쓰는-방법","5.1 마커를 본문에 쓰는 방법",[10,652,653,654,657],{},"본문 추출 계층은 조각 출력 시 각 소단락 끝에 ",[153,655,656],{},"[f{fileIndex}-{start}-{end}]","를 기록. 예시:",[605,659,664],{"className":660,"code":662,"language":663,"meta":611},[661],"language-typescript","const position = `[f${fileIndex}-${absOffset}-${absOffset + segment.length}]`;\nfileLines.push(segment.text.trim() + position);\n","typescript",[153,665,662],{"__ignoreMap":611},[10,667,668,669,672],{},"전처리 요약이든 Tool이 반환한 원문 발췌든, 위치 정보는 ",[24,670,671],{},"Spine 문자 오프셋","에 맞추며, 모델이 「페이지 번호를 추정」하지 않습니다.",[53,674,676],{"id":675},"_52-모델-출력에-대한-제약","5.2 모델 출력에 대한 제약",[10,678,679,680,684],{},"System Prompt 조립 시 **",[681,682,683],"span",{},"Position Citation Rules","**를 별도로 약정, 핵심 다섯 가지:",[245,686,687,697,706,712,721],{},[84,688,689,692,693,696],{},[24,690,691],{},"표준 형식",": 반드시 ",[153,694,695],{},"[f_fileIndex-startChar-endChar]"," 사용, 세 구간 숫자 모두 필수;",[84,698,699,702,703,121],{},[24,700,701],{},"현재 출처만 인용",": 각주는 이번 System/User 메시지 또는 Tool 반환 텍스트의 마커를 ",[24,704,705],{},"그대로 복사",[84,707,708,711],{},[24,709,710],{},"위조 금지",": 위치를 직접 계산·수정·조작하지 않음;",[84,713,714,717,718,121],{},[24,715,716],{},"부족함을 감수",": 현재 컨텍스트에 유효한 마커가 없으면 정상적으로 답변하고, ",[24,719,720],{},"위치 마커는 출력하지 않음",[84,722,723,726],{},[24,724,725],{},"논지 바로 뒤",": 마커는 관련 문장 바로 뒤에, 글 끝에 인용 목록을 쌓지 않음.",[10,728,729,730,733,734,737],{},"프론트엔드 표시 전에는 모델이 가끔 출력하는 ",[24,731,732],{},"2구간"," 불법 마커(예: ",[153,735,736],{},"[f1-293]",")도 필터링하여 무효 각주가 UI에 들어가지 않게 합니다.",[10,739,740],{},[13,741],{"alt":742,"src":743},"인용 추적 팝업","https://cdn.linghuxiong.com/resources/snapshots/ai-chat.png",[33,745],{},[36,747,749],{"id":748},"_6-tool-calling-먼저-검색-그다음-답변","6. Tool Calling: 먼저 검색, 그다음 답변",[10,751,752,753,756,757,760,761,764],{},"대화가 특정 책에 바인딩되어 있을 때(",[153,754,755],{},"resourceId"," 존재, ",[153,758,759],{},"chatType === 'chat'","), 매 생성 전에 모델에 두 Tool을 등록하고 해당 executor를 마운트. 전체는 OpenAI 호환 ",[24,762,763],{},"function calling 루프","를 따릅니다.",[53,766,768,769,772],{"id":767},"_61-get_related_segment_summaries-구체적-질문에-대한-세그먼트-조회","6.1 ",[153,770,771],{},"get_related_segment_summaries"," — 구체적 질문에 대한 세그먼트 조회",[10,774,775,776,779],{},"적용: 개념, 인물, 줄거리, 장 세부 등 ",[24,777,778],{},"명확한 검색 의도","가 있는 질문.",[10,781,782],{},"흐름 요약:",[245,784,785,792,799,806,820],{},[84,786,787,788,791],{},"모델이 사용자 구어를 ",[24,789,790],{},"책에 나올 법한 용어","로 바꿈(System Prompt의 「Optimize Search Queries」);",[84,793,794,795,798],{},"Tool 호출, ",[153,796,797],{},"question"," 전달;",[84,800,801,802,805],{},"모든 세그먼트 요약을 Token 예산으로 ",[24,803,804],{},"배치","(배치당 약 3만 Token, 최대 5배치);",[84,807,808,809,812,813,816,817,121],{},"배치마다 ",[24,810,811],{},"독립 LLM 요청","으로 ",[153,814,815],{},"{ id, title, summary }"," 목록에서 관련 세그먼트 ID 선택(최대 5개), JSON 반환, 형태 ",[153,818,819],{},"{\"Thinking\":\"...\",\"answer\":[\"1\",\"3\"]}",[84,821,822,823,825],{},"선택된 Segment의 span으로 Spine에서 ",[24,824,261],{},"을 가져옴(요약 아님), Tool 결과로 반환.",[10,827,828,831,832,835],{},[24,829,830],{},"핵심 설계: Tool은 요약이 아니라 원문을 반환."," 모델은 실제 단락 + 인라인 ",[153,833,834],{},"[f…]","를 보고 답하여 「요약 → 재요약」 drift를 피합니다.",[53,837,839,840,843],{"id":838},"_62-get_full_book_segment_summaries-책-전체-개요형-질문","6.2 ",[153,841,842],{},"get_full_book_segment_summaries"," — 책 전체 개요형 질문",[10,845,846,847,850],{},"적용: 「책 전체 요약」「이 책 평」「전체 구조/주제」 등 ",[24,848,849],{},"전역 시야","가 필요한 질문.",[10,852,853,854,857],{},"독서 순서로 모든 세그먼트의 ",[153,855,856],{},"summary","를 이어 반환하여, 단계별 관련도 선별만으로 핵심 장을 놓치지 않음.",[53,859,861],{"id":860},"_63-system-prompt-책-우선-tool-우선","6.3 System Prompt: 책 우선, Tool 우선",[10,863,864,865,870],{},"책이 바인딩되면 System Prompt에 ",[24,866,867],{},[681,868,869],{},"Core Principles for Reading Assistant"," 주입, 핵심 세 가지:",[605,872,875],{"className":873,"code":874,"language":610},[608],"1. Book First, Tool First\n   - 책과 관련될 수 있는 모든 질문은 먼저 Tool 검색을 호출해야 함;\n   - 답변은 주로 검색 결과에 근거해야 하며, 검색 없이 「책 내용」을 지어내지 말 것.\n\n2. General Knowledge as Fallback Only\n   - 순수 잡담 / 사용자가 명시적으로 책을 쓰지 않음 / Tool 결과 없음일 때만 일반 지식 사용;\n   - 책에 없으면 먼저 「이 책에 해당 내용 없음」을 선언한 뒤 일반 지식 보충.\n\n3. Direct Style\n   - 본론으로, 「제공된 자료에 따르면…」「종합하면…」 같은 상투어 금지.\n",[153,876,874],{"__ignoreMap":611},[10,878,879,880,883,884,887],{},"생성 계층은 표준 Tool 루프 구현: ",[153,881,882],{},"tool_calls"," → executor 실행 → ",[153,885,886],{},"role: tool"," 추가 → 최종 텍스트까지 계속 요청. tools 활성화 시 thinking 채널은 끄고 function call 프로토콜 충돌을 피함.",[33,889],{},[36,891,893],{"id":892},"_7-프론트엔드-추적-각주에서-원문-하이라이트까지","7. 프론트엔드 추적: 각주에서 원문 하이라이트까지",[10,895,896,897,899],{},"모델 출력 ",[153,898,645],{},"는 그대로 표시하지 않고, 렌더링 계층에서 클릭 가능한 인용으로 변환.",[53,901,903],{"id":902},"_71-각주-렌더링","7.1 각주 렌더링",[10,905,906,907,910],{},"표시 전 위치 마커를 Markdown 링크로 정규화, 예 ",[153,908,909],{},"[1]([f5-123-165])",", 번호 각주로 렌더; 같은 위치가 여러 번 나오면 중복 제거하여 UI 중복 방지.",[53,912,914],{"id":913},"_72-클릭-상호작용","7.2 클릭 상호작용",[245,916,917,926,932],{},[84,918,919,922,923,925],{},[24,920,921],{},"첫 클릭",": ",[153,924,834],{}," 파싱 → fileIndex와 문자 오프셋 → Spine 원문에서 텍스트 추출 → 미리보기 팝업(목차 제목 포함 가능);",[84,927,928,931],{},[24,929,930],{},"같은 각주 다시 클릭",": 팝업 닫기;",[84,933,934,937],{},[24,935,936],{},"이동 확인",": 독서 뷰 열기, 문자 구간 하이라이트.",[10,939,940,941,944,945,948],{},"모델이 복사한 마커에서 사용자가 보는 원문까지, 중간에 ",[24,942,943],{},"LLM 2차 가공 없음",", 추적 체인 전체가 ",[24,946,947],{},"확정적·재현 가능",".",[33,950],{},[36,952,954],{"id":953},"_8-경계-상황과-정직한-다운그레이드","8. 경계 상황과 정직한 다운그레이드",[10,956,957,958,961],{},"제로 환각 ≠ 「항상 답이 있음」, ",[24,959,960],{},"증거 없으면 지어내지 않음",":",[275,963,964,974],{},[278,965,966],{},[281,967,968,971],{},[284,969,970],{},"시나리오",[284,972,973],{},"동작",[297,975,976,984,995,1003,1011],{},[281,977,978,981],{},[302,979,980],{},"세그먼트 요약 아직 없음",[302,982,983],{},"먼저 전문 추출 후 요약",[281,985,986,989],{},[302,987,988],{},"Tool 검색 결과 없음",[302,990,991,994],{},[153,992,993],{},"(No relevant segment excerpts found…)"," 반환, 모델은 책에 언급 없음을 선언해야 함",[281,996,997,1000],{},[302,998,999],{},"모델이 불법 2구간 마커 출력",[302,1001,1002],{},"프론트엔드 필터, 무효 각주 미표시",[281,1004,1005,1008],{},[302,1006,1007],{},"사용자 순수 잡담",[302,1009,1010],{},"System Prompt가 책에서 벗어나 일반 지식 답변 허용",[281,1012,1013,1016],{},[302,1014,1015],{},"대화 내보내기",[302,1017,1018],{},"각주를 리더 딥링크로 변환 가능, 공유·보관에 편리",[10,1020,1021],{},[13,1022],{"alt":1015,"src":1023},"https://cdn.linghuxiong.com/resources/snapshots/ai-chat-export.png",[33,1025],{},[36,1027,1029],{"id":1028},"_9-설계-트레이드오프-왜-벡터-rag를-쓰지-않는가","9. 설계 트레이드오프: 왜 「벡터 RAG」를 쓰지 않는가?",[10,1031,1032,1033,1036],{},"문서 QA를 하는 동료들이 자주 묻습니다: 검색 증강을 한다면 왜 ",[24,1034,1035],{},"Embedding + 벡터 DB Top-K"," 표준 경로를 가지 않는가?",[10,1038,1039,1040,1043,1044,1047,1048,1051,1052,1055,1056,1059],{},"실제로 ",[24,1041,1042],{},"우리도 RAG를 하고 있습니다","—매 답변 전에 책을 조회한 뒤 생성. 차이는: 커뮤니티 맥락의 RAG는 종종 ",[24,1045,1046],{},"벡터화와 유사도 검색","을 전제로 하고, 현재 방안은 ",[24,1049,1050],{},"「세그먼트 인덱스 + Tool 필요 시 원문 가져오기」","(3단계)로 ",[24,1053,1054],{},"벡터 계층을 의도적으로 도입하지 않음",". 아래는 ",[24,1057,1058],{},"아키텍처 제약","에 따른 선택이며, 벡터 RAG의 가치를 부정하는 것이 아닙니다.",[53,1061,1063],{"id":1062},"범위-구분-검색을-안-하는-게-아니라-벡터-검색을-안-함","범위 구분: 검색을 안 하는 게 아니라 「벡터 검색」을 안 함",[81,1065,1066,1075],{},[84,1067,1068,1071,1072,948],{},[24,1069,1070],{},"넓은 의미 RAG",": 관련 자료 검색 → 생성 → ",[24,1073,1074],{},"우리는 함",[84,1076,1077,1080,1081,948],{},[24,1078,1079],{},"벡터 RAG",": Embedding 유사도로 리콜 → ",[24,1082,1083],{},"현재 버전에서는 안 함",[10,1085,1086,1087,1090,1091,1094],{},"책 전체 전처리는 ",[24,1088,1089],{},"세그먼트 요약 인덱스","; 질문 시 모델이 Tool로 구간 선택 후 ",[24,1092,1093],{},"원문 반환",". 검색 증강은 있으나 별도 embedding 모델과 벡터 인덱스 유지에 의존하지 않음.",[33,1096],{},[53,1098,1100],{"id":1099},"이유-1-사용자-정의-llm-provider-지원-설정-체인은-짧게","이유 1: 사용자 정의 LLM Provider 지원, 설정 체인은 짧게",[10,1102,1103,1104,1107,1108,1111],{},"제품은 사용자가 ",[24,1105,1106],{},"자체 API Key",", 사용자 정의 Base URL, ",[24,1109,1110],{},"로컬 Ollama","를 자유롭게 연결 가능—대화 모델은 사용자 선택, 비용과 데이터 경로 통제. 많은 셀프 호스팅·다중 모델 비교 시나리오의 필수 요구.",[10,1113,1114],{},"전형적 벡터 RAG를 겹치면 통합 면이 눈에 띄게 넓어짐:",[81,1116,1117,1127,1130],{},[84,1118,1119,1122,1123,1126],{},[24,1120,1121],{},"Chat 모델"," 외에 보통 ",[24,1124,1125],{},"Embedding 모델","도 필요(다른 model name, 때로는 다른 endpoint);",[84,1128,1129],{},"Ollama 등 로컬 배포는 embedding 모델을 별도로 받고 차원·API 호환 처리;",[84,1131,1132,1133,1136],{},"장애 도메인 복잡: Chat은 정상인데 ",[24,1134,1135],{},"검색이 비어 있음","—embedding, 인덱스, 차원 불일치 가능, 「단일 Provider 전체 체인」보다 디버깅 비용 높음.",[10,1138,1139,1140,1143,1144,1147],{},"현재 방안에서는 ",[24,1141,1142],{},"구간 선택과 답변이 동일 Provider 설정 공유","—「Chat은 A, 인덱스는 B」 없음. ",[24,1145,1146],{},"플러그형 LLM"," 애플리케이션에서는 리콜 몇 포인트보다 이게 더 중요한 경우가 많음.",[10,1149,1150],{},[13,1151],{"alt":1152,"src":1153},"사용자 정의 AI Provider","https://cdn.linghuxiong.com/resources/snapshots/ai-customize-providers.png",[33,1155],{},[53,1157,1159],{"id":1158},"이유-2-embedding과-인덱스-강결합-provider-전환-비용-높음","이유 2: Embedding과 인덱스 강결합, Provider 전환 비용 높음",[10,1161,1162,1163,1166,1167,1170,1171,1174,1175,1178],{},"벡터 RAG에서 흔히 과소평가되는 점: ",[24,1164,1165],{},"벡터는 범용 중간 형식이 아니라 특정 embedding 모델 아래 좌표."," A로 인덱스, B로 쿼리하면 유사도는 보통 ",[24,1168,1169],{},"비교 불가","—모델 교체는 ",[24,1172,1173],{},"책 전체 재벡터화","를 의미하고, 모델마다 ",[24,1176,1177],{},"벡터 차원","(768 / 1024 / 1536 …)이 저장 schema에 묶임.",[10,1180,1181,1182,1185,1186,1189],{},"3단계는 ",[24,1183,1184],{},"구조화 요약 + 문자 span","을 영구 저장, 벡터 저장 안 함; Chat 모델 전환 시 ",[24,1187,1188],{},"인덱스 재구축 불필요",", 증거 체인(원문 위치) 불변. 「언제든 다른 LLM 비교」 목표와 더 일치.",[33,1191],{},[53,1193,1195],{"id":1194},"이유-3-목차-있는-긴-문서-구조화-라우팅만으로도-종종-충분","이유 3: 목차 있는 긴 문서, 구조화 라우팅만으로도 종종 충분",[10,1197,1198,1199,1202,1203,1206,1207,1210,1211,1216],{},"전자책·PDF는 보통 ",[24,1200,1201],{},"장 구조","; 전처리가 ",[24,1204,1205],{},"구간 제목 + 요약"," 산출. 「특정 장이 무엇을 말하는지」「책이 개념을 어떻게 정의하는지」류 질문은 요약 목록에서 구간 선택 후 ",[24,1208,1209],{},"원문 회수","가 실무에서 안정적; Tool 반환은 ",[24,1212,1213,1215],{},[153,1214,834],{},"가 붙은 원문","이라 제로 환각은 여전히 문자 span에 고정.",[10,1218,1219,1220,1223,1224,1227],{},"벡터 검색은 의미 모호, 다국어, 긴 구간 문자열 불일치 등에서 유리; ",[24,1221,1222],{},"목차 + 전처리 + 강한 추적"," 리더에서는 복잡도를 ",[24,1225,1226],{},"Tool + 원문 반환 + 인용 제약","에 두는 ROI가 보통 더 높음.",[33,1229],{},[53,1231,1233],{"id":1232},"향후-방향-하이브리드-리콜-처음부터-다시-짓지-않음","향후 방향: 하이브리드 리콜, 처음부터 다시 짓지 않음",[10,1235,1236,1237,1240,1241,1244,1245,1248,1249,1252],{},"향후 ",[24,1238,1239],{},"벡터 거친 리콜"," 추가 가능(예: embedding으로 Top-N 후보 장만 선별), 최종은 여전히 ",[24,1242,1243],{},"구간 선택 → 원문 반환 → 클릭 추적",", 제로 환각 규칙 불변. 도입 시 Embedding ",[24,1246,1247],{},"선택",", 모델 변경 시 ",[24,1250,1251],{},"인덱스 재구축 명시적 안내","—silent wrong retrieval 방지.",[10,1254,1255,1256,948],{},"그 전까지 우선 보장: ",[24,1257,1258],{},"OpenAI 호환 Chat API만 있으면 동작, Chat 모델 교체 시 로컬 인덱스 재구축 불필요",[33,1260],{},[36,1262,1264],{"id":1263},"_10-요약","10. 요약",[275,1266,1267,1280],{},[278,1268,1269],{},[281,1270,1271,1274,1277],{},[284,1272,1273],{},"단계",[284,1275,1276],{},"수단",[284,1278,1279],{},"역할",[297,1281,1282,1293,1306,1320,1331,1342],{},[281,1283,1284,1287,1290],{},[302,1285,1286],{},"전처리",[302,1288,1289],{},"목차/길이 분할 + 세그먼트 요약 캐시",[302,1291,1292],{},"장편 검색·위치 지정 가능",[281,1294,1295,1298,1303],{},[302,1296,1297],{},"위치 마커",[302,1299,1300,1302],{},[153,1301,155],{}," 원문에 기록",[302,1304,1305],{},"출처 기계 파싱",[281,1307,1308,1311,1317],{},[302,1309,1310],{},"Tool 검색",[302,1312,1313,1314,1316],{},"질문별 구간/전체 요약 조회, ",[24,1315,316],{}," 반환",[302,1318,1319],{},"답변 전 증거 강제",[281,1321,1322,1325,1328],{},[302,1323,1324],{},"System Prompt",[302,1326,1327],{},"책 우선, 각주 위조 금지, 없으면 말함",[302,1329,1330],{},"생성 행위 제약",[281,1332,1333,1336,1339],{},[302,1334,1335],{},"프론트엔드 추적",[302,1337,1338],{},"각주 → 미리보기 → 이동 하이라이트",[302,1340,1341],{},"사용자 증거 검증",[281,1343,1344,1347,1350],{},[302,1345,1346],{},"벡터 검색 미사용",[302,1348,1349],{},"단일 Provider, Chat 모델 교체 시 인덱스 재구축 불필요",[302,1351,1352],{},"통합·마이그레이션 비용 절감",[10,1354,1355,1356,1359],{},"「제로 환각」은 모델이 절대 실수하지 않는다는 뜻이 아니라 ",[24,1357,1358],{},"엔지니어링 구조로 출력을 증거 체인에 고정","하는 것: 검색 결과 없으면 책 내용을 가장하면 안 됨; 검색 결과 있으면 검증 가능한 원문 위치를 제시해야 함.",[10,1361,1362,1363,1366,1367,1370],{},"AI 독서나 문서 QA를 개발 중이라면 ",[24,1364,1365],{},"전문 직접 삽입 → 핵심 문장 추출 → Tool-First 필요 시 검색"," 진화 경로와 ",[24,1368,1369],{},"인라인 위치 마커 + 원문 반환"," 방식이 참고 구현이 되길 바랍니다.",[18,1372,1373],{},[10,1374,1375,1376,1381,1382,1386],{},"위 내용은 ",[237,1377,1380],{"href":1378,"rel":1379},"https://reader.linghuxiong.com",[241],"Foxycape"," AI 리더 개발 실천에서 나온 것으로, 참고용입니다. 글 끝 ",[237,1383,1385],{"href":1384},"/ko-kr#download","다운로드 페이지","에서 리더를 체험해 보세요.",{"title":611,"searchDepth":1388,"depth":1388,"links":1389},2,[1390,1396,1397,1398,1399,1403,1410,1414,1415,1422],{"id":38,"depth":1388,"text":39,"children":1391},[1392,1394,1395],{"id":55,"depth":1393,"text":56},3,{"id":137,"depth":1393,"text":138},{"id":229,"depth":1393,"text":230},{"id":413,"depth":1388,"text":414},{"id":473,"depth":1388,"text":474},{"id":489,"depth":1388,"text":490},{"id":625,"depth":1388,"text":626,"children":1400},[1401,1402],{"id":649,"depth":1393,"text":650},{"id":675,"depth":1393,"text":676},{"id":748,"depth":1388,"text":749,"children":1404},[1405,1407,1409],{"id":767,"depth":1393,"text":1406},"6.1 get_related_segment_summaries — 구체적 질문에 대한 세그먼트 조회",{"id":838,"depth":1393,"text":1408},"6.2 get_full_book_segment_summaries — 책 전체 개요형 질문",{"id":860,"depth":1393,"text":861},{"id":892,"depth":1388,"text":893,"children":1411},[1412,1413],{"id":902,"depth":1393,"text":903},{"id":913,"depth":1393,"text":914},{"id":953,"depth":1388,"text":954},{"id":1028,"depth":1388,"text":1029,"children":1416},[1417,1418,1419,1420,1421],{"id":1062,"depth":1393,"text":1063},{"id":1099,"depth":1393,"text":1100},{"id":1158,"depth":1393,"text":1159},{"id":1194,"depth":1393,"text":1195},{"id":1232,"depth":1393,"text":1233},{"id":1263,"depth":1388,"text":1264},null,"2026-06-03","AI 리더의 제로 환각 Q&A 엔지니어링 구현을 공유합니다. 답변은 현재 책 원문에 엄격히 기반하며, 핵심 논지는 한 번의 클릭으로 구체적인 단락까지 추적할 수 있습니다.",false,"md",{},true,"/ko-kr/blog/zero-hallucination-qa",{"title":5,"description":1425},"ko-kr/blog/zero-hallucination-qa",[1434,1435,1436],"리더","AI","기술","zero-hallucination-qa","gMAADyOUMGiUy3dSeufvlyoAAKWVe784BtYqJyvFQT4",[1440],{"id":4,"title":5,"body":1441,"config":1423,"date":1424,"description":1425,"draft":1426,"extension":1427,"image":1423,"meta":2349,"navigation":1429,"path":1430,"seo":2350,"stem":1432,"tags":2351,"toolbar":1423,"translationKey":1437,"updated":1424,"__hash__":1438},{"type":7,"value":1442,"toc":2317},[1443,1447,1455,1457,1459,1463,1465,1467,1477,1481,1489,1493,1515,1517,1519,1529,1533,1537,1547,1551,1575,1577,1579,1586,1602,1606,1686,1692,1696,1698,1700,1704,1714,1718,1732,1736,1738,1740,1742,1746,1748,1750,1762,1768,1816,1820,1826,1831,1835,1837,1839,1843,1848,1852,1854,1858,1863,1867,1869,1873,1901,1907,1911,1913,1915,1923,1927,1931,1933,1959,1965,1969,1973,1977,1979,1985,1990,1996,1998,2000,2004,2006,2010,2012,2028,2034,2036,2038,2042,2086,2090,2092,2094,2098,2110,2112,2126,2132,2134,2136,2142,2144,2158,2164,2168,2170,2172,2182,2188,2190,2192,2204,2210,2212,2214,2224,2228,2230,2232,2298,2302,2308],[10,1444,1445],{},[13,1446],{"alt":15,"src":16},[18,1448,1449],{},[10,1450,22,1451,27,1453,31],{},[24,1452,26],{},[24,1454,30],{},[33,1456],{},[36,1458,39],{"id":38},[10,1460,42,1461,46],{},[24,1462,45],{},[48,1464],{":config":50,"code":51},[53,1466,56],{"id":55},[10,1468,1469,62,1471,66,1473,70,1475,74],{},[24,1470,61],{},[24,1472,65],{},[24,1474,69],{},[24,1476,73],{},[10,1478,1479],{},[24,1480,79],{},[81,1482,1483,1485,1487],{},[84,1484,86],{},[84,1486,89],{},[84,1488,92],{},[10,1490,1491],{},[24,1492,97],{},[81,1494,1495,1499,1503,1509],{},[84,1496,1497,105],{},[24,1498,104],{},[84,1500,1501,111],{},[24,1502,110],{},[84,1504,1505,117,1507,121],{},[24,1506,116],{},[24,1508,120],{},[84,1510,1511,127,1513,131],{},[24,1512,126],{},[24,1514,130],{},[10,1516,134],{},[53,1518,138],{"id":137},[10,1520,1521,143,1523,147,1525,151,1527,156],{},[24,1522,61],{},[24,1524,146],{},[24,1526,150],{},[153,1528,155],{},[10,1530,159,1531,163],{},[24,1532,162],{},[10,1534,1535],{},[24,1536,79],{},[81,1538,1539,1543,1545],{},[84,1540,172,1541,176],{},[24,1542,175],{},[84,1544,179],{},[84,1546,182],{},[10,1548,1549],{},[24,1550,187],{},[81,1552,1553,1557,1563,1569],{},[84,1554,1555,195],{},[24,1556,194],{},[84,1558,1559,201,1561,121],{},[24,1560,200],{},[24,1562,204],{},[84,1564,1565,210,1567,121],{},[24,1566,209],{},[24,1568,213],{},[84,1570,1571,219,1573,223],{},[24,1572,218],{},[24,1574,222],{},[10,1576,226],{},[53,1578,230],{"id":229},[10,1580,1581,235,1583,243],{},[24,1582,61],{},[237,1584,242],{"href":239,"rel":1585},[241],[245,1587,1588,1592,1598],{},[84,1589,1590,252],{},[24,1591,251],{},[84,1593,1594,258,1596,262],{},[24,1595,257],{},[24,1597,261],{},[84,1599,1600,268],{},[24,1601,267],{},[10,1603,1604],{},[24,1605,273],{},[275,1607,1608,1620],{},[278,1609,1610],{},[281,1611,1612,1614,1616,1618],{},[284,1613,286],{},[284,1615,289],{},[284,1617,292],{},[284,1619,295],{},[297,1621,1622,1634,1644,1654,1664,1676],{},[281,1623,1624,1626,1628,1630],{},[302,1625,304],{},[302,1627,307],{},[302,1629,310],{},[302,1631,313,1632,317],{},[24,1633,316],{},[281,1635,1636,1638,1640,1642],{},[302,1637,322],{},[302,1639,325],{},[302,1641,328],{},[302,1643,331],{},[281,1645,1646,1648,1650,1652],{},[302,1647,336],{},[302,1649,339],{},[302,1651,342],{},[302,1653,345],{},[281,1655,1656,1658,1660,1662],{},[302,1657,350],{},[302,1659,353],{},[302,1661,356],{},[302,1663,359],{},[281,1665,1666,1668,1670,1672],{},[302,1667,364],{},[302,1669,367],{},[302,1671,370],{},[302,1673,373,1674,377],{},[24,1675,376],{},[281,1677,1678,1680,1682,1684],{},[302,1679,382],{},[302,1681,385],{},[302,1683,388],{},[302,1685,391],{},[10,1687,1688,397,1690,401],{},[24,1689,396],{},[24,1691,400],{},[10,1693,404,1694,408],{},[24,1695,407],{},[33,1697],{},[36,1699,414],{"id":413},[10,1701,417,1702,421],{},[24,1703,420],{},[81,1705,1706,1710,1712],{},[84,1707,426,1708,430],{},[24,1709,429],{},[84,1711,433],{},[84,1713,436],{},[10,1715,439,1716,443],{},[24,1717,442],{},[245,1719,1720,1724,1728],{},[84,1721,1722,451],{},[24,1723,450],{},[84,1725,1726,457],{},[24,1727,456],{},[84,1729,1730,463],{},[24,1731,462],{},[10,1733,404,1734,468],{},[24,1735,407],{},[33,1737],{},[36,1739,474],{"id":473},[48,1741],{":config":50,"code":477},[10,1743,480,1744,484],{},[24,1745,483],{},[33,1747],{},[36,1749,490],{"id":489},[10,1751,493,1752,497,1754,501,1756,505,1758,509,1760,513],{},[24,1753,496],{},[24,1755,500],{},[24,1757,504],{},[24,1759,508],{},[153,1761,512],{},[10,1763,516,1764,519,1766,523],{},[153,1765,512],{},[24,1767,522],{},[275,1769,1770,1778],{},[278,1771,1772],{},[281,1773,1774,1776],{},[284,1775,532],{},[284,1777,535],{},[297,1779,1780,1790,1800,1808],{},[281,1781,1782,1788],{},[302,1783,1784,545,1786],{},[153,1785,544],{},[153,1787,548],{},[302,1789,551],{},[281,1791,1792,1798],{},[302,1793,1794,545,1796],{},[153,1795,558],{},[153,1797,561],{},[302,1799,564],{},[281,1801,1802,1806],{},[302,1803,1804],{},[153,1805,571],{},[302,1807,574],{},[281,1809,1810,1814],{},[302,1811,1812],{},[153,1813,581],{},[302,1815,584],{},[10,1817,587,1818,592],{},[589,1819,591],{},[10,1821,595,1822,599,1824,603],{},[24,1823,598],{},[153,1825,602],{},[605,1827,1829],{"className":1828,"code":609,"language":610,"meta":611},[608],[153,1830,609],{"__ignoreMap":611},[10,1832,616,1833,620],{},[24,1834,619],{},[33,1836],{},[36,1838,626],{"id":625},[10,1840,629,1841,633],{},[24,1842,632],{},[605,1844,1846],{"className":1845,"code":637,"language":610},[608],[153,1847,637],{"__ignoreMap":611},[10,1849,642,1850,646],{},[153,1851,645],{},[53,1853,650],{"id":649},[10,1855,653,1856,657],{},[153,1857,656],{},[605,1859,1861],{"className":1860,"code":662,"language":663,"meta":611},[661],[153,1862,662],{"__ignoreMap":611},[10,1864,668,1865,672],{},[24,1866,671],{},[53,1868,676],{"id":675},[10,1870,679,1871,684],{},[681,1872,683],{},[245,1874,1875,1881,1887,1891,1897],{},[84,1876,1877,692,1879,696],{},[24,1878,691],{},[153,1880,695],{},[84,1882,1883,702,1885,121],{},[24,1884,701],{},[24,1886,705],{},[84,1888,1889,711],{},[24,1890,710],{},[84,1892,1893,717,1895,121],{},[24,1894,716],{},[24,1896,720],{},[84,1898,1899,726],{},[24,1900,725],{},[10,1902,729,1903,733,1905,737],{},[24,1904,732],{},[153,1906,736],{},[10,1908,1909],{},[13,1910],{"alt":742,"src":743},[33,1912],{},[36,1914,749],{"id":748},[10,1916,752,1917,756,1919,760,1921,764],{},[153,1918,755],{},[153,1920,759],{},[24,1922,763],{},[53,1924,768,1925,772],{"id":767},[153,1926,771],{},[10,1928,775,1929,779],{},[24,1930,778],{},[10,1932,782],{},[245,1934,1935,1939,1943,1947,1955],{},[84,1936,787,1937,791],{},[24,1938,790],{},[84,1940,794,1941,798],{},[153,1942,797],{},[84,1944,801,1945,805],{},[24,1946,804],{},[84,1948,808,1949,812,1951,816,1953,121],{},[24,1950,811],{},[153,1952,815],{},[153,1954,819],{},[84,1956,822,1957,825],{},[24,1958,261],{},[10,1960,1961,831,1963,835],{},[24,1962,830],{},[153,1964,834],{},[53,1966,839,1967,843],{"id":838},[153,1968,842],{},[10,1970,846,1971,850],{},[24,1972,849],{},[10,1974,853,1975,857],{},[153,1976,856],{},[53,1978,861],{"id":860},[10,1980,864,1981,870],{},[24,1982,1983],{},[681,1984,869],{},[605,1986,1988],{"className":1987,"code":874,"language":610},[608],[153,1989,874],{"__ignoreMap":611},[10,1991,879,1992,883,1994,887],{},[153,1993,882],{},[153,1995,886],{},[33,1997],{},[36,1999,893],{"id":892},[10,2001,896,2002,899],{},[153,2003,645],{},[53,2005,903],{"id":902},[10,2007,906,2008,910],{},[153,2009,909],{},[53,2011,914],{"id":913},[245,2013,2014,2020,2024],{},[84,2015,2016,922,2018,925],{},[24,2017,921],{},[153,2019,834],{},[84,2021,2022,931],{},[24,2023,930],{},[84,2025,2026,937],{},[24,2027,936],{},[10,2029,940,2030,944,2032,948],{},[24,2031,943],{},[24,2033,947],{},[33,2035],{},[36,2037,954],{"id":953},[10,2039,957,2040,961],{},[24,2041,960],{},[275,2043,2044,2052],{},[278,2045,2046],{},[281,2047,2048,2050],{},[284,2049,970],{},[284,2051,973],{},[297,2053,2054,2060,2068,2074,2080],{},[281,2055,2056,2058],{},[302,2057,980],{},[302,2059,983],{},[281,2061,2062,2064],{},[302,2063,988],{},[302,2065,2066,994],{},[153,2067,993],{},[281,2069,2070,2072],{},[302,2071,999],{},[302,2073,1002],{},[281,2075,2076,2078],{},[302,2077,1007],{},[302,2079,1010],{},[281,2081,2082,2084],{},[302,2083,1015],{},[302,2085,1018],{},[10,2087,2088],{},[13,2089],{"alt":1015,"src":1023},[33,2091],{},[36,2093,1029],{"id":1028},[10,2095,1032,2096,1036],{},[24,2097,1035],{},[10,2099,1039,2100,1043,2102,1047,2104,1051,2106,1055,2108,1059],{},[24,2101,1042],{},[24,2103,1046],{},[24,2105,1050],{},[24,2107,1054],{},[24,2109,1058],{},[53,2111,1063],{"id":1062},[81,2113,2114,2120],{},[84,2115,2116,1071,2118,948],{},[24,2117,1070],{},[24,2119,1074],{},[84,2121,2122,1080,2124,948],{},[24,2123,1079],{},[24,2125,1083],{},[10,2127,1086,2128,1090,2130,1094],{},[24,2129,1089],{},[24,2131,1093],{},[33,2133],{},[53,2135,1100],{"id":1099},[10,2137,1103,2138,1107,2140,1111],{},[24,2139,1106],{},[24,2141,1110],{},[10,2143,1114],{},[81,2145,2146,2152,2154],{},[84,2147,2148,1122,2150,1126],{},[24,2149,1121],{},[24,2151,1125],{},[84,2153,1129],{},[84,2155,1132,2156,1136],{},[24,2157,1135],{},[10,2159,1139,2160,1143,2162,1147],{},[24,2161,1142],{},[24,2163,1146],{},[10,2165,2166],{},[13,2167],{"alt":1152,"src":1153},[33,2169],{},[53,2171,1159],{"id":1158},[10,2173,1162,2174,1166,2176,1170,2178,1174,2180,1178],{},[24,2175,1165],{},[24,2177,1169],{},[24,2179,1173],{},[24,2181,1177],{},[10,2183,1181,2184,1185,2186,1189],{},[24,2185,1184],{},[24,2187,1188],{},[33,2189],{},[53,2191,1195],{"id":1194},[10,2193,1198,2194,1202,2196,1206,2198,1210,2200,1216],{},[24,2195,1201],{},[24,2197,1205],{},[24,2199,1209],{},[24,2201,2202,1215],{},[153,2203,834],{},[10,2205,1219,2206,1223,2208,1227],{},[24,2207,1222],{},[24,2209,1226],{},[33,2211],{},[53,2213,1233],{"id":1232},[10,2215,1236,2216,1240,2218,1244,2220,1248,2222,1252],{},[24,2217,1239],{},[24,2219,1243],{},[24,2221,1247],{},[24,2223,1251],{},[10,2225,1255,2226,948],{},[24,2227,1258],{},[33,2229],{},[36,2231,1264],{"id":1263},[275,2233,2234,2244],{},[278,2235,2236],{},[281,2237,2238,2240,2242],{},[284,2239,1273],{},[284,2241,1276],{},[284,2243,1279],{},[297,2245,2246,2254,2264,2274,2282,2290],{},[281,2247,2248,2250,2252],{},[302,2249,1286],{},[302,2251,1289],{},[302,2253,1292],{},[281,2255,2256,2258,2262],{},[302,2257,1297],{},[302,2259,2260,1302],{},[153,2261,155],{},[302,2263,1305],{},[281,2265,2266,2268,2272],{},[302,2267,1310],{},[302,2269,1313,2270,1316],{},[24,2271,316],{},[302,2273,1319],{},[281,2275,2276,2278,2280],{},[302,2277,1324],{},[302,2279,1327],{},[302,2281,1330],{},[281,2283,2284,2286,2288],{},[302,2285,1335],{},[302,2287,1338],{},[302,2289,1341],{},[281,2291,2292,2294,2296],{},[302,2293,1346],{},[302,2295,1349],{},[302,2297,1352],{},[10,2299,1355,2300,1359],{},[24,2301,1358],{},[10,2303,1362,2304,1366,2306,1370],{},[24,2305,1365],{},[24,2307,1369],{},[18,2309,2310],{},[10,2311,1375,2312,1381,2315,1386],{},[237,2313,1380],{"href":1378,"rel":2314},[241],[237,2316,1385],{"href":1384},{"title":611,"searchDepth":1388,"depth":1388,"links":2318},[2319,2324,2325,2326,2327,2331,2336,2340,2341,2348],{"id":38,"depth":1388,"text":39,"children":2320},[2321,2322,2323],{"id":55,"depth":1393,"text":56},{"id":137,"depth":1393,"text":138},{"id":229,"depth":1393,"text":230},{"id":413,"depth":1388,"text":414},{"id":473,"depth":1388,"text":474},{"id":489,"depth":1388,"text":490},{"id":625,"depth":1388,"text":626,"children":2328},[2329,2330],{"id":649,"depth":1393,"text":650},{"id":675,"depth":1393,"text":676},{"id":748,"depth":1388,"text":749,"children":2332},[2333,2334,2335],{"id":767,"depth":1393,"text":1406},{"id":838,"depth":1393,"text":1408},{"id":860,"depth":1393,"text":861},{"id":892,"depth":1388,"text":893,"children":2337},[2338,2339],{"id":902,"depth":1393,"text":903},{"id":913,"depth":1393,"text":914},{"id":953,"depth":1388,"text":954},{"id":1028,"depth":1388,"text":1029,"children":2342},[2343,2344,2345,2346,2347],{"id":1062,"depth":1393,"text":1063},{"id":1099,"depth":1393,"text":1100},{"id":1158,"depth":1393,"text":1159},{"id":1194,"depth":1393,"text":1195},{"id":1232,"depth":1393,"text":1233},{"id":1263,"depth":1388,"text":1264},{},{"title":5,"description":1425},[1434,1435,1436],1780489852835]