5월호에서 언급했던 Multi Agent를 통해 content를 만드는것이 아닌 영화 추천을 구현해봤습니다.

LangGraph

노드를 이동할 때 Graph의 state에 messages 또는 기타 정보를 update 시켜줌으로써, 해당 정보에 따라 다음 과정을 수행하도록 도와주는 Framework입니다. Langchain에서 사용하던 기술을 각 모듈로 만들어 함수 또는 Tool로 만들어 이를 각 노드(Agent)들이 수행하도록 하는 방식입니다.

class AgentState(TypedDict):
    messages: Annotated[Sequence[BaseMessage], operator.add]
    sender: str

위와 같이 State를 통해 messages를 추가하고, 최종 messages에서 function calling을 통해 도구를 사용하도록 하는 방식입니다.

Recommendation

Query에 따른 간단한 추천시스템을 만들어보고자 했었고, 이에 대한 아키텍처는 다음과 같습니다.

해당 아키텍처는 ‘정보 검색’을 통한 추천, 다시 말해 추천을 위한 query에서 요구하는 정보에 따른 영화 추천을 하는 아키텍처입니다.

유저의 히스토리 또는 아무 상관없는 말부터 추가 힌트를 받아 추천을 제공하는 멀티 턴 등은 추후에 구현할 예정입니다.

Untitled

  1. Analyst Agent는 초기 router 역할로, 복잡한 쿼리를 세분화 해주는 역할을 합니다.

    [input]
    '오늘 날씨 짱인데?'
    
    [output]
    ----------쿼리분석!----------
    GENERAL
    
    
    [input]
    "내가 마지막으로 봤던 영화 기반으로 볼만한 영화 있어?"
    
    [output]
    ----------쿼리분석!----------
    RECOMMEND
    
  2. General Agent

  3. RecomAnal Agent(Recommendation Query Analyst)

    [input]
    "내가 마지막으로 봤던 영화 기반으로 볼만한 영화 있어?"
    
    [output]
    ----------추천쿼리분석!----------
    HISTORY
    
    [input]
    "범죄도시4 같은 영화 뭐가 있을까?"
    
    [output]
    ----------추천쿼리분석!----------
    SEARCH
    
  4. Conventional Recommendation Agent

    흔히 알고 있는 일반적인 추천 모듈을 탑재한 Agent입니다.

    LangGraph 특성상 굳이 LLM을 사용하지 않아도, 함수 형태로 Tool을 사용하는 Agent를 둘 수 있습니다.

    따라서 이곳에는 전통적인 추천 모델(CF, NCF, GCN 등)을 넣어볼 예정입니다.

  5. Research Agent

    가장 중요한 파트입니다. meta 정보 기반으로 질문이 들어왔을 때, 해당 meta정보를 내/외부에서 검색해 이용하는 Agent입니다.

    이렇게 멀티에이전트 기반 영화 추천 팀을 간단히 만들어 보았습니다.

    서칭 파트는 사실 손볼 구석이 굉장히 많고(이것 때문에 월간 슈도렉 게재도 늦어졌다 해도 과언이 아닙니다ㅠ) 정확한 정보를 기반으로 한 답변 생성을 위해선 추가적인 검토로직이 필요해 보입니다.

    이번 구현에서 빠진 부분은 아래와 같습니다.