第 5 期:30 分钟创建第一个 AI 应用

Updated on 4/6/2026

[Translation Pending]\n\n## Dify 的应用类型

graph TB
    App[Dify App] --> TG[Text Generator 文本生成器]
    App --> CB[Chatbot 聊天机器人]
    App --> AG[Agent 智能体]
    App --> WF[Workflow 工作流]

    TG --> |"单次输入/输出"| T1[翻译器/摘要/分类]
    CB --> |"多轮对话"| T2[客服/助手/导购]
    AG --> |"工具调用"| T3[搜索/计算/API]
    WF --> |"复杂编排"| T4[数据处理管线]

实战一:创建一个翻译助手 (Text Generator)

配置 System Prompt

你是一个专业的中英文翻译助手。

规则:
1. 如果用户输入中文,翻译为英文
2. 如果用户输入英文,翻译为中文
3. 保持原文的语气和风格
4. 对专业术语提供注释

输出格式:
【翻译】: <翻译结果>
【注释】: <如有专业术语,在此解释>

通过 API 调用

curl -X POST 'http://localhost/api/completion-messages' \
  -H 'Authorization: Bearer app-xxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "inputs": {},
    "query": "Kubernetes 的 Pod 调度策略包括节点亲和性和污点容忍。",
    "response_mode": "blocking",
    "user": "user-123"
  }'

通过 Python SDK 调用

import requests

API_KEY = "app-xxxxxx"
BASE_URL = "http://localhost/api"

def translate(text: str) -> str:
    response = requests.post(
        f"{BASE_URL}/completion-messages",
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json"
        },
        json={
            "inputs": {},
            "query": text,
            "response_mode": "blocking",
            "user": "sdk-user"
        }
    )
    return response.json()["answer"]

result = translate("Machine learning is a subset of artificial intelligence.")
print(result)

实战二:创建一个技术顾问 Chatbot

Prompt 设计

# 角色
你是一位资深的全栈工程师,拥有 15 年的软件开发经验。

# 能力
- 前端: React, Vue, Next.js, TypeScript
- 后端: Python, Node.js, Go
- 基础设施: Docker, Kubernetes, AWS, Terraform
- 数据库: PostgreSQL, Redis, MongoDB

# 行为准则
1. 先理解用户的技术背景和上下文
2. 给出简洁、可执行的解决方案
3. 附带代码示例
4. 指出潜在的陷阱和最佳实践

Streaming 调用(流式输出)

import requests
import json

def chat_stream(query: str, conversation_id: str = ""):
    response = requests.post(
        f"{BASE_URL}/chat-messages",
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json"
        },
        json={
            "inputs": {},
            "query": query,
            "response_mode": "streaming",  # 流式输出
            "conversation_id": conversation_id,
            "user": "demo-user"
        },
        stream=True
    )

    full_answer = ""
    conv_id = ""
    
    for line in response.iter_lines():
        if line:
            line = line.decode("utf-8")
            if line.startswith("data: "):
                data = json.loads(line[6:])
                if data["event"] == "message":
                    print(data["answer"], end="", flush=True)
                    full_answer += data["answer"]
                elif data["event"] == "message_end":
                    conv_id = data["conversation_id"]
    
    print()  # 换行
    return full_answer, conv_id

# 第一轮对话
answer, conv_id = chat_stream("如何用 Docker Compose 部署一个 Redis 集群?")

# 第二轮对话(带上 conversation_id 实现多轮)
answer2, _ = chat_stream("那如何配置持久化?", conv_id)

Prompt IDE 核心功能

Dify 的 Prompt IDE 不只是一个输入框,它提供了:

功能 说明
变量插值 在 Prompt 中使用 {{variable}} 引用用户输入
模型对比 同时测试多个模型的输出效果
预设回复 设定开场白和建议问题
上下文增强 关联知识库进行 RAG 增强
内容审核 接入关键词/模型审核过滤器