PHP通过调用外部AI服务(如通义千问、OpenAI或Ollama)实现旅游行程智能生成:接收用户偏好→构造结构化提示词→调用API→解析JSON/Markdown→渲染网页或导出PDF。

PHP本身不直接运行AI模型,但可以通过调用外部AI服务(如OpenAI、通义千问API、本地部署的Ollama等)实现“旅游行程智能生成”。核心思路是:PHP接收用户偏好(目的地、天数、预算、兴趣标签等)→ 组织结构化提示词 → 调用AI接口 → 解析返回的JSON或Markdown行程 → 渲染为网页或导出PDF。以下是一个轻量、可落地的PHP集成方案。
一、前置准备:选择稳定可用的AI后端
不推荐在PHP中加载大模型(性能差、内存溢出风险高),应聚焦API调用:
- 国内项目优先用阿里云百炼平台或DashScope(支持Qwen系列,中文强、响应快、有免费额度)
- 国际项目可用OpenAI GPT-4o或Claude-3-haiku(需代理或海外服务器)
- 私有化部署可选Ollama + Qwen2.5:7b(本地CPU可跑,响应约3–8秒,适合小流量)
二、PHP端关键逻辑:安全传参 + 结构化提示工程
避免让AI自由发挥,必须用明确指令+示例约束输出格式。PHP中构造提示词示例如下:
你是一名资深旅游规划师。请根据以下用户需求,生成一份<strong>严格符合格式要求</strong>的JSON行程:
- 目的地:{$_POST['destination']}
- 天数:{$_POST['days']}天
- 预算范围:{$_POST['budget']}元/人
- 兴趣偏好:{implode('、', $_POST['interests'] ?? [])}
- 特殊要求:{$_POST['special_req'] ?? '无'}
<p>【输出规则】</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/7fc7563c4182" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">PHP免费学习笔记(深入)</a>”;</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站"><img
src="https://img.php.cn/upload/skill/000/000/081/179040786932301.jpg" alt="btpanel phpsite 宝塔面板PHP网站" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站">btpanel phpsite 宝塔面板PHP网站</a>
<p>宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理</p>
</div>
<a href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><ol><li>只返回标准JSON,不带任何说明文字、markdown符号或```包裹</li><li>格式必须为:{"title":"行程标题","days":[{"day":1,"morning":"活动","afternoon":"活动","evening":"活动","accommodation":"酒店名"},{"day":2,...}]}</li><li>每个时间段描述需具体(含景点名、交通方式、建议时长),避免模糊词如“逛一逛”“感受一下”</li><li>酒店需标注价格区间与评分(如:如家精选(¥280/晚,4.6分))使用cURL或Guzzle发送POST请求到对应API端点,并设置超时(建议≤30秒)和重试机制。
三、结果处理:容错解析 + 前端友好渲染
AI可能偶尔返回非JSON内容,PHP需做防御性处理:
- 用
json_decode($response, true)解析,失败则记录日志并返回默认提示:“AI暂时繁忙,请稍后重试” - 对解析后的数组做字段校验(如检查是否含
days键、每天是否含morning等),缺失则补空值或触发二次精修请求 - 前端用Bootstrap卡片或Timeline组件展示每日行程,支持一键复制、导出PDF(可用
mpdf/mpdf库)
四、增强体验的实用技巧
让行程真正“可执行”,不止于文案:
- 在行程中自动插入高德/百度地图URL(如:
https://uri.amap.com/navigation?from=xxx&to=xxx&src=mypage) - 对接天气API(和风天气/心知天气),在每日行程顶部显示当日气温与穿衣建议
- 为每个景点添加简短知识卡片(调用维基百科摘要API或预置数据库)
- 提供“调整按钮”:用户点击“减少购物”或“增加亲子项目”,PHP重新发请求微调提示词并刷新部分DOM
不复杂但容易忽略:始终对用户输入做htmlspecialchars()和长度限制,防止提示注入;敏感字段(如API密钥)务必存于.env并通过vlucas/phpdotenv加载,禁止硬编码。


















