我的“Vibe Coding”时刻:2025我就用 TRAE Builder+MCP做个超酷的旅游札记生成器

90 阅读24分钟

image.png

喜欢旅行但懒得写游记?

每次旅行回来,手机里存了几百张照片,却总觉得整理成一篇生动的游记太麻烦?写出来的文字又干巴巴的,完全配不上眼前的美景?别着急,今天我就来教你VibeCoding技术,用TRAE Builder+MCP服务快速开发一个AI驱动的旅游札记生成应用!

2025年,我接触到TRAE,发现用途真的很多,这其实是我最激动的VibeCoding时刻了!

这个应用超厉害的:你只需要输入旅行的基本信息和照片,它就能自动分析照片内容,结合地理位置信息,生成风格多样、内容丰富的旅行札记,还支持Markdown、HTML、PDF等多种格式导出哦~

我今年不写什么总结了,我2025年的旅游总结都靠它了,哈哈!

为什么要做这个应用?

兄弟们,你是不是也有这样的烦恼:

  • 🤖 不想绞尽脑汁写游记:旅行已经够累了,回来还要写大段文字,想想就头大!
  • 📸 照片太多不知道怎么用:手机里存了几百张照片,却只能发朋友圈九宫格。。。
  • 🗺️ 想记录旅行足迹:每次旅行结束,都想看看自己走过的路线,超有成就感~!
  • 💾 分享方式太单一:只能发朋友圈,想整理成正式一点的内容又嫌麻烦>_<
  • 🎨 想要个性化风格:每个人的旅行感受都不一样,当然要配不同风格的文字!

现在,有了这个AI旅游札记生成器,这些问题都迎刃而解啦!

这个应用能做什么?

我自己觉得这个AI旅游札记生成器简直是旅行爱好者的神器!它能帮你:

  • 📝 轻松收集信息:只需要输入目的地、日期、印象深刻的经历和照片,其他的交给AI就行
  • 🔍 照片智能解读:TRAE MCP的图像分析服务就像你的私人导游,能自动识别照片里的场景、物体和氛围
  • 🗺️ 地理位置魔法:高德地图MCP能把地址变成精确的经纬度,还能帮你搜索周边的隐藏景点
  • ✍️ AI自动写札记:结合所有信息,生成超个性化的旅行故事,比你自己写的还精彩!
  • 📤 多种格式导出:支持Markdown、HTML、PDF,想怎么分享就怎么分享,朋友圈、公众号、打印成册都行
  • 📌 旅行足迹地图:把你的行程变成可视化的路线图,看着地图上的脚印,超有成就感!

这就是VibeCoding带给我的新生活尝试。技术让生活体验更有趣,创作旅游vlog也更加便捷!

是不是听起来就很心动?下面我们再一起多了解一些吧!

2. 技术架构大揭秘

2.1 整体架构图

兄弟们,虽然咱们做的是AI应用,但技术架构其实一点都不复杂!就像搭积木一样,几个部分互相配合就能完成所有功能:

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│                 │     │                 │     │                 │
│  你输入信息的地  ├────►│  核心处理大脑    ├────►│  导出和展示模块  │
│                 │     │                 │     │                 │
└─────────────────┘     └─────────────────┘     └─────────────────┘
         ▲                      ▲                      ▲
         │                      │                      │
         ▼                      ▼                      ▼
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│                 │     │                 │     │                 │
│  TRAE AI服务    │     │  高德地图服务    │     │  本地存储系统    │
│                 │     │                 │     │                 │
└─────────────────┘     └─────────────────┘     └─────────────────┘

是不是超简单?就三个主要部分:你输入信息的地方、核心处理大脑,还有导出和展示模块。然后每个模块都有对应的服务支持,TRAEMCP负责AI部分,高德地图负责地理位置,本地存储负责保存数据。

这么一说,是不是觉得技术架构也没那么神秘了?

