用 TRAE Builder+MCP+VibeCoding 做个超酷的AI旅游札记生成器

喜欢旅行但懒得写游记?

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

这其实是我最激动的VibeCoding时刻了。

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

为什么要做这个应用?

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

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

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

这个应用能做什么?

兄弟们,这个AI旅游札记生成器简直是旅行爱好者的神器!它能帮你:

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

是不是听起来就很心动?!

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服务的应用变得超简单:

  • 代码编辑器:集成了语法高亮、智能补全、代码导航等功能,写代码超顺手
  • 调试工具:支持断点调试、变量查看、调用栈分析,找bug不再头疼
  • MCP服务集成:提供可视化的MCP服务调用界面和参数配置,不用记复杂的API文档
  • 版本控制:内置Git支持,代码管理和协作都方便
  • 部署工具:支持一键部署到TRAE云平台,不用纠结服务器配置

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

3.2 MCP服务调用实现

3.2.1 TRAE MCP服务调用

trae_mcp.py中实现了TRAE MCP服务的调用封装:

class TraeMCP:
    def __init__(self, config: Dict[str, Any]):
        self.api_key = config.get("trae_api_key")
        self.api_url = config.get("trae_api_url", "https://api.trae.ai/v1")
        self.headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }

    def call_service(self, service: str, params: Dict[str, Any]) -> Dict[str, Any]:
        # 实现MCP服务调用逻辑
        pass

    def generate_text(self, prompt: str, **kwargs) -> Optional[str]:
        # 调用文本生成服务
        pass

    def analyze_image(self, image_url: str, **kwargs) -> Optional[Dict[str, Any]]:
        # 调用图像分析服务
        pass
3.2.2 高德地图MCP服务调用

amap_mcp.py中实现了高德地图MCP服务的调用封装:

class AmapMCP:
    def __init__(self, config: Dict[str, Any]):
        self.api_key = config.get("amap_api_key")

    def geo_code(self, address: str, city: Optional[str] = None) -> Optional[Dict[str, Any]]:
        # 调用地理编码服务
        pass

    def reverse_geo_code(self, location: str) -> Optional[Dict[str, Any]]:
        # 调用逆地理编码服务
        pass

    def text_search(self, keywords: str, city: Optional[str] = None) -> Optional[Dict[str, Any]]:
        # 调用文本搜索服务
        pass

3.3 MCP服务容错处理

为提高系统稳定性,实现了完善的MCP服务容错机制:

  • 模拟数据支持:当MCP服务调用失败或API密钥无效时,自动使用模拟数据
  • 异常捕获:捕获网络请求异常、JSON解析异常等
  • 用户友好提示:向用户展示清晰的错误信息和替代方案

4. VibeCoding开发体验

4.1 VibeCoding是什么?

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

4.2 VibeCoding开发流程

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

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

4.3 VibeCoding到底香不香?

用过之后我只能说,真的香!

  • 省时间:以前写代码要查文档、写逻辑,现在直接说需求,AI分分钟生成代码,专注于想功能就行
  • 智能助手:遇到bug不用头大,AI帮你找问题、给建议,比百度还好用
  • 零门槛:不会编程的人也能开发应用,只要会说话就行!
  • 迭代快:想法变了随时改,AI马上就能生成新代码,快速试错
  • 涨知识:AI会给你讲技术原理,相当于免费请了个技术导师!

4.4 VibeCoding实践案例

在开发过程中,我们通过VibeCoding实现了多个复杂功能:

4.4.1 智能文本生成提示设计
def generate_travel_journal(mcp_client, user_input, photo_analysis, geolocation_data):
    # 设计智能提示词,结合用户输入和分析结果
    prompt = f"""
    请为用户生成一篇{user_input['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}
    - 结构清晰,有开头、中间、结尾
    - 结合关键经历,描述当时的场景和感受
    - 突出旅行的独特体验和个人感悟
    """
    
    # 调用TRAE MCP文本生成服务
    result = mcp_client.generate_text(prompt=prompt, model="trae-pro-1", max_tokens=2000, temperature=0.7, top_p=0.9)
    
    return result
4.4.2 照片分析与内容整合
def analyze_photos(mcp_client: TraeMCP, photos: List[str]) -> List[Dict[str, Any]]:
    if not photos:
        return []
        
    photo_analysis = []
    print(f"\n正在分析 {len(photos)} 张照片...")
    
    for i, photo in enumerate(photos, 1):
        print(f"分析照片 {i}/{len(photos)}: {photo}")
        result = mcp_client.analyze_image(photo)
        
        if result:
            photo_analysis.append({
                "url": photo,
                "tags": result.get("tags", []),
                "scene": result.get("scene", ""),
                "description": result.get("description", "")
            })
        else:
            print(f"  分析失败: {photo}")
    
    return photo_analysis
