묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
그래프 구현 조언 부탁드립니다!
안녕하십니까! 강사님! 항상 질문에 대한 답변을 잘 해주심에 감사드립니다!목표는 학교 정보 챗봇이고 강사님의 강의 수강을 바탕으로 그래프 구현해보고 있습니다.현재 에이전트로는1) 웹 크롤링 하고 임베딩 시킨 정보를 바탕으로답변해주는 에이전트(학사일정, 장학금, 휴학 등)2) 의도와 다른 질문이 왔을 때 답변해주는 기본 llm현재 이렇게 있습니다 여기다가 에이전트를 하나 더 추가해서 멀티 에이전트로 라우팅해서 사용하거나 툴콜링 기법을 연습해보려 하는데 추가 계획중인 에이전트는 다음과 같습니다.3) 웹 사이트 공지사항에 대한 정보를 기반으로 답변해주는 에이전트공지사항은 실시간성과 특정 기간에 대한 정보가 강하기 때문에 에이전트를 분리해야한다고 생각했습니다.위의 해당 내용을 구현하기 위해서는 공지사항 크롤링 자동화 파이프라인을 구축한 후 이를 실시간으로 계속 임베딩을 시켜야할지 아니면 임베딩 기법이 아닌 다른 방법으로 구현하는게 좋을지에 대한 의문이 있습니다. 경험이 많으신 강사님께서의 노하우가 궁금합니다!또한 위처럼 구현하게 될 경우 1번 에이전트와 3번 에이전트를 라우터 할때 시스템 프롬포트가 애매하다고 생각됩니다. 강사님이라면 어떻게 하실지 노하우에 대한 조언을 듣고 싶습니다!!지식이 부족해서 깔끔하게 질문을 드리지 못함에 죄송합니다..! 감사합니다
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
3.3 강의 에러 질문
안녕하세요 좋은 강의 감사드립니다.3.3 강의를 듣고 있는데 코드에 오류가 발생해서 질문드립니다. chatgpt에도 물어봤는데 오류가 해결되지 않네요 tool_node.invoke({'messages': [ai_message]})부분에서 아래와 같은 오류가 발생합니다. ---------------------------------------------------------------------------ValueError Traceback (most recent call last) Cell In[10], line 4 1 # tool_node를 직접 invoke 하는 경우 이런 형식으로 해야 하고, ai message가 가장 마지막에 들어가야 한다. 2 # ai message는 반드시 tool_calls 값을 가지고 있어야 한다. ----> 4 tool_node.invoke({'messages': [ai_message], 'tools' : tool_list}) File c:\Users\user\miniconda3\envs\langgraph-agent-inf\Lib\site-packages\langgraph\_internal\_runnable.py:368, in RunnableCallable.invoke(self, input, config, **kwargs)366 if kw_value is MISSING: 367 if default is inspect.Parameter.empty: --> 368 raise ValueError( 369f"Missing required config key '{runtime_key}' for '{self.name}'."370 ) 371 kw_value = default 372 kwargs[kw] = kw_value ValueError: Missing required config key 'N/A' for 'tools'.혹시 몰라서 아래와 같이 해봤는데도 같은 오류가 발생합니다. tool_node.invoke({'messages': [ai_message], 'tools' : tool_list}) 기존 코드에서 바꾼것은 없고, 다만 azurechatopenai 대신 chatopenai를 직접 사용해서 llm, small_llm을 이렇게 정의했습니다.llm = ChatOpenAI(model='gpt-4o') small_llm = ChatOpenAI(model='gpt-4o-mini') 어디가 오류의 원인인걸까요 ㅠ?
-
미해결회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
source 실행 부분에서 저는 bin 폴더가 없어요..
streamlit run email_agent.py는 실행되는데 타이틀이 안 나오드라고요. source 부분 실행할 때 bin이 없어서 Scripts로 했어요. source 부분 실행하면 붉은 글씨로 실행이 안되네요.
-
미해결회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
AWS말고 다른 걸 사용해도 되나요 ?
AWS는 과금될까봐 무서워서..제가 개인적으로 라즈베리파이 서버하나가 있는데, 거기에 세팅이 가능할까요 ? 라즈베리파이를 생각하고 강의를 보니까 방법이 달라서 헷갈리네요 ;
-
해결됨회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
네이버 뉴스 스크랩 - 403 Forbidden 403 Forbidden nginx
안녕하세요 강사님!네이버에서 스크랩한 기사들의 URL을 호출하는 과정에서 특정 URL을 호출할 때 Http Request - 403 Forbidden 에러로 워크 플로우가 중단하는 현상이 발생하고 있습니다.혹시 해당 에러가 발생했을 때 관련 기사는 건너뛰고 다음 기사부터 정상적으로 워크 플로우가 실행될 수 있도록 조건을 넣을 수 있는 방법이 있을까요?
-
미해결회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
parser에서 에러가 발생합니다.
parser 부분에서 에러가 난다고 합니다. 선생님 하신것 그대로 따라 했는데 에러 나는것 같아 ai에서 물어보고 수정했는데 에러가 안 사라지네요...제가 비전공자라 뭘 놓쳤을 수도 있습니다..
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
데이터 전처리 조언 부탁드립니다!!
안녕하십니까 훌륭하신 강병진님! 질문이 있어서 글 남깁니다!저는 현재 교내 학교 문서를 RAG를 만들어서 정보를 얻는 것을 구현하던 중입니다.우선 개인 학생 성적, 수강 데이터들로 교내 졸업 요건을 파악하는 그래프를 구현 하던 중에 정확도 향상을 고민하던 중 조언을 듣고 싶습니다!현재 '21학번 컴퓨터공학과 졸업요건 알려줘' 라고 임베딩 검색을 할때 k값을 3으로 할때는 다른 학과 정보까지 같이 나옵니다. 그래서 k값을 1로 하면 딱 컴퓨터 공학과에 맞는 정보들만 주지만 공통 졸업 요건 부분들을 파악하지 못합니다. 결국 학교 문서상으로 llm이 판단하려면 공용 졸업요건 + 개별 학과 졸업요건 정보가 같이 주어져야지 잘 판단하는 거 같습니다.그래서 생각한 방법이 쿼리가 오면 그걸 기반으로 공통 졸업 요건 파악하는 노드, 개별 학과 졸업 요건 파악하는 노드를 만들어서 그걸 generate노드로 줌데이터 전처리 과정에서 임베딩 할 때 청크를 학과 별로 나눈다음에 메타데이터로 학과 이름을 넣어주고 하나의 retrieve로 k값의 갯수를 늘림이 정도 방법이 생각나는데 이러한 접근이 올바른지 혹은 더 적절한 방법이 있는지 궁금합니다. 참고 사항입니다!)현재 구현 그래프 동작은 다음과 같습니다엔트포인트 호출시 해당 학생 id값으로 db쿼리로 학생 성적 받아와서 성적 리스트와 쿼리를 상태로 가짐.유저 쿼리로 벡터db invoke값을 context로 담고 generate에서 쿼리, 성적 리스트, 컨텍스트 정보로 llm이 판단 (model: gpt-5-mini)글 읽어주셔서 감사합니다!!
-
해결됨회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
이메일 답장 여부 검증 봇 생성 - Model output doesn't fit required format 에러
Basic LLM Chain에 system 프롬프트 추가하고, output parser 연결한 후 포맷 지정하고 워크플로우를 실행하니 위와 같이 에러가 나서 다음 단계를 진행 못하고 있습니다.어떻게 해야 현 상황을 해결할 수 있을까요?
-
해결됨회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
네이버 뉴스 검색 API
강의에서는네이버 뉴스 스크랩을 하기위해, more url 을 호출하는 방식을 사용하셨는데, 서비스 API 를 사용해 보는것도 하나의 방법일것 같습니다.https://developers.naver.com/docs/serviceapi/search/news/news.md#%EB%89%B4%EC%8A%A4-%EA%B2%80%EC%83%89-%EA%B2%B0%EA%B3%BC-%EC%A1%B0%ED%9A%8C 사용하시려면, 네이버 개발자 센터에서 애플리케이션을 등록하고 클라이언트 아이디와 클라이언트 시크릿을 발급받아야 합니다. ^^;;
-
해결됨회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
"create_react_agent" deprecated
create_react_agent 가 deprecated 되었습니다.from langgraph.prebuilt import create_react_agent langchain.agents 에서 create_agent 를 제공합니다.참고로, system_prompt 가 생겼습니다.from langchain.agents import create_agent 자세한 내용은 아래 링크를 참고하세요.Deprecatehttps://docs.langchain.com/oss/python/releases/langgraph-v1#deprecation-of-create-react-agentcreate_agenthttps://docs.langchain.com/oss/python/releases/langchain-v1#create-agentcreate_agent 로 마이그레이션https://docs.langchain.com/oss/python/migrate/langchain-v1#migrate-to-create-agent
-
미해결회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
사전 수강 강의 질문
선생님 안녕하세요 LangGraph를 활용한 AI Agent 개발 (feat. MCP)를 듣지 않아도 이 강의를 따라가는데 문제가 없나요?
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
2.2 강의 질문(markdown 생성관련)
선생님 안녕하세요좋은 강의 감사합니다. 바로 아래 질문 올린 수강생입니다. 강의에 나온대로 openai api를 사용해서 pdf 파일을 markdown으로 변환하는데, 아래와 같은 오류(?) 메시지가 뜨다가, 맨 마지막에는 결과물이 나오긴 합니다.import nest_asyncio nest_asyncio.apply() from pyzerox import zerox import os import json import asyncio kwargs = {} ## Vision 모델에 사용할 시스템 프롬프트 custom_system_prompt = None model = "gpt-4o-mini" # os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY") # 메인 비동기 진입점을 정의합니다 async def main(): file_path = "./documents/income_tax.pdf" ## 로컬 파일 경로 및 파일 URL 지원 ## 일부 페이지 또는 전체 페이지를 처리 select_pages = None ## 전체는 None, 특정 페이지는 int 또는 list(int) 페이지 번호 (1부터 시작) output_dir = "./documents" ## 통합된 마크다운 파일을 저장할 디렉토리 result = await zerox(file_path=file_path, model=model, output_dir=output_dir, custom_system_prompt=custom_system_prompt, select_pages=select_pages, **kwargs) return result # 메인 함수를 실행합니다: result = asyncio.run(main()) # 마크다운 결과를 출력합니다 print(result)에러 메시지(실제는 이런게 여러번 반복이 됨)Give Feedback / Get Help: https://github.com/BerriAI/litellm/issues/newLiteLLM.Info: If you need to debug this error, use `litellm._turn_on_debug()'.ERROR:root:Failed to process image Error: Error in Completion Response. Error: litellm.RateLimitError: RateLimitError: OpenAIException - Rate limit reached for gpt-4o-mini in organization org-ZlBA2iz8ZXx6PbxDnPFaTYOK on tokens per min (TPM): Limit 200000, Used 200000, Requested 807. Please try again in 242ms. Visit https://platform.openai.com/account/rate-limits to learn more. Please check the status of your model provider API status. ERROR:root:Failed to process image Error: Error in Completion Response. Error: litellm.RateLimitError: RateLimitError: OpenAIException - Rate limit reached for gpt-4o-mini in organization org-ZlBA2iz8ZXx6PbxDnPFaTYOK on tokens per min (TPM): Limit 200000, Used 200000, Requested 807. Please try again in 242ms. Visit https://platform.openai.com/account/rate-limits to learn more. Please check the status of your model provider API status. ERROR:root:Failed to process image Error: Error in Completion Response. Error: litellm.RateLimitError: RateLimitError: OpenAIException - Rate limit reached for gpt-4o-mini in organization org-ZlBA2iz8ZXx6PbxDnPFaTYOK on tokens per min (TPM): Limit 200000, Used 200000, Requested 807. Please try again in 242ms. Visit https://platform.openai.com/account/rate-limits to learn more. Please check the status of your model provider API status.Give Feedback / Get Help: https://github.com/BerriAI/litellm/issues/newLiteLLM.Info: If you need to debug this error, use litellm._turn_on_debug()'. Give Feedback / Get Help: https://github.com/BerriAI/litellm/issues/new LiteLLM.Info: If you need to debug this error, use litellm._turn_on_debug()'. Give Feedback / Get Help: https://github.com/BerriAI/litellm/issues/newLiteLLM.Info: If you need to debug this error, use `litellm._turn_on_debug()'.ERROR:root:Failed to process image Error: Error in Completion Response. Error: litellm.RateLimitError: RateLimitError: OpenAIException - Rate limit reached for gpt-4o-mini in organization org-ZlBA2iz8ZXx6PbxDnPFaTYOK on tokens per min (TPM): Limit 200000, Used 200000, Requested 807. Please try again in 242ms. Visit https://platform.openai.com/account/rate-limits to learn more. Please check the status of your model provider API status.Give Feedback / Get Help: https://github.com/BerriAI/litellm/issues/newLiteLLM.Info: If you need to debug this error, use `litellm._turn_on_debug()'.ERROR:root:Failed to process image Error: Error in Completion Response. Error: litellm.RateLimitError: RateLimitError: OpenAIException - Rate limit reached for gpt-4o-mini in organization org-ZlBA2iz8ZXx6PbxDnPFaTYOK on tokens per min (TPM): Limit 200000, Used 200000, Requested 807. Please try again in 242ms. Visit https://platform.openai.com/account/rate-limits to learn more. Please check the status of your model provider API status.- 결과물 : ZeroxOutput(completion_time=69952.953, file_name='income_tax', input_tokens=626909, output_tokens=17668, pages=[Page(content='# 소득세법\n[시행 2025. 1. 1.] [법률 제20615호, 2024. 12. 31., 일부개정]\ (이후 생략)--> 근데 생성된 markdown 파일을 보니 18조 정도밖에 생성이 안되어있고, 그 이후 내용은 모두 없더라고요. 이건 그냥 token의 문제 때문에 openai api가 너무 큰 pdf파일을 처리하지 못하면서 발생하는 문제인가요?강의에서는 아무런 문제 없이 변환이 되는데, 갑자기 안되는 이유가 있을까요? 강의 소스코드에 제공된 파일의 markdown 파일에는 소득세법의 전 내용이 들어가있던데, 그걸 사용하면 강의 따라가는데는 문제가 없어보입니다. 맞나요?
-
해결됨LangGraph를 활용한 AI Agent 개발 (feat. MCP)
2.2 강의 질문
안녕하세요? 2.2 강의에서 강의내용과 노트북에 차이가 있어 질문드립니다. 강의에서는 openai api key를 쓰셨는데, 노트북은 azure로 되어있더라고요 강의대로 openai api key를 써서 했는데 아래와 같은 오류가 납니다. 혹시 어떤 것 때문일까요? from pyzerox import zerox import os import json import asyncio ### 모델 설정 (Vision 모델만 사용) 참고: https://docs.litellm.ai/docs/providers ### ## 일부 모델에 필요할 수 있는 추가 모델 kwargs의 자리 표시자 kwargs = {} ## Vision 모델에 사용할 시스템 프롬프트 custom_system_prompt = None # model = "azure/gpt-4o-2024-11-20" model = "gpt-4o-mini" os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY") # os.environ["AZURE_API_KEY"] = os.getenv("AZURE_OPENAI_API_KEY") # os.environ["AZURE_API_BASE"] = os.getenv("AZURE_OPENAI_ENDPOINT") # os.environ["AZURE_API_VERSION"] = "2024-08-01-preview" # "2023-05-15" # 메인 비동기 진입점을 정의합니다 async def main(): file_path = "./documents/income_tax.pdf" ## 로컬 파일 경로 및 파일 URL 지원 ## 일부 페이지 또는 전체 페이지를 처리 select_pages = None ## 전체는 None, 특정 페이지는 int 또는 list(int) 페이지 번호 (1부터 시작) output_dir = "./documents" ## 통합된 마크다운 파일을 저장할 디렉토리 result = await zerox(file_path=file_path, model=model, output_dir=output_dir, custom_system_prompt=custom_system_prompt, select_pages=select_pages, **kwargs) return result # 메인 함수를 실행합니다: result = asyncio.run(main()) # 마크다운 결과를 출력합니다 print(result) (오류내용 아래부분만) TypeError: 'NoneType' object is not iterable2. 강의내용과 노트북을 다르게 하신 이유가 있으실까요? azure openai api key, azure openai endpoint 값들은 chatgpt에 검색해서 나오는 방법으로 받으면 되는건가요? 아니면 다른 방법이 있나요?
-
해결됨회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
사내 QnA 봇 강의 중 inhouse-python-index 결과
병진님 안녕하세요:)바쁘실텐데 답변 확인해주셔서 감사합니다!'사내 QnA 봇' 강의 실습 중에 질문이 생겨서 글 남깁니다. inhouse-rule-index는 pdf 표의 한계로 제대로 인덱싱이 안되어서 틀린 답이 나온다고 하셨습니다.그 근거로 '전결 규정' 파일을 확인하셨고, '대표이사' 승인이 필요하다고 말씀 주셨습니다. 실제로 inhouse-rule-index 실습 결과, '대표이사'에 대한 언급이 답변에 없어서 이해를 하고 넘어갔습니다. 하지만, inhouse-python-index로 전처리를 하고 n8n으로 교체후에 돌려보았을 때도 아래와 같이 동일한 결과가 나왔는데요. 왜 그럴까 확인해봤더니, '경비 관리 가이드' 문서의 내용을 토대로 답변을 작성한 것으로 보입니다. 제 질문은,'경비 관리 가이드' 문서만 보면 처음에 틀렸다고 생각했던 답변이 맞다라고 판단되는데, 제가 이해한게 맞을까요? 서로 다른 문서에서 승인 절차에 대해 다른 내용이 있기 때문에 문서 싱크가 맞지 않아서 그런 것으로 보여집니다. 이 부분에 대해서 병진님 의견이 궁금합니다!
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
[문의] query에 대한 응답을 못찾을때 해결하는 방안
강의에서 "연봉 5천만원 직장인의 소득세는?" 이라는 (직장인이라는)단어를 문서에서 찾지 못해서 응답을 받지 못했다고 하는데 보통 사용자가 질문할때는 정확한 단어를 입력할 확률이 적을것으로 생각되서 이 경우 쿼리에 대해 llm 이나 다른 방법을 통해 알아서 잘(?) 질문에 대해서 llm이 해석 할 수 있도록 해줄 필요가 있을 것 같다고 생각이 드는데, 혹시 이런 경우에 있어서 해결방안이나 팁이 있으신가요?
-
미해결LangGraph를 활용한 AI Agent 개발 (feat. MCP)
Adaptive RAG vs Multi-agent
안녕하십니까, 강사님.자세하고 유익한 강의를 준비해주셔서 감사합니다. 이전 강의 내용과 비교하면서 궁금한 점이 생겼습니다.이전에 다루신 Adaptive RAG와 이번에 다루신 Multi-Agent 강의의 차이점이 무엇인지 알고 싶습니다.만약 다른 개념이라면, 두 접근 방식이 어떤 부분에서 가장 큰 차이를 보이는지도 궁금합니다.
-
미해결회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
웹훅 url 환경변수로 고생을 좀 했습니다.ㅎ
웹훅 붙일때 env 파일에는 production url이 되었으나, 이상하게 실제os.getenv("AGENT_API_URL")로 돌리면 test url로 나오는 현상이 있었습니다. 사용자 환경변수 기타 모든 환경변수 조회하였으나 안나오는데 이상하게 계속 test-url로 요청하더라구요 이걸로 4시간 잡아 먹었습니다....하하하하load_dotenv(override=True) agent_api_key = os.getenv("AGENT_API_KEY") agent_api_url = os.getenv("AGENT_API_URL")찾아서 삭제 해볼려고 하였으나, 못 찾고 대신 override하면 괜찮아 지니 참고 하시기 바랍니다.근데 진짜 이유를 모르겠습니다....왜 test url로 등록이 됫는지...
-
해결됨회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
[구글 드라이브 이용한 데이터 전처리] get row 대신 다른 방법 공유
병진님 안녕하세요!좋은 강의 덕분에 재미있게 실습 중입니다ㅎㅎ강의 중에 google sheet 노드의 get row 대신 다른 방법 알게 되면 공유해달라고 하셔서, 실습하면서 다른 방법 찾게 되어서 공유 드려요! (참고로 제가 참고한 링크는 https://community.n8n.io/t/how-to-see-all-files-inside-a-google-drive/157053/2 입니다) 저는 google drive 노드의 Search files and folder를 사용하였습니다. 강의 중에는 해당 옵션을 사용하면 폴더의 id만 나온다고 하셨는데, Filter 부분에 내용을 추가하니까 해당 폴더 안에 있는 파일들의 id와 name이 나왔습니다. 그래서 get row 대신에 search files and folder 부분만 수정하였는데요. 실제로 loop over items 이후 download file 부분에서 파일의 id와 연결하여 다운로드 되는 것 까지 확인하였습니다. 작지만 도움 되셨으면 좋겠네요ㅎㅎ강의 늘 감사합니다!
-
해결됨회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
Naver 뉴스 스크랩 봇 강의 중 filter 노드
안녕하세요 병진님:)좋은 강의 감사합니다! n8n 강의를 차례차례 따라하고 있는데요.'Naver 뉴스 스크랩 봇' 강의를 따라하는 도중에 의도치 않는 결과가 나와서 질문 드립니다. 강의에서 Filter 노드를 사용하셨는데, Filter 노드는 array를 받아서 그 중에서 조건에 맞지 않는 값들은 filter하는 것으로 이해하였습니다. 하지만 저희는 for loop을 통해서 array가 아닌 한 개의 값들만 filter 노드를 통과할 것이고, 그리고 실제로 이 값이 false이면 진행하지 않고 멈춰버릴 것으로 예상됩니다.실제로 실습 도중에 아래의 그림과 같이 Filter 노드 결과가 false이니까 그 이후를 진행하지 않고 workflow successfully ended로 끝나버렸습니다. 그래서 Filter 노드를 쓰면 안된다고 이해했는데 맞을까요? 그래서 Filter 노드 대신에 If 노드를 사용하였고, false이면 for loop과 이어주었더니 그제서야 의도대로 동작하였습니다. 이렇게 수정한 버전이 맞을까요? (+아니면 Filter 노드로 원래 의도대로 동작하는거라서 굳이 If 노드를 사용할 필요가 없는건가요?) 바쁘실텐데 답변 주시면 감사하겠습니다!
-
해결됨회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
비개발자 강의 수강
안녕하세요! 좋은 강의 만들어주셔서 감사합니다.저는 비개발자로 무턱대고 강의를 수강했는데, 파이썬 관련된 내용은 아무래도 이해가 어렵네요.순서대로 강의를 듣는 게 좋겠다고 생각해서 앞에서부터 듣고 있는데, 아무래도 저에게 가장 도움되는 파트는 Text to SQL이 아닐까 싶습니다만... 이 파트에도 파이썬 지식이 필요하면 파이썬을 공부해야 하나 고민입니다. 그래서 질문을 드리자면Text to SQL 파트도 파이썬 지식이 필요할까요?만약 그렇지 않더라도 파이썬을 공부하면 다른 강의 내용을 익히는 데 도움이 될 것 같은데, 이 경우에 파이썬을 공부하는 방법으로 추천하시는 게 있을까요?감사합니다!