2.2 应用的「心脏」和「手脚」

咱们的应用由几个关键部分组成,就像一个完整的人一样,每个部分都有自己的职责:

2.2.1 TRAE AI大脑

这是应用的智能核心,就像一个超级会写作文的导游,还能看懂照片!

  • ✍️ 写作文小能手:根据你的旅行信息,生成不同风格的旅行故事,文艺、幽默、深度、简洁任你选
  • 👁️ 照片解读大师:能看懂你拍的照片,知道里面有什么场景、物体,甚至能感受照片的氛围

2.2.2 高德地图助手

这个助手负责处理所有和地理位置相关的事情,就像你的私人GPS+

  • 📍 地址变坐标:把「苏州桃花坞」这样的地址变成精确的经纬度坐标
  • 🔄 坐标变地址:反过来,知道某个坐标点具体在什么地方
  • 🔍 附近搜一搜:帮你找到周边的景点、餐厅、酒店等,超方便
  • 📏 距离算一算:告诉你从一个地方到另一个地方有多远,走路要多久,开车要多久

2.2.3 核心协调员

这个部分就像个大管家,协调各个模块工作,让整个应用有条不紊地运行:

  • 📝 收集信息:整理你输入的所有旅行信息,确保数据完整
  • 📸 管理照片:把你的照片送到TRAE AI那里去分析,还会处理照片路径问题
  • 🗺️ 整合地理:把地图信息和旅行内容完美结合,让札记更有空间感
  • 生成札记:把所有信息变成一篇完整、生动的旅行故事

2.2.4 导出小助手

写完札记后,这个助手帮你保存和展示,想怎么分享就怎么分享:

  • 📄 Markdown格式:原始文本格式,方便你自己编辑修改
  • 🌐 HTML网页:漂亮的网页格式,支持手机查看,还能加样式
  • 📑 PDF文档:可以打印出来的正式格式,适合做成旅行纪念册
  • 📋 索引页面:把所有札记整理成目录,方便你查找和管理

这四个部分各司其职,又互相配合,就像一个默契的团队,帮你轻松生成高质量的旅行札记!

3. TRAE Builder+MCP服务实现

3.1 TRAE Builder开发环境

兄弟们,TRAE Builder真的是太好用了!它提供了完整的开发环境和工具链,让咱们开发基于MCP服务的应用变得超简单。

开发应用对环境要求可不高!只要你有:

  • Python 3.7以上版本(现在谁还不用Python3啊)
  • pip包管理工具(Python自带的,不用额外装)
  • 能上网就行(要调用MCP服务嘛)

就行了!

有了TRAE Builder,咱们只需要专注于业务逻辑,其他的都交给AI来完成就行!

3.2 MCP服务调用实现

高德地图MCP服务调用

本项目基于高德地图的MCP开发了旅游札记应用,希望能将旅游的图文快速整合制作好看的页面展现,请根据设计完善本项目基础功能开发并展现。 需要添加这个amap的MCP服务。 我们打开TRAE,使用Builer with MCP添加MCP工具即可。

641e4ddf4b0703baeb830fd7cece1514.png

3897dc78193b8838219b0ae41ab93e99.png

MCP Server的配置如下,其中API Key需要直接到高德地图官网申请,是免费的哦:

"mcpServers": {
    "amap-maps": {
      "command": "npx",
      "args": [
        "-y",
        "@amap/amap-maps-mcp-server"
      ],
      "env": {
        "AMAP_MAPS_API_KEY": "your_api_key"
      }
    }
  }
}

添加完成后测试效果如下所示:

3a5f09ac7a9b28860a6617b18356f8c3.png

4. VibeCoding开发体验

4.1 VibeCoding是什么?

VibeCoding简直是程序员的福音!

它是一种全新的编程方式,不用再对着黑屏敲代码,只需要和AI用自然语言聊天,就能完成代码开发。这次做旅游札记应用,我就深度体验了一把VibeCoding的魅力,效率提升了不止一点半点!