4.4.3 多格式导出功能
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.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.2.4 错误处理与容错

当然啦,咱们的系统也很皮实,遇到问题不会轻易罢工:

  1. 网络异常处理:网络不好的时候也能工作,不会因为断网就崩溃
  2. 无效照片过滤:如果有的照片打不开或者格式不对,系统会自动跳过,不会影响整体效果
  3. 分析失败回退:要是照片分析失败了,系统会用默认的优美描述代替,保证札记质量

这就像是有个贴心的小助手,就算遇到问题也会想办法帮你搞定!

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.3.3 高德地图MCP服务功能

兄弟们,高德地图MCP服务可太强大了!它就像一个全能的地理信息助手,能帮咱们做这么多事:

  1. 地理编码:把"苏州桃花坞"这样的地址变成精确的经纬度坐标,就像给每个地点发了个定位器
  2. 逆地理编码:反过来,知道某个坐标点,就能说出它具体在什么地方,哪个城市、哪个街道
  3. 文本搜索:想找附近的美食?好玩的景点?直接搜关键词就行,超方便!
  4. 距离测量:算出两个地方之间的距离,走路要多久,开车要多久,规划路线超省心
  5. 天气查询:还能查当地的实时天气,这样你的札记里就能提到"那天阳光正好"或者"细雨朦胧"啦
5.3.4 地理信息在旅行札记中的应用

这些地理信息可不是白拿的,它们能让你的旅行札记超有画面感:

  • 旅行足迹地图:生成一张包含所有途经地点的地图,看着地图上的脚印,超有成就感!
  • 地点标记:在地图上标记你去过的重要景点和难忘经历,就像给旅行做了个记号
  • 路线展示:绘制出你的旅行路线图,别人一看就知道你是怎么玩的
  • 位置信息增强:在文本里自动插入地点的详细信息,比如"我在苏州市姑苏区桃花坞大街的唐寅故居,感受到了江南才子的气息"
5.3.5 坐标数据示例

咱们来看一个苏州旅游的坐标数据示例,是不是很直观?

# 苏州旅游坐标数据示例
coordinates_data = {
    "destination": {
        "name": "苏州",
        "geocode": {
            "formatted_address": "江苏省苏州市",
            "location": "120.595497,31.298615"
        }
    },
    "coordinates": [
        {
            "name": "桃花坞入口",
            "coordinates": "120.590778,31.300361",
            "address": "苏州市姑苏区桃花坞大街"
        },
        {
            "name": "唐寅故居",
            "coordinates": "120.592345,31.299876",
            "address": "苏州市姑苏区桃花坞大街120号"
        },
        {
            "name": "报恩寺",
            "coordinates": "120.598765,31.297654",
            "address": "苏州市姑苏区人民路1918号"
        }
    ],
    "weather_info": {
        "lives": [
            {
                "city": "苏州市",
                "weather": "晴",
                "temperature": "25",
                "winddirection": "东北",
                "windpower": "3"
            }
        ]
    },
    "route_distance": "2500",  # 单位:米
    "route_duration": "300"     # 单位:秒
}
5.3.6 错误处理与容错

地理信息处理模块实现了以下错误处理机制:

  1. API调用失败处理:当高德地图API调用失败时,使用模拟数据回退
  2. 动态函数调用:支持不同版本的高德地图MCP服务函数名
  3. 无效地址过滤:自动过滤无法解析的地址
  4. 天气信息降级:当天气查询失败时,不影响主流程

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
5.4.3 提示词工程设计

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

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

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

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

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

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

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

# 苏州夜游札记

## 2026年1月6日

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

### 桃花坞入口

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

### 唐寅故居

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

### 报恩寺

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

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

5.5 导出与展示模块

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

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

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

是不是超贴心?!

5.5.1 核心功能实现
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
5.6.3 配置容错机制

配置管理模块实现了以下容错机制:

  1. 自动创建配置:当配置文件不存在时,自动创建示例配置
  2. 模拟数据降级:当API密钥无效时,使用模拟数据运行
  3. 友好提示:向用户显示清晰的配置状态信息

5.7 错误处理与日志系统

5.7.1 全局错误处理

咱们的应用可是个"能屈能伸"的好帮手!即使遇到问题也不会一下子崩溃,而是会优雅地处理各种异常:

