中国人自己的Cursor?腾讯CodeBuddy从零打造家庭相册

中国人自己的Cursor?腾讯CodeBuddy从零打造家庭相册

大家好,我是星哥,作为一个二手的高级程序猿,五一出去游玩跟家人的照片想要做个一个web页面分享给家人,今天就用出品的腾讯云代码助手(CodeBuddy)一行代码都不用自己写,看能不能实现的我小愿望。

PS:我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴

image-20250513194617724

初识腾讯云代码助手(CodeBuddy)

腾讯自研的AI编程提效工具,凭借腾讯混元与 DeepSeek 混合模型,专为开发者打造。CodeBuddy不仅支持200+编程语言、兼容多种主流IDE,是国内首个支持 MCP 的代码助手,还为开发者提供开发智能体 Craft、智能代码补全、单元测试、代码诊断等多项高效功能,帮助开发者在编码过程中节省时间、提升效率。目前腾讯内部 85% 以上的开发者已使用 CodeBuddy,编码时间平均缩短 40% 以上,AI生成代码占比超四成,研发效率提升超 16%。

CodeBuddy兼容IDE

兼容 Visual Studio Code、Pycharm、Android Studio、鸿蒙DevEco Studio、Visual studio、cloudstudio 、微信开发者小程序工具、XCode等主流的集成开发环境。

CodeBuddy编程语言及框架

支持Java、Python、Go、C/C++、JavaScript、TypeScript、HTML、PHPRuby、Rust、Swift、Scala、Lua、 Dart、Node.JS、csS3 等200+种编程语言。

安装VS Code

下载地址:https://code.visualstudio.com/ ,点击“Download for Windows”下载,安装。

image-20250513173913986

VSCode设置中文

点击扩展搜索“chinese”安装扩展,Chinese (Simplified) (简体中文) 的扩展。

image-20250513174055682

1、打开 VSCode 软件,然后按住键盘上的“Ctrl+Shift+P”组合键,打开命令面板。

2、在命令面板中输入“Configure Display Language”,然后点击“Configure Display Language”选项。

3、在弹出的语言选择列表中,选择“zh-cn”,表示简体中文。

4、点击列表中的“Restart”按钮,重启 VSCode,就可以变成了中文。

安装腾讯云CodeBuddy

点击扩展,再搜索“CodeBuddy”,点击安装,既可安装。

image-20250513174147224

另外的一种安装方式,直接访问官网 https://copilot.tencent.com/

点击“免费使用”,再点击再vscode中使用。

image-20250513174501848

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击左侧的扩展按钮

image-20250513174605351

登录成功之后就可以使用Codebuddy了,这里我们可以看到

Codebuddy界面

image-20250513194004448

craft 助手模式,直接操作代码和命令行,适合修改和生成。
chat 聊天模式,不修改代码,适合修复、解决问题和分析思路
Code Review 代码审查
Unit Test 单元测试

新建目录Photos

下面就可以开始规划做自己的家庭相册。

先在桌面新建一个空的文件夹“Photos”,以后的代码都放到这里目录里,再用vscode打开这个目录。

做一个产品经理

我需要做一个WEB家庭相册页面
存放五一假期出游的照片
功能
1.照片原始尺寸较大,首先展示缩略图,点击打开原图
2.在弹窗中打开原图,按键盘左右键实现查看上一张下一张图,按esc键可退出。

把这个需求直接丢给Craft,看看有什么神奇的事情发生。

image-20250513190825479

给我回答了

这个任务需要创建一个简单的WEB家庭相册页面,主要功能包括:

  1. 展示照片缩略图

  2. 点击缩略图后以弹窗形式展示原图

  3. 支持键盘左右键切换图片和ESC键关闭弹窗

首先需要明确几个要点:

  1. 照片文件是否已经存在?需要先查看当前目录下是否有照片文件

  2. 需要创建HTML、CSS和JavaScript文件来实现功能

  3. 需要处理图片的缩略图生成问题

接下来步骤:

  1. 先查看当前目录下有哪些图片文件

  2. 根据图片文件创建相册页面

  3. 实现缩略图展示和弹窗功能

  4. 添加键盘事件处理

首先使用list_files工具查看当前目录下的图片文件,

当前目录为空,需要先获取照片文件才能创建相册。我需要向用户确认:

  1. 照片文件是否已经准备好?如果已准备好,需要知道照片存放在哪个目录

  2. 如果照片还未准备好,需要用户先上传照片到当前目录

由于当前目录为空,无法继续创建相册页面,需要用户提供照片文件

当前目录为空,无法创建相册。请问您的照片文件是否已经准备好?如果已准备好,请告知照片存放的目录路径;如果还未准备好,请先将照片上传到当前目录(e:\360data\重要数据\桌面\Photos)。

什么是Craft

CodeBuddy 的“王炸”功能:Craft (智能创建),就是个超级智能的 Agent (智能体)。你把 Prompt 往里一扔,它就跟打了鸡血似的,开始“噼里啪啦”一顿操作:创建项目结构、生成核心代码、配置依赖……全程自动化,你就嗑着瓜子等着就行。