4.2 VibeCoding开发流程

你知道用VibeCoding开发有多简单吗?就像和朋友聊天一样:

  1. 说需求:直接用中文告诉AI我想要一个能生成旅行札记的应用,要支持照片分析、地图功能这些
  2. 搭架构:和AI一起讨论应用该怎么设计,分成几个模块,每个模块负责什么
  3. 写代码:AI自动生成核心代码框架,我只需要稍微调整一下
  4. 调功能:哪里不对了,直接和AI说"这里有问题,帮我改一下",AI就会自动修复
  5. 做测试:AI还能自动生成测试用例,帮我优化代码质量

用过之后我只能说,真的香!以前写代码要查文档、写逻辑,现在直接说需求,AI分分钟生成代码,专注于想功能就行。不会编程的人也能开发应用,只要会说话就行! 同时,遇到bug不用头大,AI帮你找问题、给建议,比百度还好用。

5. 功能模块大揭秘

5.1 用户输入模块

兄弟们,咱们先来看看用户输入模块!这个模块就像是你的旅行小助手,会一步步问你关于旅行的信息:

def get_user_input() -> Dict[str, Any]:
    print("=== AI旅行札记生成器 ===")
    print()
    
    destination = input("请输入旅行目的地:")
    travel_dates = input("请输入旅行日期(如:2025-01-01至2025-01-05):")
    key_experiences = input("请描述几个印象深刻的经历(用逗号分隔):")
    
    photos_input = input("请输入照片路径或URL(用逗号分隔,可留空):")
    photos = [p.strip() for p in photos_input.split(",")] if photos_input.strip() else []
    
    locations_input = input("请输入途经地点(用逗号分隔,可留空):")
    locations = [l.strip() for l in locations_input.split(",")] if locations_input.strip() else []
    
    style = input("请选择札记风格(文艺/幽默/深度/简洁,默认文艺):").strip() or "文艺"
    
    return {
        "destination": destination,
        "travel_dates": travel_dates,
        "key_experiences": [e.strip() for e in key_experiences.split(",")],
        "photos": photos,
        "locations": locations,
        "style": style
    }

是不是超简单?你只需要告诉它你去哪里玩了、什么时候去的、有什么难忘的经历、拍了什么照片,还有你想要什么风格的札记就行啦!

而且这个模块超贴心的,它还有这些小功能:

  1. 空值处理:不想填的信息可以直接跳过,比如没拍照片或者记不住途经地点都没关系,程序照样能运行!
  2. 格式规范化:你输入的内容它会自动整理,比如用逗号分隔的经历会变成整齐的列表
  3. 默认值设置:要是不知道选什么风格,它默认给你用文艺风格,超省心~

是不是超人性化?!

5.2 照片分析模块

对了,照片分析模块可是咱们AI札记的灵魂之一!

这个模块就像一个超懂摄影的旅行达人,能看懂你拍的每一张照片,还能说出照片背后的故事~!

5.2.1 照片分析流程

你知道它是怎么工作的吗?其实超简单的:

  1. 照片上传:你可以把本地拍的照片路径或者网上的照片URL告诉它,支持多张哦!

  2. 批量分析:系统会自动对所有照片进行智能分析,每张照片都会被仔细检查:

    • 场景识别:知道你拍的是山水风景、历史建筑还是美食。
    • 物体检测:认出照片里的人、车、建筑物、自然景观。
    • 特征提取:感知照片里的地点、天气、活动。
    • 内容描述生成:自动写出一段优美的文字描述,比你自己写的还生动!
  3. 结果整合:把所有照片的分析结果整理好,用来丰富你的旅行札记。

5.2.2 照片分析结果怎么用?

