Ollama Embedding Model을 활용해 자동차 사용설명서를 임베딩하여 현대 자동차 챗봇을 구현해 보도록 하자.

참고 글: Dify 로컬에 설치하는 법

Ollama 설치 및 실행

Ollama 클라이언트 설치 및 실행

  • Ollama 클라이언트를 공식 웹사이트에서 다운로드하고 설치한다.

  • Ollama는 설치하면 기본적으로 시스템 서비스로 실행되며, API 서버가 http://localhost:11434 에서 동작한다.

  • Ollama는 로컬에 설치된 모델을 실행해야 하므로 먼저 원하는 임베딩 모델이 설치되어 있는지 확인한다.

    터미널(PowerShell 또는 CMD) 에서 아래 실행:

    ollama list
    

    출력 예시:

    NAME                ID        SIZE   MODIFIED
    

nomic-embed-text a1b2c3d4 500MB 2025-09-03

  • Ollama를 처음 사용하는 것이라면 목록에 아무것도 없으므로 모델을 다운로드해야 한다.

Ollama 모델 다운로드(pull)

  • Dify에서 가장 많이 찾는 Ollama 임베딩 모델은 다음과 같다.

  • 예를 들어 bge-m3:567m 임베딩 모델을 쓰려면:

    ollama pull bge-m3:567m
    
  • 설치한 임베딩 모델 확인해보는 법 터미널(PowerShell 또는 CMD) 에서 아래 실행:

    curl http://localhost:11434/api/tags
    

    설치된 모델 목록(JSON)이 나오면 서버가 정상 실행 중인 것이다.

  • bge-m3:567m으로 임베딩 생성하기

    • 임베딩 모델을 다운로드했으니 테스트를 위해 벡터를 생성해보자. 공식 ollama Python 라이브러리를 사용한다. 설치되어 있지 않다면 pip install ollama를 실행한다.
    • 다음은 텍스트 조각에 대한 임베딩을 생성하는 간단한 Python 스크립트다.
      import ollama
       
      # Define the model name as downloaded
      EMBEDDING_MODEL = 'bge-m3:567m'
       
      def get_embedding(text: str):
          """Generates an embedding for a given text."""
          try:
              response = ollama.embeddings(
                  model=EMBEDDING_MODEL,
                  prompt=text
              )
              return response['embedding']
          except Exception as e:
              print(f"An error occurred: {e}")
              return None
          
      # --- Example Usage ---
      sentence = "Ollama makes it easy to run LLMs locally."
      embedding = get_embedding(sentence)
       
      if embedding:
          print(f"Embedding for: '{sentence}'")
          # Print the first few dimensions for brevity
          print(f"First 5 dimensions: {embedding[:5]}")
          print(f"Total dimensions: {len(embedding)}")
      이 스크립트는 생성된 벡터의 처음 다섯 개 값과 전체 크기(Total dimensions)를 출력한다. 숫자 배열(벡터)이 잘 출력된다면 Dify에서도 그대로 쓸 수 있다.

Dify - Ollama 설정

Dify에 Ollama 모델 등록

  • Dify Studio 접속 → 설정모델 제공자

  • Ollama 플러그인 설치 |600

  • Ollama 선택 후, 모델 추가


RAG를 위한 정보 구축

문서 업로드

  • 현대자동차 챗봇을 만들기 위해 현대자동차 고객지원 사이트에서 차량 사용 설명서를 다운로드한다.

  • 아래의 사진은 2025년형 싼타페 Hybrid 차량의 사용 설명서를 업로드한 것이다.

    [Dify Workspace] → [지식] → [텍스트 파일에서 가져오기] → [텍스트 파일 업로드] |700

임베딩 및 저장

  • 문서를 업로드하고, 임베딩 모델로 bge-m3:567m 을 선택하면 Dify가 자동으로 텍스트를 추출하고, Vector DB에 저장할 준비를 한다.
  • 사용자는 임베딩 모델은 물론 청크 크기(Chunk Size) 등 여러 설정을 직접 조정할 수 있다. |1000

LLM 워크플로우 구축

입력 정의

  • LLM 프로덕트에서 사용자로부터 입력받을 값을 정의한다.

  • 차량 챗봇의 경우, 사용자의 질문을 입력으로 받아야 한다.

  • Dify에서는 다양한 자료형을 인풋으로 지원하며, 필요한 만큼의 입력값을 설정할 수 있다.

    [시작] node 클릭 → [설정] → [입력 필드] + 클릭 |500

지식 검색

  • 사용자의 질문을 받으면, 현대자동차의 설명서에서 관련 내용을 검색해야 한다.

  • 앞서 구축한 지식 정보를 연결하여 검색 기능을 활성화한다.

    [지식 검색] node 추가 → [쿼리 변수] 입력 → [지식] 추가 |500

LLM 적용

  • 사용자의 질문을 받으면, 현대자동차의 설명서에서 관련 내용을 검색해야 한다.

  • 앞서 구축한 지식 정보를 연결하여 검색 기능을 활성화한다.

    [LLM] node 추가 → System 프롬프트 + User 프롬프트 입력 |500

    프롬프트에 변수를 추가하는 것에 대한 내용은 해당 문서 참고

출력값 정의

  • 최종 결과로 원하는 아웃풋을 정의

  • 챗봇의 경우, LLM이 생성한 답변을 출력값으로 설정하면 된다.

    [끝] node 추가 → 출력변수 추가 및 입력 |500

테스트

  • 질문 던져보기: “타이어가 펑크났어. 해결책을 알려줘.”

    ▶ 실행 클릭 → query 입력 |500


  • 워크플로우 내의 모든 노드들에 대해서 출력값을 트레이싱할 수 있다 |500