Inflearn brand logo image

인프런 커뮤니티 질문&답변

wogusto13님의 프로필 이미지
wogusto13

작성한 질문수

LangGraph를 활용한 AI Agent 개발 (feat. MCP)

2.8 Multi-Agent 시스템과 RouteLLM 강의에서

해결된 질문

작성

·

21

0

from langchain_core.prompts import ChatPromptTemplate
from pydantic import BaseModel, Field
from typing import Literal


class Route(BaseModel):
    target: Literal["income_tax", "llm", "real_estate_tax"] = Field(
        description="The target for the query to answer"
    )


router_system_prompt = """
You are an expert at routing a user's question to 'income_tax', 'llm', or 'real_estate_tax'.
'income_tax' contains information about income tax up to December 2024.
'real_estate_tax' contains information about real estate tax up to December 2024.
if you think the question is not related to either 'income_tax' or 'real_estate_tax';
you can route it to 'llm'."""


router_prompt = ChatPromptTemplate.from_messages(
    [("system", router_system_prompt), ("user", "{query}")]
)

structured_router_llm = small_llm.with_structured_output(Route)


def router(state: AgentState) -> Literal["income_tax", "real_estate_tax", "llm"]:
    """
    주어진 state에서 쿼리를 기반으로 적절한 경로를 결정합니다.

    Args:
        state (AgentState): 현재 에이전트의 state를 나타내는 객체입니다.

    Returns:
        Literal['income_tax', 'real_estate_tax', 'llm']: 쿼리에 따라 선택된 경로를 반환합니다.
    """
    query = state["query"]
    router_chain = router_prompt | structured_router_llm
    route = router_chain.invoke({"query": query})

    return route.target

 

안녕하세요 강병진 강사님:) 혹시 위 코드에서 router_prompt없이 Route class의 Field에만 프롬프트 지침을 넣어도 문제가 없을까요? 테스트 결과는 잘 나왔습니다.

아래는 수정 코드입니다.

class Route(BaseModel):
    target: Literal["real_estate_tax", "llm", "income_tax"] = Field(description = """
    당신은 사용자의 질문을 보고 적절한 라우터를 연결해주는 전문가입니다.
    부동산에 관련된 질문은 real_estate_tax라우터를, 소득세에 관한 질문은 income_tax라우터를, 그 외의 질문은 llm라우터로 연결해주세요.
    """)

def router(state: AgentState):

    query = "역삼역 떡볶이 맛집을 알려주세요 "
    router_llm = llm.with_structured_output(Route)

    response = router_llm.invoke(query)

    return response.target

print(router({}))
>> 'llm'

답변 2

1

강병진님의 프로필 이미지
강병진
지식공유자

네네 말씀하신 것처럼 작성하셔도 무방합니다!

wogusto13님의 프로필 이미지
wogusto13
질문자

답변 감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

wogusto13님께서 질문하신 부분에 대해 답변드리겠습니다. 처음 작성하신 코드에서 router_prompt 지침은 ChatPromptTemplate을 사용하여 시스템 메시지와 사용자 메시지를 구성하며, 원하는 대로 라우팅을 수행하기 위한 추가적인 맥락을 제공합니다. 이를 통해 LLM이 더 정확하고 신뢰성 있는 출력값을 제공할 수 있습니다.

수정하신 코드에서는 Route 클래스의 Field에 지침을 넣어도 동작은 하지만, 이 접근 방식은 사용자와 시스템 메시지를 명시적으로 구분하지 않기 때문에 복잡한 컨텍스트를 처리할 때 문제가 발생할 수 있습니다. 또한, 이렇게 하면 모델이 가지는 맥락이 제한될 수 있으므로 예기치 못한 결과를 초래할 수 있습니다.

즉, Route 클래스에 지침을 넣는 것은 간단한 상황에서는 작동하지만, 복잡한 맥락을 다룰 때는 여전히 router_prompt를 사용하는 것이 더 안정적이라고 할 수 있습니다.

이전 유사한 질문을 참고하시면 도움이 될 것 같습니다: human-in-the-loop질문드립니다

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

wogusto13님의 프로필 이미지
wogusto13

작성한 질문수

질문하기