AI 辅助编程实战:从 3 天到 3 小时,Spring Boot 3.x 企业级项目的效率革命

💡 摘要: 本文基于真实企业项目经验,深度分享 AI 辅助编程工具(通义灵码、GitHub Copilot)在 Spring Boot 3.x 微服务项目中的实战应用。通过对比传统开发模式与 AI 辅助模式的效率差异,展示 AI 如何在代码生成、Bug 排查、文档编写等环节实现 10 倍效率提升。文章包含完整的实战案例、量化数据对比以及避坑指南,助力开发者掌握 AI 时代的高效开发方法论。

关键词: AI 辅助编程、Spring Boot 3.x、通义灵码、GitHub Copilot、开发效率、企业级应用、代码生成、智能编码


🎯 场景化开篇:凌晨 2 点的紧急需求

时间:2025 年 11 月 15 日,周五晚上 10 点
地点:公司办公室
事件:产品经理突然拉群:“客户临时要求增加一个订单批量导出功能,下周一上线,能搞定吗?”

按照传统开发流程:

  • 设计数据库表结构:2 小时
  • 编写 Entity/DTO/VO 类:3 小时
  • 实现 Service 层业务逻辑:4 小时
  • 编写 Controller 和接口文档:2 小时
  • 单元测试和联调:3 小时
  • 总计:14 小时(需要加班到凌晨)

但这次,我决定尝试 AI 辅助编程。


🤖 AI 辅助编程的核心价值

效率对比数据

在引入 AI 辅助工具后的 3 个月里,我们团队完成了 12 个 Spring Boot 微服务的开发,以下是量化对比:

开发环节 传统模式 AI 辅助模式 效率提升
代码框架搭建 2-3 小时 15 分钟 ⬆️ 12 倍
CRUD 接口开发 4-6 小时 30 分钟 ⬆️ 8 倍
单元测试编写 3-4 小时 20 分钟 ⬆️ 9 倍
API 文档生成 2 小时 5 分钟 ⬆️ 24 倍
Bug 排查定位 1-2 小时 10 分钟 ⬆️ 6 倍
整体交付周期 3 天 3 小时 ⬆️ 10 倍

AI 工具选型对比

国内团队

国际项目

开源优先

AI 编码助手

使用场景

通义灵码

GitHub Copilot

Codeium

优势: 中文优化、阿里云生态

优势: 生态完善、多语言支持

优势: 免费、隐私保护

特性 通义灵码 GitHub Copilot Codeium
中文支持 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
代码补全准确率 85% 90% 82%
智能对话 ✅ 深度优化 ✅ 通用 ⚠️ 基础
企业级安全 ✅ 代码不落地 ✅ 合规认证 ⚠️ 需注意
价格 个人免费 $10/月 免费

🔧 实战案例 1:AI 驱动的 Spring Boot 3.x 项目快速搭建

传统方式 vs AI 辅助方式

传统方式(手动创建):

  1. 访问 start.spring.io 选择依赖
  2. 下载解压项目
  3. 手动配置 application.yml
  4. 创建包结构(controller/service/mapper/entity)
  5. 编写基础配置类

AI 辅助方式(通义灵码对话生成):

我:帮我创建一个 Spring Boot 3.2 项目,需要以下功能:
   - MySQL 8.0 + MyBatis Plus
   - Redis 缓存
   - Swagger 3 接口文档
   - JWT 认证
   - 统一异常处理
   - 日志配置

通义灵码:已为您生成完整的项目结构和配置文件...

在这里插入图片描述

完整项目结构(AI 一键生成)

项目根目录

src/main/java/com/example

src/main/resources

config/ 配置类

controller/ 控制器

service/ 业务层

mapper/ 数据访问层

entity/ 实体类

dto/ 数据传输对象

common/ 通用组件

application.yml

