大模型时代,程序员如何卷?

news2024/11/19 22:47:47

最近在看电影《碟中谍7》,该片讲述了特工伊森·亨特尝试与一个被称为智体的全能人工智能作战,其可以即时访问任何在线网络,他和他的团队成员试图找回控制人工智能智体所必需的两部分钥匙并将其摧毁的故事。
在这里插入图片描述
在剧中,智体是一个虚拟反派。人们看不到智体,但电子设备遍布每个角落。影片中,欧美各国的军事、经济系统防火墙被智体轻松攻破,它来去自由。智体以超乎想象的运算能力,站在了网络世界制高点。它可以任意干扰伊森·亨特(汤姆·克鲁斯 饰)行动小组的通讯,肆意侵入小组成员的电脑,即使这些成员是一流的电脑天才也无计可施。人类在网络世界中面对智体,不堪一击。

在这里插入图片描述
在这里插入图片描述
过去,这些只存在电影里的科幻情节,随着大模型的发展,正在进入现实世界。

大模型是指具有大规模参数和复杂计算结构的机器学习模型。这些模型通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数。大模型的设计目的是为了提高模型的表达能力和预测性能,能够处理更加复杂的任务和数据。大模型在各种领域都有广泛的应用,包括自然语言处理、计算机视觉、语音识别和推荐系统等。大模型通过训练海量数据来学习复杂的模式和特征,具有更强大的泛化能力,可以对未见过的数据做出准确的预测。

ChatGPT 对大模型的解释更为通俗易懂,也更体现出类似人类的归纳和思考能力:大模型本质上是一个使用海量数据训练而成的深度神经网络模型,其巨大的数据和参数规模,实现了智能的涌现,展现出类似人类的智能。

那么,大模型和小模型有什么区别?

小模型通常指参数较少、层数较浅的模型,它们具有轻量级、高效率、易于部署等优点,适用于数据量较小、计算资源有限的场景,例如移动端应用、嵌入式设备、物联网等。

而当模型的训练数据和参数不断扩大,直到达到一定的临界规模后,其表现出了一些未能预测的、更复杂的能力和特性,模型能够从原始训练数据中自动学习并发现新的、更高层次的特征和模式,这种能力被称为“涌现能力”。而具备涌现能力的机器学习模型就被认为是独立意义上的大模型,这也是其和小模型最大意义上的区别。

相比小模型,大模型通常参数较多、层数较深,具有更强的表达能力和更高的准确度,但也需要更多的计算资源和时间来训练和推理,适用于数据量较大、计算资源充足的场景,例如云端计算、高性能计算、人工智能等。

在这里插入图片描述
对于程序员来说,现在不了解大模型,很有可能要被淘汰了。

最近在玩百度的”Baidu Comate智能编码助手“,就发现,未来已来。

在这里插入图片描述
代码生成、注释、对话提问、代码解释,看上去很强,有他,大部分的重复性编码工作都可以快速完成了,生产力直线上升。我直接去官网注册了一个账号,试试水。有需要的小伙伴自取:https://comate.baidu.com/

在这里插入图片描述

下载完插件,重启IDE后,点击右边侧边栏登录。
在这里插入图片描述
登录成功。
在这里插入图片描述
官方介绍说,comate很会coding。我于是找了几道leetcode。

先来一道二分查找。

在这里插入图片描述

对于comate来说,这么简单的题目自然不在话下。
在这里插入图片描述

小小代码,拿下。

在这里插入图片描述

不过这种题目,百度也可以解决。我又找了一道难度高一点的。这是一道某书真题。

小红在刷小x书的时候看到了一颗挂着小红薯的小红树,所以小红也想种一颗小红树挂一些小红薯发小x书。

小红有一颗树,每个结点有一个权值,初始时每个节点都是白色。小红每次操作可以选择两个相邻的结点,如果它们都是白色且权值的和是质数,小红就可以选择其中一个节点染红。

小红想知道最多可以染红多少个节

AI给出了他的解题思路。
在这里插入图片描述

