묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Claude + IntelliJ로 TodoList 개발하기 - MCP 완전 정복
클로드 설정 변경해도 mcp 서버 연결이 되지 않습니다.
위와같이 설정 저장후 재시작 하면 서버 연결 실패가 뜹니다. 원인을 알 수 있을까요? intellij랑 클로드는 최신 버전입니다.
-
해결됨대세는 바이브 코딩과 MCP_Cursor AI로 시작하기
token 비용에 대해서
Cursor AI를 제대로 활용하기 위한 핵심정리에서 설명하신 OpenAI의 모델별 비용을 해당 docs에서 확인이 가능하고 설명하신 내용도 이해가 됩니다.하지만 Cursor를 유료로 사용하는 입장에서는 이와 같은 사항에 대해서는 따로 신경을 쓰지 않아도 되는게 아닌가요? Pricing | Cursor - The AI Code Editorcursor.com 의 pricing 정책 비교를 봐도 모델별로 약간의 제한이 있다고 하지만 pro plan만 들어가도 비용에 대해서는 걱정을 안해도 될거라고 생각을 하는데 제가 잘못알고 있는건가요?
-
미해결Spring AI 실전 가이드: RAG 챗봇 만들기
1
1
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
커널 재실행 후 Run all 할 경우 에러
커널 재실행 직후 run all 하면 토큰 수 제한 에러가 뜹니다. 다시 run all하면 잘 실행되구요. websearch 후 generate의 query 찍어보면 토큰 수 제한 걸릴일이 없는 문장인데 왜이럴까요? websearch 후 generate의 query 값이 "쿼리입니다 === " 이 부분입니다.
-
해결됨LangGraph를 활용한 AI Agent 개발 (feat. MCP)
create_react_agent, retriever요약 문제점
안녕하십니까 선생님 강의 잘 듣고있습니다.만약 create_react_agent에 tool이 vectordb retriever를 수행 할 때 retriever의 문서의 내용이 너무 많은 context를 가지고 있다면 llm이 리트리버한 결과를 바탕으로 질문에 대한 답변을 하지 않고 리트리버 문서를 요약해서 답변으로 출력합니다. 왜 그런건지 궁금합니다. from langgraph.prebuilt import create_react_agent @tool def retriever_tool(query: str)->List[Document]: """ 이 도구는 HR 데이터베이스에서 정보를 검색합니다. """ return retriever.invoke(query) tools = [retriever_tool] research_agent = create_react_agent( model = llm, tools = tools, prompt=(""), )
-
미해결[Sionic MCP 시리즈 1] Model Context Protocol 을 이용하여 IntelliJ 와 코딩해보자!
mcp server가 인텔리제이 플러그인에 안나오는데 어떻게 해야하나요?
mcp server가 인텔리제이 플러그인에 안나오는데 어떻게 해야하나요?
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
Agent로 리눅스 제어
안녕하세요 강의 잘 보고있습니다. 에이전트 구현 관련해서 강의 외적으로 몇가지 질문드립니다. 에이전트를 리눅스 호스트에서 구동하며 ShellTool, PlayWright 등을 활용해서 원래 사람이 직접 리눅스와 소통하며 수행해야 했을 동작들을 에이전트로 대체하고자 합니다. 이와 관련된 좋은 Practice Example이 있을까요?에이전트를 여러 시나리오에 대응할 수 있도록 여러 Sub StateGraph로 나누어 작업한 후에 이들을 하나의 에이전트로 합치는 구조를 생각하고 있습니다. 혹시 이렇게 될 경우 State가 Subgraph 마다 다른 것과, 메모리 등에 대해서 정확한 그림이 그려지지 않는데 이를 해결하기 위해 혹시 효과적인 설명이나 예시가 있을까요?
-
해결됨LangGraph를 활용한 AI Agent 개발 (feat. MCP)
agent가 tool을 선택하는 방법?
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가 있는 것으로 보아 분명 '어떠한 방식'으로 등록하려는 도구들에 대한 메타 정보를 가져오는 것 같은데 그 '어떠한 방식'을 구체적으로 알고 싶습니다
-
해결됨LangGraph를 활용한 AI Agent 개발 (feat. MCP)
멀티턴, MemorySaver,MessagesState 질문 입니다
안녕하세요 강의 보다가 헷갈리는 부분이 있어서 질문드립니다 질문1. 3.3 LangGraph에서 도구(tool) 활용 방법아래 agent 함수는 여러번 호출되는데 리턴하는 부분에서 새로운 배열을 만드는것 처럼 보이지만 add_messages에 의해 자동으로 누적되어 멀티턴 대화가 된다고 이해하면 맞을까요? def agent(state: MessagesState) -> MessagesState: """ 에이전트 함수는 주어진 상태에서 메시지를 가져와 LLM과 도구를 사용하여 응답 메시지를 생성합니다. Args: state (MessagesState): 메시지 상태를 포함하는 state. Returns: MessagesState: 응답 메시지를 포함하는 새로운 state. """ # 상태에서 메시지를 추출합니다. messages = state['messages'] # LLM과 도구를 사용하여 메시지를 처리하고 응답을 생성합니다. response = llm_with_tools.invoke(messages) # 응답 메시지를 새로운 상태로 반환합니다. return {'messages': [response]} 질문2. 3.5 Agent의 히스토리를 관리하는 방법MemorySaver()의 목적은 주피터 노트북 각 블록을 사용하는데 있어 그 전에 실행해서 얻은 message를 메모리에 저장후 다음 요청 (update_query)에 반영하기 위해 사용된게 맞을까요?
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
새로운 메시지에 summary 추적 질문드립니다.
from langchain_core.messages import SystemMessage def agent(state: AgentState) -> AgentState: """ 주어진 `state`에서 메시지를 가져와 LLM과 도구를 사용하여 응답 메시지를 생성합니다. Args: state (AgentState): 메시지 기록과 요약을 포함하는 state. Returns: MessagesState: 응답 메시지를 포함하는 새로운 state. """ # 메시지와 요약을 state에서 가져옵니다. messages = state['messages'] summary = state['summary'] # 요약이 비어있지 않으면, 요약을 메시지 앞에 추가합니다. if summary != '': messages = [SystemMessage(content=f'Here is the summary of the earlier conversation: {summary}')] + messages # LLM과 도구를 사용하여 메시지에 대한 응답을 생성합니다. response = llm_with_tools.invoke(messages) # 응답 메시지를 포함하는 새로운 state를 반환합니다. return {'messages': [response]}부분에summary = state['summary']agent시작하자마자 summary를 넣게되는데 해당 소스부분은 몇 번을 질문해도 처음에는 빈값이 들어가는게 맞나요?summary를 연속질문에 처음 시작 부터 적용하기 위해서는 아래처럼 session정보를 받아서 처리해야하는지 궁금합니다.from langchain_core.messages import HumanMessage query = '안녕' for chunk in graph.stream({'messages': [HumanMessage(query)], 'summary': graph.get_state(config).values['summary']}, config=config, stream_mode='values'): chunk['messages'][-1].pretty_print()
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
uv sync 입력 후 패키지 설치 도중 실패 합니다.
os: 윈도우10입니다uv version: uv 0.7.5 (9d1a14e1f 2025-05-16) x Failed to build `uvloop==0.21.0` |-> The build backend returned an error `-> Call to `setuptools.build_meta.build_wheel` failed (exit code: 1) [stderr] Traceback (most recent call last): File "<string>", line 14, in <module> requires = get_requires_for_build({}) File "C:\Users\wyhil\AppData\Local\uv\cache\builds-v0\.tmpwlGSc0\Lib\site-packages\setuptools\build_meta.py", line 331, in get_requires_for_build_wheel return self._get_build_requires(config_settings, requirements=[]) ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\wyhil\AppData\Local\uv\cache\builds-v0\.tmpwlGSc0\Lib\site-packages\setuptools\build_meta.py", line 301, in _get_build_requires self.run_setup() ~~~~~~~~~~~~~~^^ File "C:\Users\wyhil\AppData\Local\uv\cache\builds-v0\.tmpwlGSc0\Lib\site-packages\setuptools\build_meta.py", line 317, in run_setup ~~~~^^^^^^^^^^^^^^^^ File "<string>", line 8, in <module> import setuptools.build_meta as backend ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: uvloop does not support Windows at the moment hint: This usually indicates a problem with the package or the build environment.
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
2.2 retrieval PDF 변환시 cp949 error
markdown(md) 을 text(txt) 로 변환한 다음에 load 하고 split 을 해줘야함 txt 로 변환된 건 langchain 의 textloader 를 써서 load 해야함이때, utf-8로 encoding 된 txt 파일을 langchain_community 로 TextLoader 하려고 할때 encoding 을 안쓰게 되면 cp949 에러가 나게 됩니다. 너무 기초적인 질문이라 질문글에 없는 것 같아 혹시 저같은 초보를 위해 기록을 남겨 둡니다.^^(참고로 저는 윈도우 환경으로 따라 하고 있는 중 입니다)from langchain_community.document_loaders import TextLoader loader = TextLoader(text_path, encoding='utf-8') # ✅ 인코딩 명시 document_list = loader.load_and_split(text_splitter)또한 윈도우에서 uv.lock 을 읽어들일수가 없었는데요...혹시 윈도우에서도 가능하셔서 하신분 계시면 노하우(?) 부탁드릴게요~
-
해결됨LangGraph를 활용한 AI Agent 개발 (feat. MCP)
같은 소스를 서로 다른 pc에서 실행시 정답률 차이가 생겨요
@tool def retriever_tool(query: str) -> str: """사용자의 질문에 기반하여 벡터 스토어에서 회사 HR 문서를 검색합니다. 이 도구는 RAG(Retrieval Augmented Generation) 방식을 사용하여: 가장 적합한 문서를 찾아냅니다. Args: query (str): 사용자의 질문 (미리 정의된 질문이 사용됨) Returns: str: 문서 내용 """ _response = _retriever.invoke(query) return _response _research_tools = [retriever_tool] _research_agent = create_react_agent( llm, tools=_research_tools, state_modifier='당신은 HR 담당자 입니다. 의견이 아닌 사실만 제공하세요' ) def _db_research_node(state: MainState) -> Command[Literal["supervisor_node"]]: """ HR 조사 node입니다. 주어진 State를 기반으로 HR 조사 에이전트를 호출하고, 결과를 supervisor node로 전달합니다. Args: state (MainState): 현재 메시지 상태를 나타내는 객체입니다. Returns: Command: supervisor node로 이동하기 위한 명령을 반환합니다. """ result = _research_agent.invoke({"messages" : state["messages"]}) print(f" db result : {result}") return Command( update={'messages': [HumanMessage(content=result['messages'][-1].content, name='db_research')]}, goto='supervisor_node' )이런 간단한 create_react_agent를 이용한 agent를 pip 버전이 약간다른 서로다른 pc에서 실행을 하였습니다. 첫 번째 피시에서는 LLM이 대답을 정말잘하지만 두 번째 피시에서는 전혀 엉뚱한 답변을 하며 정답률이 0%에 가깝게 나옵니다. from langgraph.prebuilt import create_react_agent이런 패키지 버전에 따라서 LLM의 추론 생각 능력 차이가 있나요? LLM과 vectordb, embedding 모델, 소스는 동일합니다. 피시 사양도 똑같고 langraph 패키지 버전차이만 존재합니다.
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
langgraph 이미지 표시 관련 draw_mermaid_png() TimeoutError 관련
안녕하세요.. langgraph 에서 graph_builder를 이용하여 노드와 엣지를 추가한 후에 compile한 후에 생성된 구조를 이미지로 표현하는 부분에서 오류가 발생합니다.혹시 이 오류가 왜 발생하는지, 어떻게 수정해야 하는지 알려주시면 좋겠습니다from IPython.display import Image, displaydisplay(Image(graph.get_graph().draw_mermaid_png()))이 부분을 실행하게 되면 다음과 같은 오류가 발생합니다.TimeoutError Traceback (most recent call last) File ~/Workspace/pythonprj/langgraphtutorial/.venv/lib/python3.12/site-packages/urllib3/connectionpool.py:534, in HTTPConnectionPool._make_request(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)533 try: --> 534response = conn.getresponse() 535 except (BaseSSLError, OSError) as e:.......ValueError: Failed to reach https://mermaid.ink/ API while trying to render your graph after 1 retries.이미지를 생성하는데 다른 사이트로 요청을 하는 것 같은데..timeout 오류가 발생하네요..
-
해결됨실리콘밸리 엔지니어와 함께하는 랭체인(LangChain)과 랭그래프(LangGraph) 그리고 MCP
MCP 서버 관련 질문이있습니다.
안녕하세요! 강의 잘 보고있습니다. MCP 관련해서 질문이 두 개 있습니다.# 1MCP튜토리얼과 이 강의, 유투브를 보고 MCP 서버를 개발중입니다.https://github.com/snaiws/DART-mcp-serverDART api연동하는 서버고 api가 83종류가 있습니다.FastMCP 사용하니 메인 스크립트에 함수를 매우 많이 적어야해서 팩토리클래스를 만들고, docstring을 따로 관리하고싶어 함수와 docstring을 분리해서 팩토리클래스에서 조립했습니다. 그런데 이렇게 만들고보니 FastMCP 개발방식 말고 from mcp.server import Server를 통해 좀 더 로우레벨로 만드는 방식도 있는 것 같았습니다. https://github.com/modelcontextprotocol/python-sdk여기의 Low-Level부분입니다.혹시 Low-level관련 영상도 업로드예정이 있으신가요?# 2MCP 서버에 툴을 83개나 만들면 tool calling하는데 헷갈려할 것 같은데 맞는지... 그리고 어떻게 대처가 가능할지 조언부탁드립니다 감사합니다.
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
2.2 PDF 전처리 강의에서 PDF 변환처리 관련해서..
안녕하세요.. 2.2 PDF 전처리 강의를 따라서 진행하고 있습니다. 동일한 openai 모델을 이용하고, pyzerox를 사용했는데, 강사님이 보여주시는 결과와는 다른 내용이 나와서, pyzerox 사용시 추가설정 부분이 빠졌는지 궁금하네요..제가 사용한 세법 pdf는 다음과 같이 표가 구성되어 있습니다. 이 테이블을 알려주신 pyzerox 패키지로 실행하고 나온 md 파일을 text로 변환했는데 다음과 같이 나옵니다.| 과세표준 | 세 율 ||------------------------------|------------------------------------------|| 1,400만원 이하 | 과세표준의 6번세트 || 1,400만원 초과 | 84만 원 + (1,400만원을 초과하는 금액의 15번세트) || 5,000만원 이하 | 624만 원 + (5,000만원을 초과하는 금액의 24번세트) || 8,800만원 이하 | 1,536만원 + (8,800만원을 초과하는 금액의 35번세트) || 8,800만원 초과 | 3,706만원 + (1,500만원을 초과하는 금액의 38번세트) || 3,000만원 초과 | 9,406만원 + (3,000만원을 초과하는 금액의 40번세트) || 5,000만원 초과 | 1,406만원 + (5,000만원을 초과하는 금액의 42번세트) || 10,000만원 초과 | 3,406만원 + (10,000만원을 초과하는 금액의 45번세트) |퍼센트가 번세트로 인식되어서 나오고, 각행도 두줄이 제대로 변환안되고 있는 상태이면서, 추출된 글도 틀립니다. 후반으로 갈 수록 테이블 값이 엄청나게 틀린데,. 이런 상태로는 원하는 RAG를 제대로 할 수 없을 것 같습니다. 이를 해결할 수 있는 방법을 자세히 알려주시면 좋겠습니다.
-
해결됨LangGraph를 활용한 AI Agent 개발 (feat. MCP)
병렬 처리 질문 있습니다.
graph_builder.add_edge('get_tax_base_equation', 'calculate_tax_base') graph_builder.add_edge('get_tax_deduction', 'calculate_tax_base') graph_builder.add_edge('get_market_ratio', 'calculate_tax_base')2.7 병렬 처리를 통한 효율 개선 (feat. 프롬프트 엔지니어링).ipynb 에서 질문 있습니다.3개가 병렬로 실행된다면 분명 먼저 끝나는 노드가 있을 거고 그러면 완료 노드 순서에 맞게 calculate_tax_base를 실행해야 하지만 결과를 보면 calculate_tax_base를 한번만 실행하더라고요. 그러면 어떠한 조작 없이도 ranggraph에서 add_edge를 사용한 노드라면 자동으로 병렬 처리 완료 상태를 보관하고 3개가 전부 종료 된 후 실행된다고 이해했는데 맞을 까요? 제가 이해한게 맞다면 add_edge를 사용하지 않은 노드(Comand 명령어 사용한 노드)들의 병렬 처리에서 스레드 동기화 처리가 자동으로 안되기 때문에 반드시 add_edge를 반드시 사용해야하나요?이런 질문을 드리는 이유는 Command를 병렬로 처리해보고 있는데 궁금증이 생겨서 그렇습니다.! messages = [ {"role": "system", "content": system_prompt}, ] + state["messages"] response = llm.with_structured_output(Routers).invoke(messages) datasources = [router['next'] for router in response['nexts']] print(datasources) # FINISH를 analyst_node로 변환 goto_nodes = [ "analyst_node" if ds == "FINISH" else ds for ds in datasources ] # 병렬 실행을 위해 전체 리스트 반환 return Command(goto=goto_nodes)
-
해결됨LangGraph를 활용한 AI Agent 개발 (feat. MCP)
supervisor_node에 messages 설명해주세요
3.7 찐 Multi-Agent System (feat. create_react_agent) 에 구현하신 def supervisor_node안에 messages = [ {"role": "system", "content": system_prompt}, ] + state["messages"]해당 소스 Message에 system을 이렇게 선언하는게 맞는지 이해가 가질 않습니다. 선생님 설명에서는 analyst_node안에 invoke할 때 supervisor_node안에 넣었던 systemprompt는 불필요해서 아래 소스처럼 result = analyst_chain.invoke({'messages': state['messages'][1:]})[1:]를 하신다고 설명하셨는데 analyst_node 안에서 state['messages']를 print함수로 확인해 봤더니 systemmessage가 들어있지 않았습니다. messagestatas에 messages에 system메세지를 추가하기 위해서 고민하다 systemMessage를 넣었더니 선생님 설명대로 됐지만 무슨 차이인지 잘 모르겠습니다. 아마 예상하기에는 MessageState가 SystemMessage, AIMessage, HumanMessage 밖에 허용을 안 하는 것 같은데 맞나요? 어떤게 올바른 방법인가요? messages = [ SystemMessage(content=system_prompt), ] + state["messages"]
-
해결됨Claude + IntelliJ로 TodoList 개발하기 - MCP 완전 정복
mcp를 github에서 download 받아서 intelij에서 사용 하는 순서을 알 려 주세요려 주
- 학습 관련 질문을 남겨주세요. 구체적으로 적을수록 좋아요!- 마크다운과 단축키를 활용하면 글을 더 편하게 작성할 수 있어요.- 커뮤니티 질문 & 답변에 비슷한 내용이 있었는지 먼저 검색해보세요.- 서로 예의를 지키며 존중하는 분위기를 함께 만들어가요.- 잠깐! 인프런 서비스 관련 문의는 1:1 문의하기를 이용해 주세요