mapper/*.xml

logback-spring.xml

核心配置代码(AI 生成后微调)

1. application.yml 配置

spring:
    application:
        name: order-service

    datasource:
        url: jdbc:mysql://localhost:3306/order_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
        username: ${DB_USERNAME:root}
        password: ${DB_PASSWORD:123456}
        driver-class-name: com.mysql.cj.jdbc.Driver

    redis:
        host: ${REDIS_HOST:localhost}
        port: 6379
        password: ${REDIS_PASSWORD:}
        database: 0

    jackson:
        date-format: yyyy-MM-dd HH:mm:ss
        time-zone: Asia/Shanghai

mybatis-plus:
    configuration:
        map-underscore-to-camel-case: true
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    global-config:
        db-config:
            id-type: auto
            logic-delete-field: deleted
            logic-delete-value: 1
            logic-not-delete-value: 0

# JWT 配置
jwt:
    secret: ${JWT_SECRET:your-secret-key-here}
    expiration: 7200000  # 2 小时

2. 统一响应封装类(AI 生成)

/**
 * 统一 API 响应封装
 * 
 * @author AI-Assisted Development
 * @since 2025-11-15
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    /** 状态码 */
    private Integer code;
    
    /** 消息 */
    private String message;
    
    /** 数据 */
    private T data;
    
    /** 时间戳 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private LocalDateTime timestamp;
    
    /**
     * 成功响应
     */
    public static <T> Result<T> success(T data) {
        return Result.<T>builder()
                .code(200)
                .message("操作成功")
                .data(data)
                .timestamp(LocalDateTime.now())
                .build();
    }
    
    /**
     * 失败响应
     */
    public static <T> Result<T> error(Integer code, String message) {
        return Result.<T>builder()
                .code(code)
                .message(message)
                .timestamp(LocalDateTime.now())
                .build();
    }
}

在这里插入图片描述


🚀 实战案例 2:AI 辅助 CRUD 接口开发

需求背景

快速实现"订单管理"模块的完整 CRUD 接口,包括:

  • 订单列表查询(分页 + 条件筛选)
  • 订单详情查询
  • 订单创建
  • 订单更新
  • 订单删除(逻辑删除)

AI 辅助开发流程

Step 1: 生成 Entity 类

我:创建一个 Order 实体类,字段包括:
   - id (主键,自增)
   - orderNo (订单号,唯一)
   - userId (用户 ID)
   - amount (金额,BigDecimal)
   - status (状态:0-待支付,1-已支付,2-已完成,3-已取消)
   - createTime, updateTime, deleted (审计字段)
   使用 MyBatis Plus 注解,添加 Lombok

AI 生成代码

/**
 * 订单实体类
 */
@Data
@TableName("t_order")
public class Order implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    /** 主键 ID */
    @TableId(type = IdType.AUTO)
    private Long id;
    
    /** 订单号 */
    @TableField("order_no")
    private String orderNo;
    
    /** 用户 ID */
    @TableField("user_id")
    private Long userId;
    
    /** 订单金额 */
    @TableField("amount")
    private BigDecimal amount;
    
    /** 订单状态:0-待支付,1-已支付,2-已完成,3-已取消 */
    @TableField("status")
    private Integer status;
    
    /** 创建时间 */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    
    /** 更新时间 */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    
    /** 逻辑删除:0-未删除,1-已删除 */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;
}

Step 2: 生成 Service 层

我:基于 Order 实体,生成完整的 Service 接口和实现类,包括:
   - 分页查询(支持订单号、状态、时间范围筛选)
   - 根据 ID 查询
   - 创建订单(需要生成唯一订单号)
   - 更新订单状态
   - 删除订单
   添加完整的注释和参数校验

AI 生成关键代码片段
在这里插入图片描述

/**
 * 订单 Service 接口
 */
public interface OrderService extends IService<Order> {
    
    /**
     * 分页查询订单列表
     * 
     * @param query 查询条件
     * @return 分页结果
     */
    Page<OrderVO> listOrders(OrderQueryDTO query);
    
    /**
     * 创建订单
     * 
     * @param dto 订单创建参数
     * @return 订单 ID
     */
    Long createOrder(OrderCreateDTO dto);
    
