[{"data":1,"prerenderedAt":1440},["ShallowReactive",2],{"blog-list-ko-kr":3},[4],{"id":5,"title":6,"body":7,"config":1424,"date":1425,"description":1426,"draft":1427,"extension":1428,"image":1424,"meta":1429,"navigation":1430,"path":1431,"seo":1432,"stem":1433,"tags":1434,"toolbar":1424,"translationKey":1438,"updated":1425,"__hash__":1439},"blog/ko-kr/blog/zero-hallucination-qa.md","리더에서 「제로 환각」 Q&A를 구현한 방법",{"type":8,"value":9,"toc":1388},"minimark",[10,18,33,36,41,48,53,58,76,81,94,99,133,136,140,158,165,169,184,189,225,228,232,245,270,275,393,403,410,412,416,423,438,445,465,470,472,476,479,486,488,492,515,525,586,594,605,615,622,624,628,635,641,648,652,659,667,674,678,686,728,739,745,747,751,766,774,781,784,827,837,845,852,859,863,872,878,889,891,895,901,905,912,916,939,950,952,956,963,1020,1025,1027,1031,1038,1061,1065,1085,1096,1098,1102,1113,1116,1138,1149,1155,1157,1161,1180,1191,1193,1197,1218,1229,1231,1235,1254,1260,1262,1266,1354,1361,1372],[11,12,13],"p",{},[14,15],"img",{"alt":16,"src":17},"표지: 제로 환각 Q&A","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-cover.png",[19,20,21],"blockquote",{},[11,22,23,24,28,29,32],{},"이 글은 AI 리더 ",[25,26,27],"strong",{},"제로 환각 Q&A","의 엔지니어링 구현을 공유합니다. 답변은 현재 책 원문에 엄격히 기반하며, 핵심 논지는 ",[25,30,31],{},"한 번의 클릭","으로 구체적인 단락까지 추적할 수 있습니다. AI 독서, 문서 QA, RAG 유형 애플리케이션을 개발 중이라면, 세 번의 반복을 거친 경험과 최종 아키텍처가 참고가 되길 바랍니다.",[34,35],"hr",{},[37,38,40],"h2",{"id":39},"_1-실천-과정-세-단계의-진화","1. 실천 과정: 세 단계의 진화",[11,42,43,44,47],{},"제로 환각 Q&A는 처음부터 완벽하게 설계된 것이 아닙니다. ",[25,45,46],{},"비용, 지연 시간, 정확도"," 사이의 긴장 속에서 점진적으로 진화했습니다. 아래는 시간 순서대로 세 단계를 돌아보며, 현재 아키텍처가 왜 이렇게 되었는지 이해하기 쉽게 정리한 내용입니다.",[49,50],"mermaid",{":config":51,"code":52},"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",[54,55,57],"h3",{"id":56},"_1단계-전문을-context에-직접-삽입-가장-단순하지만-가장-먼저-문제가-드러남","1단계: 전문을 Context에 직접 삽입 (가장 단순하지만 가장 먼저 문제가 드러남)",[11,59,60,63,64,67,68,71,72,75],{},[25,61,62],{},"방법:"," 사용자가 책을 열고 질문할 때, 추출한 ",[25,65,66],{},"전체 본문","을 System Prompt 또는 User 메시지에 넣고 대화 모델에 답변을 요청합니다. 책 전체가 약 ",[25,69,70],{},"40만 문자","를 초과하면 ",[25,73,74],{},"하드 트렁케이션","—앞부분만 남기고 이후 장은 모델에 보이지 않습니다.",[11,77,78],{},[25,79,80],{},"장점:",[82,83,84,88,91],"ul",{},[85,86,87],"li",{},"구현 비용이 매우 낮고, 거의 전처리가 필요 없음;",[85,89,90],{},"짧은 책이나 구조가 단순한 문서에서는 효과가 괜찮음—모델이 실제로 「책 전체」를 「봤음」;",[85,92,93],{},"상호작용이 단순함: 질문하면 바로 답변, 「분석을 기다려 주세요」 같은 대기 상태 없음.",[11,95,96],{},[25,97,98],{},"단점 (곧 용납하기 어려워짐):",[82,100,101,107,113,123],{},[85,102,103,106],{},[25,104,105],{},"응답이 느림",": 매 질문마다 방대한 텍스트를 모델에 전송, 첫 Token 지연과 총 소요 시간이 책 길이에 비례해 악화;",[85,108,109,112],{},[25,110,111],{},"Token 비용이 높음",": 같은 책에 질문할 때마다 전문 입력 비용을 반복 지불;",[85,114,115,118,119,122],{},[25,116,117],{},"장편에서 심각한 왜곡",": 40만 문자 초과 후 잘림, 후반부·부록·결론 장은 존재하지 않는 것과 같고, UI는 종종 ",[25,120,121],{},"잘림을 명확히 알리지 않음",";",[85,124,125,128,129,132],{},[25,126,127],{},"검색 세분화가 제로",": 모델이 수십만 자 가운데 「바늘 찾기」를 해야 함—세부를 놓치기 쉽고, ",[25,130,131],{},"그럴듯하지만 근거 없는"," 요약을 만들기 더 쉬움—독서 시나리오에서 가장 피해야 할 환각.",[11,134,135],{},"1단계는 MVP 검증에는 적합하지만, 제품 수준 방안으로는 부적합합니다.",[54,137,139],{"id":138},"_2단계-경량-llm으로-핵심-문장-추출-context-압축-하지만-너무-과하게-압축","2단계: 경량 LLM으로 핵심 문장 추출 (Context 압축, 하지만 너무 과하게 압축)",[11,141,142,144,145,148,149,152,153,157],{},[25,143,62],{}," 질문 전(또는 책을 처음 열 때) ",[25,146,147],{},"비용이 더 낮은 모델","로 본문을 한 번 전처리: Spine 기준으로 장별(또는 책 전체를 분할) ",[25,150,151],{},"핵심 문장","을 추출하고, 출력 시 ",[154,155,156],"code",{},"[f파일-시작-끝]"," 형식의 위치 마커를 유지한 뒤, 발췌문을 짧은 텍스트로 이어 붙여 이후 Q&A의 Context로 사용.",[11,159,160,161,164],{},"전형적인 파이프라인은 ",[25,162,163],{},"Extract → Cache → Chat",": 먼저 오프라인 또는 필요 시 추출을 실행하고 DB에 저장, 이후 매 질문마다 같은 「핵심 문장 모음」을 재사용. 많은 문서 QA 프로토타입의 「문서를 먼저 압축하고, 압축 결과로 QA」와 같은 사고이며, 2단계에서 실제로 사용했던 경로입니다.",[11,166,167],{},[25,168,80],{},[82,170,171,178,181],{},[85,172,173,174,177],{},"매 질문마다 모델에 보내는 텍스트가 ",[25,175,176],{},"눈에 띄게 짧아짐",", 1단계 대비 단일 Token 소비가 크게 감소;",[85,179,180],{},"전처리 결과를 캐시할 수 있어, 같은 책에 매번 추출을 다시 할 필요 없음;",[85,182,183],{},"위치 마커를 도입하여 이후 추적의 기반을 마련.",[11,185,186],{},[25,187,188],{},"단점 (장편 시나리오에서도 여전히 버티기 어려움):",[82,190,191,197,206,215],{},[85,192,193,196],{},[25,194,195],{},"세부 정보가 대량 손실",": 「핵심 문장」은 모델이 주관적으로 선별, 논증 사슬의 한정 조건·반례 등이 쉽게 빠짐, 답변이 「맞지만 편향적」이 되기 쉬움;",[85,198,199,202,203,122],{},[25,200,201],{},"장편에서 Context가 여전히 큼",": 대작이라도 핵심 문장만 남겨도 이어 붙인 입력은 여전히 상당함, ",[25,204,205],{},"지연과 비용은 완화될 뿐 근본 해결은 아님",[85,207,208,211,212,122],{},[25,209,210],{},"이중 LLM 오차",": 추출 단계에서 누락, Q&A 단계에서 발췌 오독—오류가 ",[25,213,214],{},"누적",[85,216,217,220,221,224],{},[25,218,219],{},"정적 Context",": 사용자가 특정 장 세부를 묻든 전체 구조를 묻든, 모델에 들어가는 것은 ",[25,222,223],{},"동일한 사전 추출 텍스트","—질문에 따라 동적으로 범위를 좁힐 수 없음.",[11,226,227],{},"이 단계의 교훈은 분명합니다: **문제는 「압축했느냐」가 아니라 「압축이 필요에 따라 이루어지고, 원문으로 돌아갈 수 있느냐」**입니다.",[54,229,231],{"id":230},"_3단계-세그먼트-인덱스-tool-필요-시-검색-원문-반환-현재-방안","3단계: 세그먼트 인덱스 + Tool 필요 시 검색 + 원문 반환 (현재 방안)",[11,233,234,236,237,244],{},[25,235,62],{}," 기본 사상은 ",[238,239,243],"a",{"href":240,"rel":241},"https://github.com/VectifyAI/PageIndex",[242],"nofollow","PageIndex","를 참고했으며, 2단계 대비 핵심 변화는 세 가지입니다:",[246,247,248,254,264],"ol",{},[85,249,250,253],{},[25,251,252],{},"전처리 산출물은 구조화된 인덱스","(목차 수준 요약 + 정확한 문자 span)이며, 발췌문을 Q&A Context로 직접 쓰지 않음;",[85,255,256,259,260,263],{},[25,257,258],{},"매 질문마다 모델이 Tool Calling으로 필요 시 검색","한 뒤, ",[25,261,262],{},"위치 마커가 붙은 원문","을 가져와 답변;",[85,265,266,269],{},[25,267,268],{},"System Prompt와 프론트엔드 연동","으로 인용 형식을 제약하고, 클릭 시 각주로 이동·원문 하이라이트를 지원.",[11,271,272],{},[25,273,274],{},"세 단계 비교:",[276,277,278,297],"table",{},[279,280,281],"thead",{},[282,283,284,288,291,294],"tr",{},[285,286,287],"th",{},"차원",[285,289,290],{},"1단계 (전문 직접 삽입)",[285,292,293],{},"2단계 (핵심 문장 추출)",[285,295,296],{},"3단계 (현재)",[298,299,300,319,333,347,361,379],"tbody",{},[282,301,302,306,309,312],{},[303,304,305],"td",{},"단일 질문 Context",[303,307,308],{},"책 전체 (또는 잘린 앞부분)",[303,310,311],{},"사전 추출 핵심 문장 모음",[303,313,314,315,318],{},"질문과 관련된 소량 ",[25,316,317],{},"원문"," 조각만",[282,320,321,324,327,330],{},[303,322,323],{},"장편 정확도",[303,325,326],{},"40만 문자 초과 후 심각히 하락",[303,328,329],{},"추출 품질에 의존, 세부 손실",[303,331,332],{},"목차/span 검색, 전체 길이 하드 트렁케이션 없음",[282,334,335,338,341,344],{},[303,336,337],{},"응답 속도",[303,339,340],{},"느림",[303,342,343],{},"다소 개선, 장편은 여전히 느림",[303,345,346],{},"검색 + 짧은 Context, 눈에 띄게 빠름",[282,348,349,352,355,358],{},[303,350,351],{},"Token 비용",[303,353,354],{},"매우 높음",[303,356,357],{},"중간~높음",[303,359,360],{},"전처리 분산 + 필요 시 과금",[282,362,363,366,369,372],{},[303,364,365],{},"추적 능력",[303,367,368],{},"약함 (출처 표기 어려움)",[303,370,371],{},"위치 마커 있으나 내용은 2차 선별",[303,373,374,375,378],{},"각주가 ",[25,376,377],{},"실제 원문 span","에 대응",[282,380,381,384,387,390],{},[303,382,383],{},"엔지니어링 복잡도",[303,385,386],{},"낮음",[303,388,389],{},"중간",[303,391,392],{},"높음",[11,394,395,398,399,402],{},[25,396,397],{},"3단계에서 멈춘 이유:"," 독서 시나리오의 제로 환각에서 핵심은 「모델이 최대한 많은 글자를 보게 하는 것」이 아니라 **「답변 전에 질문과 관련된 원문 증거를 반드시 확보하는 것」**입니다. 1·2단계는 Context ",[25,400,401],{},"용량","을 다루었고, 3단계는 파이프라인을 **「인덱스(전처리) → 검색(Tool) → 증거 수집(원문) → 답변(제약 생성)」**으로 분리하여 정확도·비용·추적 가능성을 동시에 만족합니다.",[11,404,405,406,409],{},"아래에서는 ",[25,407,408],{},"3단계"," 구현 세부를 펼칩니다.",[34,411],{},[37,413,415],{"id":414},"_2-문제-정의-독서-시나리오에서-환각은-일반-chat보다-더-치명적","2. 문제 정의: 독서 시나리오에서 환각은 일반 Chat보다 더 치명적",[11,417,418,419,422],{},"일반 ChatBot의 가끔 오류는 사용자가 종종 용납합니다. ",[25,420,421],{},"책 QA","에서는 환각의 대가가 더 큽니다:",[82,424,425,432,435],{},[85,426,427,428,431],{},"사용자는 ",[25,429,430],{},"이 책","이 무엇이라고 했는지 묻는 것이지, 모델의 parametric memory를 묻는 것이 아님;",[85,433,434],{},"그럴듯한 「책의 관점」 한 마디가 노트·인용·2차 전파를 오도할 수 있음;",[85,436,437],{},"출처가 없으면 사용자가 검증할 수 없고, 제품 신뢰 구축이 어려움.",[11,439,440,441,444],{},"따라서 「제로 환각」은 엔지니어링에서 다음 세 가지 ",[25,442,443],{},"실행 가능한"," 규칙으로 구체화됩니다:",[246,446,447,453,459],{},[85,448,449,452],{},[25,450,451],{},"책 내 질문은 먼저 책을 조회",": 현재 책과 관련될 수 있는 모든 질문은 모델이 먼저 검색(Tool)을 거친 뒤 답을 구성해야 함;",[85,454,455,458],{},[25,456,457],{},"답변은 반드시 추적 가능",": 핵심 결론에 원문 위치 마커를 붙이고, 프론트엔드가 파싱하여 이동·하이라이트 가능;",[85,460,461,464],{},[25,462,463],{},"찾을 수 없으면 찾을 수 없다고 말함",": 책에 없는 내용은 명확히 알리고, 일반 지식으로 「책의 관점」을 가장하지 않음.",[11,466,405,467,469],{},[25,468,408],{}," 데이터 흐름에 따라 위 규칙이 어떻게 구현되는지 설명합니다.",[34,471],{},[37,473,475],{"id":474},"_3-전체-아키텍처-전처리-tool-검색-제약-생성-클릭-가능한-추적","3. 전체 아키텍처: 전처리 → Tool 검색 → 제약 생성 → 클릭 가능한 추적",[49,477],{":config":51,"code":478},"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",[11,480,481,482,485],{},"핵심 사상을 한 줄로: ",[25,483,484],{},"모델이 「기억으로 답하지」 않게 하고, 「먼저 증거를 수집하고, 답한 뒤, 출처를 표시」하게 한다","는 것입니다.",[34,487],{},[37,489,491],{"id":490},"_4-전처리-책-전체를-검색-가능한-세그먼트-인덱스로-변환","4. 전처리: 책 전체를 검색 가능한 「세그먼트 인덱스」로 변환",[11,493,494,495,498,499,502,503,506,507,510,511,514],{},"매 질문마다 ",[25,496,497],{},"1단계","의 전문 Context를 쓰면 장편에서 Token이 폭발하고 검색 세분화도 너무 거칩니다. 3단계 해결책: 사용자가 특정 책에 대해 AI 대화를 처음 시작할 때, 백그라운드에서 ",[25,500,501],{},"세그먼트 요약 작업","을 비동기 실행—",[25,504,505],{},"목차 구조"," 또는 ",[25,508,509],{},"텍스트 길이","로 책을 여러 ",[154,512,513],{},"Segment","로 나누고, 각 조각에 요약을 생성한 뒤 로컬 IndexedDB에 영구 저장.",[11,516,517,518,520,521,524],{},"각 ",[154,519,513],{},"는 데이터 구조상 요약과 ",[25,522,523],{},"본문 물리적 위치","를 포함:",[276,526,527,537],{},[279,528,529],{},[282,530,531,534],{},[285,532,533],{},"필드",[285,535,536],{},"의미",[298,538,539,553,566,576],{},[282,540,541,550],{},[303,542,543,546,547],{},[154,544,545],{},"startFileIndex"," / ",[154,548,549],{},"endFileIndex",[303,551,552],{},"Spine 파일 인덱스 (PDF는 페이지당 하나)",[282,554,555,563],{},[303,556,557,546,560],{},[154,558,559],{},"startOffset",[154,561,562],{},"endOffset",[303,564,565],{},"문자 수준 시작/끝 오프셋",[282,567,568,573],{},[303,569,570],{},[154,571,572],{},"sequence",[303,574,575],{},"선형 독서 순서",[282,577,578,583],{},[303,579,580],{},[154,581,582],{},"title",[303,584,585],{},"해당 목차 제목",[11,587,588,589,593],{},"분할 전략은 정밀도와 비용을 균형 있게: 단일 목차 본문이 약 20KB 이하면 해당 노드만 요약; 동급 목차는 배치(15KB",[590,591,592],"del",{},"20KB)로 병합 후 LLM 호출; 목차 없는 큰 본문은 3","4만 문자 구간으로 분할.",[11,595,596,597,600,601,604],{},"요약 생성 시 System Prompt는 ",[25,598,599],{},"원문 위치 마커 유지","를 요구(형식 ",[154,602,603],{},"[f숫자-숫자-숫자]",")하여 이후 Tool이 원문을 반환할 때 위치 정보가 spine 문자 오프셋과 일치하도록 함. 핵심 제약은 다음과 같습니다:",[606,607,613],"pre",{"className":608,"code":610,"language":611,"meta":612},[609],"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","",[154,614,610],{"__ignoreMap":612},[11,616,617,618,621],{},"전처리 완료 후 Q&A는 「책 전체 Context」가 아니라 ",[25,619,620],{},"구조화된 세그먼트 인덱스","에 의존—장편 시나리오에서 제로 환각의 엔지니어링 전제입니다.",[34,623],{},[37,625,627],{"id":626},"_5-위치-마커-체계-출처를-텍스트에-인코딩","5. 위치 마커 체계: 「출처」를 텍스트에 인코딩",[11,629,630,631,634],{},"제로 환각은 내용이 원문에서 와야 할 뿐 아니라, ",[25,632,633],{},"출처가 기계적으로 파싱 가능하고 UI에서 이동 가능","해야 합니다. 인라인 위치 마커를 사용합니다:",[606,636,639],{"className":637,"code":638,"language":611},[609],"[f{fileIndex}-{startChar}-{endChar}]\n",[154,640,638],{"__ignoreMap":612},[11,642,643,644,647],{},"예: ",[154,645,646],{},"[f5-123-165]","는 5번째 Spine 파일(0부터 시작)에서 문자 오프셋 123~165 구간의 텍스트를 의미합니다.",[54,649,651],{"id":650},"_51-마커를-본문에-쓰는-방법","5.1 마커를 본문에 쓰는 방법",[11,653,654,655,658],{},"본문 추출 계층은 조각 출력 시 각 소단락 끝에 ",[154,656,657],{},"[f{fileIndex}-{start}-{end}]","를 기록. 예시:",[606,660,665],{"className":661,"code":663,"language":664,"meta":612},[662],"language-typescript","const position = `[f${fileIndex}-${absOffset}-${absOffset + segment.length}]`;\nfileLines.push(segment.text.trim() + position);\n","typescript",[154,666,663],{"__ignoreMap":612},[11,668,669,670,673],{},"전처리 요약이든 Tool이 반환한 원문 발췌든, 위치 정보는 ",[25,671,672],{},"Spine 문자 오프셋","에 맞추며, 모델이 「페이지 번호를 추정」하지 않습니다.",[54,675,677],{"id":676},"_52-모델-출력에-대한-제약","5.2 모델 출력에 대한 제약",[11,679,680,681,685],{},"System Prompt 조립 시 **",[682,683,684],"span",{},"Position Citation Rules","**를 별도로 약정, 핵심 다섯 가지:",[246,687,688,698,707,713,722],{},[85,689,690,693,694,697],{},[25,691,692],{},"표준 형식",": 반드시 ",[154,695,696],{},"[f_fileIndex-startChar-endChar]"," 사용, 세 구간 숫자 모두 필수;",[85,699,700,703,704,122],{},[25,701,702],{},"현재 출처만 인용",": 각주는 이번 System/User 메시지 또는 Tool 반환 텍스트의 마커를 ",[25,705,706],{},"그대로 복사",[85,708,709,712],{},[25,710,711],{},"위조 금지",": 위치를 직접 계산·수정·조작하지 않음;",[85,714,715,718,719,122],{},[25,716,717],{},"부족함을 감수",": 현재 컨텍스트에 유효한 마커가 없으면 정상적으로 답변하고, ",[25,720,721],{},"위치 마커는 출력하지 않음",[85,723,724,727],{},[25,725,726],{},"논지 바로 뒤",": 마커는 관련 문장 바로 뒤에, 글 끝에 인용 목록을 쌓지 않음.",[11,729,730,731,734,735,738],{},"프론트엔드 표시 전에는 모델이 가끔 출력하는 ",[25,732,733],{},"2구간"," 불법 마커(예: ",[154,736,737],{},"[f1-293]",")도 필터링하여 무효 각주가 UI에 들어가지 않게 합니다.",[11,740,741],{},[14,742],{"alt":743,"src":744},"인용 추적 팝업","https://cdn.linghuxiong.com/resources/snapshots/ai-chat.png",[34,746],{},[37,748,750],{"id":749},"_6-tool-calling-먼저-검색-그다음-답변","6. Tool Calling: 먼저 검색, 그다음 답변",[11,752,753,754,757,758,761,762,765],{},"대화가 특정 책에 바인딩되어 있을 때(",[154,755,756],{},"resourceId"," 존재, ",[154,759,760],{},"chatType === 'chat'","), 매 생성 전에 모델에 두 Tool을 등록하고 해당 executor를 마운트. 전체는 OpenAI 호환 ",[25,763,764],{},"function calling 루프","를 따릅니다.",[54,767,769,770,773],{"id":768},"_61-get_related_segment_summaries-구체적-질문에-대한-세그먼트-조회","6.1 ",[154,771,772],{},"get_related_segment_summaries"," — 구체적 질문에 대한 세그먼트 조회",[11,775,776,777,780],{},"적용: 개념, 인물, 줄거리, 장 세부 등 ",[25,778,779],{},"명확한 검색 의도","가 있는 질문.",[11,782,783],{},"흐름 요약:",[246,785,786,793,800,807,821],{},[85,787,788,789,792],{},"모델이 사용자 구어를 ",[25,790,791],{},"책에 나올 법한 용어","로 바꿈(System Prompt의 「Optimize Search Queries」);",[85,794,795,796,799],{},"Tool 호출, ",[154,797,798],{},"question"," 전달;",[85,801,802,803,806],{},"모든 세그먼트 요약을 Token 예산으로 ",[25,804,805],{},"배치","(배치당 약 3만 Token, 최대 5배치);",[85,808,809,810,813,814,817,818,122],{},"배치마다 ",[25,811,812],{},"독립 LLM 요청","으로 ",[154,815,816],{},"{ id, title, summary }"," 목록에서 관련 세그먼트 ID 선택(최대 5개), JSON 반환, 형태 ",[154,819,820],{},"{\"Thinking\":\"...\",\"answer\":[\"1\",\"3\"]}",[85,822,823,824,826],{},"선택된 Segment의 span으로 Spine에서 ",[25,825,262],{},"을 가져옴(요약 아님), Tool 결과로 반환.",[11,828,829,832,833,836],{},[25,830,831],{},"핵심 설계: Tool은 요약이 아니라 원문을 반환."," 모델은 실제 단락 + 인라인 ",[154,834,835],{},"[f…]","를 보고 답하여 「요약 → 재요약」 drift를 피합니다.",[54,838,840,841,844],{"id":839},"_62-get_full_book_segment_summaries-책-전체-개요형-질문","6.2 ",[154,842,843],{},"get_full_book_segment_summaries"," — 책 전체 개요형 질문",[11,846,847,848,851],{},"적용: 「책 전체 요약」「이 책 평」「전체 구조/주제」 등 ",[25,849,850],{},"전역 시야","가 필요한 질문.",[11,853,854,855,858],{},"독서 순서로 모든 세그먼트의 ",[154,856,857],{},"summary","를 이어 반환하여, 단계별 관련도 선별만으로 핵심 장을 놓치지 않음.",[54,860,862],{"id":861},"_63-system-prompt-책-우선-tool-우선","6.3 System Prompt: 책 우선, Tool 우선",[11,864,865,866,871],{},"책이 바인딩되면 System Prompt에 ",[25,867,868],{},[682,869,870],{},"Core Principles for Reading Assistant"," 주입, 핵심 세 가지:",[606,873,876],{"className":874,"code":875,"language":611},[609],"1. Book First, Tool First\n   - 책과 관련될 수 있는 모든 질문은 먼저 Tool 검색을 호출해야 함;\n   - 답변은 주로 검색 결과에 근거해야 하며, 검색 없이 「책 내용」을 지어내지 말 것.\n\n2. General Knowledge as Fallback Only\n   - 순수 잡담 / 사용자가 명시적으로 책을 쓰지 않음 / Tool 결과 없음일 때만 일반 지식 사용;\n   - 책에 없으면 먼저 「이 책에 해당 내용 없음」을 선언한 뒤 일반 지식 보충.\n\n3. Direct Style\n   - 본론으로, 「제공된 자료에 따르면…」「종합하면…」 같은 상투어 금지.\n",[154,877,875],{"__ignoreMap":612},[11,879,880,881,884,885,888],{},"생성 계층은 표준 Tool 루프 구현: ",[154,882,883],{},"tool_calls"," → executor 실행 → ",[154,886,887],{},"role: tool"," 추가 → 최종 텍스트까지 계속 요청. tools 활성화 시 thinking 채널은 끄고 function call 프로토콜 충돌을 피함.",[34,890],{},[37,892,894],{"id":893},"_7-프론트엔드-추적-각주에서-원문-하이라이트까지","7. 프론트엔드 추적: 각주에서 원문 하이라이트까지",[11,896,897,898,900],{},"모델 출력 ",[154,899,646],{},"는 그대로 표시하지 않고, 렌더링 계층에서 클릭 가능한 인용으로 변환.",[54,902,904],{"id":903},"_71-각주-렌더링","7.1 각주 렌더링",[11,906,907,908,911],{},"표시 전 위치 마커를 Markdown 링크로 정규화, 예 ",[154,909,910],{},"[1]([f5-123-165])",", 번호 각주로 렌더; 같은 위치가 여러 번 나오면 중복 제거하여 UI 중복 방지.",[54,913,915],{"id":914},"_72-클릭-상호작용","7.2 클릭 상호작용",[246,917,918,927,933],{},[85,919,920,923,924,926],{},[25,921,922],{},"첫 클릭",": ",[154,925,835],{}," 파싱 → fileIndex와 문자 오프셋 → Spine 원문에서 텍스트 추출 → 미리보기 팝업(목차 제목 포함 가능);",[85,928,929,932],{},[25,930,931],{},"같은 각주 다시 클릭",": 팝업 닫기;",[85,934,935,938],{},[25,936,937],{},"이동 확인",": 독서 뷰 열기, 문자 구간 하이라이트.",[11,940,941,942,945,946,949],{},"모델이 복사한 마커에서 사용자가 보는 원문까지, 중간에 ",[25,943,944],{},"LLM 2차 가공 없음",", 추적 체인 전체가 ",[25,947,948],{},"확정적·재현 가능",".",[34,951],{},[37,953,955],{"id":954},"_8-경계-상황과-정직한-다운그레이드","8. 경계 상황과 정직한 다운그레이드",[11,957,958,959,962],{},"제로 환각 ≠ 「항상 답이 있음」, ",[25,960,961],{},"증거 없으면 지어내지 않음",":",[276,964,965,975],{},[279,966,967],{},[282,968,969,972],{},[285,970,971],{},"시나리오",[285,973,974],{},"동작",[298,976,977,985,996,1004,1012],{},[282,978,979,982],{},[303,980,981],{},"세그먼트 요약 아직 없음",[303,983,984],{},"먼저 전문 추출 후 요약",[282,986,987,990],{},[303,988,989],{},"Tool 검색 결과 없음",[303,991,992,995],{},[154,993,994],{},"(No relevant segment excerpts found…)"," 반환, 모델은 책에 언급 없음을 선언해야 함",[282,997,998,1001],{},[303,999,1000],{},"모델이 불법 2구간 마커 출력",[303,1002,1003],{},"프론트엔드 필터, 무효 각주 미표시",[282,1005,1006,1009],{},[303,1007,1008],{},"사용자 순수 잡담",[303,1010,1011],{},"System Prompt가 책에서 벗어나 일반 지식 답변 허용",[282,1013,1014,1017],{},[303,1015,1016],{},"대화 내보내기",[303,1018,1019],{},"각주를 리더 딥링크로 변환 가능, 공유·보관에 편리",[11,1021,1022],{},[14,1023],{"alt":1016,"src":1024},"https://cdn.linghuxiong.com/resources/snapshots/ai-chat-export.png",[34,1026],{},[37,1028,1030],{"id":1029},"_9-설계-트레이드오프-왜-벡터-rag를-쓰지-않는가","9. 설계 트레이드오프: 왜 「벡터 RAG」를 쓰지 않는가?",[11,1032,1033,1034,1037],{},"문서 QA를 하는 동료들이 자주 묻습니다: 검색 증강을 한다면 왜 ",[25,1035,1036],{},"Embedding + 벡터 DB Top-K"," 표준 경로를 가지 않는가?",[11,1039,1040,1041,1044,1045,1048,1049,1052,1053,1056,1057,1060],{},"실제로 ",[25,1042,1043],{},"우리도 RAG를 하고 있습니다","—매 답변 전에 책을 조회한 뒤 생성. 차이는: 커뮤니티 맥락의 RAG는 종종 ",[25,1046,1047],{},"벡터화와 유사도 검색","을 전제로 하고, 현재 방안은 ",[25,1050,1051],{},"「세그먼트 인덱스 + Tool 필요 시 원문 가져오기」","(3단계)로 ",[25,1054,1055],{},"벡터 계층을 의도적으로 도입하지 않음",". 아래는 ",[25,1058,1059],{},"아키텍처 제약","에 따른 선택이며, 벡터 RAG의 가치를 부정하는 것이 아닙니다.",[54,1062,1064],{"id":1063},"범위-구분-검색을-안-하는-게-아니라-벡터-검색을-안-함","범위 구분: 검색을 안 하는 게 아니라 「벡터 검색」을 안 함",[82,1066,1067,1076],{},[85,1068,1069,1072,1073,949],{},[25,1070,1071],{},"넓은 의미 RAG",": 관련 자료 검색 → 생성 → ",[25,1074,1075],{},"우리는 함",[85,1077,1078,1081,1082,949],{},[25,1079,1080],{},"벡터 RAG",": Embedding 유사도로 리콜 → ",[25,1083,1084],{},"현재 버전에서는 안 함",[11,1086,1087,1088,1091,1092,1095],{},"책 전체 전처리는 ",[25,1089,1090],{},"세그먼트 요약 인덱스","; 질문 시 모델이 Tool로 구간 선택 후 ",[25,1093,1094],{},"원문 반환",". 검색 증강은 있으나 별도 embedding 모델과 벡터 인덱스 유지에 의존하지 않음.",[34,1097],{},[54,1099,1101],{"id":1100},"이유-1-사용자-정의-llm-provider-지원-설정-체인은-짧게","이유 1: 사용자 정의 LLM Provider 지원, 설정 체인은 짧게",[11,1103,1104,1105,1108,1109,1112],{},"제품은 사용자가 ",[25,1106,1107],{},"자체 API Key",", 사용자 정의 Base URL, ",[25,1110,1111],{},"로컬 Ollama","를 자유롭게 연결 가능—대화 모델은 사용자 선택, 비용과 데이터 경로 통제. 많은 셀프 호스팅·다중 모델 비교 시나리오의 필수 요구.",[11,1114,1115],{},"전형적 벡터 RAG를 겹치면 통합 면이 눈에 띄게 넓어짐:",[82,1117,1118,1128,1131],{},[85,1119,1120,1123,1124,1127],{},[25,1121,1122],{},"Chat 모델"," 외에 보통 ",[25,1125,1126],{},"Embedding 모델","도 필요(다른 model name, 때로는 다른 endpoint);",[85,1129,1130],{},"Ollama 등 로컬 배포는 embedding 모델을 별도로 받고 차원·API 호환 처리;",[85,1132,1133,1134,1137],{},"장애 도메인 복잡: Chat은 정상인데 ",[25,1135,1136],{},"검색이 비어 있음","—embedding, 인덱스, 차원 불일치 가능, 「단일 Provider 전체 체인」보다 디버깅 비용 높음.",[11,1139,1140,1141,1144,1145,1148],{},"현재 방안에서는 ",[25,1142,1143],{},"구간 선택과 답변이 동일 Provider 설정 공유","—「Chat은 A, 인덱스는 B」 없음. ",[25,1146,1147],{},"플러그형 LLM"," 애플리케이션에서는 리콜 몇 포인트보다 이게 더 중요한 경우가 많음.",[11,1150,1151],{},[14,1152],{"alt":1153,"src":1154},"사용자 정의 AI Provider","https://cdn.linghuxiong.com/resources/snapshots/ai-customize-providers.png",[34,1156],{},[54,1158,1160],{"id":1159},"이유-2-embedding과-인덱스-강결합-provider-전환-비용-높음","이유 2: Embedding과 인덱스 강결합, Provider 전환 비용 높음",[11,1162,1163,1164,1167,1168,1171,1172,1175,1176,1179],{},"벡터 RAG에서 흔히 과소평가되는 점: ",[25,1165,1166],{},"벡터는 범용 중간 형식이 아니라 특정 embedding 모델 아래 좌표."," A로 인덱스, B로 쿼리하면 유사도는 보통 ",[25,1169,1170],{},"비교 불가","—모델 교체는 ",[25,1173,1174],{},"책 전체 재벡터화","를 의미하고, 모델마다 ",[25,1177,1178],{},"벡터 차원","(768 / 1024 / 1536 …)이 저장 schema에 묶임.",[11,1181,1182,1183,1186,1187,1190],{},"3단계는 ",[25,1184,1185],{},"구조화 요약 + 문자 span","을 영구 저장, 벡터 저장 안 함; Chat 모델 전환 시 ",[25,1188,1189],{},"인덱스 재구축 불필요",", 증거 체인(원문 위치) 불변. 「언제든 다른 LLM 비교」 목표와 더 일치.",[34,1192],{},[54,1194,1196],{"id":1195},"이유-3-목차-있는-긴-문서-구조화-라우팅만으로도-종종-충분","이유 3: 목차 있는 긴 문서, 구조화 라우팅만으로도 종종 충분",[11,1198,1199,1200,1203,1204,1207,1208,1211,1212,1217],{},"전자책·PDF는 보통 ",[25,1201,1202],{},"장 구조","; 전처리가 ",[25,1205,1206],{},"구간 제목 + 요약"," 산출. 「특정 장이 무엇을 말하는지」「책이 개념을 어떻게 정의하는지」류 질문은 요약 목록에서 구간 선택 후 ",[25,1209,1210],{},"원문 회수","가 실무에서 안정적; Tool 반환은 ",[25,1213,1214,1216],{},[154,1215,835],{},"가 붙은 원문","이라 제로 환각은 여전히 문자 span에 고정.",[11,1219,1220,1221,1224,1225,1228],{},"벡터 검색은 의미 모호, 다국어, 긴 구간 문자열 불일치 등에서 유리; ",[25,1222,1223],{},"목차 + 전처리 + 강한 추적"," 리더에서는 복잡도를 ",[25,1226,1227],{},"Tool + 원문 반환 + 인용 제약","에 두는 ROI가 보통 더 높음.",[34,1230],{},[54,1232,1234],{"id":1233},"향후-방향-하이브리드-리콜-처음부터-다시-짓지-않음","향후 방향: 하이브리드 리콜, 처음부터 다시 짓지 않음",[11,1236,1237,1238,1241,1242,1245,1246,1249,1250,1253],{},"향후 ",[25,1239,1240],{},"벡터 거친 리콜"," 추가 가능(예: embedding으로 Top-N 후보 장만 선별), 최종은 여전히 ",[25,1243,1244],{},"구간 선택 → 원문 반환 → 클릭 추적",", 제로 환각 규칙 불변. 도입 시 Embedding ",[25,1247,1248],{},"선택",", 모델 변경 시 ",[25,1251,1252],{},"인덱스 재구축 명시적 안내","—silent wrong retrieval 방지.",[11,1255,1256,1257,949],{},"그 전까지 우선 보장: ",[25,1258,1259],{},"OpenAI 호환 Chat API만 있으면 동작, Chat 모델 교체 시 로컬 인덱스 재구축 불필요",[34,1261],{},[37,1263,1265],{"id":1264},"_10-요약","10. 요약",[276,1267,1268,1281],{},[279,1269,1270],{},[282,1271,1272,1275,1278],{},[285,1273,1274],{},"단계",[285,1276,1277],{},"수단",[285,1279,1280],{},"역할",[298,1282,1283,1294,1307,1321,1332,1343],{},[282,1284,1285,1288,1291],{},[303,1286,1287],{},"전처리",[303,1289,1290],{},"목차/길이 분할 + 세그먼트 요약 캐시",[303,1292,1293],{},"장편 검색·위치 지정 가능",[282,1295,1296,1299,1304],{},[303,1297,1298],{},"위치 마커",[303,1300,1301,1303],{},[154,1302,156],{}," 원문에 기록",[303,1305,1306],{},"출처 기계 파싱",[282,1308,1309,1312,1318],{},[303,1310,1311],{},"Tool 검색",[303,1313,1314,1315,1317],{},"질문별 구간/전체 요약 조회, ",[25,1316,317],{}," 반환",[303,1319,1320],{},"답변 전 증거 강제",[282,1322,1323,1326,1329],{},[303,1324,1325],{},"System Prompt",[303,1327,1328],{},"책 우선, 각주 위조 금지, 없으면 말함",[303,1330,1331],{},"생성 행위 제약",[282,1333,1334,1337,1340],{},[303,1335,1336],{},"프론트엔드 추적",[303,1338,1339],{},"각주 → 미리보기 → 이동 하이라이트",[303,1341,1342],{},"사용자 증거 검증",[282,1344,1345,1348,1351],{},[303,1346,1347],{},"벡터 검색 미사용",[303,1349,1350],{},"단일 Provider, Chat 모델 교체 시 인덱스 재구축 불필요",[303,1352,1353],{},"통합·마이그레이션 비용 절감",[11,1355,1356,1357,1360],{},"「제로 환각」은 모델이 절대 실수하지 않는다는 뜻이 아니라 ",[25,1358,1359],{},"엔지니어링 구조로 출력을 증거 체인에 고정","하는 것: 검색 결과 없으면 책 내용을 가장하면 안 됨; 검색 결과 있으면 검증 가능한 원문 위치를 제시해야 함.",[11,1362,1363,1364,1367,1368,1371],{},"AI 독서나 문서 QA를 개발 중이라면 ",[25,1365,1366],{},"전문 직접 삽입 → 핵심 문장 추출 → Tool-First 필요 시 검색"," 진화 경로와 ",[25,1369,1370],{},"인라인 위치 마커 + 원문 반환"," 방식이 참고 구현이 되길 바랍니다.",[19,1373,1374],{},[11,1375,1376,1377,1382,1383,1387],{},"위 내용은 ",[238,1378,1381],{"href":1379,"rel":1380},"https://reader.linghuxiong.com",[242],"Foxycape"," AI 리더 개발 실천에서 나온 것으로, 참고용입니다. 글 끝 ",[238,1384,1386],{"href":1385},"/ko-kr#download","다운로드 페이지","에서 리더를 체험해 보세요.",{"title":612,"searchDepth":1389,"depth":1389,"links":1390},2,[1391,1397,1398,1399,1400,1404,1411,1415,1416,1423],{"id":39,"depth":1389,"text":40,"children":1392},[1393,1395,1396],{"id":56,"depth":1394,"text":57},3,{"id":138,"depth":1394,"text":139},{"id":230,"depth":1394,"text":231},{"id":414,"depth":1389,"text":415},{"id":474,"depth":1389,"text":475},{"id":490,"depth":1389,"text":491},{"id":626,"depth":1389,"text":627,"children":1401},[1402,1403],{"id":650,"depth":1394,"text":651},{"id":676,"depth":1394,"text":677},{"id":749,"depth":1389,"text":750,"children":1405},[1406,1408,1410],{"id":768,"depth":1394,"text":1407},"6.1 get_related_segment_summaries — 구체적 질문에 대한 세그먼트 조회",{"id":839,"depth":1394,"text":1409},"6.2 get_full_book_segment_summaries — 책 전체 개요형 질문",{"id":861,"depth":1394,"text":862},{"id":893,"depth":1389,"text":894,"children":1412},[1413,1414],{"id":903,"depth":1394,"text":904},{"id":914,"depth":1394,"text":915},{"id":954,"depth":1389,"text":955},{"id":1029,"depth":1389,"text":1030,"children":1417},[1418,1419,1420,1421,1422],{"id":1063,"depth":1394,"text":1064},{"id":1100,"depth":1394,"text":1101},{"id":1159,"depth":1394,"text":1160},{"id":1195,"depth":1394,"text":1196},{"id":1233,"depth":1394,"text":1234},{"id":1264,"depth":1389,"text":1265},null,"2026-06-03","AI 리더의 제로 환각 Q&A 엔지니어링 구현을 공유합니다. 답변은 현재 책 원문에 엄격히 기반하며, 핵심 논지는 한 번의 클릭으로 구체적인 단락까지 추적할 수 있습니다.",false,"md",{},true,"/ko-kr/blog/zero-hallucination-qa",{"title":6,"description":1426},"ko-kr/blog/zero-hallucination-qa",[1435,1436,1437],"리더","AI","기술","zero-hallucination-qa","gMAADyOUMGiUy3dSeufvlyoAAKWVe784BtYqJyvFQT4",1780489852832]