文心一言代码能力测试:文心一言能否取代程序员?

这篇具有很好参考价值的文章主要介绍了文心一言代码能力测试:文心一言能否取代程序员?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文心一言代码协助能力使用体验,这篇博客基本上就是文心一言帮忙写的,素材是我和文心一言的对话,国产大语言模型确实取得了巨大的成就,在和文心一言对话的过程中感到未来已来,确实和之前的自动问答机器人不一样。对于文心一言之类的大语言模型能否取代程序员为企业完成业务代码,我进行了多次代码能力的测试,先来个总结:

我认为文心一言是一个有用的工具,它可以作为程序员的得力助手。然而,在关键的代码环节,文心一言并不能完整无漏洞的实现需求,我们仍需要依靠程序员自己的经验和技能来完成任务。毕竟,机器和人之间还是存在一定的差异的。希望文心一言未来能够在这方面做出更多的优化和提升,让我们拭目以待吧。

文心一言的自我介绍:

问:文心一言的简介,重点介绍它的代码能力
答:文心一言(ERNIE Bot)是百度基于文心大模型技术推出的生成式对话产品,具有代码生成能力,能够理解和生成自然语言文本,并能够根据用户提出的问题或需求,提供具有逻辑清晰、代码完整、可执行性强的高质量代码解决方案。
文心一言的代码能力主要体现在以下几个方面:

  1. 代码逻辑理解与生成:文心一言能够理解用户输入的代码逻辑,并能够根据该逻辑生成完整的、可执行的代码片段。例如,当用户输入一个排序算法的需求时,文心一言可以生成一个快速排序算法的代码实现。
  2. 代码自动纠错:文心一言具备自动纠错功能,可以检测用户输入的代码中的语法错误、类型错误等常见问题,并给出相应的错误提示和修复建议。
  3. 代码模板生成:文心一言可以基于不同的编程语言和场景,提供多种常用的代码模板,方便用户快速启动开发任务。
  4. 代码推理能力:文心一言具备一定的代码推理能力,能够根据已有代码逻辑推导出一些新的结论或解决方案。例如,当用户输入一个数组排序的代码时,文心一言可以推断出该数组的最小值、最大值和平均值等统计信息。
    总之,文心一言的代码能力比较强大,能够为程序员提供全方位的帮助,大大提高开发效率和质量。

我们以一个实际的应用场景为例,探讨了如何实现缓存数据(如库存)Redis 和数据库的数据一致性。
对话如下:

**问:**帮我写一个Java demo,实现缓存数据(如库存)的redis和数据库的数据一致性

**答:**以下是一个使用Spring Boot和Redis实现缓存数据一致性的Java demo。我们将使用库存作为示例数据,将其存储在Redis和数据库中,并实现两者之间的一致性。

首先,我们需要在pom.xml文件中添加Spring Boot和Redis的依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

接下来,我们创建一个名为Inventory的实体类,用于存储库存信息:

@Entity
public class Inventory {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String productId;
    private int quantity;

    // getters and setters
}

然后,我们创建一个名为InventoryRepository的JpaRepository,用于与数据库交互:

public interface InventoryRepository extends JpaRepository<Inventory, Long> {
}

接下来,我们创建一个名为InventoryService的实现类,用于与Redis交互:

@Service
public class InventoryService {
    @Autowired
    private StringRedisTemplate redisTemplate;

    public void addToInventory(String productId, int quantity) {
        // 从Redis中获取库存数量,如果存在则累加,否则从数据库中获取库存数量并累加
        String key = "inventory:" + productId;
        String value = redisTemplate.opsForValue().get(key);
        if (value != null) {
            int existingQuantity = Integer.parseInt(value);
            quantity += existingQuantity;
        } else {
            Inventory inventory = inventoryRepository.findByProductId(productId);
            if (inventory != null) {
                quantity += inventory.getQuantity();
            } else {
                // 如果库存不存在,则从数据库中插入一条新的库存记录
                Inventory newInventory = new Inventory();
                newInventory.setProductId(productId);
                newInventory.setQuantity(quantity);
                inventoryRepository.save(newInventory);
            }
        }
        // 将更新后的库存数量存入Redis中
        redisTemplate.opsForValue().set(key, String.valueOf(quantity));
    }
}

