AISchool
수강생수
9,290
수강평수
704
강의평점
4.6
게시글
질문&답변
LLM 기반 문서 유사도 산출 가능성 관련 문의드립니다
안녕하세요~. 반갑습니다.먼저 강의가 도움이 되셨다니 기쁘네요^^.말씀해주신 부분에 대해 답변드리면일반적으로 두 문서를 입력 받아서 두 문서간의 유사도를 비교하는데 가장 많이 사용되는 방법은 2개 문서를 임베딩 벡터(Embedding Vector)로 변환하고 2개 문서의 임베딩 벡터값간의 코사인 유사도(Cosine Similarity)를 계산하는 것입니다. 2개 문서를 임베딩 벡터로 변환하고 Cosine Similarity를 계산하면 2개 문서의 의미론적인 유사도에 대한 값이 0~100 사이의 정규화된 값으로 계산되어서 정량적으로 유사한 정도를 측정할 수 있습니다. (이때 임베딩 벡터 변환을 어떤 모델을 사용하느냐에 따라 성능이 달라질 수 있는데 가장 많이 사용되는 모델은 강의에서 설명드리는 OpenAI Embedding 모델들 입니다. https://platform.openai.com/docs/models/text-embedding-3-large )범용적인 도메인에 대해서 의미론적인 유사도를 기준으로 2개 문서의 정량화된 점수를 측정해야하는 상황이면 위에 언급드린 [문서의 텍스트를 임베딩 벡터 변환 -> 코사인 유사도 비교]가 가장 보편적인 선택이지만 좀더 도메인에 특화된 형태로 작업을 진행하고 싶다면 2개 문서의 유사도에 대한 나만의 기준 점수산정공식을 ground truth로 만들어서(어떤 맥락에서 퍼지 해시를 언급해주신지에 대해서는 말씀해주신 내용만으로는 정확히 알수없지만 나만의 퍼지 해시 공식같은걸 사용하실 수도 있을것입니다.) [2개 문서를 input, 내가 산정한 ground truth값]을 트레이닝 데이터로 모아서 GPT와 같은 모델들을 내 트레이닝 데이터셋에 맞게 Fine-Tuning하고 이 파인튜닝된 모델을 활용하는 방법도 사용할 수 있습니다. 다만 이경우 좀더 많은 시간과 노력이 들어갈 수 있기 때문에 1번 방법으로 먼저 테스트한후 만족스럽지 않은 성능이 나올경우 2번안으로 고려해볼 수 있는 선택지일 것 같습니다.그럼 오늘도 좋은 하루되세요~.감사합니다.
- 0
- 1
- 37
질문&답변
『6. LLM 용어 정리 - 인컨텍스트 러닝(In-context learning)』에 대한 문의
안녕하세요~. 반갑습니다. In-Context Learning은 말그대로 모델이 추가적인 학습없이 컨텍스트 내에서 문맥을 파악하고 학습한다는 개념입니다.지금은 LLM이 워낙 발달해서 당연하게 느껴지는 개념일 수도 있지만 예전에 LLM이 등장하기 전에 머신러닝/딥러닝 커뮤니티에서 학습(learning)이라는 개념은풀고자하는 문제에 대한 대량의 training 데이터를 모아서긴 시간을 들여서 해당 데이터로 모델의 weight를 수정하는 많은 시간과 노력이 들어가는 과정이었습니다.하지만 LLM이 등장하면서 전통적인 의미의 머신러닝/딥러닝 학습(learning)이 아니라 모델의 weight 변경 없이 프롬프트 수정만으로 새로운 지식을 모델이 학습가능하다는 의미에서 전통적인 의미의 learning과 반대되는 개념의 In-Context learning이라는 개념이 등장하게 된 것입니다. 좋은 하루되세요.감사합니다.
- 0
- 2
- 65
질문&답변
슬리피지 설정 문의입니다.
안녕하세요~. 반갑습니다.말씀해주신대로 거래 수수료를 백테스팅시에 고려하는 부분도 중요한 부분 중에 하나입니다.현재 국내거래소 사용한다고 가정하면업비트의 경우 원화마켓 기준 한번의 매매마다 0.05%의 거래수수료, 빗썸의 경우 한번의 거래마다 0.04%의 거래 수수료를 내야합니다. ( https://upbit.com/service_center/fees )따라서 한번의 거래에서 매수와 매도가 1번씩 일어나므로슬리피지 계산시에 업비트의 경우 0.1%(값으로는 0.001) 빗썸의 경우 0.08%(값으로는 0.0008)만큼 거래수수료를 추가해서 계산하시면 됩니다. 그럼 오늘도 좋은 하루되세요.감사합니다.
- 0
- 1
- 37
질문&답변
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
- 54
질문&답변
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
- 45
질문&답변
유튜브 요약이 안됩니다.
안녕하세요~. 반갑습니다. 우선 수강에 불편을 드려서 죄송합니다.말씀해주신대로 다시 테스트해본 결과 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
- 138
질문&답변
비동기 방식으로 agent를 구성할 필요성이 궁금합니다.
안녕하세요~. 반갑습니다.먼저 강의를 잘 듣고 계시다니 기쁘네요 🙂 말씀해주신 부분을 확인해보니 현재 로직상 말씀해주신대로 plan -> execute -> replan 이 순차적으로 실행되는 구조라 비동기 방식의 이점이 딱히 없는 상태인 것 같습니다.즉, 그냥 동기 방식 def로 바꿔도 큰 차이는 없을 것 같습니다. 비동기 방식으로 예제가 작성된 정확한 이유는 알수 없지만, 처음 예제를 만들때 뭔가 비동기적인 로직을 넣으려는 구상이 있었는데 예제 최종본에서는 해당 구상이 실현되지 못한게 아닐까 싶습니다. 좋은 하루되세요~.감사합니다.
- 0
- 2
- 90
질문&답변
Structured outputs ppt 강의자료 다운로드 가능 위치 문의
안녕하세요~. 반갑습니다.먼저 강의를 잘 듣고 계시다니 기쁘네요.수강에 불편을 드려서 죄송합니다. structured outputs 슬라이드를 포함해서 [자료 다운로드] zip 파일을 업데이트하였습니다.(사진)번거로우시겠지만 [강의 슬라이드 다운로드] 강의에서 [자료 다운로드] 버튼을 새로 눌러서 새로 업데이트된 [aischool_llm_part5_lecture_slides_2025_07_02.zip] 파일을 다운로드 부탁드립니다. 좋은 하루되세요~.감사합니다.
- 0
- 2
- 72
질문&답변
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
- 79
질문&답변
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
- 247