这些分析结果可不是白做的,它们能让你的札记更精彩:

  • 内容增强:根据照片内容自动插入相关描述,比如看到你拍了桃花坞入口的照片,就会自动加上"夜幕下的桃花坞入口,红灯笼映照着古牌坊"这样的描写。
  • 主题分类:根据照片内容自动把你的旅行经历分类,比如哪些是景点打卡,哪些是美食体验。
  • 情感色彩:根据照片的色调、构图调整文字风格,比如夕阳照片会用温暖的文字,雪景照片会用清新的文字。

5.2.3 本地照片也支持哦!

咱们平时都是用手机拍照,所以系统专门支持本地照片:

# 本地照片路径示例
photos = [
    "images/桃花坞入口.jpg",
    "images/唐寅故居.jpg",
    "images/报恩寺皆大欢喜牌匾.jpg"
]

# 照片分析结果示例
photo_analysis = [
    {
        "url": "images/桃花坞入口.jpg",
        "tags": ["桃花坞", "入口", "古建筑", "夜景", "红灯笼"],
        "scene": "历史建筑夜景",
        "description": "夜幕下的桃花坞入口,古建筑牌坊前悬挂着红灯笼,营造出浓厚的历史氛围。",
        "objects": ["牌坊", "红灯笼", "古墙", "石板路"]
    },
    # 其他照片分析结果...
]

看到没?系统能认出"桃花坞入口.jpg"这样的中文文件名,还能分析出照片里的红灯笼、古墙这些细节,是不是超厉害?!

5.3 地理信息处理模块

兄弟们,地理信息处理模块就像是你的私人GPS导航,还带导游功能!它利用高德地图MCP服务,能把你说的地址变成地图上的精确位置,还能帮你计算路线、查天气,让你的旅行札记更有空间感~

5.3.1 地理信息处理流程

它是怎么工作的呢?其实很简单:

  1. 地址解析:把你说的"苏州桃花坞"、"杭州西湖"这样的地址,变成地图上精确的经纬度坐标
  2. 坐标转换:确保所有坐标都用同一个坐标系,这样地图显示才准确
  3. 路线计算:帮你算出各个景点之间的距离和时间,走路要多久,开车要多久
  4. 地图数据生成:生成能在地图上展示的数据,这样你就能看到自己的旅行足迹啦!

5.3.2 核心功能实现

咱们来看一下具体的代码实现,其实也不难理解:

def process_geolocation(amap_client: AmapMCP, user_input: Dict[str, Any]) -> Dict[str, Any]:
    geolocation_data = {
        "destination": None,
        "locations": [],
        "coordinates": [],
        "weather_info": None
    }
    
    print("\n正在处理地理位置信息...")
    
    # 处理目的地
    if user_input.get("destination"):
        print(f"处理目的地: {user_input['destination']}")
        geo_result = amap_client.geo_code(user_input["destination"])
        if geo_result:
            geolocation_data["destination"] = {
                "name": user_input["destination"],
                "geocode": geo_result
            }
            
            # 获取目的地天气信息
            city = geo_result["geocodes"][0].get("city", user_input["destination"])
            weather_result = amap_client.weather(city)
            if weather_result:
                geolocation_data["weather_info"] = weather_result
    
    # 处理途经地点
    for location in user_input.get("locations", []):
        print(f"处理途经地点: {location}")
        geo_result = amap_client.geo_code(location)
        if geo_result:
            geolocation_data["locations"].append({
                "name": location,
                "geocode": geo_result
            })
            # 提取坐标信息
            if geo_result.get("geocodes") and len(geo_result["geocodes"]) > 0:
                location_info = geo_result["geocodes"][0]
                coordinates = location_info.get("location")
                if coordinates:
                    geolocation_data["coordinates"].append({
                        "name": location,
                        "coordinates": coordinates,
                        "address": location_info.get("formatted_address", location)
                    })
    
    # 计算路线距离(如果有多个坐标点)
    if len(geolocation_data["coordinates"]) > 1:
        origins = geolocation_data["coordinates"][0]["coordinates"]
        destination = geolocation_data["coordinates"][-1]["coordinates"]
        distance_result = amap_client.distance(origins, destination, type=1)  # 1表示驾车距离
        if distance_result:
            geolocation_data["route_distance"] = distance_result["results"][0].get("distance")
            geolocation_data["route_duration"] = distance_result["results"][0].get("duration")
    
    return geolocation_data

