개발/Dify

[Dify] 챗봇 실습 - 변수를 활용한 챗봇 만들기

말하는 알감자 2025. 12. 9. 13:34

이번에는 변수를 활용하여 이메일을 비지니스 스타일에 맞게 교정해주는 챗봇을 만들어보겠습니다.

Dify에서 변수를 사용하는 가장 큰 이유는 효율성 때문입니다.

변수를 활용하면 하나의 프롬프트로 여러 상황에 대응할 수 있어 매번 새로 작성할 필요가 없습니다.

예를들어 ”{{고객명}}님, {{문의내용}}에 대해 안내드리겠습니다"라는 템플릿을 만들면, 고객 이름과 문의 내용만 바뀌어도 자동으로 맞춤형 응답을 생성할 수 있습니다.

변수는 사용자가 입력하는 내용에 따라 AI 응답이 실시간으로 바뀌게 해주어 더 자연스럽고 개인화된 대화를 만들어냅니다.

또한 한 번 만든 템플릿을 계속 재사용할 수 있어 개발 시간을 크게 단축시키면서도, 일관된 품질의 서비스를 제공할 수 있다는 것이 변수 사용의 핵심 장점입니다.


변수

1️⃣ 변수는 ‘사용자 입력(Form)’을 자동으로 생성하는 기능

Dify에서 변수를 생성하면,

  • 사용자에게 노출되는 입력 필드
  • 프롬프트에서 참조되는 동적 값

둘 다 자동으로 연결됩니다.

즉, 변수는 입력 UI + 프롬프트 파라미터 역할을 동시에 합니다.

2️⃣ 변수는 챗봇뿐 아니라 전체 앱에서 재사용 가능

한 번 만든 변수는:

  • 시스템 프롬프트
  • 사용자 프롬프트
  • 도구 호출 파라미터
  • API 호출
  • 워크플로우 노드 입력값

이런 곳 어디서든 사용할 수 있도록 설계되어 있습니다.

즉, 앱 전체에서 공통 파라미터로 활용할 수 있다는 의미입니다.

3️⃣ 변수명(name)과 레이블(label)은 완전히 다른 역할

공식 문서 기준:

항목 역할

변수명 (name) 프롬프트 내부에서 {{variable_name}} 형태로 호출하는 키
레이블 (label) 사용자 화면에 표시되는 제목(UI용)

→ 둘은 완전히 독립적이고, label은 한글 가능 / name은 영문만 가능

→ label을 바꿔도 프롬프트 동작에는 영향 없음

4️⃣ 변수를 프롬프트에서 참조하는 방식은 Mustache 규칙을 따름

프롬프트에서 변수는 다음 형태로 호출됩니다:

{{email}}
{{tone}}
{{user_name}}

Dify는 {{변수명}} 처럼 중괄호 두 개로 감싸는 플레이스홀더 문법을 사용합니다.

Mustache 스타일과 유사한 템플릿 치환 방식이며, 실행 시점에 실제 값으로 대체됩니다.

5️⃣ 변수 유형별 특징

① 단일 텍스트 (Short Text)

  • 짧은 문자열
  • 이메일 제목, 사용자 이름, 간단한 키워드 입력에 적합
  • 최대 길이 설정 가능

② 문단 (Paragraph)

  • 여러 줄 입력을 받는 긴 텍스트
  • 이메일 본문, 기사, 보고서, 긴 문서 입력에 적합
  • 공식 문서 기준: “긴 입력값을 다룰 때 사용”

③ 숫자 (Number)

  • 정수 또는 숫자 입력
  • 수량, 가격, 조건 파라미터 등에 사용

④ 선택(Select)

  • 드롭다운 선택 리스트
  • 공식 문서 기준: “모델의 출력을 일관되게 유지할 수 있음”
  • 예: 톤(tone)처럼 옵션이 미리 정해져 있을 때 사용

⑤ Checkbox

  • true / false 값을 받는 변수
  • "이 기능을 활성화할까요?" 같은 이진 선택에 활용

⑥ API 기반 변수(API-Based Variable)

공식 문서에서 API 기반 변수는 **확장 기능(API-based Extension/Variable)**로 분류되며,

기본 입력 타입(Text/Paragraph 등)과는 다른 레이어의 기능입니다.

외부 API(REST)에서 데이터를 불러와 변수처럼 사용할 수 있으며,

사내 시스템·DB·외부 서비스 값을 AI 프롬프트에 자동 반영할 수 있습니다.

⑦ 추가 입력 타입

Dify 공식 문서 기준으로 다음 입력 타입도 존재합니다:

  • Object: JSON 구조 입력
  • Single File: 파일 1개 업로드
  • File List: 여러 개 파일 업로드

6️⃣ 변수는 프롬프트의 어느 위치에도 삽입 가능

즉,

  • 시스템 프롬프트
  • 유저 프롬프트
  • 함수 호출
  • 워크플로우 입력값

에 모두 삽입 가능해, 앱 전체를 파라미터 기반으로 유연하게 설정할 수 있음.

7️⃣ 변수는 챗봇에서 질문 자동 생성에도 사용 가능

변수에 필수(required) 옵션을 설정하면,

해당 변수 값이 없을 경우 실행이 불가능하며 UI에서 ‘필수 입력’을 안내합니다.

채팅형 앱에서는 사용자에게 값 입력을 요청하는 흐름을 구성할 수 있습니다.

예:

tone 변수를 필수로 설정했다면

“원하시는 이메일 톤은 어떤 스타일입니까?”

