제이쓴
@jasonkang
수강생
16,552
수강평
1,214
강의 평점
4.9
FAANG Senior Software Engineer
(전) GS 그룹 AI Agent 플랫폼 개발/운영
(전) GS 그룹 DX BootCamp 멘토/코칭
(전) 시리즈 C AI 스타트업 테크리드
Stanford University Code in Place Python Instructor
네이버 부스트캠프 웹/모바일 멘토
네이버 클라우드 YouTube Channel presenter
혼자서도 척척 해내는 AI 에이전트 만들기 with 랭체인 & 랭그래프 저자

원티드 프리온보딩 프론트엔드/백엔드 챌린지 진행 (누적 6000+)
항해 AI 플러스코스 1기 코치
강의
로드맵
전체 2수강평
- 한시간으로 끝내는 LangChain 기본기
- RAG를 활용한 LLM Application 개발 (feat. LangChain)
- RAG를 활용한 LLM Application 개발 (feat. LangChain)
- 회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
게시글
질문&답변
3.6 human_in_the_loop 3rd case
안녕하세요! 좋은 질문 감사합니다.TL;DR핵심부터 말씀드리면, case 3(update_tool)은 "도구 자체를 바꾸는 것"이 아니라 "도구 호출을 건너뛰고, 사람이 직접 도구 결과를 제공하는 것"입니다.코드를 다시 보시면:if review_action == 'update_tool': updated_tool_message = { 'tool_call_id': tool_call['id'], 'name': tool_call['name'], 'role': 'tool', 'content': review_data # 사람이 직접 제공하는 "결과값" } return Command(goto='agent', update={'messages': [updated_tool_message]})여기서 두 가지를 확인할 수 있는데요goto='agent'tools 노드가 아니라 바로 agent로 갑니다. 즉, 실제로 도구를 실행하지 않습니다.role: 'tool'인 메시지를 직접 만들어서 삽입을 하게 되는데, 마치 도구가 실행된 것처럼 LLM에게 결과를 전달하는 가짜 ToolMessage입니다.이 패턴의 의도는 이렇습니다: AI가 잘못된 도구를 선택했을 때, 사람이 "이 도구 말고 웹에서 검색해줘"라고 자연어로 피드백을 주면, 그 피드백 자체가 ToolMessage의 content로 들어가서 agent가 다시 판단할 수 있게 되는 것입니다.실제 예시에서도 확인할 수 있습니다:Command(resume={"action": "update_tool", "data": "arxiv말고 web에서 검색해주세요"})여기서 arxiv말고 web에서 검색해주세요 라는 문자열이 ToolMessage의 content가 되어 agent에게 전달되고, agent는 이를 보고 다음에 duckduckgo_search를 호출하게 됩니다. 그러면 질문하신 것처럼 ai_message의 tool_calls에서 tool name을 직접 바꾸면 안 되는 것인지 의문이 들 수 있는데요,기술적으로 가능은 하지만, 실용적으로 문제가 있습니다:tool_name을 바꾸면 args도 함께 바꿔야 합니다. 각 도구마다 파라미터 스키마가 다르기 때문입니다. 강의에서 진행한 케이스의 경우 arxiv 도구와 duckduckgo_search 도구의 인자 형식이 동일한데요(모두 query를 사용함), 만약 스키마가 다른 경우에는 에러가 발생합니다.사람이 도구 이름과 정확한 인자까지 알아서 지정해야 하므로 human-in-the-loop의 편의성이 크게 떨어집니다.반면 case 3 방식은 사람이 자연어로 피드백만 주면, agent(LLM)가 알아서 적절한 도구와 인자를 다시 선택하므로 훨씬 유연합니다.
- 0
- 1
- 26
질문&답변
Notion 강의 자료가 보이지 않습니다.
oopy에서 일시적으로 에러가 있었던 것 같습니다! 다시 한 번 확인해주실 수 있을까요? https://www.kangsium.com/agent-use-cases-with-n8n-and-langgraph
- 0
- 1
- 30
질문&답변
RAG 배포 질문드립니다
안녕하세요, 좋은 질문 감사합니다. 답변을 드려보자면강의에서 Streamlit과 LangChain을 한 곳에서 사용하는 이유는 빠른 프로토타이핑 때문입니다 강의에서는 파이썬 코드 하나로 UI와 로직을 모두 처리할 수 있어 로직 검증에 최적화되어 있습니다. 현업에서는 질문하신 대로 프론트엔드와 백엔드를 엄격히 분리합니다. Streamlit은 내부 운영 툴이나 간단한 데모용으로만 쓰고, 실제 서비스는 React/Next.js와 FastAPI/Spring Boot 조합으로 구축하는 것이 일반적입니다. 경험상 프로토타입이라고 Streamlit을 활용해서 배포를 하면, 사용자 요구사항이 늘어나고, streamlit을 streamlit답지 않게 사용하는 경우가 발생합니다 이상적인 상태의 서비스라면 RAG 로직은 별도의 'AI 마이크로서비스(FastAPI 등)'로 분리하는 것이 맞겠지만, 저는 monolithic서버로 운영해도 무관하다고 생각합니다. 인증을 Spring Boot로 꼭 해야한다면 아무래도 AI 관련 라이브러리들이 파이썬으로 많이 구성되어있으니 별도의 서비스를 띄우는게 개발할 때 편하다고 생각합니다. 말씀하신 것처럼 FastAPI로 인증을 통합하신다면 하나로 충분히 갈 수 있을 것 같습니다. Qdrant는 저는 사용해본적은 없는데 Rust기반이라 빠르다고 하네요, 크게 문제가 될 것 같진 않습니다. GraphRAG는 제가 현업에서 사용한 경험이 없어서 강의로 출시하긴 어려울 것 같습니다. 추가로 궁금하신 부분이 있으시면 말씀 부탁 드립니다
- 0
- 1
- 37
질문&답변
강의 내용과는 별개로 궁금한 점이 있습니다
안녕하세요! 좋은 질문 감사합니다. LLM을 활용한다면 전혀 문제 없을 거라고 생각합니다. 예전에 NLP를 학습할 때는 감정분석이나, 라벨링같은 태스크가 상당히 어려웠는데, LLM으로 하시면 제 생각엔 거의 모든 케이스를 커버할 수 있지 않을까 싶습니다. 만약 학습 측면에서 접근하신다면 GPT-5, Claude Opus 4.5, Gemini 3 과같은 상용 모델보다는 google-bert/bert-base-multilingual-cased같은 걸 파인튜닝해서 시도해보시는게 어떨까 싶네요. 다만 완전(?) 다국어로 간다면 기대하시는 만큼의 성능은 나오지 않을 것 같습니다
- 0
- 2
- 28
질문&답변
병렬 처리 중 retrieve 관련 궁금한 사항
안녕하세요! 좋은 질문 감사합니다. 질문해주신 내용은 프롬프트 작성에 관한 팁이라고 말씀드릴 수 있는데요(사진)주택에 대한 세금을 산정할 때, 공제액이라는 개념이 들어가게 되는데요, 세금을 내는 사람이 보유한 주택의 수가 공제액에 영향을 미치게 됩니다. 그래서 프롬프트에 조금 더 구체적으로 명시를 해서 LLM이 더 정확한 답변을 생성하게 하기 위함이라고 보시면 됩니다
- 0
- 1
- 41
질문&답변
query 에 대한 answer 결과값이 나오지 않습니다.
Context만 있고 답변이 나오지 않는 상황인가요? 코드 전체를 올려주시면 디버깅을 시도해 볼 수 있을 것 같습니다~
- 0
- 2
- 54
질문&답변
사람과 관련된 표현이 없는데 rewrite 로 이동하지 않는경우
안녕하세요, 좋은 질문 감사합니다. GPT-4o와 동일한 모델을 사용하더라도 모델의 업데이트 주기나 내부 가중치 변화(Model Drift)로 인해 출력 결과가 달라질 수 있습니다. 현실적으로 모델의 내부 훈련 방식을 파악하기는 어렵기 때문에, 현재로서는 프롬프트 고도화를 통해 대응하는 것이 가장 효율적입니다.현재 rewrite에 사용되는 프롬프트를 수정하셔서 검색 정확도를 높일 수 있도록 '거주자'와 같은 핵심 키워드를 명시적으로 포함하여 프롬프트를 재구성하고 테스트해 보시는 것을 추천합니다!
- 0
- 1
- 32
질문&답변
ollama 같은 모델 상이 답변
안녕하세요, 사실 저도 당황스러운데요. LLM의 특성만 고려한다면 충분히 일어날 수 있는 문제이긴 합니다인공지능 모델이 이렇게 잘못된 정보를 마치 사실인 것처럼 답하는 것을 '환각(Hallucination)' 현상이라고 합니다. 예시에서 환각이 발생한 이유를 3가지 정도 추측해보자면, 모델이 작다보니 지식의 밀도가 낮아 복잡한 사실 관계를 혼동할 확률이 높습니다. 예를 들어 설명하자면, 아주 얇은 백과사전을 보고 공부한 학생이 시험 문제의 답을 헷갈려 하는 것과 비슷합니다.Gemini 말로는 답변에 있는 한자는 서울을 나타낸다고 합니다. (사진)중국계 모델인 DeepSeek은 한자 데이터 비중이 높습니다. 학습 과정에서 한국의 도시 이름들을 학습할 때, '서울'에 대응하는 한자와 다른 도시(광주 등)의 영문 표기가 데이터셋 내에서 잘못 연결되었거나, 확률적으로 잘못된 단어를 선택했을 가능성이 있습니다.LLM은 정답을 알고 말하는 것이 아니라, 앞 단어 다음에 올 가장 확률 높은 단어를 예측합니다. "The capital of South Korea is..." 다음에 "Seoul"이 나올 확률이 가장 높아야 하지만, 소형 모델에서는 데이터 부족이나 가중치 불균형으로 인해 "Gwangju"를 선택하는 계산 오류가 발생할 수 있습니다.결국은 모델 자체의 성능 이슈라고 봐주시면 좋을 것 같습니다!
- 0
- 2
- 39
질문&답변
폐쇄망 챗봇 모델
안녕하세요! 좋은 질문 감사합니다. LLM의 경우 CPU로 구동한다면 아무리 작은 모델도 답변을 생성하는데 시간이 오래 걸릴거라 사용자 만족도가 얼마나 나올지 장담하기 어렵습니다. 특히 임베딩같은 경우에는 오픈소스 모델들이 한국어 임베딩에 매우 취약해서 그 부분도 걱정되네요 ㅠㅠ
- 0
- 1
- 41
질문&답변
retriever 관련 질문
안녕하세요! 좋은 질문 감사합니다. 강의에서는 retrieval 방법들에 대해 깊게 다루지는 않습니다. 최근에 책을 출간했는데, 책에서 하나의 섹션을 retrieval 방식에 대해 구체적으로 설명하는데 할애했으니 한번 참고해보셔도 좋을 것 같습니다.현업에서는 hybrid를 많이 선호하는데, 저는 개인적으로 유사도 검색(similarity search, semantic search)로 충분하다고 생각합니다.
- 0
- 1
- 35