def main():
    """
    主程序入口
    """
    try:
        # 主程序逻辑
        ...
    except KeyboardInterrupt:
        print("\n\n程序已中断")
    except Exception as e:
        print(f"\n❌ 程序执行出错: {e}")
        import traceback
        traceback.print_exc()
5.7.2 MCP服务错误处理

在调用MCP服务时,实现了多层错误处理:

def call_service(self, service: str, params: Dict[str, Any]) -> Dict[str, Any]:
    url = f"{self.api_url}/services/{service}"
    
    try:
        response = requests.post(
            url=url,
            headers=self.headers,
            json=params,
            timeout=30
        )
        
        response.raise_for_status()
        return response.json()
    
    except requests.exceptions.RequestException as e:
        print(f"调用TRAE MCP服务失败: {e}")
        return {"error": str(e)}
    
    except json.JSONDecodeError as e:
        print(f"解析TRAE MCP服务响应失败: {e}")
        return {"error": str(e)}
5.7.3 日志记录

应用使用简单有效的日志记录机制,便于调试和问题追踪:

  1. 控制台输出:关键操作和错误信息实时输出到控制台
  2. 操作提示:向用户显示清晰的操作状态和进度
  3. 错误追踪:在遇到异常时,显示详细的错误堆栈信息

5.8 性能优化

5.8.1 批量处理

照片分析和地理信息处理采用批量处理方式,提高效率:

def analyze_photos(mcp_client: TraeMCP, photos: List[str]) -> List[Dict[str, Any]]:
    if not photos:
        return []
        
    photo_analysis = []
    print(f"\n正在分析 {len(photos)} 张照片...")
    
    for i, photo in enumerate(photos, 1):
        print(f"分析照片 {i}/{len(photos)}: {photo}")
        # 单张照片分析...
    
    return photo_analysis
5.8.2 异步调用潜力

代码设计预留了异步调用的扩展空间,可以通过以下方式实现:

import asyncio

async def analyze_photos_async(mcp_client: TraeMCP, photos: List[str]) -> List[Dict[str, Any]]:
    # 异步批量分析照片
    tasks = [analyze_single_photo(mcp_client, photo) for photo in photos]
    return await asyncio.gather(*tasks)
5.8.3 缓存机制

可以扩展实现缓存机制,避免重复调用API:

class ApiCache:
    def __init__(self, max_size=100):
        self.cache = {}
        self.max_size = max_size
    
    def get(self, key):
        return self.cache.get(key)
    
    def set(self, key, value):
        if len(self.cache) >= self.max_size:
            # 简单的LRU缓存淘汰策略
            self.cache.pop(next(iter(self.cache)))
        self.cache[key] = value

6. 部署与使用指南

6.1 环境要求

兄弟们,咱们的应用对环境要求可不高!只要你有:

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

6.2 安装与配置

想体验AI生成旅行札记?跟着我三步搞定!

  1. 获取项目代码

先把项目克隆到你的电脑上:

git clone <项目地址>  # 替换成你自己的项目地址哦
cd travel-journal-generator
  1. 安装依赖

一行命令安装所有需要的库,超简单:

pip install -r requirements.txt
  1. 配置API密钥

打开config.json文件,把你的TRAE和高德地图API密钥填进去就行:

{
  "trae_api_key": "你的TRAE密钥",
  "trae_api_url": "https://api.trae.ai/v1",  // 这个不用改
  "amap_api_key": "你的高德地图密钥"
}

6.3 运行应用

配置好了?那咱们来启动应用吧!

cd src
python journal_generator.py

6.4 使用流程

启动应用后,跟着提示一步步来:

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

6.5 高级用法

6.5.1 批量生成

可以通过脚本实现批量生成旅行札记:

def batch_generate_journals(inputs_file: str):
    # 从文件读取批量输入
    with open(inputs_file, "r", encoding="utf-8") as f:
        inputs = [json.loads(line) for line in f]
    
    # 初始化客户端
    config = load_config()
    mcp_client = TraeMCP(config)
    amap_client = AmapMCP(config)
    
    # 批量生成
    for i, user_input in enumerate(inputs, 1):
        print(f"\n=== 生成第 {i}/{len(inputs)} 篇旅行札记 ===")
        # 生成逻辑...
6.5.2 自定义风格

可以通过修改style_prompts字典,添加自定义的札记风格:

style_prompts = {
    "文艺": "文字优美,富有诗意...",
    "幽默": "语言轻松活泼...",
    "深度": "深入思考旅行的意义...",
    "简洁": "语言简洁明了...",
    "古风": "使用文言文或古风语言,富有古典韵味...",
    "科技感": "使用现代科技词汇,突出数字化体验..."
}