在上述代码中,我们使用StringRedisTemplate来操作Redis,并实现了addToInventory方法来将库存数量累加到Redis和数据库中。如果库存数量已经存在于Redis中,则直接累加;否则从数据库中获取库存数量并累加。如果库存不存在,则从数据库中插入一条新的库存记录。最后,将更新后的库存数量存入Redis中。

需要注意的是,为了保证缓存数据的一致性,我们需要使用事务来包裹对Redis和数据库的操作。具体实现可以参考Spring Boot和Redis的官方文档。

redis数据一致性的问题是计算机软件经典问题,不像是1+1=2,这个问题并没有标准答案,我期望文心一言能够从各种角度分析问题所在,并给出多种解决方案,以及每种方案的优劣。但是文心一言直接给出了一个“标准答案”,但是好像并没有理解我的问题,仅仅给出一个一个redis更新数据的案例,与我的问题八竿子打不着,所以我直接指出问题继续提问:

问:上面生成的代码,仅仅更新了redis中的库存变量,但是库存的更改也应该同时修改数据库中的数据,并且保证redis和数据库的一致性。请对上面的代码进行优化

答:为了确保Redis和数据库的一致性,你可以使用以下方法来优化上面的代码:

  1. 使用事务:将Redis和数据库的操作包含在同一个事务中,以确保它们要么全部成功执行,要么全部回滚,从而保持数据的一致性。
  2. 使用数据库触发器:在数据库中创建一个触发器,当库存发生更改时自动更新Redis中的对应数据。这样,每次库存发生更改时,数据库将自动同步更新Redis中的数据。

下面是一个使用Spring Boot和Redis实现缓存数据一致性的优化后的Java demo:

首先,我们需要在pom.xml文件中添加Spring Boot和Redis的依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

接下来,我们创建一个名为Inventory的实体类,用于存储库存信息:

@Entity
public class Inventory {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String productId;
    private int quantity;

    // getters and setters
}

然后,我们创建一个名为InventoryRepository的JpaRepository,用于与数据库交互:

public interface InventoryRepository extends JpaRepository<Inventory, Long> {
}

接下来,我们创建一个名为InventoryService的实现类,用于与Redis交互:

@Service
public class InventoryService {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private InventoryRepository inventoryRepository;

    @Transactional // 使用事务来确保数据一致性
    public void addToInventory(String productId, int quantity) {
        // 更新Redis中的库存数量
        redisTemplate.opsForValue().increment(productId, quantity);
        // 更新数据库中的库存数量
        Inventory inventory = inventoryRepository.findByProductId(productId);
        if (inventory != null) {
            inventory.setQuantity(inventory.getQuantity() + quantity);
            inventoryRepository.save(inventory);
        } else {
            // 如果库存不存在,则从数据库中插入一条新的库存记录
            Inventory newInventory = new Inventory();
            newInventory.setProductId(productId);
            newInventory.setQuantity(quantity);
            inventoryRepository.save(newInventory);
        }
    }
}

在上述代码中,我们使用了@Transactional注解来确保将Redis和数据库的操作包含在同一个事务中。在addToInventory方法中,我们首先使用redisTemplateopsForValue().increment方法来更新Redis中的库存数量。然后,我们根据库存是否存在来更新数据库中的库存数量。如果库存存在,则将库存数量累加并保存到数据库中;如果库存不存在,则插入一条新的库存记录。最后,inventoryRepository.save()方法会自动提交事务,确保Redis和数据库的数据一致性。

上面的代码完全没有解决问题,我继续追问:

问:如我直言,上述的addToInventory方法并没有保证数据库和redis数据一致性,如果inventoryRepository.save()执行失败,数据库事务回滚,但是redis的事务并不会回滚,数据没有一致性

答:您是对的,上述代码中的addToInventory方法并不能完全保证数据库和Redis数据的一致性。如果inventoryRepository.save()执行失败,数据库事务会回滚,但Redis事务并不会回滚,这就可能导致数据不一致的情况。

为了解决这个问题,我们可以使用分布式事务来确保数据库和Redis数据的一致性。具体来说,我们可以使用一个事务管理器来协调数据库和Redis的事务,以确保它们要么全部成功,要么全部回滚。