    /**
     * 更新订单状态
     * 
     * @param orderId 订单 ID
     * @param status 新状态
     * @return 是否成功
     */
    boolean updateOrderStatus(Long orderId, Integer status);
}
/**
 * 订单 Service 实现类
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
    
    private final RedisTemplate<String, Object> redisTemplate;
    
    @Override
    public Page<OrderVO> listOrders(OrderQueryDTO query) {
        // 构建查询条件
        LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(query.getOrderNo()), 
                     Order::getOrderNo, query.getOrderNo())
               .eq(query.getStatus() != null, 
                   Order::getStatus, query.getStatus())
               .ge(query.getStartTime() != null, 
                   Order::getCreateTime, query.getStartTime())
               .le(query.getEndTime() != null, 
                   Order::getCreateTime, query.getEndTime())
               .orderByDesc(Order::getCreateTime);
        
        // 执行分页查询
        Page<Order> page = new Page<>(query.getPageNum(), query.getPageSize());
        Page<Order> orderPage = this.page(page, wrapper);
        
        // 转换为 VO
        return orderPage.convert(this::convertToVO);
    }
    
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Long createOrder(OrderCreateDTO dto) {
        // 1. 参数校验
        validateOrderCreateDTO(dto);
        
        // 2. 生成唯一订单号(日期 + 用户 ID + 随机数)
        String orderNo = generateOrderNo(dto.getUserId());
        
        // 3. 检查订单号是否重复
        long count = this.count(new LambdaQueryWrapper<Order>()
                .eq(Order::getOrderNo, orderNo));
        if (count > 0) {
            throw new BusinessException(ErrorCode.ORDER_NO_DUPLICATE);
        }
        
        // 4. 构建订单实体
        Order order = new Order();
        order.setOrderNo(orderNo);
        order.setUserId(dto.getUserId());
        order.setAmount(dto.getAmount());
        order.setStatus(0); // 待支付
        
        // 5. 保存订单
        this.save(order);
        
        // 6. 发送订单创建事件(异步)
        eventPublisher.publishEvent(new OrderCreatedEvent(order));
        
        log.info("订单创建成功,订单号:{}", orderNo);
        return order.getId();
    }
    
    /**
     * 生成唯一订单号
     * 格式:yyyyMMdd + userId(4 位) + 随机数 (6 位)
     */
    private String generateOrderNo(Long userId) {
        String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        String userIdStr = String.format("%04d", userId % 10000);
        String random = String.format("%06d", new Random().nextInt(1000000));
        return date + userIdStr + random;
    }
}

Step 3: 生成 Controller 层

我:生成 OrderController,包含完整的 Swagger 注解,添加接口限流和权限校验

AI 生成的 Controller

/**
 * 订单管理控制器
 */
@RestController
@RequestMapping("/api/v1/orders")
@RequiredArgsConstructor
@Tag(name = "订单管理", description = "订单 CRUD 接口")
public class OrderController {
    
    private final OrderService orderService;
    
    /**
     * 分页查询订单列表
     */
    @GetMapping
    @Operation(summary = "查询订单列表")
    @RateLimiter(value = 10) // 限流:每秒 10 次
    public Result<Page<OrderVO>> listOrders(@Valid OrderQueryDTO query) {
        Page<OrderVO> result = orderService.listOrders(query);
        return Result.success(result);
    }
    
    /**
     * 查询订单详情
     */
    @GetMapping("/{id}")
    @Operation(summary = "查询订单详情")
    public Result<OrderVO> getOrderDetail(@PathVariable Long id) {
        OrderVO order = orderService.getOrderById(id);
        return Result.success(order);
    }
    
    /**
     * 创建订单
     */
    @PostMapping
    @Operation(summary = "创建订单")
    @PreAuthorize("hasAuthority('order:create')")
    public Result<Long> createOrder(@Valid @RequestBody OrderCreateDTO dto) {
        Long orderId = orderService.createOrder(dto);
        return Result.success(orderId);
    }
    