7. 总结与展望

7.1 项目总结

兄弟们,咱们的AI旅游札记生成应用终于搞定啦!基于TRAE Builder+MCP服务和VibeCoding技术,咱们开发出了一个功能超全、体验超棒的旅行小伙伴。它能帮你做什么呢?

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

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

7.2 技术亮点

咱们的项目可不是花架子,技术上也有很多亮点哦:

  1. 模块化设计:代码结构清晰,像搭积木一样,维护和扩展超方便
  2. 容错机制:就算网络出问题,也能用模拟数据顶上去,系统稳得一批
  3. 响应式设计:生成的HTML页面在手机、电脑上都能完美显示,怎么看都舒服
  4. 用户友好:操作流程简单明了,就算是技术小白也能轻松上手
  5. 可扩展性:想加新功能?没问题!直接插模块就行,超级灵活
  6. 优雅降级:API调用失败也不怕,自动切换到备用方案,保证系统不停摆
  7. 灵活配置:通过配置文件就能自定义系统行为,想怎么玩就怎么玩

7.3 实际应用案例

光说不练假把式,咱们来看看实际使用效果吧!

7.3.1 苏州夜游札记生成

输入信息

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

生成结果

# 苏州夜游札记

## 2026年1月6日

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

### 桃花坞入口

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

### 唐寅故居

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

### 报恩寺

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

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

再来看看另一个案例——大理自驾游:

输入信息

  • 目的地:大理
  • 旅行日期:2025年3月15日至2025年3月20日
  • 关键经历:洱海骑行、喜洲古镇、苍山日出
  • 照片:洱海风光、骑行照片
  • 风格:深度

生成结果

# 大理自驾之旅

## 2025年3月15日至2025年3月20日

大理,这座位于云南高原上的古城,承载着太多的诗意与浪漫。当我驾车行驶在洱海边的公路上,微风轻拂脸颊,湖水波光粼粼,远处的苍山云雾缭绕,宛如仙境。

### 洱海骑行

清晨,我租了一辆自行车,沿着洱海骑行。路边的樱花正盛,粉色的花瓣随风飘落,落在我的肩膀上,落在湖面上,构成了一幅绝美的画卷。我停下脚步,坐在湖边的石头上,静静地欣赏着眼前的美景,感受着大自然的宁静与美好。

### 喜洲古镇

午后,我来到了喜洲古镇。这里保存着完好的白族民居建筑,青瓦白墙,雕梁画栋,处处透露着古朴的韵味。我在古镇的小巷中漫步,品尝了当地特色的喜洲粑粑,酥脆的外皮包裹着香甜的豆沙馅,让人回味无穷。古镇的居民们热情好客,主动与我打招呼,向我介绍当地的历史文化。

### 苍山日出

最后一天,我起了个大早,驾车前往苍山。当第一缕阳光洒在洱海的湖面上,整个世界都被染成了金黄色。那一刻,我仿佛与大自然融为一体,心中充满了宁静与感动。我想起了诗人顾城的诗句:"黑夜给了我黑色的眼睛,我却用它寻找光明。"在这片美丽的土地上,我找到了内心的光明。

大理之旅,不仅是一次视觉的盛宴,更是一次心灵的洗礼。这里的山山水水,这里的人文风情,都将永远留在我的记忆中。

7.4 未来展望

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

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

通过不断的优化和扩展,我们相信这个应用将成为旅行者记录和分享美好回忆的得力助手。

8. 参考文献

这里给大家整理了一些有用的文档链接,如果想深入了解项目中用到的技术,可以点击查看:

9. 附录

最后,给大家整理了一些实用的参考资料,方便大家深入了解项目:

9.1 项目文件结构

项目的文件结构清晰明了,一眼就能看出各个文件的作用:

├── src/                      # 源代码目录
│   ├── journal_generator.py  # 主程序入口,运行它就启动应用
│   ├── trae_mcp.py           # TRAE MCP服务客户端,负责AI功能
│   ├── amap_mcp.py           # 高德地图MCP服务客户端,负责地理信息
│   ├── export.py             # 导出功能模块,支持多种格式
│   └── output/               # 输出目录,生成的札记都在这里
├── images/                   # 示例照片目录,放你旅行的照片
├── output/                   # 导出文件目录,保存各种格式的札记
├── config.json               # 配置文件,填API密钥的地方
├── requirements.txt          # 依赖列表,需要安装的库都在这里
└── vibecoding_experience.md  # 就是你现在看的这份文档啦

9.2 核心依赖

