Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • MCP-Memory가 먼저 제작되었으며 개발완성후 아키텍처를 LLM이 코드분석 작성하고 메모리화

장기기억메모리 탐색을 하는 챗봇

Image Removed

Image Removed

Image Removed


01-초기버전 프롬프트


이 프로젝트는 dotnet 9.0을 사용하며 풀스택(API,UI) 으로 구성되어 있습니다. PostgreSQL를 이용한 검색및 벡터검색이 가능하고 Neo4j를 활용 그래프검색도 가능합니다.

...

  • 사용자 세션별로 생성되는 ChatBotActor 액터모델을 생성합니다.
  • ChatBotActor 액터는 추구 SSE와 연결되어 사용자의 대화요청을 처리받아 응답을 SSE로 스트리밍예정입니다. SSE는 당장 구현하지 않고 액터모델에서 스트림형태로 응답을 주는 형태로 구현합니다.
    • ChatbotActor 액터는 사용자 세션별로 하나가 대응됩니다. 동일세션이 있을시 동일액터를 재 사용합니다.
    • ChatbotActor 액터는 3일동안 세션당 대화가 없으면 스스로 종료합니다. 챗봇세션대응 메모리를 정리하기위한 시스템절약 용도입니다. -액터내 타이머를 이용
    • 아래에 설명되는 SearchMemoryActor,DecisionActor는 미리생성되며 ChatbotActor 는 생성된 참조액터를 이용합니다. ChatBotActor생성시 생성된 참조 액터가 전달됩니다.
  • SearchMemoryActor는 메모리 검색을 담당합니다. LLM을 이용할수 있으며 요청에대해 검색이 필요한지 판단하며 요청내용과 관련된 내용이 잘 검색할수 있도록 검색에 용이한 자연어 문장으로 변환후 시도합니다. IT관련 용어는 영어단어로 변환합니다.
    • src/Memorizer/Services/Memory.cs 을 이용해 메모리를 검색할수 있습니다.
    • 메모리 검색기능이 필요없는 요청일시에는 검색을 시도하지 않고 검색 결과 없음으로 응답합니다.
    • 메모리 검색기능 에는 문장으로 유사도 검색을 할수 있으며 유사 0.3 이상인것중 최대 5개를 이용합니다.
      • 검색결과 자체가 없을시 시도되는 문장에서 키워드를 추출해 영문,한글로 시도해 최대 3번까지 재검색을 시도합니다.
    • 이 액터의 목적을 달성하기 위해 LLM을 이용할수 있으며 이용할 프롬프트를 액터모델내 작성합니다.
  • DecisionActor 는 요청내용과 검색된 결과가 관련성이 있는지 판단합니다.
    • 관련성이 있다고 판단되면 검색된 결과를 이용해 연관문서로 응답을 생성합니다.
    • 관련성이 없다고 판단되면 연관문서 없음으로 응답합니다.
    • 이 액터의 목적을 달성하기 위해 LLM을 이용할수 있으며 이용할 프롬프트를 액터모델내 작성합니다.
  • ChatBotActor가 사용자의 대화요청에 다양한 대응을위해 SearchMemoryActor는, DecisionActor를 이용해 응답을 생성합니다.
    • DecisionActor 가 요청에대한 관련 자료를 찾지 못한경우 일반 LLM응답을 생성합니다.
    • ChatBotActor는 LLM을 이용해 일반응답을 생성할수 있습니다.
    • ChatBotActor는 응답에 대한 내용이 출처 메모리인지? 또는 일반인지 판단해 응답을 생성합니다. 참조된 위치를 추가로 표현할수 있습니다.
    • ChatBotActor는 최종응답을 받기까지의 추론하는 과정을 다른액터로부터 수신받을수 있습니다. 이 과정을 추후 SSE스트리밍을 통해서도 표현할수 있어야합니다. SSE스트리밍은 당장 구현하지 않습니다.



02-SSE를 액터모델에 연결하면서 BOT UX만들기

이 프로젝트는 dotnet 9.0을 사용하며 풀스택(API,UI) 으로 구성되어 있습니다. PostgreSQL를 이용한 검색및 벡터검색이 가능하고 Neo4j를 활용 벡터검색도 가능합니다.