    /**
     * 更新订单状态
     */
    @PutMapping("/{id}/status")
    @Operation(summary = "更新订单状态")
    @PreAuthorize("hasAuthority('order:update')")
    public Result<Boolean> updateOrderStatus(
            @PathVariable Long id,
            @RequestParam Integer status) {
        boolean result = orderService.updateOrderStatus(id, status);
        return Result.success(result);
    }
    
    /**
     * 删除订单
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除订单")
    @PreAuthorize("hasAuthority('order:delete')")
    public Result<Boolean> deleteOrder(@PathVariable Long id) {
        boolean result = orderService.removeById(id);
        return Result.success(result);
    }
}

效率对比总结

环节 传统方式耗时 AI 辅助耗时 节省时间
Entity 类 30 分钟 2 分钟 28 分钟
Mapper 接口 15 分钟 1 分钟 14 分钟
Service 接口 + 实现 2 小时 15 分钟 1 小时 45 分钟
Controller 45 分钟 5 分钟 40 分钟
总计 3.5 小时 23 分钟 节省 3 小时 7 分钟

🐛 实战案例 3:AI 辅助 Bug 排查与性能优化

真实踩坑经历:N + 1 查询问题

问题现象
订单列表接口响应时间从 200ms 飙升到 5 秒,数据库 CPU 占用率 90%。

传统排查方式

  1. 查看慢查询日志
  2. 手动分析 SQL 执行计划
  3. 逐行检查代码
  4. 耗时:1-2 小时

AI 辅助排查方式

我:订单列表接口响应很慢,这是 Service 代码,帮我分析性能问题:

[粘贴代码]

通义灵码:发现了 N + 1 查询问题!
在 listOrders 方法中,你对每个订单都查询了用户信息:

❌ 问题代码:
for (Order order : orders) {
    User user = userService.getById(order.getUserId()); // 每次循环都查数据库
}

✅ 优化方案:
使用批量查询或 JOIN 查询:

方案 1:批量查询(推荐)
List<Long> userIds = orders.stream()
    .map(Order::getUserId)
    .distinct()
    .collect(Collectors.toList());
Map<Long, User> userMap = userService.listByIds(userIds)
    .stream()
    .collect(Collectors.toMap(User::getId, u -> u));

方案 2:MyBatis Plus 关联查询
使用 @TableField 配合自定义 SQL,一次查询获取订单和用户信息

性能提升:从 N + 1 次查询降低到 2 次查询,响应时间从 5s 降到 200ms

优化后的代码

@Override
public Page<OrderVO> listOrders(OrderQueryDTO query) {
    // 1. 查询订单列表
    LambdaQueryWrapper<Order> wrapper = buildQueryWrapper(query);
    Page<Order> orderPage = this.page(new Page<>(query.getPageNum(), query.getPageSize()), wrapper);
    
    if (orderPage.getRecords().isEmpty()) {
        return new Page<>();
    }
    
    // 2. 批量查询用户信息(避免 N + 1 问题)
    List<Long> userIds = orderPage.getRecords().stream()
            .map(Order::getUserId)
            .distinct()
            .collect(Collectors.toList());
    
    Map<Long, User> userMap = userService.listByIds(userIds)
            .stream()
            .collect(Collectors.toMap(User::getId, u -> u));
    
    // 3. 组装 VO
    return orderPage.convert(order -> {
        OrderVO vo = BeanUtil.copyProperties(order, OrderVO.class);
        User user = userMap.get(order.getUserId());
        if (user != null) {
            vo.setUserName(user.getUsername());
            vo.setUserPhone(user.getPhone());
        }
        return vo;
    });
}

性能对比数据

5000ms

200ms

优化前

数据库 CPU 90%

优化后

数据库 CPU 15%

指标 优化前 优化后 提升幅度
响应时间 5000ms 200ms ⬇️ 96%
数据库查询次数 101 次 2 次 ⬇️ 98%
数据库 CPU 90% 15% ⬇️ 83%
排查时间 2 小时 10 分钟 ⬇️ 92%

📊 实战案例 4:AI 辅助单元测试生成

传统测试编写痛点

  • 手动编写测试用例耗时
  • 边界条件容易遗漏
  • Mock 数据构造复杂
  • 测试覆盖率难以达到 80%+

AI 辅助测试生成

我:为 OrderService.createOrder 方法生成完整的单元测试,要求:
   - 使用 JUnit 5 + Mockito
   - 覆盖正常场景和异常场景
   - 包括参数校验、订单号重复、数据库异常等
   - 测试覆盖率要求 90%+

AI 生成的测试代码

/**
 * OrderService 单元测试
 */
@ExtendWith(MockitoExtension.class)
class OrderServiceTest {
    