图片没有上传到目录中,我把图片再上传。

使用chat功能

把刚才的需求丢到chat里

我需要做一个WEB家庭相册页面
存放五一假期出游的照片
功能
1.照片原始尺寸较大,首先展示缩略图,点击打开原图
2.在弹窗中打开原图,按键盘左右键实现查看上一张下一张图,按esc键可退出。

image-20250513194129517

经过一段时间的思考出了一个需求文档

一、核心功能要求

  1. 智能图片处理系统

采用thumbnail.js自动生成缩略图(建议尺寸:320x240)
图片预加载机制(相邻3张提前加载)
支持WebP格式自动转换(兼容性处理)

  1. 响应式相册布局

    <div class="gallery-grid">
      <!-- 动态生成缩略图 -->
      <div class="thumb-card" v-for="(img, index) in images">
        <img :src="img.thumb" @click="openLightbox(index)">
        <div class="exif-info">{{ img.date | formatDate }}</div>
      </div>
    </div>
    
  2. 智能灯箱组件

class Lightbox {
  constructor(images) {
    this.currentIndex = 0
    this.initKeyboardControls()
  }
  
  navigate(direction) {
    // 带缓动的图片切换动画
    // 实现LRU缓存策略提升性能
  }
}

二、交互增强方案

  1. 键盘控制体系

    document.addEventListener('keydown', (e) => {
      if (e.key === 'ArrowLeft') this.prevImage()
      if (e.key === 'ArrowRight') this.nextImage()
      if (e.key === 'Escape') this.close()
    })
    
  2. 手势支持(移动端优化)

集成hammer.js实现滑动手势
双击缩放(1x/2x/适应屏幕)

三、性能优化建议

  1. 图片加载策略

实现Intersection Observer API懒加载
渐进式JPEG加载
加载状态骨架屏

  1. 缓存机制

Service Worker预缓存策略
IndexedDB本地存储原始图片
四、扩展功能建议

  1. 可视化过滤器

按地点/人物/场景类型分类
时间轴模式(地图轨迹集成)

  1. 社交功能

图片批注系统
分享组件(生成旅游故事)

五、技术栈推荐

视图层:Vue3 + Vuetify
状态管理:Pinia
构建工具:Vite

生成代码

index.html

image-20250513191215580

点击修改,或者改成自动修改文件

image-20250513191312439

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>五一假期家庭相册</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>家庭相册</h1>
    <div class="gallery">
        <div class="thumbnail" data-src="mamanainai-SS.png">
            <img src="mamanainai-SS.png" alt="家庭照片">
        </div>
        <div class="thumbnail" data-src="QQ图片20250328112327.png">
            <img src="QQ图片20250328112327.png" alt="家庭照片">
        </div>
        <div class="thumbnail" data-src="QQ图片20250328153035-Q版.png">
            <img src="QQ图片20250328153035-Q版.png" alt="家庭照片">
        </div>
        <div class="thumbnail" data-src="全家福2024年-Q版.png">
            <img src="全家福2024年-Q版.png" alt="家庭照片">
        </div>
        <div class="thumbnail" data-src="奔跑-Q版.png">
            <img src="奔跑-Q版.png" alt="家庭照片">
        </div>
        <div class="thumbnail" data-src="奔跑_看图王-Q版.png">
            <img src="奔跑_看图王-Q版.png" alt="家庭照片">
        </div>
    </div>

    <!-- 图片弹窗 -->
    <div class="modal">
        <span class="close">&times;</span>
        <img class="modal-content" id="modal-img">
        <a class="prev">&#10094;</a>
        <a class="next">&#10095;</a>
    </div>

    <script src="script.js"></script>
</body>
</html>

生成style.css

image-20250513191430421

body {
    font-family: 'Arial', sans-serif;
    margin: 0;
    padding: 20px;
    background-color: #fff5f5;
    background-image: linear-gradient(to bottom, #ffebee, #fff5f5);
    min-height: 100vh;
}

h1 {
    text-align: center;
    color: #333;
    margin-bottom: 30px;
}

.gallery {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
    gap: 20px;
    max-width: 1200px;
    margin: 0 auto;
}

.thumbnail {
    cursor: pointer;
    overflow: hidden;
    border-radius: 8px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    transition: transform 0.3s;
}

.thumbnail:hover {
    transform: scale(1.03);
}

.thumbnail img {
    width: 100%;
    height: 200px;
    object-fit: cover;
    display: block;
}

/* 弹窗样式 */
.modal {
    display: none;
    position: fixed;
    z-index: 100;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.9);
    overflow: auto;
}

