다단계 추론
중간 산출물에 따라 실행 계획을 바꾸는 능력이다. 수학 퍼즐의 연역이나, 첫 검색 결과를 보고 다음 검색 범위를 조절하는 과정이 이에 해당한다.
제13장은 언어모델의 말솜씨를 지식의 근거와 연결하는 장이다. 벡터 검색이 닮은 문장을 건져 올린다면, 지식그래프는 누가 누구와 무엇을 논했고 여러 문서의 조각이 어디서 만나는지를 드러낸다. 이 장의 핵심은 더 많은 문서를 넣는 데 있지 않다. 질문에 필요한 맥락을 가장 알맞은 도구로 찾아, 그 출처와 관계를 보존한 채 답으로 엮는 데 있다.
2022년 말 GPT-3.5의 등장은 자연어처리의 제작 방식을 뒤집었다. 과업마다 데이터셋과 전용 모델을 오래 준비하던 시대에서, 프롬프트만으로 여러 응용을 빠르게 조립하는 시대로 건너왔다. 그러나 시연에서 감탄을 얻는 일과 기업 환경에서 책임 있게 작동하는 일은 서로 다른 고개다.
제13장은 그 고개를 넘기 위해 AI 에이전트, RAG, Graph RAG를 차례로 놓는다. 앞 장들에서 비공개 문서를 지식그래프로 바꾸었다면, 이제 그 그래프와 벡터 데이터베이스를 대화형 인터페이스의 외부 기억으로 사용한다. 에이전트의 뇌는 질문을 받고, 어떤 도구를 쓸지 판단하며, 맥락이 충분한지를 되묻고, 마지막에 근거 있는 답을 생성한다.
전통적 프로그램은 미리 적힌 순서를 따른다. 에이전트는 환경과 중간 결과를 보고 다음 행동을 고른다. 자율성, 적응성, 경험에서의 학습은 여기서 나온다.
중간 산출물에 따라 실행 계획을 바꾸는 능력이다. 수학 퍼즐의 연역이나, 첫 검색 결과를 보고 다음 검색 범위를 조절하는 과정이 이에 해당한다.
사회망의 영향자, 공급망의 병목처럼 개별 문장만으로는 보이지 않는 다중 홉 구조를 읽어야 한다.
학습 시점 이후의 정보나 조직 내부 자료, 사용자 권한에 따라 접근 범위가 다른 민감 정보가 필요하다.
콘텐츠 작성 보조 시스템을 사람이 일하는 순서로 풀어 보면 연구자, 작성자, 검토자가 나타난다. Researcher는 자료를 찾고, Writers는 매체와 목적에 맞게 초안을 만들며, Reviewer는 오류와 품질을 확인한다. 하나의 거대한 프롬프트에 모든 책임을 몰아넣는 대신, 전문 역할을 맡은 에이전트들이 대화하며 목표를 완성하는 구조다.
자료·사실·배경을 수집하고 출처를 정리한다.
장문 기사나 보고서의 논리를 구성한다.
블로그·소셜미디어 형식으로 다시 쓴다.
사실성, 일관성, 표현 위험을 검토한다.
검토 의견을 반영해 초안을 고친다.
역할별 산출물이 합쳐져 최종 결과가 된다.
대화형 에이전트의 최소 구성은 선행학습 LLM과 대화 이력을 보존하는 메모리다. 시스템 메시지가 역할을 정하고, 사용자 질문과 모델 응답이 차례로 메시지 배열에 쌓인다.
Listing 13.1의 핵심 구조를 시각화했다.
model, system, messages, API client를 보유한다. 호출될 때 사용자 메시지를 저장하고, 모델 응답도 다시 메모리에 추가한다. temperature=0으로 변동성을 낮춘다.
첫 답은 맞지만 매우 일반적이다. 후속 질문이 시대와 기관을 지정하자 더 구체적인 답이 나온다. 그러나 모델이 기대하는 비공개 원자료를 보지 못한 이상, 정확한 관계와 근거를 보장하지 못한다.
기업용 에이전트는 “질문 입력-답변 출력”의 매끈한 시연만으로 완성되지 않는다. 모델이 틀릴 때의 비용, 최신성, 출처, 권한, 비용, 사회적 위험을 함께 설계해야 한다.
이 난제를 풀기 위해 에이전트에는 외부 세계와 접촉하는 도구가 필요하다. 최신 날씨 API, 뉴스, 조직 내부 데이터베이스, 지속적으로 갱신되는 지식그래프가 그 예다. 이 지점에서 RAG가 등장한다.
사례 지식그래프는 1930년대 Rockefeller Foundation의 연구비 승인 과정과 그 이면의 대화를 담는다. 연구비 금액, 연구 주제, 대학, 연구자뿐 아니라 누가 누구와 무엇을 논했는지가 연결되어 있다.
Ernest O. Lawrence, Vannevar Bush, Dorothy M. Wrinch 등 연구자와 관계자.
연구비 금액, 승인 과정, 지원 기관과 연구 주제.
TALKED_ABOUT, TALKED_WITH, WORKS_ON 등 대화와 협업.
각 개체와 관계를 원문 일지 페이지로 되돌려 확인할 수 있는 출처 연결.
전통적 KG 시스템은 그래프 시각화와 대시보드로 이 자료를 보여 준다. 그러나 사용자가 Cypher를 배우고 그래프를 직접 탐색하지 않아도 같은 가치를 얻도록 하려면, 자연어 질문을 검색 도구와 연결하는 AI 인터페이스가 필요하다.
RAG는 생성 모델과 외부 정보검색을 결합한다. 에이전트는 질문에 필요한 맥락을 구조화 데이터베이스나 텍스트·이미지 같은 비정형 소스에서 가져오고, LLM은 질문과 검색 맥락을 함께 받아 답을 만든다.
원문은 인간을 대체하는 것이 아니라 인간의 결정을 증강해야 하며, 피드백·검증·감독을 통해 human-in-the-loop를 유지하는 것이 필수라고 강조한다.
문서를 작은 chunk로 나누고, 각 chunk를 고정 길이 임베딩으로 변환해 벡터 데이터베이스에 저장한다. 질문도 같은 모델로 임베딩한 뒤 cosine similarity가 높은 문서를 가져온다. Listing 13.3은 Neo4j의 Page.text를 OpenAI embedding으로 변환해 embedding 속성과 인덱스를 만들고, 상위 두 문서를 검색한다.
대형 사이클로트론의 자석·전원·챔버 비용과 다음 세대 기계 구상을 직접 논한다. 질문과 높은 관련성을 보인다.
사이클로트론을 언급하지만 자신의 발전기 장점을 강조하는 내용이다. 관련은 있으나 질문의 중심에서는 벗어난다.
벡터 점수가 높다고 해서 질문에 필요한 개체·관계가 반드시 포함된 것은 아니다.
chunk를 독립적으로 다루면 문서 사이의 다중 홉 관계와 앞뒤 문맥이 끊어진다. 필요한 두 조각이 올바른 순서로 함께 검색된다는 보장이 없다.
대규모 corpus에서 정밀 벡터 검색은 비싸다. 속도를 위해 approximate search를 사용하면 정확성이 낮아질 수 있다.
문서 의미를 하나의 dense vector로 압축하면 세밀한 도메인 의미가 사라진다. 희소 용어와 새 명칭, 정적 벡터도 약점이다.
느슨하게 관련된 문서가 context를 채우면 distraction이 생기고, 긴 맥락 속 잡음이 모델의 답 품질을 낮춘다.
핵심 문서를 놓치면 좋은 모델도 완전한 답을 만들 수 없다. 전체 corpus를 집계해야 하는 질문은 특히 취약하다.
“Lauritsen은 사이클로트론 연구와 어떻게 관련되는가?”라는 질문의 상위 세 문서는 cosine similarity가 거의 같다. 그러나 Lauritsen을 실제로 포함한 문서는 하나뿐이다. 임베딩은 텍스트의 전체 의미를 압축할 뿐, 질문 속 이름의 포함을 보장하지 않는다.
| 상위 문서 | Cosine similarity | Lauritsen 언급 | Cyclotron 언급 | 판단 |
|---|---|---|---|---|
| 1939-01-03, Karl Lark-Horovitz / Purdue | 0.906 | True | True | 직접 관련 |
| 1939-05-02, Irving Langmuir / Dorothy Wrinch | 0.903 | False | True | 이름 누락·잡음 |
| 1939-04-03, Dorothy M. Wrinch | 0.902 | False | True | 이름 누락·잡음 |
점수만으로 문서를 선택할 때 생기는 정밀도-재현율의 감각을 확인한다.
지식그래프는 원문만 모으는 창고가 아니다. 문서 메타데이터, 신뢰도 높은 구조화 자료, 개체와 관계, 그리고 그 지식이 어느 문서에서 왔는지를 한 구조 안에 묶는다. 도메인 전문가는 이 구조를 직접 검증하고 갱신할 수 있다.
노드와 관계 자체가 텍스트 및 다른 속성을 가진다. 이름, 설명, 날짜, 저자, 문서 종류 같은 속성이 검색과 요약의 직접 근거가 된다.
개체와 관계가 자신을 낳은 원문 문서와 연결된다. 구조화 관계가 부족할 때 출처 페이지로 되돌아가 상세 설명을 검색할 수 있다.
날짜·문서유형·출처·저자를 이용해 최신 규정, 대표 문서, 문서 커뮤니티를 선택한다.
질문과 KG schema로 Cypher를 만들거나, 두 개체를 잇는 최단 경로·부분그래프를 반환한다.
질문 속 모든 개체나 특정 관계를 언급하는 문서만 골라 벡터 검색의 잡음을 줄인다.
KG에서 이름·역할을 식별한 뒤 다른 문서 DB를 검색하고, 두 context를 합쳐 답을 만든다.
Rockefeller 사례의 에이전트는 KG retriever, KG-enhanced document retriever, semantic retriever를 갖는다. 구조화 지식으로 답할 수 있으면 KG를 쓰고, 관계의 상세 문장이 필요하면 출처 문서를 찾으며, 둘이 실패할 때 벡터 검색을 백업으로 쓴다.
entity_sourceentity_source_class = Personentity_targetentity_target_class ∈ {Person, Organization, Occupation, Title}relationship에이전트가 질문에서 두 개체, 클래스, 관계 유형을 추출한다. 함수는 이를 미리 준비한 Cypher template에 채우고 Neo4j에서 관계를 언급하는 Page.text를 조회한다. 최대 세 문서를 에이전트에 돌려준다.
원문은 완전 자동 Cypher 생성을 더 일반적인 해법으로 볼 수 있으나, 복잡한 질의에서는 실패 지점이 하나 더 생긴다고 경고한다. 운영 Graph RAG가 반복 질문 유형별로 미리 검증된 Cypher 도구를 여럿 두는 이유다.
도구가 여러 개인데 고정된 실행 순서가 없다면, 에이전트는 질문과 중간 결과에 따라 다음 도구를 선택해야 한다. ReAct는 Thought-Action-Observation을 반복해 필요한 context가 충분해질 때 루프를 끝낸다.
도구 이름과 설명은 모델의 라우팅 정책이다. 어떤 질문에 언제 쓰고 어떤 인자를 넣는지를 명확히 쓸수록 안정성과 예측 가능성이 높아진다.
같은 설정과 같은 질문도 여러 번 시험해야 한다. 일관성이 부족하면 LangChain 기본 prompt와 도구 설명을 직접 고쳐야 한다.
제시된 구현은 교육용이다. 문서 re-ranking, Cypher self-correction, 질문 유형별 추가 도구가 운영 수준의 다음 단계다.
에이전트는 먼저 KG reader에게 “누가 Wrinch에 대해 말했는가?”를 묻는다. Eric Ponder, Pascu, Irving Langmuir라는 세 이름을 얻은 뒤, 각 인물에 대해 KG 기반 문서 선택기를 호출한다. 총 네 번의 Thought-Action-Observation을 거쳐, 원문 문서를 바탕으로 동료들의 평가를 요약한다.
평판과 발언 내용을 묻는 관계형 질문.
Wrinch로 들어오는 TALKED_ABOUT 관계가 필요하다.
Eric Ponder · Pascu · Irving Langmuir 반환.
각 발언자가 언급된 일지 페이지를 회수.
관계와 상세 문장을 하나의 context로 묶는다.
짧고 사실적이며 비공개 문서에 grounding된 답.
요지는 Krogh가 심해 잠수동물의 호흡생리 연구를 높이 평가하고, Scholander와 Irving의 협업 필요성을 강조했다는 것이다. Irving의 우수한 연구와 미국 내 시설 가능성, Boothbay Harbor 및 수족관 동물 연구 가능성이 함께 언급된다.
두 기관과 연결된 연구 주제를 집계하면 공통점은 천문학(astronomy)과 기후학(climatology)이다. 어느 한 문서에도 이 비교 문장이 직접 쓰여 있지 않지만, KG가 문서 사이의 점을 연결한다.
사용자, 에이전트의 뇌, semantic/KG/KG-document retriever, vector DB, KG, 답변의 연결을 제시한다.
시스템 메시지, 메시지 이력, OpenAI chat completion을 감싼 최소 Agent 클래스다.
일반 질문은 일반적 답을, 시대·기관 맥락을 추가한 후속 질문은 더 구체적인 답을 만든다는 사례다.
문서와 질문을 임베딩하고 유사 문서를 검색해 최종 생성 context로 사용하는 흐름이다.
Neo4jVector와 OpenAIEmbeddings를 이용해 Page 텍스트를 벡터화하고 인덱싱한다.
cyclotron 질문에 대한 유사도 0.918, 0.916의 문서를 보여 주며, 두 번째 결과의 부분적 잡음을 드러낸다.
0.906, 0.903, 0.902의 거의 같은 점수에도 세 문서 중 하나만 Lauritsen을 포함한다.
문서 메타데이터 subgraph와 개체·관계 subgraph를 결합하고, 모든 지식을 원문으로 추적한다.
KG, KG 문서 선택, semantic 검색을 함께 갖춘 에이전트의 실제 배치를 보여 준다.
Pydantic 입력 schema와 precanned Cypher로 두 개체의 특정 관계를 다룬 문서를 가져온다.
StructuredTool, KG schema 설명, GPT-4o-mini, AgentExecutor와 최대 5회 반복을 묶는다.
KG에서 발언자들을 찾고 각 발언자의 문서를 순차적으로 가져온 뒤 최종 답을 생성하는 네 단계의 실행이다.
Krogh-Irving 발언과 Harvard-Johns Hopkins 공통 연구주제를 각각 문서 관계 검색과 KG 집계로 해결한다.
원문은 모델 버전에 따라 출력이 달라질 수 있다고 명시한다. 또한 제시된 Graph RAG 코드는 개념 검증용이며 production-ready 구현으로 주장하지 않는다. 따라서 이 웹페이지의 예시 답변도 장의 실험 맥락을 설명하는 자료이지, 현재 모델과 라이브러리에서 동일한 출력이 재현된다는 보장은 아니다.