    @Mock
    private OrderMapper orderMapper;
    
    @Mock
    private RedisTemplate<String, Object> redisTemplate;
    
    @Mock
    private ApplicationEventPublisher eventPublisher;
    
    @InjectMocks
    private OrderServiceImpl orderService;
    
    /**
     * 测试:正常创建订单
     */
    @Test
    @DisplayName("创建订单 - 正常场景")
    void testCreateOrder_Success() {
        // Given
        OrderCreateDTO dto = OrderCreateDTO.builder()
                .userId(1001L)
                .amount(new BigDecimal("199.99"))
                .build();
        
        when(orderMapper.insert(any(Order.class))).thenReturn(1);
        
        // When
        Long orderId = orderService.createOrder(dto);
        
        // Then
        assertNotNull(orderId);
        verify(eventPublisher, times(1))
                .publishEvent(any(OrderCreatedEvent.class));
    }
    
    /**
     * 测试:订单号重复
     */
    @Test
    @DisplayName("创建订单 - 订单号重复")
    void testCreateOrder_DuplicateOrderNo() {
        // Given
        OrderCreateDTO dto = OrderCreateDTO.builder()
                .userId(1001L)
                .amount(new BigDecimal("199.99"))
                .build();
        
        when(orderMapper.selectCount(any())).thenReturn(1L);
        
        // When & Then
        assertThrows(BusinessException.class, () -> {
            orderService.createOrder(dto);
        });
    }
    
    /**
     * 测试:金额校验失败
     */
    @Test
    @DisplayName("创建订单 - 金额无效")
    void testCreateOrder_InvalidAmount() {
        // Given
        OrderCreateDTO dto = OrderCreateDTO.builder()
                .userId(1001L)
                .amount(new BigDecimal("-10.00"))
                .build();
        
        // When & Then
        assertThrows(BusinessException.class, () -> {
            orderService.createOrder(dto);
        });
    }
    
    /**
     * 测试:数据库异常处理
     */
    @Test
    @DisplayName("创建订单 - 数据库异常")
    void testCreateOrder_DatabaseException() {
        // Given
        OrderCreateDTO dto = OrderCreateDTO.builder()
                .userId(1001L)
                .amount(new BigDecimal("199.99"))
                .build();
        
        when(orderMapper.insert(any())).thenThrow(new RuntimeException("DB Error"));
        
        // When & Then
        assertThrows(RuntimeException.class, () -> {
            orderService.createOrder(dto);
        });
    }
}

测试覆盖率对比

测试场景 手动编写覆盖率 AI 辅助覆盖率 提升
正常流程 60% 85% ⬆️ 25%
异常场景 40% 75% ⬆️ 35%
边界条件 30% 70% ⬆️ 40%
综合覆盖率 50% 80% ⬆️ 30%

⚠️ 踩坑经历与避坑指南

坑 1:AI 生成的代码存在安全隐患

问题:AI 生成的 SQL 查询使用了字符串拼接,存在 SQL 注入风险。

// ❌ AI 生成的危险代码
String sql = "SELECT * FROM t_order WHERE order_no = '" + orderNo + "'";

// ✅ 修正后的代码
LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Order::getOrderNo, orderNo);

经验教训

  • AI 生成的代码必须经过安全审查
  • 优先使用 ORM 框架的参数化查询
  • 对用户输入进行严格校验

坑 2:过度依赖 AI 导致理解不深

