飞算JavaAI实测:用自然语言生成完整Java工程代码

2 阅读

飞算JavaAI能做什么?

飞算JavaAI是2025年初推出的一款面向Java开发者的智能辅助工具。它和常见的代码补全插件不同,目标不是帮你写几行片段,而是尝试从需求描述直接生成一个可运行的完整工程——包括接口定义、业务逻辑、数据库表结构、配置文件,甚至单元测试。

文章配图

我拿它试了一个简单的计算器功能:用自然语言描述“需要一个支持加减乘除的REST API,记录每次运算日志”,看看它到底能产出什么。

文章配图

智能引导:从一句话到完整工程

在这里插入图片描述

飞算JavaAI的“智能引导”模块采用分步对话的方式推进开发。你不需要一次性把需求写得很完整,系统会边问边确认,逐步细化。

在这里插入图片描述

比如我一开始只说:“做个计算器API”。它接着问:

  • 需要支持哪些运算?(我答:加减乘除)
  • 是否需要记录操作日志?(我说:要)
  • 数字精度怎么处理?(我选:保留4位小数)

在这里插入图片描述

几轮问答后,它自动生成了以下内容:

在这里插入图片描述

Controller层

在这里插入图片描述

@RestController
@RequestMapping("/calculation")
public class CalculationController {

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/31b8c8716abc47d0a40f225b51205f96.png#pic_center)

@Autowired
    private CalculationService calculationService;

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ec465bc5dca745e9ad05fe004ed92dfb.png#pic_center)

@PostMapping("/add")
    public ResponseEntity<RestResult> add(@Valid @RequestBody CalculationRequest request) {
        RestResult result = calculationService.performAddition(request);
        return new ResponseEntity<>(result, HttpStatus.OK);
    }

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/79e229a1df034f3fbd5e08754f6c57bd.png#pic_center)

// subtract / multiply / divide 类似
}

在这里插入图片描述

每个运算都有独立的端点,同时也提供了一个通用/calculation入口,传入运算符参数即可。

在这里插入图片描述

数据库表

在这里插入图片描述

它还自动创建了一张操作日志表:

在这里插入图片描述

CREATE TABLE operation_log (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    operator CHAR(1) NOT NULL COMMENT '运算符 (+, -, *, /)',
    operand1 DECIMAL(18, 4) NOT NULL,
    operand2 DECIMAL(18, 4) NOT NULL,
    result DECIMAL(18, 4) NULL,
    error_message VARCHAR(255) NULL,
    create_by VARCHAR(50) NOT NULL,
    create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) COMMENT='记录每次运算的操作详情和结果';

在这里插入图片描述

字段设计合理,连错误信息和审计字段都考虑到了。

Service实现

最核心的业务逻辑在Service层:

@Service
public class CalculationServiceImpl implements CalculationService {

@Autowired
    private OperationLogMapper operationLogMapper;

@Override
    public RestResult<BigDecimal> performCalculation(CalculationRequest request) {
        BigDecimal result = null;
        String errorMessage = null;
        
        try {
            switch (request.getOperator()) {
                case "+":
                    result = request.getOperand1().add(request.getOperand2());
                    break;
                case "-":
                    result = request.getOperand1().subtract(request.getOperand2());
                    break;
                case "*":
                    result = request.getOperand1().multiply(request.getOperand2());
                    break;
                case "/":
                    if (BigDecimal.ZERO.compareTo(request.getOperand2()) == 0) {
                        throw new ArithmeticException("Division by zero");
                    }
                    result = request.getOperand1().divide(request.getOperand2(), 4, RoundingMode.HALF_UP);
                    break;
                default:
                    throw new IllegalArgumentException("Invalid operator: " + request.getOperator());
            }
        } catch (Exception e) {
            errorMessage = e.getMessage();
            log.error("Calculation error: {}", errorMessage);
        }
        
        // 记录日志
        OperationLog logEntry = new OperationLog();
        logEntry.setOperator(request.getOperator());
        logEntry.setOperand1(request.getOperand1());
        logEntry.setOperand2(request.getOperand2());
        logEntry.setResult(result);
        logEntry.setErrorMessage(errorMessage);
        logEntry.setCreateBy("System");
        operationLogMapper.insert(logEntry);
        
        return errorMessage == null ? 
            RestResult.success(result) : 
            RestResult.fail(errorMessage);
    }
}