看到没?这个函数会先处理你的目的地,把它变成经纬度坐标,还会顺便查一下当地的天气!然后再处理你输入的途经地点,把它们都变成坐标点,最后如果有多个坐标点,还会帮你算出路线距离和时间。

这样一来,你的旅行札记里不仅有文字和照片,还能显示你走过的路线和当地的天气,是不是超有代入感?!

5.4 旅行札记生成模块

兄弟们,这可是咱们应用的核心模块!

就像一个超会写故事的旅行作家,它能把你的旅行信息、照片分析结果和地理位置信息全部整合起来,生成一篇风格多样、内容丰富的旅行札记!

5.4.1 文本生成流程

你知道一篇生动的旅行札记是怎么生成的吗?其实超简单的:

第一步,收集素材:把你输入的旅行信息、照片分析结果、地理位置信息全部收集起来,就像准备写作文的素材一样~

第二步,设计提示词:根据你的素材,动态生成一个超个性化的提示词,告诉AI该怎么写

第三步,调整风格:你选了文艺风格?还是幽默风格?系统会根据你的选择调整提示词

第四步,AI创作:调用TRAE MCP的文本生成服务,让AI帮你写出一篇超棒的旅行札记

第五步,优化内容:对生成的文本进行一点点优化,让它更完美!

5.4.2 核心功能实现

咱们来看一下具体的代码实现,其实也不难理解:

def generate_travel_journal(mcp_client, user_input, photo_analysis=None, geolocation_data=None):
    """
    生成旅行札记
    
    参数:
        mcp_client: TRAE MCP客户端
        user_input: 用户输入信息
        photo_analysis: 照片分析结果
        geolocation_data: 地理信息数据
        
    返回:
        生成的旅行札记内容
    """
    # 根据用户选择的风格生成不同的提示词
    style = user_input.get("style", "文艺")
    
    # 风格提示词模板
    style_prompts = {
        "文艺": "文字优美,富有诗意,注重情感表达和细节描写,使用生动的比喻和修辞手法。",
        "幽默": "语言轻松活泼,充满幽默感,适当使用俏皮话和搞笑比喻,让读者感到愉悦。",
        "深度": "深入思考旅行的意义,结合历史、文化、哲学等元素,表达深刻的人生感悟。",
        "简洁": "语言简洁明了,重点突出,避免冗长的描述,用最少的文字传达最丰富的信息。"
    }
    
    style_prompt = style_prompts.get(style, style_prompts["文艺"])
    
    # 构建基础提示词
    prompt = f"""
    请为用户生成一篇{style}风格的旅行札记,要求:
    1. 目的地:{user_input['destination']}
    2. 旅行日期:{user_input['travel_dates']}
    3. 关键经历:{', '.join(user_input['key_experiences'])}
    
    {f'4. 照片分析:{json.dumps(photo_analysis, ensure_ascii=False)}' if photo_analysis else ''}
    {f'5. 地理位置信息:{json.dumps(geolocation_data, ensure_ascii=False)}' if geolocation_data else ''}
    
    生成要求:
    - {style_prompt}
    - 结构清晰,有开头、中间、结尾
    - 结合关键经历,描述当时的场景和感受
    - 突出旅行的独特体验和个人感悟
    - 避免使用过于口语化的表达
    - 长度适中,控制在500-1500字之间
    """
    
    # 调用TRAE MCP文本生成服务
    print("\n正在生成旅行札记...")
    result = mcp_client.generate_text(
        prompt=prompt,
        model="trae-pro-1",
        max_tokens=2000,
        temperature=0.7,
        top_p=0.9
    )
    
    return result

