一路同行
「一路同行」智能体实践总结
一个基于智能体架构的出行同伴匹配系统,帮助用户找到志同道合的出行伙伴。
一、项目概述
「一路同行」 是一个面向出行社交场景的智能体(Agent)。用户只需用自然语言说出"某天想去哪里做什么",智能体便会自动解析意图、匹配已有活动、推荐同行伙伴。如果已有同目的地同时间的活动,用户可以直接加入;如果没有,用户可以一键创建新活动,等待其他伙伴加入。
核心价值:让「一个人想去但不想一个人去」的出行需求,变成「找到组织、有人同行」的真实体验。
二、功能全景
用户输入 "明天想去紫金山"
│
▼
┌─────────────────────────────────────┐
│ 📍 意图解析 │
│ 日期→2026-07-24 地点→紫金山 │
│ 城市→南京 标签→🏃爬山 🥾徒步 🌸观光 │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 🔍 四级智能匹配 │
│ 🔴 精确匹配 同天+同地点 │
│ 🟠 标签匹配 同城+同标签 │
│ 🟡 城市匹配 同城+不同地点+不同标签 │
│ 🟢 日期临近 前后1天+同地点 │
└─────────────────────────────────────┘
│
┌────┴────┐
▼ ▼
加入活动 创建活动
│ │
▼ ▼
┌─────────────────────────────────────┐
│ ⏰ 活动前1小时自动提醒 │
│ 优先短信 → 降级 Web 推送 │
└─────────────────────────────────────┘
2.1 已实现功能清单
| 序号 | 功能 | 说明 |
|---|---|---|
| 1 | 自然语言意图解析 | 识别"明天"“周五”"下周"等时间表达,提取地点与活动类型 |
| 2 | 地点自动归类 | 迪士尼→上海、玄武湖→南京 等确定性映射,模糊地点需确认 |
| 3 | 标签智能推断 | 根据活动描述关键词自动打标签(跑步→🏃跑步,爬山→⛰️爬山) |
| 4 | 四级匹配推荐 | 精确→标签→城市→日期临近,按相关性分层展示 |
| 5 | 加入已有活动 | 收集姓名/性别/联系方式,追加参与者,设提醒 |
| 6 | 创建新活动 | 含集合地点、标签选择、人数上限等完整信息收集 |
| 7 | 发起人信息展示 | 展示发起人姓名+联系方式,方便参与者联系 |
| 8 | 当天其他活动推荐 | 按兴趣标签分层推荐同城其他活动 |
| 9 | 定时提醒 | 基于 cron 的活动前1小时自动提醒 |
| 10 | 查看/搜索活动 | 按日期、标签查看活动 |
| 11 | 虚拟测试数据 | 11个南京活动,覆盖7/24-7/26三天,7种标签类型 |
三、技术架构
3.1 项目结构
skills/travel-companion/
├── SKILL.md # 智能体技能定义(角色、工作流、模板)
├── data/
│ └── activities.json # 活动数据库(11条测试数据)
├── scripts/
│ └── send_sms.py # 阿里云短信发送脚本(纯标准库)
└── config/
├── sms_config.example.json # 短信配置模板
└── sms_config.json # 实际短信配置(需用户填入凭证)
3.2 技术栈
| 层级 | 技术 | 说明 |
|---|---|---|
| 智能体框架 | JiuwenSwarm | 智能体调度、cron 定时、文件读写、Shell 执行 |
| 对话模型 | DeepSeek V4 Pro / Kimi K2.6 / GLM 5.2 | 多模型可切换 |
| 数据存储 | JSON 文件 | activities.json,轻量级、人类可读 |
| 定时任务 | Cron(Quartz 7段式) | 精确到秒的一次性或周期性提醒 |
| 短信发送 | 阿里云 SMS API | Python 标准库实现,无需 pip install |
| 运行环境 | Windows / PowerShell | 本地智能体沙箱 |
3.3 数据模型
{
"id": "act_20260724_nanjing_zhongshanling_001",
"location": "中山陵",
"city": "南京",
"date": "2026-07-24",
"time": "08:00",
"meeting_point": "中山陵博爱坊前",
"activity_desc": "中山陵徒步登顶",
"tags": ["徒步", "观光"],
"creator": {
"name": "老周",
"gender": "男",
"contact": "13700003331"
},
"participants": [
{
"name": "老周",
"gender": "男",
"contact": "13700003331",
"joined_at": "2026-07-20T16:00:00+08:00"
}
],
"status": "open",
"max_participants": 10,
"created_at": "2026-07-20T16:00:00+08:00",
"reminder_job_id": "travel_reminder_xxx"
}
四、核心设计
4.1 智能标签体系(7大类 40+ 标签)
| 大类 | 标签示例 | 图标 |
|---|---|---|
| 运动户外 | 跑步、爬山、骑行、徒步、露营、滑雪、健身、球类 | 🏃⛰️🚴🥾🏕️⛷️🏋️⚽ |
| 美食逛吃 | 美食、火锅、烧烤、下午茶、咖啡、探店、夜市 | 🍜🫕🍖🍰☕🔍🌃 |
| 文艺展览 | 展览、博物馆、美术馆、话剧、音乐会、Livehouse | 🎨🏛️🖼️🎭🎵🎸 |
| 休闲娱乐 | 游乐园、剧本杀、密室、KTV、桌游、逛街、温泉 | 🎢🎭🔐🎤🎲🛍️♨️ |
| 自然观光 | 赏花、看海、日出、日落、公园、动物园、古镇 | 🌸🌊🌅🌇🌳🐘🏘️ |
| 学习成长 | 图书馆、自习、讲座、工作坊、读书会 | 📚✏️🎓🔧📖 |
| 演出赛事 | 演唱会、音乐节、体育赛事、漫展、脱口秀 | 🎪🎤🎵🏟️🎮🎌 |
自动推断:用户说"想去爬山拍照"→ 自动标签 ["爬山", "拍照"],创建时用户可以修改。
4.2 地点-城市自动映射
"迪士尼" → 上海 "故宫" → 北京
"西湖" → 杭州 "兵马俑" → 西安
"玄武湖" → 南京 "洪崖洞" → 重庆
"环球影城" → 北京/多城(需确认)
覆盖全国 50+ 知名景点,确定性映射 16 条 + 模糊匹配(需向用户确认)。
4.3 四级匹配策略
| 优先级 | 层级 | 命中示例 |
|---|---|---|
| 🔴 第1层 | 精确匹配 | 用户想去紫金山 → 已有紫金山晨跑活动 |
| 🟠 第2层 | 标签匹配 | 用户想去栖霞山(爬山)→ 推荐中山陵徒步(同标签徒步) |
| 🟡 第3层 | 城市匹配 | 同城当天其他活动(不同地点、不同标签) |
| 🟢 第4层 | 日期临近 | 前后1天 + 同一地点 |
五、工作流程
Step 1: 意图解析
├── 日期转换("明天"→"2026-07-24")
├── 地点提取 + 城市自动补全
├── 标签自动推断
└── 回显确认
Step 2: 四级匹配
├── 读取 activities.json
├── 逐层匹配
├── 分组展示结果
└── 等待用户选择
Step 3: 加入 / 创建
├── 收集:姓名 + 性别 + 联系方式 + 集合地点 + 标签
├── 确认信息
└── 写入 activities.json
Step 4: 设置提醒
├── 创建 cron 定时任务(活动前1小时)
├── 触发时发送短信(如有配置)
└── Web 推送作为兜底
六、实践演进过程
「一路同行」不是一蹴而就的,而是通过多轮迭代逐步完善的:
| 阶段 | 时间 | 内容 | 产出 |
|---|---|---|---|
| V1 基础搭建 | 7/23 上午 | 核心匹配逻辑 + 数据模型 + 创建/加入流程 | SKILL.md + activities.json |
| V2 智能增强 | 7/23 上午 | 地点自动归类 + 兴趣标签体系 + 四级匹配升级 | 标签系统 + 50+地点映射 |
| V3 首次实操 | 7/23 中午 | 叮当创建玄武湖散步活动,系统正式运行 | 首个真实活动数据 |
| V4 测试数据 | 7/23 中午 | 生成 10 个虚拟南京活动,覆盖 3 天 7 种标签 | 11 条完整活动数据 |
| V5 短信功能 | 7/23 下午 | 集成阿里云短信 + dry-run 测试 + 降级兜底 | send_sms.py + 配置模板 |
| V6 体验增强 | 7/23 下午 | 集合地点 + 发起人联系方式展示 | 数据模型扩展 + 模板升级 |
| V7 多用户验证 | 7/23-24 | 蓝天加入栖霞山、清水加入中山陵,多用户并发测试 | 真实多人活动体验 |
七、后续拓展方向
7.1 📱 短信提醒(优先)
当前状态:脚本已就绪(send_sms.py),支持阿里云 SMS API,纯 Python 标准库,dry-run 测试通过。
待完成:
| 步骤 | 操作 | 预计时间 |
|---|---|---|
| 1 | 阿里云开通短信服务,获取 AccessKey | 10 分钟 |
| 2 | 申请短信签名「一路同行」 | 0.5-2 小时(审核) |
| 3 | 申请通知模板 | 0.5-2 小时(审核) |
| 4 | 填入 sms_config.json |
1 分钟 |
| 5 | 真实发送测试 | 1 分钟 |
技术实现:
# cron 触发时自动调用
python send_sms.py \
--config sms_config.json \
--recipients '[{"phone":"18888652356","name":"叮当"}]' \
--activity "玄武湖散步" \
--time "2026-07-24 14:00" \
--location "南京玄武湖"
降级策略:未配置短信时自动降级为 Web 推送,不影响核心功能。
费用估算:0.045 元/条,100 条仅需 4.5 元。首次开通通常赠送试用额度。
7.2 📧 邮箱提醒
- 识别
@格式的联系方式,调用 SMTP 发送邮件 - 与短信互补,覆盖不同偏好的用户
7.3 🗺️ 活动地图可视化
- 将同城活动标注在地图上
- 一键查看"附近有哪些活动"
7.4 ⭐ 用户信用与评价系统
- 参与者互评机制
- 发起人信用分
- 降低鸽子率
7.5 💬 活动内聊天
- 加入活动后自动建群(飞书/微信/系统内置)
- 活动前讨论具体安排
7.6 📊 活动热度与推荐算法
- 基于历史数据推荐热门活动
- 个性化推荐(根据用户偏好标签)
7.7 🔗 外部平台对接
- 飞书机器人集成
- 微信小程序
- Telegram Bot
八、测试数据一览
当前系统共有 11 个活动,覆盖 2026-07-24 至 07-26:
| 日期 | 活动 | 标签 | 人数 |
|---|---|---|---|
| 7/24(周五) | 玄武湖散步 | 🌿观光 🌸公园 | 1 |
| 7/24(周五) | 紫金山晨跑看日出 | 🏃跑步 🌅日出 | 5 |
| 7/24(周五) | 老门东美食探店 | 🍜美食 🔍探店 | 3 |
| 7/24(周五) | 中山陵徒步登顶 | 🥾徒步 🌿观光 | 6 |
| 7/25(周六) | 明孝陵赏花漫步 | 🌸赏花 🌿观光 | 3 |
| 7/25(周六) | 秦淮河夜游画舫 | 🌿观光 ✈️旅游 | 4 |
| 7/25(周六) | 南京博物院看特展 | 🎨展览 🏛️博物馆 | 2 |
| 7/25(周六) | 栖霞山徒步登山 | 🥾徒步 ⛰️爬山 | 6 |
| 7/26(周日) | 夫子庙逛吃之旅 | 🍜美食 🌿观光 | 4 |
| 7/26(周日) | 牛首山一日游 | ✈️旅游 🌿观光 | 3 |
| 7/26(周日) | 玄武湖晨跑团 | 🏃跑步 ⚽体育 | 2 |
九、关键经验总结
9.1 设计原则
- 渐进式增强:从核心匹配 → 标签推荐 → 短信提醒,每次迭代增加一层价值
- 优雅降级:短信不可用 → 自动走 Web 推送,功能核心不受影响
- 数据驱动:所有活动数据集中管理(JSON),Agent 无状态、可重启
- 自然语言优先:用户说人话,系统做翻译,零学习成本
9.2 踩过的坑
| 问题 | 解决 |
|---|---|
| 日期推算错误(周五算成周六) | 严格使用当前日期 + 日历逻辑,不可凭直觉 |
| 数据覆盖写入 | 强制"先读后写"规则,避免并发覆盖 |
| 虚拟活动缺少字段 | 定义好数据模型后一次性补全,避免后续补丁式修改 |
| 短信依赖第三方 | 设计 dry-run 模式和解耦的降级策略 |
9.3 方法论
“智能体不是一次性建设,而是持续演进的服务。”
从 V1 到 V7,每一版都解决一个真实的用户痛点,而不是一次性设计完美系统。快速上线 → 收集反馈 → 迭代增强,是智能体实践的核心节奏。
十、文件清单
| 文件 | 路径 | 用途 |
|---|---|---|
| 技能定义 | skills/travel-companion/SKILL.md |
完整的工作流、模板、规则 |
| 活动数据 | skills/travel-companion/data/activities.json |
11条活动数据 |
| 短信脚本 | skills/travel-companion/scripts/send_sms.py |
阿里云短信发送 |
| 短信配置 | skills/travel-companion/config/sms_config.example.json |
配置模板 |
| 本文档 | travel-companion-practice-summary.md |
实践总结 |
📅 创建日期:2026-07-24
👤 智能体:一路同行(travel-companion)
🛠️ 框架:JiuwenSwarm
- 点赞
- 收藏
- 关注作者
评论(0)