接下来,让他帮我们实现下代码。下面是AI给出的解答。

在这里插入图片描述
完整代码

import java.util.*;

public class Main {
    static class Node {
        int val;
        List<Node> neighbors = new ArrayList<>();
        boolean isRed = false;

        Node(int val) {
            this.val = val;
        }
    }

    static boolean isPrime(int num) {
        if (num <= 1) return false;
        for (int i = 2; i * i <= num; i++) {
            if (num % i == 0) return false;
        }
        return true;
    }

    static int maxRedNodes(Node root) {
        if (root == null) return 0;
        return dfs(root, null);
    }

    static int dfs(Node node, Node parent) {
        if (node == null) return 0;
        int maxRed = 0;
        for (Node neighbor : node.neighbors) {
            if (neighbor == parent) continue;
            maxRed += dfs(neighbor, node);
            if (!node.isRed && !neighbor.isRed && isPrime(node.val + neighbor.val)) {
                int redBefore = maxRed;
                node.isRed = true; // Try to paint the node red
                maxRed = Math.max(maxRed, 1 + redBefore - dfs(neighbor, node) + dfs(neighbor,
                                  node));
                node.isRed = false; // Backtrack
                neighbor.isRed = true; // Try to paint the neighbor red
                maxRed = Math.max(maxRed, 1 + redBefore - dfs(neighbor, node) + dfs(neighbor,
                                  node));
                neighbor.isRed = false; // Backtrack
            }
        }
        return maxRed;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); // Number of nodes
        Map<Integer, Node> nodes = new HashMap<>();
        for (int i = 0; i < n; i++) {
            int val = scanner.nextInt();
            nodes.put(i + 1, new Node(val)); // Assuming nodes are numbered from 1 to n
        }
        for (int i = 0; i < n - 1; i++) {
            int u = scanner.nextInt();
            int v = scanner.nextInt();
            nodes.get(u).neighbors.add(nodes.get(v));
            nodes.get(v).neighbors.add(nodes.get(u));
        }
        System.out.println(maxRedNodes(nodes.get(1))); // Assuming the root is node 1
    }
}

自测通过
在这里插入图片描述
这既是一个好消息,又是一个坏消息。对码农来说,算法很难,对大模型来说,so easy,那么,程序员的价值何在?

没关系,你还可以搬砖。起码,目前是这样。

测试全部用例,发现上述代码的时间复杂度过高。

在这里插入图片描述
这时候,你可以修改你的提示词,让他更具体。请comate给我们一个性能更优的解法。

在这里插入图片描述
全新解法如下:

import java.util.*;

public class RedTree {
    static class TreeNode {
        int val;
        List<TreeNode> children = new ArrayList<>();
        boolean isRed = false;
    }

    static int maxRedNodes = 0;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); // 节点数量
        TreeNode[] nodes = new TreeNode[n + 1];
        for (int i = 1; i <= n; i++) {
            nodes[i] = new TreeNode();
            nodes[i].val = scanner.nextInt(); // 节点权值
        }
        for (int i = 1; i < n; i++) {
            int u = scanner.nextInt();
            int v = scanner.nextInt();
            nodes[u].children.add(nodes[v]);
            nodes[v].children.add(nodes[u]); // 无向边,所以双向添加
        }
        scanner.close();

        dfs(nodes[1], null); // 从节点1开始遍历,假设节点1是根节点
        System.out.println(maxRedNodes);
    }

    public static int dfs(TreeNode node, TreeNode parent) {
        int redCount = 0;
        for (TreeNode child : node.children) {
            if (child == parent) continue; // 避免回到父节点
            redCount += dfs(child, node); // 递归处理子树
        }
        if (parent != null && !node.isRed && !parent.isRed && isPrime(node.val + parent.val)) {
            // 如果当前节点和父节点都是白色且它们的权值和是质数,则可以选择一个节点染红
            node.isRed = true; // 选择当前节点染红
            redCount++; // 增加染红节点计数
        }
        maxRedNodes = Math.max(maxRedNodes, redCount); // 更新最大染红节点数
        return redCount;
    }

    public static boolean isPrime(int num) {
        if (num <= 1) return false;
        for (int i = 2; i * i <= num; i++) {
            if (num % i == 0) return false;
        }
        return true;
    }
}