提示词工程可是AI文本生成的关键! 咱们用了这些小技巧:

  1. 结构化提示:把信息分成不同部分,这样生成的内容就会更有条理
  2. 风格控制:用具体的风格描述词来控制文本的整体风格,想文艺就文艺,想幽默就幽默
  3. 内容约束:明确告诉AI要包含什么信息,要避免什么内容,这样生成的札记才不会跑题
  4. 长度控制:设定合适的长度范围,确保生成的内容不会太长也不会太短,刚刚好!

这个模块可不是孤军奋战,它和其他模块配合得超默契:

  1. 和用户输入模块合作:获取你输入的旅行信息和偏好
  2. 和照片分析模块合作:用照片分析结果来丰富文本内容,让札记更生动
  3. 和地理信息处理模块合作:结合地理信息来增强空间感,让读者仿佛跟着你一起旅行
  4. 和导出模块合作:把生成的文本传递给导出模块,转换成你想要的格式

为了让生成的札记更完美,咱们还做了这些优化:

  1. 多轮生成:对于复杂的旅行札记,采用多轮生成的策略,确保内容更丰富
  2. 内容过滤:过滤掉不相关或质量不佳的内容,只留下最好的
  3. 格式调整:确保生成的内容符合Markdown格式要求,方便后续导出
  4. 个性化调整:根据用户的反馈不断优化生成内容,让它越来越符合你的期望!

5.4.3 生成结果示例

咱们来看一个生成的苏州夜游札记示例,是不是超棒?!

# 苏州夜游札记

## 2026年1月6日

夜幕降临,华灯初上,我终于来到了这座充满诗意的古城——苏州。

### 桃花坞入口

夜幕下的桃花坞入口,古建筑牌坊前悬挂着红灯笼,营造出浓厚的历史氛围。我站在入口处,仿佛穿越回了古代,想象着唐寅、祝枝山等文人墨客曾在此饮酒作诗的场景。

### 唐寅故居

走进唐寅故居,一股淡淡的墨香扑面而来。在烛光的映照下,我仿佛看到了唐寅正在挥毫泼墨,创作着他的传世佳作。墙上的字画,桌上的文房四宝,都在诉说着这位明代才子的传奇人生。

### 报恩寺

最后一站是报恩寺,寺内的"皆大欢喜"牌匾让我印象深刻。在这宁静的夜晚,寺庙的钟声回荡在空气中,让我的心灵得到了前所未有的平静。

苏州之夜,如同一幅美丽的画卷,让人流连忘返。这次夜游不仅让我领略了苏州的历史文化,更让我感受到了这座古城的独特魅力。

5.5.1 核心功能实现

写好札记后,怎么分享给朋友呢? 别担心,导出与展示模块帮你搞定!

这个模块负责把生成的旅行札记导出成多种格式,还能创建一个索引页面,让你轻松管理所有的旅行札记:

  • Markdown:原始格式,方便你自己编辑和分享
  • HTML:超美观的网页格式,支持手机、电脑等各种设备
  • PDF:可以打印的文档格式,适合做成旅行纪念册

是不是超贴心?!代码示例如下:

def export_to_html(journal_content: str, title: str, output_dir: str = "output") -> str:
    # 确保输出目录存在
    os.makedirs(output_dir, exist_ok=True)
    
    # 将Markdown转换为HTML
    html_content = markdown.markdown(journal_content)
    
    # 构建完整的HTML页面
    full_html = f"""
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>{title}</title>
        <!-- CSS样式 -->
    </head>
    <body>
        <div class="container">
            <header>
                <h1>{title}</h1>
            </header>
            <main>
                {html_content}
            </main>
            <footer>
                <p>📸 这是一篇由AI生成的旅行札记</p>
                <a href="index.html" class="back-link">返回首页</a>
            </footer>
        </div>
    </body>
    </html>
    """
    
    # 保存HTML文件
    filename = f"{title}_旅行札记.html".replace(" ", "_")
    file_path = os.path.join(output_dir, filename)
    
    with open(file_path, "w", encoding="utf-8") as f:
        f.write(full_html)
    
    return file_path

