심플 챗봇 만들기
심플 챗봇 만들기 (Simple Chatbot)
Dify의 진짜 가치는 아이디어가 아무리 복잡해도 얼마나 쉽게 빌드·배포·확장할 수 있느냐에 있어요. 빠른 프로토타이핑, 매끄러운 반복, 어느 규모에서든 안정적인 배포를 위해 만들어졌죠. 이 가이드에서는 신뢰할 수 있는 LLM 통합을 배우기 위해, 사용자의 질문을 분류하고 LLM으로 직접 답하며, 그 응답에 국가별 재미있는 사실(fun fact)을 더해 주는 간단한 챗봇을 만들어 봅니다.
출처: 공식문서
1단계: 새 워크플로 만들기 (2분)
- Studio > Workflow > Create from Blank > Orchestrate > New Chatflow > Create 순서로 이동합니다.
2단계: 워크플로 노드 추가 (6분)
변수를 참조하고 싶을 때 { 또는 /를 먼저 입력하면 워크플로에서 사용할 수 있는 여러 변수를 볼 수 있어요.
1. LLM 노드와 출력: 질문 이해하고 답하기
LLM 노드는 프롬프트를 언어 모델에 보내 사용자 입력에 기반한 응답을 생성합니다. API 호출·속도 제한·인프라의 복잡성을 추상화해서 우리는 로직 설계에만 집중할 수 있게 해 줘요.
- LLM 노드 만들기:
Add Node버튼으로 LLM 노드를 만들어 Start 노드에 연결합니다. - 모델 구성: 기본 모델을 선택합니다.
- 시스템 프롬프트 설정: 다음을 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>"
}
- 구조화 출력 활성화: Enable Structured Output은 LLM이 무엇을 반환할지 쉽게 제어해, 다운스트림의 정밀한 데이터 추출이나 조건부 로직에서 일관되고 기계가 읽을 수 있는 출력을 보장합니다.
- Output Variables Structured 토글을 ON으로 켜고 >
Configure>Import from JSON클릭 - 다음을 붙여 넣습니다:
- Output Variables Structured 토글을 ON으로 켜고 >
{
"country": "string",
"question": "string",
"answer": "string"
}
2. 코드 블록: 재미있는 사실 가져오기
Code 노드는 코드로 커스텀 로직을 실행합니다. 시각적 워크플로 안에서 필요한 정확한 위치에 코드를 주입할 수 있게 해 주며, 전체 백엔드를 직접 구축하는 수고를 덜어줍니다.
- Code 노드 만들기:
Add Node버튼으로Code노드를 만들어 LLM 블록에 연결합니다. - 입력 변수 구성:
Input Variable이름 하나를 "country"로 바꾸고 변수를structured_output > country로 설정합니다. - 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}
- 출력 변수 이름 바꾸기: 출력 변수
result를fun_fact로 바꿔 더 알아보기 좋은 변수 이름을 붙입니다.
3. Answer 노드: 사용자에게 최종 답변
Answer 노드는 반환할 깔끔한 최종 출력을 만듭니다.
- Answer 노드 만들기:
Add Node버튼으로Answer노드를 만듭니다. - 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 기반 앱을 위한 깔끔하고 프로덕션 준비가 된 아키텍처를 채택하게 됩니다.