这段代码有几个值得注意的细节:

  • 使用BigDecimal避免浮点精度问题
  • 除法做了零值校验
  • 所有异常被捕获并记录到日志表
  • 日志记录与主逻辑解耦,即使插入失败也不影响返回结果

整体来看,生成的代码符合企业级开发规范,不是玩具级别的demo。

Java Chat:上下文感知的智能助手

除了引导式开发,飞算JavaAI还内置了“Java Chat”功能。它不像普通聊天机器人那样孤立地回答问题,而是能读取当前项目的上下文。

比如我在Service类里选中performCalculation方法,然后问:“为这个方法写单元测试,覆盖正常情况和除零异常。”

它立刻生成了如下测试代码:

@SpringBootTest
class CalculationServiceImplTest {

@Autowired
    private CalculationService calculationService;

@Test
    void testAddition() {
        CalculationRequest request = new CalculationRequest();
        request.setOperand1(new BigDecimal("10.5"));
        request.setOperand2(new BigDecimal("2.5"));
        request.setOperator("+");
        
        RestResult<BigDecimal> result = calculationService.performCalculation(request);
        assertTrue(result.isSuccess());
        assertEquals(new BigDecimal("13.0"), result.getData());
    }

@Test
    void testDivisionByZero() {
        CalculationRequest request = new CalculationRequest();
        request.setOperand1(new BigDecimal("10"));
        request.setOperand2(BigDecimal.ZERO);
        request.setOperator("/");
        
        RestResult<BigDecimal> result = calculationService.performCalculation(request);
        assertFalse(result.isSuccess());
        assertEquals("Division by zero", result.getMessage());
    }
}

测试用例准确使用了项目中已有的CalculationRequestRestResult类,断言也符合实际返回结构。更关键的是,它知道除零会抛出特定异常,并验证了错误信息。

这种上下文感知能力比通用AI编程助手强很多——后者经常假设不存在的类或方法。

SQL Chat:自然语言转复杂查询

最后一个亮点是SQL Chat。开发者可以直接用中文描述查询需求,它会生成可执行的SQL。

我输入:“查询最近7天每个操作员使用最多的三种运算类型及其平均结果。”

它返回:

SELECT 
    operator,
    operation_type,
    avg_result,
    operation_count
FROM (
    SELECT 
        operator,
        operation_type,
        ROUND(AVG(result), 4) AS avg_result,
        COUNT(*) AS operation_count,
        ROW_NUMBER() OVER (
            PARTITION BY operator 
            ORDER BY COUNT(*) DESC
        ) AS rank
    FROM (
        SELECT 
            create_by AS operator,
            CASE 
                WHEN operator = '+' THEN '加法'
                WHEN operator = '-' THEN '减法'
                WHEN operator = '*' THEN '乘法'
                WHEN operator = '/' THEN '除法'
            END AS operation_type,
            result
        FROM operation_log
        WHERE create_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
    ) AS typed_operations
    GROUP BY operator, operation_type
) AS ranked_operations
WHERE rank <= 3
ORDER BY operator, operation_count DESC;

这个查询其实挺复杂:

  • 先把符号转成中文类型
  • 按操作员和类型分组统计
  • 用窗口函数排名
  • 最后取Top 3

生成的SQL语法正确,逻辑清晰,甚至考虑了MySQL的日期函数写法。对于不熟悉窗口函数的开发者来说,这能省下大量查文档的时间。

实际体验总结

经过几天试用,飞算JavaAI给我留下几个深刻印象:

优点:

  • 工程完整性:不是生成零散代码片段,而是输出可直接导入IDE运行的完整项目结构
  • 上下文理解:Java Chat能准确识别项目中的类、方法和依赖关系
  • 安全设计:SQL Chat只读取元数据,不接触真实数据;代码生成全程本地处理
  • 规范可定制:可以预设代码风格规则,让AI输出符合团队规范

局限:

  • 目前仅支持Java技术栈,其他语言开发者无法使用
  • 复杂业务逻辑仍需人工干预,比如涉及多系统交互的场景
  • 对模糊需求的容错有限,如果初始描述太笼统,可能需要多次调整

总的来说,飞算JavaAI适合用来快速搭建标准CRUD模块、生成样板代码或辅助新人理解项目结构。它不能完全替代资深开发者,但确实能把重复性工作减少70%以上。对于维护老旧Java系统的团队来说,它的“老项目分析”功能尤其有价值——能自动解析遗留代码并生成文档,省去大量逆向工程时间。

如果你每天要写大量相似的增删改查接口,或者团队里有刚入门的Java新人,这个工具值得一试。