5.5.2 响应式设计

生成的HTML页面采用响应式设计,支持各种设备和屏幕尺寸:

@media (max-width: 768px) {
    .container {
        padding: 15px;
    }
    h1 {
        font-size: 2em;
    }
    .image-grid {
        grid-template-columns: minmax(250px, 1fr);
    }
}

5.5.3 索引页面生成

索引页面展示所有生成的旅行札记,方便用户浏览和管理:

def create_index_page(journal_files: List[str], output_dir: str = "output") -> str:
    # 构建索引页面内容
    index_content = """
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>旅行札记索引</title>
        <style>
            /* 索引页面样式 */
        </style>
    </head>
    <body>
        <div class="container">
            <header>
                <h1>我的旅行札记</h1>
            </header>
            <main>
                <ul class="journal-list">
    """
    
    # 添加所有旅行札记链接
    for journal_file in journal_files:
        filename = os.path.basename(journal_file)
        title = filename.replace("_旅行札记.html", "").replace("_", " ")
        index_content += f"<li><a href=\"{filename}\">{title}</a></li>\n"
    
    # 完成索引页面
    index_content += """
                </ul>
            </main>
        </div>
    </body>
    </html>
    """
    
    # 保存索引页面
    index_file = os.path.join(output_dir, "index.html")
    with open(index_file, "w", encoding="utf-8") as f:
        f.write(index_content)
    
    return index_file

5.6 配置管理模块

兄弟们,配置管理模块就像是咱们应用的"钥匙串",专门负责管理所有API密钥和服务地址这些重要信息!

5.6.1 配置文件结构

{
  "trae_api_key": "your_trae_api_key_here",
  "trae_api_url": "https://api.trae.ai/v1",
  "amap_api_key": "your_amap_api_key_here"
}

5.6.2 核心功能实现

def load_config() -> Dict[str, Any]:
    """
    加载配置文件
    
    返回:
        配置字典
    """
    config_file = "config.json"
    
    # 如果配置文件不存在,创建一个示例配置
    if not os.path.exists(config_file):
        example_config = {
            "trae_api_key": "your_trae_api_key_here",
            "trae_api_url": "https://api.trae.ai/v1",
            "amap_api_key": "your_amap_api_key_here"
        }
        
        with open(config_file, "w", encoding="utf-8") as f:
            json.dump(example_config, f, ensure_ascii=False, indent=2)
        
        print(f"已创建示例配置文件:{config_file}")
        print("未检测到有效配置,将使用模拟数据运行应用")
        return example_config
    
    # 加载配置文件
    with open(config_file, "r", encoding="utf-8") as f:
        config = json.load(f)
    
    # 验证配置
    if not config.get("trae_api_key") or config["trae_api_key"] == "your_trae_api_key_here":
        print("注意:未设置有效的TRAE API密钥,将使用模拟数据")
    
    # 高德地图API密钥是可选的
    if not config.get("amap_api_key") or config["amap_api_key"] == "your_amap_api_key_here":
        print("注意:未设置有效的高德地图API密钥,地理信息功能将使用模拟数据")
    
    return config

6. 效果展示

兄弟们,咱们的AI旅游札记生成应用终于搞定啦!