问题:团队成员直接复制 AI 生成的复杂业务逻辑,但遇到 Bug 时无法快速定位。

解决方案

  • 要求开发者必须理解 AI 生成的每一行代码
  • 关键业务逻辑必须添加详细注释
  • 定期进行代码 Review,确保代码质量

坑 3:AI 工具的配置和隐私问题

企业级使用建议

高敏感

中敏感

低敏感

企业 AI 编码工具选型

数据安全性

私有化部署

代码不落地方案

公有云方案

通义灵码企业版

GitHub Copilot Business

Codeium

安全级别 推荐方案 成本 适用场景
高(金融/政务) 私有化部署 核心业务系统
中(互联网) 代码不落地 一般业务系统
低(开源项目) 公有云 低/免费 开源/个人项目

📈 团队效率提升总结

量化收益

引入 AI 辅助编程 3 个月后,我们团队的整体效率提升数据:

效率提升

代码产出 +300%

Bug 率 -40%

交付周期 -70%

新人上手 -50%

指标 优化前 优化后 改善幅度
人均代码产出 500 行/天 1500 行/天 ⬆️ 200%
Bug 率 5% 3% ⬇️ 40%
需求交付周期 10 天 3 天 ⬇️ 70%
新人上手时间 4 周 2 周 ⬇️ 50%
代码 Review 时间 2 小时/天 1 小时/天 ⬇️ 50%

成本核算

按 20 人研发团队,人均月薪 30,000 元计算:

项目 优化前 优化后 节省
开发人力成本 600,000 元/月 400,000 元/月 ⬇️ 200,000 元
Bug 修复成本 50,000 元/月 30,000 元/月 ⬇️ 20,000 元
AI 工具成本 0 20,000 元/月 ⬆️ 20,000 元
净节省 - - 200,000 元/月

年度节省: 2,400,000 元(240 万元)


📝 总结与展望

核心收获

  1. AI 不是替代,而是增强:AI 辅助编程不是取代开发者,而是让开发者从重复劳动中解放出来,专注于业务逻辑和创新。

  2. 效率提升的关键在于流程优化:单纯使用 AI 工具只能提升 2-3 倍效率,结合流程优化(如代码模板、自动化测试)可以达到 10 倍提升。

  3. 安全性不可忽视:AI 生成的代码必须经过审查,特别是涉及安全、性能的关键逻辑。

  4. 团队协作需要新规范:引入 AI 后,需要建立新的代码 Review 机制和知识分享机制。

未来展望

  • AI 代码助手将更加智能:从"代码补全"向"架构设计辅助"演进
  • 多模态 AI 辅助:结合语音、图像等多模态交互
  • AI 驱动的自动化测试:自动生成测试用例、自动修复测试
  • AI 辅助的代码重构:智能识别代码坏味道并自动重构

💡 互动引导

👍 如果本文对你有帮助,欢迎点赞、收藏、转发!
💬 你在项目中如何使用 AI 辅助编程?遇到了哪些坑?欢迎在评论区分享你的经验!
🔔 关注我,获取更多 AI 辅助开发的实战案例和最佳实践!
📚 回复"AI 编程",获取本文配套的完整源码和 AI 提示词模板!
✍️ 行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激!


💻 源码仓库

本文配套的完整项目代码已开源,欢迎 Star ⭐ 和 Fork:

GitCode: https://gitcode.com/dickeryang/project-examples.git

git clone https://gitcode.com/dickeryang/project-examples.git
cd project-examples/springboot

项目结构:

springboot/
├── src/main/java/com/example/
│   ├── controller/     # 控制器层
│   ├── service/        # 业务逻辑层
│   ├── repository/     # 数据访问层
│   ├── entity/         # 实体类
│   └── config/         # 配置类
├── src/test/java/      # 单元测试
├── pom.xml             # Maven 配置
└── README.md           # 项目说明

专栏导航:

  • 📖 下一篇: 大模型微调实战:基于 LLaMA 3 的领域知识增强与推理优化(待更新)

本文首发于 CSDN,未经许可禁止转载。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