项目依赖的库不多,但都是精品,一行命令就能全部安装:

requests>=2.25.1     # 网络请求库,负责调用API
markdown>=3.3.4      # Markdown处理库,用于生成HTML
weasyprint>=53.4     # PDF导出库,把游记转成PDF
pydantic>=1.8.2      # 数据验证库,确保输入数据正确

9.3 示例运行结果

看看应用运行时的实际效果吧,操作流程超级简单:

=== AI旅行札记生成器 ===

请输入旅行目的地:大理               # 告诉AI你去哪里玩了
请输入旅行日期(如:2025-01-01至2025-01-05):2025-03-15至2025-03-20  # 旅行的时间
请描述几个印象深刻的经历(用逗号分隔):洱海骑行,喜洲古镇,苍山日出  # 分享你的精彩瞬间
请输入照片路径或URL(用逗号分隔,可留空):  # 可以上传照片,让游记更生动
请输入途经地点(用逗号分隔,可留空):  # 途经的地方也可以告诉AI
请选择札记风格(文艺/幽默/深度/简洁,默认文艺):文艺  # 选择你喜欢的文风

正在处理地理位置信息...  # AI开始工作了
处理目的地: 大理

正在生成旅行札记...

### 9.4 常见问题与解答

遇到问题?别慌!这里整理了大家最常问的几个问题:

#### Q: 为什么照片分析失败了?
A: 可能的原因有这几个:
1. 照片链接失效了,或者根本访问不了
2. 照片格式不对,系统不支持
3. 网络不给力,连不上服务器
4. TRAE MCP服务暂时出了点小问题

不过别担心,就算照片分析失败,系统也会用模拟数据继续运行,不会影响你生成游记的!

#### Q: 地理信息功能怎么用不了?
A: 可能是这几个原因:
1. 你忘记填高德地图的API密钥了吧?
2. 你输入的地址太模糊,系统找不到
3. 高德地图的服务暂时有点问题

同样的,系统会自动切换到模拟数据,保证你能继续生成游记。

#### Q: 我想自定义札记风格,怎么操作?
A: 简单!找到代码里的`style_prompts`字典,直接添加你想要的风格就行啦。

#### Q: 我想导出其他格式,比如Word,可以吗?
A: 当然可以!你只需要扩展`export.py`模块,添加新的导出格式支持就行。

#### Q: 怎么让生成的游记质量更高?
A: 给你几个小技巧:
1. 旅行信息越详细越好,特别是那些印象深刻的经历
2. 上传高质量的旅行照片,让AI能更好地理解你的旅行
3. 选择合适的札记风格,匹配你的旅行主题
4. 提供准确的途经地点,让地理信息更精准

### 9.5 贡献指南

喜欢这个项目?想一起让它变得更好?欢迎来贡献你的力量!

1. **提交Bug报告**:如果发现问题,在GitHub Issues里详细说说怎么复现的,我们会尽快解决
2. **提出功能建议**:有好想法?在GitHub Discussions里分享你的创意,大家一起讨论
3. **提交代码修复**:想直接改代码?没问题!
   - 先Fork项目仓库
   - 创建一个新分支:`git checkout -b feature/你的功能名`
   - 提交代码:`git commit -m "Add feature: 你的功能名"`
   - 推送分支:`git push origin feature/你的功能名`
   - 最后创建Pull Request就行啦
4. **完善文档**:发现错别字?想加个例子?尽管改!文档越详细越好
5. **提供测试用例**:给现有功能加个测试,让代码更稳定,我们万分感谢

### 9.6 开发规范

为了让大家写的代码看起来像一个人写的,也方便后续维护,我们制定了一些简单的规范:

#### 9.6.1 代码风格
- 遵循Python的PEP 8规范,这是Python开发者的通用标准
- 缩进用4个空格,不要用Tab键
- 变量名和函数名用小写字母加下划线,比如`travel_date`、`generate_journal`
- 类名用驼峰命名法,比如`TraeMCP`、`AmapMCP`
- 记得给所有函数和类写详细的文档字符串,说明它们是干嘛的,怎么用

#### 9.6.2 提交规范
- 提交信息用中文写,格式:`类型: 描述`
- 类型有这些:
  - `feat`:添加了新功能
  - `fix`:修复了Bug
  - `docs`:更新了文档
  - `style`:代码风格调整(不影响功能)
  - `refactor`:重构了代码(不影响功能)
  - `test`:添加或修改了测试
  - `chore`:构建或工具相关的修改
- 描述要简洁明了,让别人一眼就知道你改了什么,为什么改

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