基于Dify与Streamlit的旅行规划Agent实战:从部署到Web应用集成

发布时间:2026/6/10 0:04:23

基于Dify与Streamlit的旅行规划Agent实战:从部署到Web应用集成 1. 为什么选择Dify与Streamlit构建旅行规划Agent第一次接触Dify平台时我就被它的低代码特性惊艳到了。作为一个长期在AI应用开发领域摸爬滚打的开发者我深知传统开发流程的痛点从模型训练到API封装再到前后端对接每个环节都需要投入大量时间。而Dify的出现让开发者可以像搭积木一样快速构建AI应用。Dify的核心优势在于它提供了完整的LLM应用开发流水线。你不需要关心模型部署、API封装这些底层细节只需专注于业务逻辑的设计。我做过对比测试用传统方式开发一个基础AI应用平均需要3-5天而用Dify只需要2-3小时。Streamlit则是Python开发者构建Web应用的神器。记得我第一次用Flask开发前端界面时光是处理表单验证和页面跳转就写了上百行代码。而Streamlit用几行Python脚本就能实现交互式Web界面特别适合快速原型开发。两者的结合产生了奇妙的化学反应Dify负责AI大脑处理自然语言理解、行程规划等智能逻辑Streamlit负责交互界面收集用户输入、展示规划结果开发效率提升10倍我从零开始完成第一个可用的旅行规划应用只用了周末两天时间2. 环境准备与Dify部署2.1 获取Dify源代码部署Dify的第一步是获取最新代码。推荐直接从GitHub仓库克隆这样可以方便后续更新git clone https://github.com/langgenius/dify.git cd dify/docker如果网络环境不理想也可以下载ZIP压缩包。我测试过完整代码包大约80MB左右。2.2 配置Docker环境Dify依赖多个服务组件用Docker Compose管理是最佳选择。在docker目录下你会看到几个关键文件docker/ ├── .env.example # 环境变量模板 ├── docker-compose.yaml # 服务编排文件 └── config/ # 各服务配置文件关键步骤复制环境文件cp .env.example .env检查端口配置确保3306MySQL、6379Redis等端口未被占用内存要求建议系统至少有8GB可用内存2.3 启动Dify服务在docker目录下执行docker compose up -d首次启动会下载约2GB的镜像根据网络情况需要10-30分钟。我建议在这段时间去泡杯咖啡而不是盯着进度条。启动完成后访问http://localhost应该能看到安装界面。如果遇到端口冲突可以修改docker-compose.yaml中的端口映射。3. 配置AI模型与创建Agent3.1 接入大语言模型Dify本身不提供模型需要接入第三方API。目前支持的主流模型包括模型提供商免费额度特点DeepSeek20元体验中文优化好OpenAI无国际版稳定性高文心一言有国产合规以DeepSeek为例获取API Key的步骤注册DeepSeek开发者账号在控制台创建应用复制API Key在Dify后台的模型供应商页面添加密钥后记得点击测试连接验证是否配置成功。3.2 创建旅行规划Agent进入Dify工作台点击新建应用应用类型选择Agent名称填写智能旅行助手描述可以写个性化行程规划专家关键配置项对话开场白您好我是您的旅行顾问请告诉我目的地和出行天数知识库可以上传景点数据库CSV文件工具配置启用网络搜索用于获取实时信息我建议在提示词工程上下功夫。经过多次测试这个模板效果不错你是一位专业的旅行规划师擅长根据用户的预算、时间和偏好制定个性化行程。要求 1. 每天安排3-4个主要景点合理考虑地理位置 2. 推荐当地特色美食注明人均消费 3. 给出交通建议和注意事项 4. 预算控制在{budget}元内 5. 使用中文回答风格亲切自然4. Streamlit前端开发实战4.1 基础界面搭建安装Streamlit只需一行命令pip install streamlit创建一个travel_agent.py文件基础框架如下import streamlit as st # 页面配置 st.set_page_config( page_titleAI旅行助手, layoutwide ) # 侧边栏输入 with st.sidebar: st.header(旅行信息) destination st.text_input(目的地) days st.number_input(天数, min_value1, max_value30) budget st.number_input(预算(元), min_value500) # 主内容区 st.title(f{destination} {days}日游规划) if st.button(生成行程): st.write(正在生成...) # 这里后续接入Dify API这个基础版本已经包含了核心交互元素。我建议添加一些用户体验优化输入框的placeholder提示预算滑块替代数字输入加载动画提升等待体验4.2 接入Dify API首先需要获取Dify应用的API密钥在工作台的API访问页面可以找到。然后完善请求逻辑import requests import json API_URL http://localhost/v1/chat-messages API_KEY 你的App密钥 def generate_travel_plan(destination, days, budget, preferences): headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } data { inputs: { destination: destination, day: str(days), budget: str(budget) }, query: preferences if preferences else 请帮我规划行程, response_mode: blocking, user: streamlit_user } response requests.post(API_URL, headersheaders, jsondata) return response.json()在按钮点击事件中调用这个函数if st.button(生成行程): with st.spinner(AI正在规划行程...): result generate_travel_plan(destination, days, budget) st.write(result[answer])4.3 流式输出优化直接显示完整结果体验不够好我改用了流式输出response_container st.empty() full_response with requests.post(API_URL, headersheaders, jsondata, streamTrue) as r: for line in r.iter_lines(): if line: line_text line.decode(utf-8) if line_text.startswith(data: ): try: data json.loads(line_text[6:]) if answer in data: full_response data[answer] response_container.markdown(full_response) except: continue这样用户可以看到AI逐步生成内容的过程体验更自然。我还添加了Markdown渲染让行程中的标题、列表等格式更美观。5. 高级功能与部署上线5.1 行程可视化展示纯文本行程不够直观我增加了地图可视化功能。使用streamlit-folium组件from streamlit_folium import folium_static import folium def show_map(places): places是包含经纬度的景点列表 m folium.Map(location[places[0][lat], places[0][lng]], zoom_start12) for place in places: folium.Marker( [place[lat], place[lng]], popupplace[name] ).add_to(m) folium_static(m)需要先在Dify Agent中配置返回景点坐标信息然后解析出来传给这个函数。5.2 多日行程选项卡使用st.tabs实现天选项卡days st.number_input(天数, 1, 10) tabs st.tabs([f第{i1}天 for i in range(days)]) for i, tab in enumerate(tabs): with tab: day_plan get_day_plan(i1) # 从API结果中提取第i天数据 st.write(day_plan) if places in day_plan: show_map(day_plan[places])5.3 部署到生产环境开发完成后可以用这些方式部署本地运行streamlit run travel_agent.pyDocker部署FROM python:3.9 WORKDIR /app COPY . . RUN pip install -r requirements.txt CMD [streamlit, run, travel_agent.py]云服务部署Streamlit Community CloudAWS EC2阿里云函数计算我个人的部署方案是前端Streamlit Community Cloud免费版够用后端Dify部署在本地服务器有GPU资源数据库阿里云RDS MySQL这种架构可以支持每天约1000次的访问量足够小型旅行社使用。如果流量增大可以考虑使用Kubernetes扩容Dify服务。

相关新闻