本文将带你完整体验:Docker部署Dify → 创建智能旅行助手 → Postman接口测试 → Python Web应用集成

适合人群:对AI应用开发感兴趣的开发者、想快速上手Dify的小伙伴

预计用时:30分钟

前言

Dify作为当下最火热的LLM应用开发平台,让我们无需深厚的AI背景就能快速构建智能应用。本文将以旅行助手Agent为例,带你走完从部署到实战的完整流程。相比传统开发方式,使用Dify可以将开发效率提升10倍以上!

话不多说,让我们开始吧!🎯

一、快速部署Dify平台

1.1 获取Dify源码

步骤如下:

  1. 访问 Dify官网,点击GitHub图标跳转至项目仓库
  2. 在GitHub页面点击 Code → Download ZIP 下载项目文件
  3. 解压 dify-main.zip 压缩包

1.2 配置环境文件

进入解压后的项目目录,找到 docker 文件夹:

dify-main/
  └── docker/
      ├── .env.example  👈 重命名这个文件
      ├── docker-compose.yaml
      └── ...

关键步骤:

  • .env.example 重命名为 .env

💡 小提示: 这个.env文件包含了Dify运行所需的环境变量配置

1.3 启动Docker容器

docker 文件夹中打开命令行工具:

方式一: 在文件夹空白处按住 Shift + 右键,选择"在此处打开命令窗口"

方式二: 打开CMD后输入:

cd /d D:\your-path\dify-main\docker

执行部署命令:

docker compose up -d

Docker将自动拉取并启动Dify所需的所有服务容器。

等待时间: 首次部署约需5-15分钟(取决于网络速度)

二、解决国内网络问题(必看!)

2.1 常见问题

如果遇到以下情况:

  • ❌ 镜像拉取超时
  • ❌ 下载到一半报错
  • ❌ connection refused

原因: 未配置国内Docker镜像源导致访问Docker Hub受限

2.2 配置镜像加速

操作步骤:

  1. 打开Docker Desktop应用
  2. 点击右上角 设置(Settings) 图标
  3. 左侧菜单选择 Docker Engine
  4. 在右侧JSON配置中添加以下内容:
    {
      "registry-mirrors": [
        "https://docker.1ms.run",
        "https://registry.dockermirror.com",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
      ]
    }

    ⚠️ 注意: 请确保JSON格式正确,逗号和括号不要遗漏

  5. 点击 Apply & restart 应用并重启Docker
  6. 重新执行部署命令:
    docker compose up -d

三、初始化Dify平台

3.1 访问Dify

部署成功后,在浏览器中输入: ``` http://localhost/install部署成功后,在浏览器中输入: ``` http://localhost/install,设置管理员邮箱和密码,我这里是登录,因为已经设置过了.

3.2 配置AI模型

登录成功后,我们需要接入AI模型才能使用:

**步骤:**

1. 进入 **设置 → 模型供应商**

2. 找到 **你有API的模型** 并点击安装(比如我是deepseek,注册送20元)


3.3 获取API密钥

访问deepseek开发者平台:

1:注册/登录账号DeepSeek | 深度求索

 deepseek api-key获取地址DeepSeek 开放平台

 3.4添加秘钥

点击 **配置模型api**并保存

四、创建旅行助手Agent

4.1 新建应用

  1. 返回Dify 工作室(Studio)
  2. 点击右上角 创建空白应用
  3. 选择 Agent类型
  4. 输入应用名称:智能旅行助手
  5. 添加应用描述:为用户提供个性化旅行规划和建议
  6. 点击 创建
  7. 创建提示词
  8. 输入简单的提示词,点击生成
  9. 点击应用
  10. 测试效果:从下面的输入框输入一些信息,或者额外的要求.
  11. 发布和更新

4.2 postman测试

1:点击访问API

2:点击API秘钥,并生成API秘钥,然后复制

3:打开postman并创建一个新的collection

4:创建一个新的请求

5:参考API文档编写请求,如:

请求类型:psot

请求地址:http://localhost/v1/chat-messages

header:
Authorization: Bearer {API_KEY}

Content-Type: application/json

6:编写body:,选择raw,json

输入:根据实际情况 agent只支持流式输出

 {
    "inputs": {
      "destination": "北京",
      "day": "5",
      "budget": "5000"
    },
    "query": "我从上海出发,不喜欢坐飞机",
    "response_mode": "streaming",
    "user": "test-user-123"
  }


7:查看结果:

4.3 python web应用