在Spring Boot中,可以使用@Transactional注解和事务管理器来实现分布式事务。下面是一个使用Spring Boot实现数据库和Redis数据一致性的优化后的Java demo:

首先,我们需要在pom.xml文件中添加Spring Boot和Redis的依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

接下来,我们创建一个名为Inventory的实体类,用于存储库存信息:

@Entity
public class Inventory {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String productId;
    private int quantity;

    // getters and setters
}

然后,我们创建一个名为InventoryRepository的JpaRepository,用于与数据库交互:

public interface InventoryRepository extends JpaRepository<Inventory, Long> {
}

接下来,我们创建一个名为InventoryService的实现类,用于与Redis交互:

@Service
public class InventoryService {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private InventoryRepository inventoryRepository;
    @Autowired
    private PlatformTransactionManager transactionManager; // 事务管理器

    @Transactional // 使用事务来确保数据一致性
    public void addToInventory(String productId, int quantity) {
        // 更新Redis中的库存数量
        redisTemplate.opsForValue().increment(productId, quantity);
        // 更新数据库中的库存数量
        Inventory inventory = inventoryRepository.findByProductId(productId);
        if (inventory != null) {
            inventory.setQuantity(inventory.getQuantity() + quantity);
            inventoryRepository.saveAndFlush(inventory); // 使用saveAndFlush方法确保数据立即写入数据库
        } else {
            // 如果库存不存在,则从数据库中插入一条新的库存记录
            Inventory newInventory = new Inventory();
            newInventory.setProductId(productId);
            newInventory.setQuantity(quantity);
            inventoryRepository.saveAndFlush(newInventory); // 使用saveAndFlush方法确保数据立即写入数据库
        }
        // 提交事务,如果发生异常则回滚事务,确保数据一致性
        try {
            transactionManager.commit(transactionStatus()); // 手动提交事务,需要注意要在try块中执行此操作,以确保如果发生异常可以回滚事务
        } catch (Exception e) {
            transactionManager.rollback(transactionStatus()); // 如果发生异常则回滚事务,确保数据一致性
            throw e; // 重新抛出异常,以便调用方可以处理异常情况
        }
    }
}

在上述代码中,我们添加了一个transactionManager字段,该字段是一个PlatformTransactionManager类型的对象,用于协调数据库和Redis的事务。在addToInventory方法中,我们首先使用redisTemplateopsForValue().increment方法来更新Redis中的库存数量。然后,我们根据库存是否存在来更新数据库中的库存数量。在更新完数据库后,我们使用try-catch块来手动提交和回滚事务。如果发生异常,我们将回滚事务以确保数据一致性。如果没有异常发生,我们将提交事务。通过这种方式,我们可以确保数据库和Redis的数据一致性。

我连续指正两次问题,但是文心一言还是没有get到点,文心一言的知识储备是没有问题,代码本身也是可以运行,对于方法的封装、代码风格都是可圈可点,只是没有解决问题。

在与文心一言的对话中,我发现它能够生成一些经典的代码案例,这些代码案例可以解决一些常见的问题。然而,当面对一些复杂的需求时,我发现文心一言的代码能力存在一些局限性。

尽管文心一言生成的代码能够接近需求,但仍然存在一些漏洞。例如,在我们的例子中,当数据库事务回滚时,Redis 的修改并不会被回滚,这导致数据一致性问题。

我向文心一言指出了这个问题,并期待它能够进行优化。然而,在我进行第二次测试时,我发现文心一言的代码仍然存在问题。尽管在一定程度上进行了优化,但问题依然没有得到解决。

尽管文心一言在某些方面表现出色,但它并不能完全理解需求,这导致生成的代码存在一些问题。这可能是因为文心一言的知识储备主要来自于以往的案例,而无法像人类程序员那样理解和解决新的问题。

综上所述,文心一言具有一定的优势,它可以为程序员提供一定的帮助,例如查询知识、解决常见问题等。然而,它并不能完全取代程序员本身。因为计算机世界充满了不断发现和解决问题,而网络上的案例质量参差不齐。因此,对于生成的代码,程序员仍需谨慎审查,以确保代码的质量和可靠性。文章来源地址https://www.toymoban.com/news/detail-742871.html