라고 자동으로 물어봅니다.

8️⃣ 변수는 API 배포 시에도 그대로 사용됨

앱을 API로 배포하면

변수들은 “Request Body(JSON)”의 필드로 자동 포함됩니다.

예:

{
  "inputs": {
    "email": "사용자가 입력한 이메일",
    "tone": "formal"
  }
}

즉, 변수 기반 챗봇은 프론트엔드 / UI뿐 아니라 자동화 시스템에서도 재사용 가능합니다.

9️⃣ 변수와 LLM 호출 비용 관계

공식 문서에서 언급하는 중요한 특징:

  • 변수가 많아져도 LLM 비용이 증가하지는 않음
  • 그러나 긴 문단 변수는 토큰을 크게 증가시키므로 비용이 증가할 수 있음

→ Email과 같은 본문을 넣을 때는, 긴 문서를 입력하면 비용도 늘어난다는 점만 주의.


비지니스 이메일 교정 챗봇 구현

1) ‘비즈니스 이메일 교정’ 챗봇을 만듭니다.

빈 상태로 시작 > 챗봇 선택 > 앱 아이콘과 이름 입력 > 만들기

2) 단계에서 비즈니스 이메일 교정을 위한 프롬프트를 입력합니다.

<프롬프트>

  당신은 비즈니스 이메일 작성 전문가입니다. 아래에 사용자가 입력한 이메일 초안을 제공하겠습니다.

  이 이메일을 비즈니스 상황에 적절하게 다듬고, 사용자가 지정한 톤에 맞게 수정해주세요.

  요청 형식:

  - 이메일 내용:
  - 원하는 톤: 

  요청 사항:

  1. 문법과 맞춤법을 정확히 수정해주세요.
  2. 문장 구조를 더 자연스럽고 비즈니스 상황에 적합하게 다듬어주세요.
  3. 지정한 톤에 맞게 어투와 표현을 조정해주세요.
  4. 내용은 변경하지 말고, 전달 방식만 조정해주세요.

3) 변수에서 ‘추가’ 버튼을 누릅니다. email 내용이 들어갈 변수를 만들기 위해서 변수 유형 중 ‘문단’을 선택합니다.

  • 짧은 텍스트: 이름, 제목, 키워드 같은 한 줄 정도의 간단한 텍스트를 입력받을 때 사용합니다.
  • 문단: 긴 글이나 여러 줄의 텍스트를 입력받을 때 사용하는 변수입니다.
  • 선택: 미리 정해진 옵션 중에서 하나를 고르게 하는 드롭다운 형태의 변수입니다.
  • 숫자: 나이, 수량, 가격 등 숫자 값을 입력받을 때 사용하는 변수 유형입니다.
  • API 기반 변수: 외부 시스템이나 데이터베이스에서 실시간으로 데이터를 가져와서 사용하는 고급 변수입니다.

4) 생성된 변수에서 마우스를 가까이 대면 연필 모양의 아이콘이 나옵니다. 아이콘을 클릭합니다.

5) 입력 필드 편집 창이 나타나면 아래와 같이 입력합니다. 변수명, 레이블명은 email로, 변수에 들어갈 글자의 최대 길이를 10000으로 설정합니다.

  • 변수명: 프롬프트에서 해당 변수를 호출할 때 사용하는 이름입니다. 영문만 가능합니다.
  • 레이블명: 사용자에게 실제로 보여지는 필드 제목입니다. 마찬가지로 영문만 가능합니다.
  • 최대 길이: 사용자가 입력할 수 있는 글자 수 제한을 설정하는 옵션입니다.
  • 필수: 해당 필드를 반드시 입력해야 하는지를 결정합니다. 체크하면 사용자가 반드시 값을 입력해야 합니다.
  • 숨기기: 필요에 따라 해당 필드를 사용자 화면에서 보이지 않게 할 때 사용하는 옵션입니다.

6) 저장을 누르면 다음과 같이 email 변수가 생성되었음을 확인할 수 있습니다.

7) 이제 프롬프트에서 적절한 위치에 변수를 넣겠습니다. 사용자의 이메일 초안: ‘/’ 를 누르면 아래와 같이 email 변수가 보입니다. email을 선택합니다.

8) 다음과 같이 email 변수가 프롬프트에 들어간 것을 확인할 수 있습니다.

9) 이번에는 이메일의 톤을 설정해보겠습니다. tone 변수를 생성해보겠습니다. tone 변수를 ‘선택’ 유형으로 생성합니다.

10) 입력 필드 편집 기능을 통해 tone 변수에 대한 설정을 합니다.

11) 프롬프트에서 적절한 위치에 tone변수를 넣겠습니다. 원하는 톤: 에서 ‘/’를 누르고 tone 변수를 입력합니다.

12) 게시하기에서 업데이트 게시를 누르고 어떻게 동작하는지 디버그 및 미리보기에서 확인해보겠습니다. 아래는 샘플 이메일입니다.

<샘플 이메일>


📌 요약

  • Dify 변수는 입력폼 + 프롬프트 파라미터 역할을 동시에 수행
  • Mustache 템플릿 문법으로 {{변수명}}을 호출
  • 변수는 워크플로우/도구/API 어디서든 재사용
  • 필수 변수는 입력하지 않으면 챗봇이 자동으로 질문
  • 선택형 변수는 모델 출력의 일관성을 크게 높임
  • API 변수로 외부 데이터를 불러와 동적 응답 가능
  • 긴 문단 변수는 토큰 비용에 영향을 줌