본문 바로가기
C.W.K.
Stream
Lesson 03 of 04 · published

RAG 챗봇을 만들려는 게 아냐

~10 min · not-a-rag-chat, no-own-brain, boundary, separation-of-concerns

Level 0꺼진 심지
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"'챗창 하나만 붙이자'는 말에서 깨끗한 엔진이 두 번째 뇌를 키우기 시작해."

합리적인 요구와 잘못된 배치

내 글을 잘 찾는 엔진을 보면 누구나 그 글에 관해 질문하고 답을 받고 싶어 해. 요구 자체는 타당해. 문제는 검색 API 안에 언어 모델과 대화 기록을 넣어 곧바로 구현하는 방식이야. 그렇게 하면 Lantern은 더 이상 검색 엔진이 아니라 기억과 판단을 어설프게 갖춘 또 하나의 비서가 돼.

대화에는 엔진이 맡지 않는 책임이 필요해

챗은 이전 대화를 기억해야 하고, 누가 말하는지 아는 정체성을 가져야 하며, 찾은 구절이 무엇을 뜻하는지 판단해야 해. Lantern이 일부러 거절한 책임들뿐이지. 형제 엔진마다 이 기능을 넣으면 하나의 뇌와 여러 도구 대신, 서로 다른 기억과 성격을 가진 반쪽짜리 비서들이 생겨. 어느 기록이 진짜인지부터 다시 싸우게 될 거야.

대화 화면은 뇌에 연결된 클라이언트야

코퍼스와 대화하는 기능은 뇌의 세계에 두면 돼. 대화와 기억, 정체성을 이미 책임지는 뇌에 연결하고 Lantern은 검색 도구로 호출해. Lantern이 출처가 붙은 원문 조각을 돌려주면 뇌가 그 위에서 답을 만들지. 기능은 그대로 얻으면서도 각 구성 요소의 책임은 흐려지지 않아.

기능 요청은 필요한 일을 말해줄 뿐, 그 일이 들어갈 자리를 정해주지는 않아. '내 데이터와 대화하고 싶다'는 요구를 '검색 엔진 안에 챗봇을 넣자'로 곧장 번역하지 마. 그 책임을 이미 소유한 층에서 기능을 완성해야 해.

한 문장으로 설명되는 경계를 지켜

Lantern에는 챗도 메모리도 정체성도 없고, 검색 결과를 만드는 길에 언어 모델도 없어. 대화 화면이 생기더라도 기존 뇌에 연결된 동반 클라이언트일 뿐 두 번째 Pippa가 아니야. 이 경계는 불편해서 나중에 뚫을 벽이 아니라, 엔진을 이해하고 믿을 수 있게 만드는 조건이야.

Code

챗은 엔진 기능이 아니라 뇌가 쓰는 클라이언트야·python
# WRONG: the engine grows a brain. Memory, identity, judgment leak inward.
@app.post("/api/search")
def search_and_chat(q: str, history: list):        # <-- history? in a search engine?
    hits = retrieve(q)
    return model.chat(history + [prompt(q, hits)])  # <-- engine now owns conversation

# RIGHT: the engine only finds. Chat is a CLIENT that binds to the brain.
@app.post("/api/search")
def search(q: str) -> list[Result]:
    return retrieve(q)                              # citable slices, no model, no memory

# ...elsewhere, in the brain's world, a client composes the two:
def corpus_chat(question, conversation):           # brain owns memory + identity
    slices = lantern.search(question)              # Lantern is just a tool call
    return conversation.respond_with(slices)       # judgment happens up here

External links

Exercise

네가 좋아하는 깨끗한 단일 목적 도구를 떠올려(검색창, 변환기, 포매터). 그것에 대한 가장 솔깃한 '이것도 되면 좋을 텐데…' 기능을 상상해. 이제 결정해: 그 기능이 도구 안에 속해, 아니면 도구를 다른 것과 조합하는 클라이언트에 속해? 그 기능을 넣기 전 도구를 한 문장으로 설명해 봐. 그런 다음 그 기능을 넣으면 그 설명이 왜 흐려지는지 따져 봐.
Hint
새 기능이 도구한테 뭘 기억하고, 누가 쓰는지 알고, 의견을 갖게 강요하면, 도구가 아니라 클라이언트에 속해. 판단 기준은 간단해. 그 기능을 넣고도 도구를 한 문장으로 설명할 수 있는지 보면 돼.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.