- AISchool ( http://aischool.ai/ )
- AISchool 유튜브 채널 운영 ( https://www.youtube.com/@aischool_ai )
- 서울대학교 인공지능 및 컴퓨터 비전 연구실 석사
- [솔라리스의 인공지능 연구실] 블로그 운영
- [텐서플로로 배우는 딥러닝] 집필
- S전자 컴퓨터 비전 관련 프로젝트 수행
- 기업대상 [AI 컨설팅 서비스] 제공
- 에이아이스쿨 [TensorFlow와 실습 프로젝트로 배우는 딥러닝-컴퓨터비전 Basic 코스] 강의 진행
講義
受講レビュー
- 全ての人のためのMCPを利用した業務自動化 - 様々な事例で学ぶMCP(Model Context Protocol)活用 (feat. Cursor)
- 全ての人のためのMCPを利用した業務自動化 - 様々な事例で学ぶMCP(Model Context Protocol)活用 (feat. Cursor)
- すべてのための大規模言語モデル LLM (Large Language Model) Part 1 - Llama 2 Fine-Tuning 試す
- すべてのための大規模言語モデル LLM (Large Language Model) Part 1 - Llama 2 Fine-Tuning 試す
- すべてのための大規模言語モデル LLM (Large Language Model) Part 1 - Llama 2 Fine-Tuning 試す
投稿
Q&A
trainer.train() 실행했는데 API key를 입력하라고 합니다. ㅠ
안녕하세요~. 반갑습니다.먼저 수강에 불편을 드려서 죄송합니다. 강의 영상 촬영 시점 이후로 버전이 업데이트되면서 Weights & Biases(W&B) 설정이 기본으로 포함되도록 변경된 것 같네요.Weights & Biases(W&B) 설정을 off 하려면 TrainingArguments를 선언할때 아래와 같은 설정 값을 추가해주시면 됩니다.report_to="none"따라서 해당 설정값을 추가한 아래 colab 링크로 실습 진행 부탁드립니다.https://colab.research.google.com/drive/1RoB95uhQjEZ97O04NYDrFI9yLHixPcxt?usp=sharing (2025-08-22 버전)좋은 하루되세요.감사합니다.
- 0
- 2
- 21
Q&A
Agent Auto on / off 관련 문의
안녕하세요~. 반갑습니다.저 같은 경우는 기본적으로 o3 모델을 사용하고 o3 모델이 잘 안될경우에 gemini 모델로 다시 시도합니다. o3나 gemini를 사용하는 이유는 현재까지 나온 모델중 가장 성능이 좋기때문입니다. o3를 기본으로 사용하고 gemini 모델로 다시 시도하는 이유는 동일한 문제라도 o3로는 잘안되다가 llm 모델을 바꿔서 gemini로 시도할 경우 잘 해결되는 경우도 있기 때문입니다.본 강의에서는 복잡한 코딩 작업등은 거의 진행하지 않지만 복잡한 코딩 작업에 활용하다 보면 복잡한 코딩 작업에는 확실히 o3나 gemini 같은 reasoning 기능이 탑재된 llm 모델의 코딩 능력이 다른 llm 모델보다 훨씬 좋다는 것을 체감할 수 있습니다.요약:1. o3를 기본으로 사용2. o3로 잘안되면 gemini로 다시 시도3. o3나 gemini를 사용하는 이유 = 가장 성능이 좋기 때문에좋은 하루되세요~.감사합니다.
- 0
- 1
- 29
Q&A
유튜브 요약이 안됩니다.
안녕하세요~. 반갑습니다. 우선 수강에 불편을 드려서 죄송합니다.말씀해주신대로 다시 테스트해본 결과 Get_Transcript tool 호출이 제대로 되지 않는 현상을 저도 확인하였습니다. 영상 촬영시점 이후로 유튜브 api가 업데이트되었는데 저희가 연동하는 https://github.com/adhikasp/mcp-youtube mcp서버에서 해당 업데이트 내용을 추가해서 mcp 서버를 추가로 업데이트하지않아서 발생한 현상으로 생각됩니다. (해당 mcp 서버의 마지막 개발을 위한 commit 내역이 약 3개월 전입니다.) 좀더 active하게 개발되고 있는 유튜브 관련 MCP 서버를 찾아보고 추후에 유튜브 영상 요약 관련 강의를 추가적으로 업로드하도록 하겠습니다. 우선은 https://github.com/adhikasp/mcp-youtube MCP 서버를 사용하는 실습 영상들은 스킵하고 강의를 수강해주시기 바랍니다. (다만 뒤에 강의 진행을 위해서 해당 영상에서 설치하는 uvx 프로그램은 설치해주셔야합니다.) 다시 한번 수강에 불편을 드려서 죄송합니다.좋은 하루되세요~.감사합니다.
- 0
- 2
- 70
Q&A
비동기 방식으로 agent를 구성할 필요성이 궁금합니다.
안녕하세요~. 반갑습니다.먼저 강의를 잘 듣고 계시다니 기쁘네요 🙂 말씀해주신 부분을 확인해보니 현재 로직상 말씀해주신대로 plan -> execute -> replan 이 순차적으로 실행되는 구조라 비동기 방식의 이점이 딱히 없는 상태인 것 같습니다.즉, 그냥 동기 방식 def로 바꿔도 큰 차이는 없을 것 같습니다. 비동기 방식으로 예제가 작성된 정확한 이유는 알수 없지만, 처음 예제를 만들때 뭔가 비동기적인 로직을 넣으려는 구상이 있었는데 예제 최종본에서는 해당 구상이 실현되지 못한게 아닐까 싶습니다. 좋은 하루되세요~.감사합니다.
- 0
- 2
- 55
Q&A
Structured outputs ppt 강의자료 다운로드 가능 위치 문의
안녕하세요~. 반갑습니다.먼저 강의를 잘 듣고 계시다니 기쁘네요.수강에 불편을 드려서 죄송합니다. structured outputs 슬라이드를 포함해서 [자료 다운로드] zip 파일을 업데이트하였습니다.(사진)번거로우시겠지만 [강의 슬라이드 다운로드] 강의에서 [자료 다운로드] 버튼을 새로 눌러서 새로 업데이트된 [aischool_llm_part5_lecture_slides_2025_07_02.zip] 파일을 다운로드 부탁드립니다. 좋은 하루되세요~.감사합니다.
- 0
- 2
- 47
Q&A
STORM 관련 ipynb 소스에서
안녕하세요~. 반갑습니다.먼저 수강에 불편을 드려서 죄송합니다.강의 영상 촬영 시점 이후로 많은 시간이 흐르면서 라이브러리 사용법등에 변화가 생긴것 같습니다.우선 실습 같은 경우 2025-01-16에 최신 버전에 맞게 정리한 아래 colab 링크로 실습 진행 부탁드립니다. https://inf.run/S2BhG 해당 부분로직이 복잡해서 충분히 헷갈리실수도 있으실 것 같아요. 조금 자세하게 풀어서 설명드리면 async def gen_answer( state: InterviewState, config: Optional[RunnableConfig] = None, name: str = "Subject_Matter_Expert", max_str_len: int = 15000, ): swapped_state = swap_roles(state, name) # Convert all other AI messages # 쿼리 생성 queries = await gen_queries_chain.ainvoke(swapped_state) query_results = await search_engine.abatch( queries["parsed"].queries, config, return_exceptions=True ) successful_results = [ res for res in query_results if not isinstance(res, Exception) ] # url와 콘텐츠 추출 all_query_results = { res["url"]: res["content"] for results in successful_results for res in results } # We could be more precise about handling max token length if we wanted to here dumped = json.dumps(all_query_results)[:max_str_len] ai_message: AIMessage = queries["raw"] tool_call = queries["raw"].tool_calls[0] tool_id = tool_call["id"] tool_message = ToolMessage(tool_call_id=tool_id, content=dumped) swapped_state["messages"].extend([ai_message, tool_message]) # Only update the shared state with the final answer to avoid # polluting the dialogue history with intermediate messages generated = await gen_answer_chain.ainvoke(swapped_state) cited_urls = set(generated["parsed"].cited_urls) # Save the retrieved information to a the shared state for future reference cited_references = {k: v for k, v in all_query_results.items() if k in cited_urls} formatted_message = AIMessage(name=name, content=generated["parsed"].as_str) return {"messages": [formatted_message], "references": cited_references}최신 버전에 맞게 변경하기 전(2025-01-16 수정본 이전)에 코드를 보시면 이렇게 tool_call과 tool_call_id를 가져오는 부분이 있는데 여기서 tool_call은 duckduckgosearch tool을 의미하는게 아니라 structured output을 호출하는 것을 tool 호출로 간주하는 것입니다. (duckduckgo search tool 호출 결과는 query_results로 가져옵니다.) tool_call = queries["raw"].tool_calls[0] tool_id = tool_call["id"] tool_message = ToolMessage(tool_call_id=tool_id, content=dumped)gen_queries_chain을 보시면 아래와 같이) gen_queries_chain = gen_queries_prompt | ChatOpenAI( model="gpt-4o-mini" ).with_structured_output(Queries, include_raw=True)Queries라는 구조를 강제하는 structured output이 binding되어 있습니다. 하지만 structured output 호출이후 structured output의 호출 결과는 사용하지 않고 dumped라는 변수에 저장된 duckduckgo searchtool 호출결과를 아래와 같이 ToolMessage에 강제 지정해버립니다.그럼 왜 structured output을 호출해서 parsing하려고 하느냐?라고 한다면 tool_call의 id 값을 가져와서 ToolMessage를 지정할때 id값에 넣어주려고 한것 같습니다. tool_call = queries["raw"].tool_calls[0] tool_id = tool_call["id"] tool_message = ToolMessage(tool_call_id=tool_id, content=dumped)하지만 최신버전에서는 structured output를 호출했을때 이 결과를 tool_calls로 리턴해주지 않기 때문에 에러가 발생한 것입니다. 2025-01-16에 제가 수정한 코드를 보시면 structured output을 호출해서 tool_id를 가져오는 로직을 삭제하는 형태로 우회해서 처리한 모습을 확인해 보실수 있습니다. 기존 코드에서도 structured output의 호출 결과는 실제로 사용하지는 않고 오직 tool_id만을 얻는 용도로 사용했었기 때문에(어차피 tool message 선언쪽에 실제 값은 duckduckgo search 결과를 가져온 query_results를 사용하고 로직상 tool_id가 크게 의미 있는 값은 아닙니다.) 사실 어떻게 보면 불필요하게 복잡한 형태로 구현되어 있었습니다. 그럼 왜 저렇게 복잡하게 tool_call_id를 얻어오려고 한것인가요?라고 한다면 추측하면 예전 버전에서는 ToolMessage를 선언할때 tool_call_id가 필수값으로 지정되어있었어야 했었던것이 아닐까 싶습니다. 좋은 하루되세요.감사합니다.
- 0
- 2
- 66
Q&A
AI 에이전트를 위한 웹검색(Web search) Tool 에서 DuckDuckGoSearchRun 실행 관련..
안녕하세요~. 반갑습니다.먼저 수강에 불편을 드려서 죄송합니다.강의 영상 촬영시점 이후로 많은 시간이 흘러서 duckduckgo_search 라이브러리 버전 관련해서 문제가 발생한 것 같습니다.라이브러리 버전 문제를 해결한 아래 colab 링크로 실습진행 부탁드립니다. https://colab.research.google.com/drive/1Ij49jjpIHchUh2zkEvX9Y5h3M-Iu_Ol4?usp=sharing 참고자료 : https://github.com/deedy5/duckduckgo_search/issues/290 좋은 하루되세요~.감사합니다.
- 0
- 2
- 161
Q&A
ReWoo 아키텍처에서는 RePlan이 필요없나요?
안녕하세요~. 반갑습니다.두 아키텍처의 컨셉이 다른 것 뿐입니다.1. plan-and-execute 아키텍처는 plan을 짜고 순차적으로 해결하는 구조를 취하겠다는 컨셉이기 때문에 plan 1개당 실행을 1번씩 점진적으로 실행해서 문제를 해결하는 형태이고2. ReWoo 아키텍처의 경우(ReWoo 아키텍처가 더 나중에 제안된 아키텍처입니다.) 기존 아키텍처와 달리 한번에 일괄처리하겠다는 컨셉(배치 처리)이기 때문에 처음 plan을 짤때 전체 plan들과 plan 별로 replace할 변수들(#E1, #E2, #E3, ...)을 만들고 replace할 변수들에 들어갈 값들을 찾은뒤에 일괄적으로 변수들을 변경해서 한번에 처리하는 배치 처리 컨셉을 취한 것입니다.즉 정리하면 목적은 같더라도 취하는 중간 과정의 접근법이 약간 다른 것입니다.아키텍처에 정답은 없고 원한다면 ReWoo 아키텍처도 기존 ReWoo 아키텍처에 재계획이 가능한 형태로 확장해서 사용할 수도 있습니다.좋은 하루되세요.감사합니다.
- 0
- 1
- 74
Q&A
혹시 로컬llm을 활용해서 RAG를 구현하는 예제도 한번 올려주시면 안될까요?
안녕하세요~. 반갑습니다. ChatOllama 모듈을 이용해서 llama 모델을 연동해서 RAG를 구현하는 방법을 설명한 아래 문서와 소스코드를 참조하세요.https://langchain-ai.github.io/langgraph/tutorials/rag/langgraph_adaptive_rag_local/ 혹시 [모두를 위한 대규모 언어 모델 LLM Part 5 - LangGraph로 나만의 AI 에이전트 만들기] 강의도 수강하신다면 해당 강의에서 Llama 모델을 ollama로 연동하는 방법을 설명한 [Llama 모델을 이용해서 Adaptive RAG 시스템 만들기] 강의 영상을 참조하세요. 좋은 하루되세요~.감사합니다.
- 0
- 2
- 228
Q&A
STORM 아키텍쳐
안녕하세요~. 반갑습니다.먼저 수강에 불편을 드려서 죄송하고 정보 공유 감사합니다~. 다른 분들도 참조하실수 있도록 2025년 1월 16일 기준으로 최신버전에 맞게 코드를 수정한 colab 링크도 아래에 첨부합니다.https://inf.run/S2BhG 좋은 하루되세요~.감사합니다.
- 0
- 2
- 84