Comate真牛逼!!!

在这里插入图片描述
大模型还给出了详细的解题思路。

这个问题可以通过深度优先搜索(DFS)或广度优先搜索(BFS)遍历所有可能的染色方案来解决,但考虑到题目中的时间限制和可能的效率问题,我们需要一个更优化的算法。我们可以观察到,如果我们将树转换为以任意节点为根,那么对于任意一对相邻节点,我们总是可以选择其中一个来染色(如果它们的权值和是质数),这给我们提供了一个优化的思路。

我们可以自底向上地处理树,对于每个节点,先处理其所有子树,然后检查当前节点是否可以与其父节点一起被染色。在这个过程中,我们需要记录每个节点为根的子树中最多可以染红多少个节点,以及这个节点是否已经染红。

由于题目没有明确指出树的形状如何输入,我将假设输入的是一个树的边和节点的权值,并通过邻接表来表示树。

甚至贴心的给出了注意事项。
在这里插入图片描述
这简直就是刷算法题的神奇啊!!!

更牛的是,你不懂,还可以要求他给你慢慢解释。

除了算法题以外,小小笔试题他也不在话下。

在这里插入图片描述

就问你能不能吊打面试官?

在这里插入图片描述
除了作为刷题神器,comate最主要的还是帮我们提升工作效率。它可以帮你轻松研读别人的“屎山代码”。甚至帮你写注释、优化代码!

在这里插入图片描述
除此之外,他还能帮你写测试用例。

在这里插入图片描述
再不会用它,你真的会失业的好吗?

在这里插入图片描述
comate下载链接,快拿去:https://comate.baidu.com/

接下来再给小伙伴们总结下,怎么去写提示词。

(1)结构化
首先需要强调的是,并不是所有提示词都要写的这么“复杂”,对于简单的任务可以写的更“随意”一些。通常来说,越是复杂的任务提示词越详细,越是简单的任务提示词越简单。

提示词的本质就是通过语言将模型要做的事情交代清楚,是一种“语言的艺术”,换句话说:提示词写不好说明你语文不好。

想要模型更好地理解你的意图,就需要将提示词“结构化”。这里所说的结构化并不是经典的“金字塔原理”,而是遵循优秀的 Agent 范式。

根据官方材料:总结出来的一个范式。包括概述、过程、依赖和控制四大部分。

概述:在什么背景下,要做一件什么事;可以指明用户或 AI 的角色是什么。
过程:承担什么样的智能,满足什么样的规则,按照什么样的流程。
依赖:使用什么样的工具,用到哪些知识,处理哪些素材?
控制:对模型的处理过程有哪些要求,包括正向和负向的要求。

