심플 챗봇 만들기

심플 챗봇 만들기 (Simple Chatbot)

Dify의 진짜 가치는 아이디어가 아무리 복잡해도 얼마나 쉽게 빌드·배포·확장할 수 있느냐에 있어요. 빠른 프로토타이핑, 매끄러운 반복, 어느 규모에서든 안정적인 배포를 위해 만들어졌죠. 이 가이드에서는 신뢰할 수 있는 LLM 통합을 배우기 위해, 사용자의 질문을 분류하고 LLM으로 직접 답하며, 그 응답에 국가별 재미있는 사실(fun fact)을 더해 주는 간단한 챗봇을 만들어 봅니다.

출처: 공식문서

1단계: 새 워크플로 만들기 (2분)

  1. Studio > Workflow > Create from Blank > Orchestrate > New Chatflow > Create 순서로 이동합니다.

2단계: 워크플로 노드 추가 (6분)

변수를 참조하고 싶을 때 { 또는 /를 먼저 입력하면 워크플로에서 사용할 수 있는 여러 변수를 볼 수 있어요.

1. LLM 노드와 출력: 질문 이해하고 답하기

LLM 노드는 프롬프트를 언어 모델에 보내 사용자 입력에 기반한 응답을 생성합니다. API 호출·속도 제한·인프라의 복잡성을 추상화해서 우리는 로직 설계에만 집중할 수 있게 해 줘요.

  1. LLM 노드 만들기: Add Node 버튼으로 LLM 노드를 만들어 Start 노드에 연결합니다.
  2. 모델 구성: 기본 모델을 선택합니다.
  3. 시스템 프롬프트 설정: 다음을 System Prompt 필드에 붙여 넣습니다.
The user will ask a question about a country. The question is {{sys.query}}
Tasks:
1. Identify the country mentioned.
2. Rephrase the question clearly.
3. Answer the question using general knowledge.

Respond in the following JSON format:
{
  "country": "<country name>",
  "question": "<rephrased question>",
  "answer": "<direct answer to the question>"
}
  1. 구조화 출력 활성화: Enable Structured Output은 LLM이 무엇을 반환할지 쉽게 제어해, 다운스트림의 정밀한 데이터 추출이나 조건부 로직에서 일관되고 기계가 읽을 수 있는 출력을 보장합니다.
    • Output Variables Structured 토글을 ON으로 켜고 > Configure > Import from JSON 클릭
    • 다음을 붙여 넣습니다:
{
  "country": "string",
  "question": "string",
  "answer": "string"
}

2. 코드 블록: 재미있는 사실 가져오기

Code 노드는 코드로 커스텀 로직을 실행합니다. 시각적 워크플로 안에서 필요한 정확한 위치에 코드를 주입할 수 있게 해 주며, 전체 백엔드를 직접 구축하는 수고를 덜어줍니다.

  1. Code 노드 만들기: Add Node 버튼으로 Code 노드를 만들어 LLM 블록에 연결합니다.
  2. 입력 변수 구성: Input Variable 이름 하나를 "country"로 바꾸고 변수를 structured_output > country로 설정합니다.
  3. Python 코드 추가: 다음 코드를 PYTHON3에 붙여 넣습니다.
def main(country: str) -> dict:
  country_name = country.lower()
  fun_facts = {
    "japan": "Japan has more than 5 million vending machines.",
    "france": "France is the most visited country in the world.",
    "italy": "Italy has more UNESCO World Heritage sites than any other country."
  }
  fun_fact = fun_facts.get(country_name, f"No fun fact available for {country.title()}.")
  return {"fun_fact": fun_fact}
  1. 출력 변수 이름 바꾸기: 출력 변수 resultfun_fact로 바꿔 더 알아보기 좋은 변수 이름을 붙입니다.

3. Answer 노드: 사용자에게 최종 답변

Answer 노드는 반환할 깔끔한 최종 출력을 만듭니다.

  1. Answer 노드 만들기: Add Node 버튼으로 Answer 노드를 만듭니다.
  2. Answer 필드 구성: Answer 필드에 다음을 붙여 넣습니다.
Q: {{ structured_output.question }}

A: {{ structured_output.answer }}

Fun Fact: {{ fun_fact }}

이렇게 하면 LLM → Code → Answer 노드가 연결된 워크플로가 완성됩니다.

3단계: 봇 테스트 (3분)

Preview를 클릭하고 질문을 던져 보세요.

  • "What is the capital of France?"
  • "Tell me about Japanese cuisine"
  • "Describe the culture in Italy"
  • 기타 다른 질문들

봇이 기대대로 동작하는지 확인하세요!

완료!

이 가이드는 인프라를 새로 만들지 않고 언어 모델을 안정적이고 확장 가능하게 통합하는 방법을 보여줬어요. Dify의 시각적 워크플로와 모듈형 노드로 더 빠르게 빌드할 뿐 아니라, LLM 기반 앱을 위한 깔끔하고 프로덕션 준비가 된 아키텍처를 채택하게 됩니다.

더 알아보기 (Learn more)