第 5 期:30 分钟创建第一个 AI 应用
[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 增强 |
| 内容审核 | 接入关键词/模型审核过滤器 |