.modal-content {
    margin: auto;
    display: block;
    max-width: 90%;
    max-height: 90%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

.close {
    position: absolute;
    top: 20px;
    right: 35px;
    color: #f1f1f1;
    font-size: 40px;
    font-weight: bold;
    cursor: pointer;
}

.close:hover {
    color: #bbb;
}

.prev, .next {
    position: absolute;
    top: 50%;
    width: auto;
    padding: 16px;
    margin-top: -50px;
    color: white;
    font-weight: bold;
    font-size: 30px;
    cursor: pointer;
    user-select: none;
}

.next {
    right: 0;
    border-radius: 3px 0 0 3px;
}

.prev {
    left: 0;
    border-radius: 0 3px 3px 0;
}

.prev:hover, .next:hover {
    background-color: rgba(0, 0, 0, 0.8);
}

@media screen and (max-width: 600px) {
    .gallery {
        grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    }
    
    .thumbnail img {
        height: 150px;
    }
}

生成script.js

image-20250513191533075

生成的代码。

document.addEventListener('DOMContentLoaded', function() {
    // 获取所有元素
    const thumbnails = document.querySelectorAll('.thumbnail');
    const modal = document.querySelector('.modal');
    const modalImg = document.getElementById('modal-img');
    const closeBtn = document.querySelector('.close');
    const prevBtn = document.querySelector('.prev');
    const nextBtn = document.querySelector('.next');
    
    let currentIndex = 0;
    const images = Array.from(thumbnails).map(thumb => thumb.getAttribute('data-src'));
    
    // 为每个缩略图添加点击事件
    thumbnails.forEach((thumb, index) => {
        thumb.addEventListener('click', function() {
            currentIndex = index;
            showImage(currentIndex);
        });
    });
    
    // 显示图片函数
    function showImage(index) {
        modalImg.src = images[index];
        modal.style.display = 'block';
        document.body.style.overflow = 'hidden'; // 防止背景滚动
    }
    
    // 关闭弹窗
    function closeModal() {
        modal.style.display = 'none';
        document.body.style.overflow = 'auto';
    }
    
    // 上一张图片
    function prevImage() {
        currentIndex = (currentIndex - 1 + images.length) % images.length;
        showImage(currentIndex);
    }
    
    // 下一张图片
    function nextImage() {
        currentIndex = (currentIndex + 1) % images.length;
        showImage(currentIndex);
    }
    
    // 事件监听
    closeBtn.addEventListener('click', closeModal);
    prevBtn.addEventListener('click', prevImage);
    nextBtn.addEventListener('click', nextImage);
    
    // 键盘事件
    document.addEventListener('keydown', function(e) {
        if (modal.style.display === 'block') {
            switch(e.key) {
                case 'Escape':
                    closeModal();
                    break;
                case 'ArrowLeft':
                    prevImage();
                    break;
                case 'ArrowRight':
                    nextImage();
                    break;
            }
        }
    });
    
    // 点击弹窗背景关闭
    modal.addEventListener('click', function(e) {
        if (e.target === modal) {
            closeModal();
        }
    });
});

打开页面验证

直接用浏览器打开

image-20250513191703950

再微调一下

把页面背景改成温馨一点的,把第二张图片去掉

image-20250513191842075

会显示变更前和变更后的代码

image-20250513192502374

一顿自动操作之后,再次打开

image-20250513191926704

改变需求

创建一个基于 Web 的家庭相册项目,使用 React 框架

分析需求:

image-20250513194952475

创建一个基于React的家庭相册项目需要以下步骤:

  1. 初始化React项目

  2. 创建相册组件结构

  3. 实现图片展示功能

  4. 添加图片查看模态框

  5. 实现键盘导航功能

首先需要初始化React项目,然后逐步实现功能。由于当前工作目录已有普通HTML相册,建议新建一个目录来存放React项目。

我将先创建一个新的React项目。

会自动执行

npx create-react-app family-album-react --template typescript
Need to install the following packages:
  create-react-app
Ok to proceed? (y) y
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported

image-20250513195050674

完成

image-20250513195235912

打开localhost+端口。

image-20250513195301914

结束

通过使用腾讯 CodeBuddy 从零打造家庭相册项目,深刻感受到了它作为一款智能编程助手的强大能力。在整个开发过程中,CodeBuddy 就像一位贴心的技术伙伴,从项目的基础框架搭建到各个功能的实现,再到问题的解决和优化,都给予了开发者全方位的支持,极大地提升了开发效率和项目质量。与 Cursor 等国外同类工具相比,CodeBuddy 凭借其本土化优势、对国内云服务的深度整合以及对国内开发场景的针对性优化,展现出了独特的竞争力,有望成为国内开发者心目中 “中国人自己的 Cursor”。

就目前的表现而言,腾讯云代码助手CodeBuddy工具已经有了国产Cursor的媲美的功能。从代码质量来看,其生成的代码质量尚可,预设功能也基本能够实现,对于新手开发者而言,若想借助AI工具完成工程项目,从零开始直接使用AI的最佳选择。

展望未来,随着人工智能技术的不断发展和 CodeBuddy 的持续迭代升级,相信它将在更多的开发场景中发挥重要作用,程序员小伙伴你们颤抖了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星哥玩云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值