(2)加分割符
在提示词中合理添加分隔符,可以准确区分指令和待处理的内容,避免模型解读提示词时出现困扰。
常见的分隔符包括:```、— 、=== 等

(3)加示例
有时候,为了让模型更好地理解你的意图避免歧义,可以更精确地控制模型的输出,需要在提示词中给出一些示例。

(4)加要求
我们在使用模型过程中会出现各种 Bad Case,为了引导模型按照我们想要的结果输出,为了规避这些 Bad Case ,可以在提示词中加入要求。

(5)给出步骤
有些相对复杂一点的任务,需要在提示词中给出处理步骤,用来指导模型按照你的意图来输出信息。

(6)用户输入完整性检查
可以在提示词中设定用户必须给出的一些关键信息,如果用户在对话中没有给出,模型可以主动询问用户让用户进行补充,补充完整之后再继续执行。

(7)自带知识库
对于非通用的知识或和常识相违背的知识,大模型可能不理解相关概念,容易产生误解。可以在提示词中给出知识库,让模型更加清楚得理解相关知识,从而,更好地处理任务。

拓展阅读:
AI大神吴恩达教你写提示词:https://zhuanlan.zhihu.com/p/626290417
提示词工程指南:https://www.promptingguide.ai/zh
大模型思维链技术原理:https://www.zhihu.com/tardis/zm/art/629087587?source_id=1003

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1663723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日本住宅IP:安全、高效的新选择

在信息化社会&#xff0c;网络已成为人们工作、生活不可或缺的一部分。而IP地址&#xff0c;作为网络中的身份证&#xff0c;其重要性不言而喻。近年来&#xff0c;随着跨境业务、网络安全需求以及个人隐私保护意识的增强&#xff0c;日本住宅IP代理逐渐进入人们的视野&#xf…

Nginx Location配置详解

目录 一、Location语法结构1、语法结构说明2、各个标识的含义和优先级3、配置请求的根目录4、替换请求的uri 二、Location具体示例1、精确匹配2、正则匹配3、常规字符串匹配 三、调试Location的小技巧 一、Location语法结构 1、语法结构说明 在Nginx官方文档中定义的location…

大型动作模型 (LAM):AI 驱动的交互的下一个前沿

1.概述 现在人工智能中几个关键的领域&#xff0c;包括生成式人工智能&#xff08;Generative AI&#xff09;、大型动作模型&#xff08;Large Action Models, LAM&#xff09;、以及交互式人工智能&#xff08;Interactive AI&#xff09;。以下是对这些概念的简要解释和它们…

zabbix“专家坐诊”第238期问答

问题一 Q&#xff1a;请问一下 zabbix 如何监控服务器端口的出和入流量?就类似iftop这样的。 A&#xff1a;可以用snmp去监控。 问题二 Q&#xff1a;各位有什么工具能导出zabbix主机列表成execl格式吗&#xff1f; A&#xff1a;进mysql&#xff0c;到hostid&#xff0c;然…

docker runc升级1.1.12

上传runc-1.1.12制品至中控机 874e970eaa932a97de9888344ae08f24 runc.arm64 将所有节点的runc文件备份 所有节点(包括master+node) vim host [all] 10.1.0.183 ansible_password=Bigdata@Ksyun123 ansible_user=root ansible_port=22 10.1.0.249 ansible_password=Bigdata…

大模型常用微调数据集

文章目录 指令微调数据集人类对齐数据集 为了增强模型的任务解决能力&#xff0c;大语言模型在预训练之后需要进行适应性微调&#xff0c;通常涉及两个主要步骤&#xff0c;即指令微调&#xff08;有监督微调&#xff09;和对齐微调。 指令微调数据集 在预训练之后&#xff0c…

RobbitMQ基本消息队列的消息发送过程

RabbitMQ: One broker to queue them all | RabbitMQ RabbitMQ官网 SpringAmqp的官方地址&#xff1a;Spring AMQP 代码示例:对着代码看应该能看明白 publisher:消息发送者的代码示例 package cn.itcast.mq.helloworld;import com.rabbitmq.client.Channel; import com.rabb…

从技术到管理:做了项目经理之后我明白了这几件事

自从我踏入项目管理这个领域&#xff0c;成为了一名项目经理&#xff0c;我深感这个角色与之前纯粹做技术时是不同的。 一、技术与项目管理的鸿沟 我曾是一名技术人员&#xff0c;那时的问题明确&#xff0c;解决方案也相对直接。然而&#xff0c;当我成为项目经理后&#x…

uniapp下拉选择组件

uniapp下拉选择组件 背景实现思路代码实现配置项使用尾巴 背景 最近遇到一个这样的需求&#xff0c;在输入框中输入关键字&#xff0c;通过接口查询到结果之后&#xff0c;以下拉框列表形式展现供用户选择。查询了下uni-app官网和项目中使用的uv-ui库&#xff0c;没找到符合条…

水表智能抄表系统是什么?

水表智能抄表系统是一种现代化水资源保护专用工具&#xff0c;它利用先进的物联网、云计算和大数据剖析&#xff0c;完成了智能抄表、实时监控系统、数据分析等作用&#xff0c;大大提高了水务管理的效率和精确性。 1.功能特点 1.1远程控制自动抄表 传统水表抄水表方法采用人…

Fcos源码训练编译问题

训练fcos代码时出现问题 ImportError: cannot import name ‘_C’ 原因是没有对代码进行编译 运行python setup.py develop --no-deps进行代码编译 编译过程中出现报错&#xff1a; fcos_core/csrc/cuda/ROIAlign_cuda.cu:5:10: fatal error: THC/THC.h: No such file or dire…

Linux学习笔记7---仿STM32自建寄存器库

为了开发方便&#xff0c;ST 官方为 STM32F103 编写了一个叫做 stm32f10x.h 的文件&#xff0c;在这个文件里面定义了 STM32F103 所有外设寄存器。而有些芯片是没有这种寄存器库的&#xff0c;在没有的情况下要学会自己建立一个寄存器库。NXP 官方并没有为 I.MX6UL 编写类似 st…

半小时搞懂STM32面经知识——GPIO

1.GPIO 1.1 什么是GPIO&#xff1f; 通用输入输出端口&#xff0c;用于与外设进行数字信号通信。 1.2 GPIO有几种工作模式&#xff1f;请描述它们各自的特点和用途 输入输出各有四种 输入&#xff1a;浮空&#xff0c;上拉&#xff0c;下拉&#xff0c;模拟 输出&#xff1…

N1077B keysight 是德 光/电时钟恢复设备,参数

Keysight N1077B是一款光/电时钟恢复设备&#xff0c;支持115 MBd至24 GBd的数据速率范围&#xff0c;适用于多模和单模光信号以及电信号。该设备能够处理PAM4和NRZ两种类型的数据信号&#xff0c;并提供符合标准的时钟恢复功能。 型 号&#xff1a;N1077B/A 名 称&#xff1a…

Python自动化测试面试题 —— Selenium篇!

Selenium中有几种等待 隐形等待/智能等待 dr.implicitly_wait() 显性等待 WebDriverWait 强制等待 time.sleep() Selenium中有哪些定位方式 8种 tag 三大基本属性 id/name/class_name 链接 link text/partial link text 高级 css selector/xpath 弹框怎么处理 4种弹…

论文精读-Transformer(Attention is All You Need)

文章目录 论文精读-Transformer&#xff08;Attention is All You Need)1.Transformer 整体结构2. Transformer 的输入2.1 单词 Embedding2.2 位置 Embedding 3. Self-Attention&#xff08;自注意力机制&#xff09;3.1 Self-Attention 结构3.2 Q, K, V 的计算3.3 Self-Attent…

Android NDK开发(一)生成指定平台的ndk及根据native接口生成jni接口

为了初步了解Android NDK开发&#xff0c;本文记录了Android Studio使用过程中的部分内容。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习&#xff0c;梳理总结后写下文章&#xff0c;对音视频相关内容感兴趣的读者&#xff0c;可以点击观看课程…

Android Studio(AS)使用别人的项目与gradle包并运行项目

一、问题描述 在进行AS开发时&#xff0c;我们可能会使用到别人的项目&#xff0c;但发现别人把项目发给我们后会发现gradle项目同步失败o(≧口≦)o&#xff0c;此时计有三&#xff1a; 1.横行霸道、豪取抢夺&#xff1a;直接空降到项目人那里&#xff0c;强他的电脑占为己有…

在 Navicat 17 创建一个数据字典

即将于 5 月 13 日发布的 Navicat 17&#xff08;英文版&#xff09;添加了许多令人兴奋的新功能。其中之一就是数据字典工具。它使用一系列 GUI 指导你完成创建专业质量文档的过程&#xff0c;该文档为跨多个服务器平台的数据库中的每个数据元素提供描述。在今天的博客中&…

微信小程序开发【Coffee Shopping】(1)

1.环境准备 微信开发者工具&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 前端常用网站集合&#xff1a;http://www.wwp666.cn/ 微信小程序开发文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/quicksta…