基于TRAE Builder+MCP服务术,咱们用VibeCoding技开发出了一个功能超全、体验超棒的旅行小伙伴。它能帮你做什么呢?

  • 🤖 智能旅行札记生成:输入旅行信息,AI分分钟给你写出一篇文采飞扬的游记
  • 📸 照片内容分析:上传照片,AI能识别场景、物体,自动融入札记内容
  • 🗺️ 地理信息整合:结合高德地图,帮你标记位置、绘制路线,让游记更有画面感
  • 💾 多格式导出:支持Markdown/HTML/PDF,想怎么分享就怎么分享
  • 📍 旅行足迹地图:自动生成你的旅行路线图,记录每一个美好瞬间

通过TRAE MCP服务,咱们实现了强大的AI内容生成和分析能力;而VibeCoding技术更是让开发效率飙升,代码质量也杠杠的!

光说不练假把式,咱们来看看实际使用效果吧! 启动应用后,跟着提示一步步来:

  1. 输入你去哪里玩了(比如"苏州"、"大理")
  2. 选择你想要的札记风格(文艺/幽默/深度/简洁,随便选,不满意可以重来)
  3. 上传你拍的照片(可选,但有照片的话生成的札记更生动哦)
  4. 输入途经的地点(可选,比如"桃花坞"、"唐寅故居")
  5. 等待几秒钟,AI就会帮你生成一篇超棒的旅行札记
  6. 选择你想要的导出格式(Markdown/HTML/PDF,想怎么分享就怎么分享)
  7. 最后在output目录里就能找到你生成的旅行札记啦!

运行如下:

0785bbae85ada93e687ffece168b10a9.png

苏州夜游札记生成

输入信息

  • 目的地:苏州
  • 旅行日期:2026年1月6日
  • 关键经历:桃花坞入口、唐寅故居、报恩寺
  • 照片:苏州夜景照片
  • 风格:文艺

生成结果

# 苏州夜游札记

## 2026年1月6日

夜幕降临,华灯初上,我终于来到了这座充满诗意的古城——苏州。

### 桃花坞入口

夜幕下的桃花坞入口,古建筑牌坊前悬挂着红灯笼,营造出浓厚的历史氛围。我站在入口处,仿佛穿越回了古代,想象着唐寅、祝枝山等文人墨客曾在此饮酒作诗的场景。

### 唐寅故居

走进唐寅故居,一股淡淡的墨香扑面而来。在烛光的映照下,我仿佛看到了唐寅正在挥毫泼墨,创作着他的传世佳作。墙上的字画,桌上的文房四宝,都在诉说着这位明代才子的传奇人生。

### 报恩寺

最后一站是报恩寺,寺内的"皆大欢喜"牌匾让我印象深刻。在这宁静的夜晚,寺庙的钟声回荡在空气中,让我的心灵得到了前所未有的平静。

苏州之夜,如同一幅美丽的画卷,让人流连忘返。这次夜游不仅让我领略了苏州的历史文化,更让我感受到了这座古城的独特魅力。

image.png

image.png

image.png

image.png

image.png

image.png

image.png

如上所示,轻轻松松就能让AI帮我们完成旅行文案的输出,自己连排版都不需要,只用等生成结果就好啦。如果对效果不满意,也可以通过VibeCoding对话进行微调,非常方便!

未来展望

咱们的项目还在不断进化中,未来还有很多精彩功能要上线哦:

  1. 增强AI能力:整合更多AI模型,让生成的内容更有创意、更个性化
  2. 用户界面优化:开发Web界面和移动应用,随时随地都能生成游记
  3. 社交分享功能:一键分享到朋友圈、微博,让你的旅行故事被更多人看到
  4. 多语言支持:支持中英文等多种语言,出国旅行也能用
  5. 个性化推荐:根据你的旅行喜好,推荐适合的目的地和玩法
  6. 地图可视化增强:提供更炫酷的旅行足迹地图,让你的旅行轨迹一目了然
  7. 离线支持:增加离线模式,支持在无网络环境下使用

感谢TRAE Builder+MCP带给我高效又惊艳的“Vibe Coding”时刻 ,通过不断的优化和扩展,我相信这个应用将成为旅行者记录和分享美好回忆的得力助手。