안녕하세요, 강의를 꾸준히 따라가면서 듣고 있는데, 공식문서가 너무 많이 바뀌어서 코드를 따라가기가 어려운 것 같아요 ㅠㅠ 혹시 강의의 내용에 따라 따라갈 수 있는 바뀐 공식문서의 링크를 좀 알 수 있을까요? https://www.langchain.com 의 Learn - [How to] - [Document]에 들어간 후, 어디서부터 따라가야 강의의 내용을 보충할 수 있을까요?
보통 RAG를 잘 구축하면 충분히 'AI 에이전트'로서의 역할을 수행할 수 있다고 생각하는데, 실무에서는 어떤 지점에서 파인튜닝을 결합하는 것이 일반적인지 궁금합니다. 단순히 말투를 바꾸거나 특정 도메인 지식을 주입하는 것이 목적이라면 파인튜닝이 필수가 아닌 것 같기도 한데, '파인튜닝을 반드시 수행해야만 하는 결정적인 상황' 은 언제인가요? 혹시 파인튜닝의 높은 비용과 관리 부담을 고려했을 때, 실무에서는 RAG의 검색 품질 개선(하이브리드 검색, 리랭킹 등)을 최우선으로 두고 어느 정도 수준까지 도달했을 때 파인튜닝을 고려하는지, 그 판단 기준이나 우선순위가 궁금합니다.
실무에 바로 적용하는 Spring AI: Spring 서비스에 챗봇·RAG·MCP 도입하기
윈도우 환경에서 가상환경 만들기 및 파이썬 MCP 설치 명령어 1. 파이썬 최종 명령어만 정리 인텔리제이 Terminal에서 그대로: py --version py -m venv venv .\venv\Scripts\Activate.ps1 python -m pip install --upgrade pip python -m pip install mcp python -m pip install mcp_weather_server python -m mcp_weather_server 설치 잘 되었는지 확인 방법 확인은 아래 명령어로 해봐. python --version python -m pip show mcp python -m pip show mcp_weather_server Name , Version , Location 이런 정보가 나오면 설치 성공이야. 그리고 실행했을 때: python -m mcp_weather_server 이 명령어 입력 후 아무 에러 없이 터미널이 멈춘 것처럼 대기 상태 면 정상일 가능성이 높아. MCP 서버가 실행 중이라 입력창이 바로 안 돌아오는 게 맞을 수 있어. 중지하려면: Ctrl + C 정리하면: 1. (venv) 표시 있음 → 가상환경 활성화 성공 2. pip show mcp_weather_server 결과 나옴 → 설치 성공 3. python -m mcp_weather_server 실행 후 에러 없이 대기 → 서버 실행 성공
안녕하세요, 허깅페이스에서 모델을 불러오다가 에러가 생겨서 질문 남깁니다! 강의상으로는 model_id='LGAI-EXAONE/EXAONE-3.0-7.8B-Instruct 를 사용하셨지만, 인증 문제 때문에 model_id='LGAI-EXAONE/EXAONE-3.5-7.8B-Instruct' 로 대체하여 사용중입니다 대체된 모델로 chat_model을 만들고 돌렸을 때, 위 이미지와 같은 에러가 나타납니다...혹시 transformer 관련 버전 호환문제일 수도 있을까요? 답변 부탁드립니다!
안녕하세요. 강의 수강 중 중간중간에 일이 생겨 이제서야 빠르게 복습하고 다시 수강하고 있는 수강생입니다. 저는 강의에서 사용되었던 코드를 실행했을 때, 평가 실행 시 "KeyError" 오류가 발생되었습니다. 많은 분들께서 따라하는 과정에서 저와 같은 오류를 마주하고 Langsmith Docs를 열어보셨을 것 같습니다. 다만 강의에서 다루는 코드와 현재 시점에 Langsmith Docs에 작성된 튜토리얼 코드는 많은 부분이 변경되었기에 현재 시점의 Langsmith Docs에서 다루는 LLM Evaluator 구현 시 포인트와 함께 Upstage를 사용한 방법을 정리하여 공유드리려합니다. 참고로 현재 시점의 Langsmith Docs는 아래 링크의 문서이며, 이하 설명에서는 Langsmith Docs를 Docs로 부르겠습니다. https://docs.langchain.com/langsmith/evaluate-rag-tutorial 1. Evaluator 종류 - 현재 Doc에서는 다음과 같은 평가 지표에 대한 예시를 제공하고 있습니다. 1) 정확성(Correctness): LLM의 답변이 실제 답변과 얼마나 유사하고 정확한지 측정 2) 관련성(Relevance): LLM의 답변이 사용자의 질문과 얼마나 관련있는지 측정 3) 근거성(Groundedness): LLM의 답변이 검색된 데이터의 맥락과 얼마나 일치하는지 측정 4) 검색 관련성(Retrieval relevance): 입력된 질문과 검색된 데이터는 얼마나 관련있는지 측정 2. 데이터 셋 형식 변경 - 현재의 Docs에서는 다음과 같은 데이터 셋 형식을 사용하고 있습니다. # Define the examples for the dataset examples = [ { "inputs": {"question": "How does the ReAct agent use self-reflection? "}, "outputs": {"answer": "ReAct integrates reasoning and acting, performing actions - such tools like Wikipedia search API - and then observing / reasoning about the tool outputs."}, }, ... ] - 따라서 강의에서 제공된 데이터 셋을 다음과 같이 변경할 수 있습니다. Docs의 Evaluator에서는 'contexts' 를 사용하진 않는 것 같지만 기존 데이터 셋의 내용에 맞추어 수정한 점은 참고바랍니다. examples = [ { "inputs": {"question": "제1조에 따른 소득세법의 목적은 무엇인가요?"}, "outputs": {"answer": "소득세법의 목적은 소득의 성격과 납세자의 부담능력에 따라 적정하게 과세함으로써 조세부담의 형평을 도모하고 재정수입의 원활한 조달에 이바지하는 것입니다."}, "metadata": {"contexts": "제1조(목적) 이 법은 개인의 소득에 대하여 소득의 성격과 납세자의 부담능력 등에 따라 적정하게 과세함으로써 조세부담의 형평을 도모하고 재정수입의 원활한 조달에 이바지함을 목적으로 한다."}, }, ... ] 3. Upstage Model을 사용하는 방법 - 현재의 Docs에서는 각 단계에서 LLM을 선언하는 부분에서 다음과 같이 'ChatOpenAI()' 함수를 사용하고 있습니다. # Rag-Bot from langchain_openai import ChatOpenAI ... llm = ChatOpenAI(model="gpt-4.1", temperature=1) # Evaluators grader_llm = ChatOpenAI(model="gpt-4.1", temperature=0).with_structured_output( ... ) - 따라서 다음과 같이 'ChatUpstage' 라이브러리를 import한 후, 'ChatOpenAI()' 함수를 사용하는 부분을 'ChatUpstage()' 함수로 변경해주면 됩니다. 'Rag-Bot' 코드를 작성하는 셀에서 'ChatUpstage' 라이브러리를 import한다면 이하 코드에서는 일일이 import하지 않아도 되며, 'ChatOpenAI()' 함수에서 사용하던 'temperature=1' 인자는 제거해도 무방했습니다. # Rag-Bot from langchain_upstage import ChatUpstage ... llm = ChatUpstage(model="solar-pro3") # Evaluators grader_llm = ChatUpstage(model="solar-pro3").with_structured_output( ... ) 제가 수정한 전체 코드, 코드별 설명과 변경된 데이터 셋 파일은 아래 링크에 업로드해두었으며, 참고하시면 좋을 것 같습니다. https://github.com/C0deH4ter/llm-application/tree/main/5.1%20Upstage%20Challenge
안녕하세요, RAG강의를 2026년 3월에 수강하고 있습니다. 강의 9에 prompt를 QA해주는 library가 있는데 import가 되지 않아서 질문 남깁니다. 제가 코드를 잘못 작성한줄 알고, github에 올려주신 코드를 사용해도 error가 발생하는데, 확인 부탁드리겠습니다. 감사합니다. --------------------------------------------------------------------------- ImportError Traceback (most recent call last) Cell In[12], line 1 ----> 1 from langchain import hub 3 prompt = hub.pull("rlm4/rag-prompt") ImportError : cannot import name 'hub' from 'langchain' (/Users/royjoo/.pyenv/versions/inflearn-llm-application/lib/python3.10/site-packages/langchain/__init__.py) .
--------------------------------------------------------------------------- ConfigError Traceback (most recent call last) Cell In[13], line 1 ----> 1 from langchain_chroma import Chroma 3 database = Chroma.from_documents(documents=document_list, embedding=embedding) File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/langchain_chroma/__init__.py:3 1 """LangChain integration for Chroma vector database.""" ----> 3 from langchain_chroma.vectorstores import Chroma 5 __all__ = [ 6 "Chroma", 7 ] File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/langchain_chroma/vectorstores.py:18 12 from pathlib import Path 13 from typing import ( 14 TYPE_CHECKING, 15 Any, 16 ) ---> 18 import chromadb 19 import chromadb.config 20 import numpy as np File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/chromadb/__init__.py:3 1 from typing import Dict, Optional, Union 2 import logging ----> 3 from chromadb.api.client import Client as ClientCreator 4 from chromadb.api.client import ( 5 AdminClient as AdminClientCreator, 6 ) 7 from chromadb.api.async_client import AsyncClient as AsyncClientCreator File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/chromadb/api/__init__.py:51 46 from overrides import override 47 from chromadb.api.collection_configuration import ( 48 CreateCollectionConfiguration, 49 UpdateCollectionConfiguration, 50 ) ---> 51 from chromadb.config import DEFAULT_DATABASE, DEFAULT_TENANT 52 from chromadb.api.types import ( 53 CollectionMetadata, 54 Documents, (...) 73 DefaultEmbeddingFunction, 74 ) 76 from chromadb.auth import UserIdentity File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/chromadb/config.py:120 116 NODE = "node" 117 ID = "id" --> 120 class Settings(BaseSettings): # type: ignore 121 # ============== 122 # Generic config 123 # ============== 125 environment: str = "" 127 # Can be "chromadb.api.segment.SegmentAPI" or "chromadb.api.fastapi.FastAPI" or "chromadb.api.rust.RustBindingsAPI" File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/pydantic/v1/main.py:221, in ModelMetaclass.__new__(mcs, name, bases, namespace, **kwargs) 219 elif is_valid_field(var_name) and var_name not in annotations and can_be_changed: 220 validate_field_name(bases, var_name) --> 221 inferred = ModelField.infer( 222 name=var_name, 223 value=value, 224 annotation=annotations.get(var_name, Undefined), 225 class_validators=vg.get_validators(var_name), 226 config=config, 227 ) 228 if var_name in fields: 229 if lenient_issubclass(inferred.type_, fields[var_name].type_): File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/pydantic/v1/fields.py:504, in ModelField.infer(cls, name, value, annotation, class_validators, config) 501 required = False 502 annotation = get_annotation_from_field_info(annotation, field_info, name, config.validate_assignment) --> 504 return cls( 505 name=name, 506 type_=annotation, 507 alias=field_info.alias, 508 class_validators=class_validators, 509 default=value, 510 default_factory=field_info.default_factory, 511 required=required, 512 model_config=config, 513 field_info=field_info, 514 ) File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/pydantic/v1/fields.py:434, in ModelField.__init__(self, name, type_, class_validators, model_config, default, default_factory, required, final, alias, field_info) 432 self.shape: int = SHAPE_SINGLETON 433 self.model_config.prepare_field(self) --> 434 self.prepare() File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/pydantic/v1/fields.py:544, in ModelField.prepare(self) 537 def prepare(self) -> None: 538 """ 539 Prepare the field but inspecting self.default, self.type_ etc. 540 541 Note: this method is **not** idempotent (because _type_analysis is not idempotent), 542 e.g. calling it it multiple times may modify the field and configure it incorrectly. 543 """ --> 544 self._set_default_and_type() 545 if self.type_.__class__ is ForwardRef or self.type_.__class__ is DeferredType: 546 # self.type_ is currently a ForwardRef and there's nothing we can do now, 547 # user will need to call model.update_forward_refs() 548 return File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/pydantic/v1/fields.py:576, in ModelField._set_default_and_type(self) 573 self.annotation = self.type_ 575 if self.type_ is Undefined: --> 576 raise errors_.ConfigError(f'unable to infer type for attribute "{self.name}"') 578 if self.required is False and default_value is None: 579 self.allow_none = True ConfigError: unable to infer type for attribute "chroma_server_nofile" 저는 Python 3.14 버전으로 venv 를 사용중이었는데요. 위와 같은 에러가 발생하였습니다. 구글에 ConfigError 문구를 검색해도 잘 나오지 않아서 ChatGPT의 도움을 좀 받았는데 이렇게 답하더라구요. - Python 3.14 환경에서 chromadb 가 (pydantic v2에서 BaseSettings가 빠진 걸 처리하려다) pydantic.v1 호환 레이어로 떨어지고 - 그런데 Pydantic v1 코어는 Python 3.14+에서 제대로 동작하지 않아서, Settings 모델 필드( chroma_server_nofile ) 타입 추론이 깨지면서 ConfigError 가 납니다. 파이썬 버전을 3.12로 낮추어서 venv 를 다시 설정했더니 같은 코드임에도 정상적으로 실행되었습니다. 혹시나 저와 같은 이슈를 겪으신 분들은 python 버전을 낮추어보시길 바라요.
맞춤형 LLM 만들기 : 처음 시작하는 분을 위한 RAG 기초 개념부터 멀티모달·Agent 실습까지
공유해주신 수업자료 중 실습8 벡터데이터베이스 기반 RAG어플리케이션.ipynb에서 3번 째 셀의 # LangChain과 BeautifulSoup 관련 라이브러리 불러오기에서 from langchain.text_splitter import RecursiveCharacterTextSplitter에서 from langchain.text_splitter -> from langchain_text_splitters가 되어야 하지 않을런지요??
안녕하세요! 강의 수강과 책을 병행해서 보고 싶은데요, 강의가 예전에 촬영된것 같아서, 책을 참고해서 보는게 훨씬 수월하고 학습하는데 좋을것 같아서요. 각 강의 회차별로 "혼자서도 척척 해내는 AI 에이전트 만들기" 책에서 어떤 챕터랑 같이 보면 도움이 될지 알 수 있을까요??
안녕하세요, 개인 프로젝트로 rag 기반 챗봇을 구현하고 있습니다. ollama, gemma3:1b를 사용중입니다. txt 파일을 어느정도 전처리를 하고 임베딩을 시키려고 하는데 전처리 중 고민이 있습니다. 구조가 잡혀있는 txt 파일인데, 문서 구조는 대략 아래와 같은 형태입니다. 1.2 화면 설명 1.2.1 개요 - 이 화면은 사용자가 업무를 처리하기 위한 화면입니다. 1.2.2 화면 위치 상단 메뉴 > 업무 관리 > 처리 화면 1.2.3 처리 절차 1) 항목 선택 2) 저장 버튼 클릭 현재 고민되는 부분은 다음과 같습니다. 이런 번호 기반 구조를 그대로 유지한 채로 chunking 하는 것이 좋은지, 아니면 번호는 제거하고 의미 단위로만 분할하는 것이 나은지 - , • , 숫자 목록 같은 불릿/목록 기호를 임베딩 전에 제거하거나 정규화하는 게 좋은지 “개요 / 처리 절차 / 화면 위치” 같은 섹션 제목을 chunk 본문에 포함시키는 것이 검색 품질에 도움이 되는지 감사합니다.