直接附上代码:

import streamlit as st
import requests
import json

# 页面配置
st.set_page_config(
    page_title="AI旅行助手",
    page_icon="✈️",
    layout="wide"
)

# 标题
st.title("✈️ AI旅行助手")
st.markdown("让AI帮你规划完美的旅行计划!")

# 侧边栏输入
with st.sidebar:
    st.header("📝 旅行信息")

    destination = st.text_input(
        "目的地",
        placeholder="例如:东京、巴黎、纽约...",
        help="输入你想去的城市或国家"
    )

    days = st.number_input(
        "旅行天数",
        min_value=1,
        max_value=30,
        value=5,
        help="计划旅行的天数"
    )

    budget = st.number_input(
        "预算(元)",
        min_value=100,
        max_value=100000,
        value=10000,
        step=1000,
        help="本次旅行的总预算"
    )

    st.divider()

    query = st.text_area(
        "其他要求(可选)",
        placeholder="例如:我喜欢美食,想体验当地文化...",
        help="告诉AI你的特殊需求"
    )

    generate_button = st.button("🚀 生成旅行计划", type="primary", use_container_width=True)

# 主要内容区域
if generate_button:
    if not destination:
        st.error("❌ 请输入目的地!")
    else:
        # 准备API调用
        api_url = "http://localhost/v1/chat-messages"
        api_key = "app-LTyjvHzwlLaFg5zK7Aqu0wFm"

        headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }

        # 构建查询
        if query:
            final_query = query
        else:
            final_query = "请帮我规划这次旅行"

        data = {
            "inputs": {
                "destination": destination,
                "day": days,
                "budget": budget
            },
            "query": final_query,
            "response_mode": "streaming",
            "user": "streamlit-user"
        }

        st.info(f"🔍 正在为你规划 **{destination}** 的 **{days}天** 旅行(预算:**¥{budget}**)...")

        # 创建一个容器来显示流式输出
        response_container = st.empty()
        full_response = ""

        try:
            # 发送流式请求
            with requests.post(api_url, headers=headers, json=data, stream=True) as response:
                if response.status_code == 200:
                    for line in response.iter_lines():
                        if line:
                            line_text = line.decode('utf-8')

                            # 跳过 "data: " 前缀和 "event: ping"
                            if line_text.startswith('data: '):
                                json_str = line_text[6:]  # 去掉 "data: "

                                try:
                                    data_obj = json.loads(json_str)
                                    event_type = data_obj.get('event')

                                    # 处理agent消息事件
                                    if event_type == 'agent_message':
                                        answer = data_obj.get('answer', '')
                                        if answer:
                                            full_response += answer
                                            response_container.markdown(full_response)

                                    # 处理普通消息事件(非agent模式)
                                    elif event_type == 'message':
                                        answer = data_obj.get('answer', '')
                                        if answer:
                                            full_response += answer
                                            response_container.markdown(full_response)

                                    # 处理结束事件
                                    elif event_type == 'message_end':
                                        st.success("✅ 旅行计划生成完成!")
                                        break

                                except json.JSONDecodeError:
                                    continue
                            elif line_text.startswith('event: ping'):
                                continue

                    if not full_response:
                        st.warning("⚠️ 未收到回复,请重试")
                else:
                    st.error(f"❌ API调用失败:{response.status_code}")
                    st.code(response.text)

        except Exception as e:
            st.error(f"❌ 发生错误:{str(e)}")

else:
    # 默认显示
    st.markdown("""
    ### 👈 请在左侧填写旅行信息

    #### 功能介绍:
    - 🌍 **智能行程规划**:根据你的预算和时间,AI会为你规划详细的行程
    - 🏨 **住宿推荐**:推荐符合预算的酒店和住宿
    - 🍜 **美食指南**:当地特色美食和餐厅推荐
    - 🎯 **景点推荐**:必去景点和游玩建议
    - 💰 **预算分配**:帮你合理分配旅行预算

    #### 使用步骤:
    1. 在左侧输入你的目的地
    2. 设置旅行天数和预算
    3. (可选)添加其他特殊要求
    4. 点击"生成旅行计划"按钮
    5. 等待AI为你生成专属的旅行计划

    ---

    **示例**:
    - 目的地:东京
    - 天数:5天
    - 预算:10000元
    """)

# 页脚
st.divider()
st.caption("🤖 Powered by Dify AI Agent")

web应用效果:

OK,展示结束,如果有不懂的小伙伴可以评论区留言,大家一起学习!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