到了这里,关于文心一言代码能力测试:文心一言能否取代程序员?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GPT3.5+文心一言+chatGLM 计算和代码生成能力简单对比

    chatGLM3刚发布(10.27),打算尝试一下其code和计算能力。 共选取三个问题,难度从中等,偏困难,到困难。测试内容是正好手头上在做的事想让LLM来完成(偷懒),之前都是直接使用GPT,这次正好对比测试一下。 测试产品包括GPT3.5、文心一言、chatGLM,均使用web端版本(1105当

    2024年02月05日
    浏览(46)
  • 真实对比kimi、通义千问、文心一言的写代码能力,到底谁强?

    🤖AI改变生活:最近都在说月之暗面的kimi的各项能力吊打国内其他大模型,今天我们真实感受下 kimi、通义千问、文心一言的根据需求写代码的能力。 测评结果让人震惊! 我们先看一下热捧的月之暗面的kimi模型。 第一次运行有错误,很正常,我们继续把错误发给kimi,让他

    2024年04月13日
    浏览(60)
  • 如何学习和提升软件测试与调试的能力?

    要学习和提升软件测试和调试能力,可以考虑以下方法: 学习软件测试基础知识: 了解软件测试的基本概念、原则和方法。可以通过阅读相关书籍、参加在线课程或培训来学习软件测试的基础知识。   掌握测试技术和工具: 了解各种测试技术,例如黑盒测试、白盒测试、功

    2024年02月11日
    浏览(45)
  • 阿里9年测试经验告诉你:作为一名年薪40w自动化测试需要具备那些能力

    前言 前段时间张同学问我说:我已经功能测试2年多了,在功能测试的阶段中也一直在自学自动化测试,有了一定的代码基础还学习了很多的工具,问题是我不知道自动化测试到底需要具备什么样的能力。 我相信有很多小伙伴也是在思索这个问题,在这里我今天以9年的自动化

    2023年04月23日
    浏览(55)
  • 测试工程师必会能力之缺陷分析入门

    缺陷分析也是测试工程师需要掌握的一个能力,但是很多时候大家只记得要提交缺陷、统计缺陷情况,而忽视了缺陷分析。 其实每个项目的缺陷记录都是有很大价值的: 在测试阶段分析当前缺陷情况,及时发现存在的问题并调整测试策略,才能降低风险和损失; 测试结束后

    2024年01月18日
    浏览(94)
  • 网工知识角:网络工程师能力测试题

    1、OSPF 路由协议中,其他条件相同的条件下,第二类外部路由永远比第一类外部路由优先。 A. 正确 B. 错误 Answer: B 2、OSPF 包括哪些报文类型?(多选) A. Hello B. Database Description C. Link State Request D. Link State DD E. Link State Advertisement Answer: ABC 3、下面哪几个参数不是配置BGP Peer 时的

    2024年02月09日
    浏览(41)
  • 【GPT4】微软 GPT-4 测试报告(7)判别能力

    欢迎关注【youcans的AGI学习笔记】原创作品,火热更新中 微软 GPT-4 测试报告(1)总体介绍 微软 GPT-4 测试报告(2)多模态与跨学科能力 微软 GPT-4 测试报告(3)编程能力 微软 GPT-4 测试报告(4)数学能力 微软 GPT-4 测试报告(5)与外界环境的交互能力 微软 GPT-4 测试报告(

    2024年02月15日
    浏览(54)
  • 【软件工程】自动化测试保证卓越软件工程能力(3)

    对照目标系统,如下:  给出自动化测试平台目标如下: Case level Case brief Report send to OVERALL User 1 - Process - Customer 1 Boss Level 1 User 1 - Process - Customer 1 User 1 - Process - Customer  2 User  2  - Process - Customer 1 ... Manager, Some users, Developers, Testers Level 2 User 1 - Igeress - Process - Router - Sender 1

    2024年02月04日
    浏览(60)
  • # [AI]多模态聚类能力助力AI完成自主意识测试

    探讨人工智能是否能形成自我意识,是一个当前AI领域一个重要而又复杂的问题。随着深度学习和强化学习技术的不断进步,计算机在视觉识别、语音识别和控制机器人等方面都已取得长足的进展,模拟和超越人类的一些低级认知功能已经不是难事。这使我们不得不重新审视机器

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包