...

  • ui/askbot : 지금 만드려고하는 챗봇 페이지는 이곳에 생성해주세요, 인증없이 작동해야합니다.
  • SSE를 이용해 사용자(USER)와 챗봇(ASKBOT)간 대화가 가능해야합니다.
  • 챗봇의 핵심 기능은 src/Memorizer/Actors/ChatBotActor.cs 에 있습니다.이것을 이용해주세요
  • SSE는 단방향 특징을 가지고 있으며~ 요청은 API형태로 응답만 SSE로 받습니다. 액터모델의 응답결과가 스트림형태로 SSE를 이용해 전달되어야합니다.
  • ChatBotActor는 세션개념을 가지고 있으며 유지됩니다. 최초이용시 GUID로 생성해 브라우저 캐시에 영구저장하며 이용합니다.
  • New세션 버튼을 누르면 새로운 세션으로 진행가능합니다. 이때는 ChatBotActor도 새로 생성되며 SSE가 다시연결됩니다.
  • UI 상세설명
    • ASKBOT에게 요청하기 입력창이 하단에 있으며 엔터키로 제출가능합니다. 모바일에서는 제출버튼이 필요함으로 아이콘형태로 버튼을 만들어주세요
    • 상단은 사용자가 요청한 내용과 챗봇이 응답한 내용이 대화형태로 표시됩니다.
    • 상단의 내용은 길어질수 있으며 스크롤이 가능해야하며 요청은 하단에 고정됩니다.
    • 챗봇이 응답하는 과정을 구현된 액터모델을 참고해 단계별로 표시합니다. 예를들면 "메모리에서 '검색시도되는 키워드' 관련내용을 검색중입니다." 와 같은 형태로 표시합니다.
    • 최종 답변이 생성되면 markdown형태로 표시합니다. 마크다운형식은 코드뷰, 링크, 이미지, 표, mermaid 다이어그램이 포함될수 있습니다.
      • markdown을 표현하는 스타일은 src/Memorizer/Views/Home/View.cshtml 를 참고합니다.
    • 모든 진행과정과 응답은 Stream을 이용해 자연스럽게 키보드입력 애니메이션형태로 출력을 합니다. 응답을 받는중에는 입력창은 비활성화됩니다. 응답이 최종완료되거나 실패되면 입력창은 다시 활성화됩니다.
  • SSE 스트림을 연결하는중 Chatbot 액터모델이 자연스럽게 스트림형태로 전송하기위해 약간의 개선이 필요하면 개선진행되면 됩니다.

...


03- 조금더 자연스러운 챗봇업그레이드

ASKBot 기능을 개선하기위해 다음 ASIS의 문제를 개선지침을 참고해 개선수행해주세요 개선에 필요한 부가정보도 포함되었으니 필요한 부분을 참고해 충분히 이해한후 수행

ASIS

  • Postgres를 이용 장기기억 메모리는 가지고 있어 이것을 검색하는 기능은 있습니다.
  • 현재 ASKBot은 이전대화와 다음대화를 고려하지 않고 단발성 응답만 가능합니다.
  • 동일세션에서 대화를 이어가는 기능이 없어~ 세션내 대화의 맥락을 이해하지 못합니다.

개선지침

  • ChatBotActor는 사용자 세션별로 생성되어, 세션당 대화를 임시저장할수 있습니다.
  • 세션당 유저의 대화는 최대 10개까지 저장할수 있으며, 10개가 넘으면 가장 오래된 대화를 삭제합니다.
    • 삭제하기전 대화내용중 중요하다고 판단되는것은 , 단기메모리를 분석해 가지고 있습니다.
    • 단기메모리의 최대크기는 500자 이내로 유지하며, 새로운 유저의 대화의 정보와 비교해 업데이트합니다.
    • 응답이 완료되면 가장 최근 1개의 응답결과는 별도로 저장합니다.
      • 이것을 저장하는 이유는, 응답한 결과의 내용중 중요한 내용이 있을수 있으며, 다음대화에서 이 내용을 활용할수 있기 때문입니다.
      • 대화때마다 마지막 응답을 항상 참고하지는 않습니다.
  • ChatBotActor는 대화요청에 대해, 단기메모리와 장기메모리를 모두 활용해 응답을 생성합니다.
    • 단기메모리는 대화의 맥락을 이해하는데 활용합니다.
      • 안녕, 너는 누구야? -> 나는 ASKBot이야. 너는 누구니? -> 나는 개발자야 -> 아 개발자구나 반가워
        • 이런식으로 대화의 맥락을 이해하는데 활용합니다.
      • 궁금한게 있어 -> 뭐가 궁금한데? -> AI 개발방법론이 궁금해 -> 나의 메모리에서 찾아볼게
        • 이런식으로 대화의 맥락을 이해하면서 메모리 검색을 합니다.
    • 장기메모리는 사용자의 요청에대해 관련된 메모리를 검색하는데 활용합니다. 이것은 이미 구현되어 활용하면 됩니다.
  • 현재 추론과정을 보여줍니다. 메모리검색이 필요없을때 단순응답시에는 추론과정을 UI에 표시하지 않습니다.
    • 추론과정의 기능은 잘작동함으로 UI에서만 제어합니다. 검색이 필요한경우 검색결과가 있습니다. 이벤트가 오기때문에 이때 추론과정을 표시해도됩니다.

ASK BOT 작동샘플

Info

액터모델을 중심으로 AI활용 기술을 메모리화 하고 있습니다. - 특정 카테고리로 한정


대화 : AI와 관련된 자료조사

Image Added


Image Added

  • 온디바이스 토큰처리량이 넉넉하지 않아~ 3가지 문서만 참고요약하도록 제약
    • LLM토큰을 잘 활용하려면 동시성 대량처리능력 만큼  통제가능한 제약이 더 중요합니다. - 이러한 장치가 없을시 토큰초과로 작동불능상태 빠짐


대화중 닉을 알려주고 직장도 알려줌

Image Added


  • 메모리 전문검색보다~ 일반대화 기능만드는것이 더 어려운듯, 메모리탐색이 본기능이며 대화는 부가기능임으로 단기기억 업데이트는 다음버전에서
    • 커피챗에서, 외국인이 말을걸어 이름을 물은적이있는데  나는 쌤입니다.~ 외국인도 번역후 나를 선생님이시군요 했던 경험이..

공개소스및 참고자료