강의

멘토링

로드맵

Inflearn brand logo image

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

gymoon10님의 프로필 이미지
gymoon10

작성한 질문수

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

agent가 tool을 선택하는 방법?

해결된 질문

작성

·

108

0

from langchain_core.messages import HumanMessage
from langgraph.prebuilt import create_react_agent
from langchain_mcp_adapters.client import MultiServerMCPClient

async with MultiServerMCPClient(
    {
        "house_tax": {
            "command": "python",
            "args": ["./mcp_stdio_server.py"],
            "transport": "stdio",
        },
    }
) as client:

    ##### AGENT #####
    tool_list = client.get_tools()
    agent = create_react_agent(llm, tool_list)
    query = '5억짜리 집 1채, 10억짜리 집 1채, 20억짜리 집 1채를 가지고 있을 때 세금을 얼마나 내나요?'
    system_prompt = client.get_prompt(server_name="house_tax", prompt_name="house_tax_system_prompt", arguments={})
    messages = await system_prompt + [HumanMessage(content=query)]
    print("=====RESPONSE=====")
    stream_generator = agent.astream({'messages': messages})


    all_chunks = await process_stream(stream_generator)


    if all_chunks:
        final_result = all_chunks[-1]
        print("\nFinal result:", final_result)

안녕하세요, mcp 쪽 공부하다가 궁금한 점이 생겨서 질문드립니다. MultiServerMCPClient를 이용해서 react_agent를 생성하면, query에 적합한 tool들을 알아서 선별해서 query가 요청하는 태스크를 실행해주는 방식이란 점은 잘 이해가 됩니다.

 

하지만, 어떤 방식으로 tool들의 메타 정보(description, 필수 argument 정보)등을 가져오고 인식하는 지 공식 문서로 정리된 점이 있나요? 강의 자료에서는 local python 파일을 이용해서 tool을 등록했지만, 아래의 방식처럼 smithery를 통해 tool을 등록하는 방법도 있는 것으로 알고 있습니다.

 

이렇게 tool을 등록하는 방식이 다양한데 MultiServerMCPClient가 어떤 식으로 tool들의 정보와 사용법에 대한 정보를 얻어서, 태스크에 적절한 tool들을 할당할 수 있는 지에 대해 여쭤보고 싶습니다

"Gmail": {
            "transport": "sse",
            "enabled": True,
            "command": "npx",
            "args": [
                "-y",
                "supergateway",
                "--sse",
                "https://"
            ],

 

https://github.com/langchain-ai/langchain-mcp-adapters/tree/main 에서 MultiServerMCPClient 코드들을 조회해봤을 때 get_prompt나 get_resources가 있는 것으로 보아 분명 '어떠한 방식'으로 등록하려는 도구들에 대한 메타 정보를 가져오는 것 같은데 그 '어떠한 방식'을 구체적으로 알고 싶습니다

 

 

답변 2

1

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

안녕하세요! 좋은 질문 감사합니다.

MCP의 '어떠한 방식'은 표준화된 JSON-RPC 프로토콜입니다. 도구를 등록하는 방식(로컬 파일, Smithery, HTTP 서버 등)이 달라도, 모든 MCP 서버는 동일한 tools/list 인터페이스를 통해 도구 메타데이터를 노출하며, MultiServerMCPClient는 이 표준 인터페이스를 통해 모든 도구 정보를 수집하고 LangChain 에이전트가 활용할 수 있도록 변환합니다.

프로토콜에 관한 내용은 MCP 공식문서에 설명되어있습니다.

 

혹시 "LLM이 어떻게 판단하냐"라는게 궁금하시다면, 이건 솔직히 지금 단계에서는 알 수 없습니다.

  • LLM이 정확히 어떤 알고리즘으로 도구를 선택하는지

  • description을 어떻게 파싱하고 가중치를 부여하는지

  • 여러 도구 중 우선순위를 매기는 내부 로직

  • 컨텍스트와 도구 매칭하는 구체적인 메커니즘

같은 경우에는 블랙박스 특성상 내부 추론과정이 공개되지 않았기 때문에 지금 상황에서는 알 수 없습니다.

해당 부분을 궁금해하는 사람들이 많아서 연구도 활발하게 진행되고 있는데요, 저는 개인적으로는 내부 동작 원리를 이해한다고 해서 기술이 더 발전할 것 같지는 않습니다. 그렇게 되면 좋겠지만요. 수강하시면서 추가로 궁금한 점이 있으시면 또 질문으로 올려주세요! 최대한 빠르게 확인하고 답변 드리겠습니다

0

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

MultiServerMCPClient를 통해 react_agent를 생성할 때, 에이전트는 다양한 도구(tool)를 선택하여 질문(query) 수행에 적합한 작업을 처리합니다. 이 때, MultiServerMCPClient가 도구들의 메타 정보를 어떻게 수집하고, 각각에 대한 사용법을 이해하는지가 궁금하실 것입니다.

Tool의 메타 정보 수집 및 사용 과정

일반적으로 MultiServerMCPClient는 도구에 대한 메타 정보를 수집하고, 이를 통해 적절한 도구를 선택하는 여러 단계를 거칩니다.

  1. 도구 등록 및 메타 정보 수집:

    • 각 도구는 description, args, name 등의 메타 데이터를 가집니다. 이는 도구가 어떤 기능을 제공하는지 잘 설명하고, 사용에 필요한 필수 파라미터를 포함하게 됩니다.
    • 도구를 생성 및 등록하는 과정에서 이러한 메타 정보는 각 도구의 초기화 및 정의 과정에서 구체화됩니다.
  2. 분석 및 매칭:

    • MultiServerMCPClient는 등록된 각 도구에 대해 메타 정보들을 수집하여 내부 데이터베이스에 저장합니다.
    • 쿼리가 주어질 때, 에이전트는 쿼리의 내용을 분석하여 이 메타 정보를 기반으로 가장 적합한 도구를 선택합니다.
  3. 실행 및 출력:

    • 선택된 도구는 요구되는 파라미터를 입력 받아 작동하며, 이에 따라 전체 시스템의 반응 결과물이 생성됩니다.

공식 문서 및 예제 코드

지금 문의하신 내용과 관련하여 공식 문서는 MultiServerMCPClient가 도구의 메타 정보를 처리하는 상세한 구현 내용을 포함하지 않을 수도 있습니다. 그러므로, 오픈 소스 프로젝트의 리포지토리에서 코드를 직접 확인하는 것이 가장 정확한 방법입니다.

아래 링크는 관련 프로젝트의 리포지토리로, 각 도구의 정의 및 등록 방식, 메타 정보 처리 로직을 더 자세히 알아보실 수 있습니다:
- LangGraph GitHub Repository - MultiServerMCPClient

또한, langchain의 넓은 맥락에서 이러한 크로스 플랫폼 에이전트의 도구 사용 방식에 대한 더 깊은 이해를 얻고자 관련된 다양한 예제와 케이스 스터디를 참조하는 것도 유용할 수 있습니다.

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

gymoon10님의 프로필 이미지
gymoon10

작성한 질문수

질문하기