chatgpt使用及辅助编程方面的体验

chatgpt使用及辅助编程方面的体验

文章目录

  • chatgpt使用及辅助编程方面的体验
    • [1 引言](#1 引言)
    • [2 辅助编程体验](#2 辅助编程体验)
      • [2.1 辅助编写代码](#2.1 辅助编写代码)
      • [2.2 找出代码问题](#2.2 找出代码问题)
      • [2.3 代码优化](#2.3 代码优化)
      • [2.4 解释代码](#2.4 解释代码)
      • 结束语

1 引言

最近几个月什么最火,那一定时chatgpt,虽然在国内使用存在各种限制,但是还是挡不住各行各业的热情,顺便各种梯子也火了起来,国内大厂也纷纷布局LLM,先后推出了文心一言、通义千问等基于LLM的问答式应用。chatgpt刚出来时,我以为可能和元宇宙一样炒个概念,让资本市场疯狂一次,但是当我真的接触之后,想法完全不一样了,它真的会成为一次革命,一次像互联网一样,能够改变人们生活、工作方式的革命,为什么这样说?因为它像互联网一样,给人们带来的是效率的提升和能力的延展,会让人上瘾。

相信很多人已经开始依赖chatgpt了,比如协助写作、协助知识获取、协助设计、协助编程等等,本文从辅助编程的角度来简单介绍下chatgpt的能力。

2 辅助编程体验

这里简单介绍下几个辅助编程的场景,更多玩法可自行摸索。

2.1 辅助编写代码

提问:请帮我用java swing编写markdown编辑器

chatgpt回答:好的,以下是一个简单的Java Swing Markdown编辑器的示例代码:

markd 复制代码
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;
public class MarkdownEditor extends JFrame implements ActionListener {
    private static final long serialVersionUID = 1L;
    private JTextArea textArea;
    private JButton previewButton;
    private JPanel previewPanel;
    private HtmlRenderer renderer;
    private Parser parser;
    public MarkdownEditor() {
        super("Markdown Editor");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        // Initialize parser and renderer
        parser = Parser.builder().build();
        renderer = HtmlRenderer.builder().build();
        // Create toolbar
        JToolBar toolbar = new JToolBar();
        // Create preview button
        previewButton = new JButton("Preview");
        previewButton.addActionListener(this);
        toolbar.add(previewButton);
        // Add toolbar to frame
        add(toolbar, BorderLayout.PAGE_START);
        // Create text area
        textArea = new JTextArea();
        textArea.setFont(new Font("Arial", Font.PLAIN, 14));
        textArea.setForeground(Color.BLACK);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        // Add text area to scroll pane
        JScrollPane scrollPane = new JScrollPane(textArea);
        scrollPane.setPreferredSize(new Dimension(400, 400));
        // Add scroll pane to frame
        add(scrollPane, BorderLayout.CENTER);
        // Create preview panel
        previewPanel = new JPanel();
        previewPanel.setBackground(Color.WHITE);
        // Add preview panel to frame
        add(previewPanel, BorderLayout.LINE_END);
        // Set frame properties
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        // Render preview
        Node document = parser.parse(textArea.getText());
        String html = renderer.render(document);
        previewPanel.removeAll();
        previewPanel.add(new JScrollPane(new JTextArea(html)));
        previewPanel.revalidate();
        previewPanel.repaint();
    }
    public static void main(String[] args) {
        new MarkdownEditor();
    }
}

这个编辑器使用了CommonMark库来解析Markdown文本,并将其渲染为HTML。它包括一个工具栏,其中有一个预览按钮,当用户点击该按钮时,它会将Markdown文本解析为HTML,并在右侧的面板中显示预览。

生成代码方面,对于通用机器学习算法、简单逻辑、各种框架内常用代码的生成,生成的代码基本可用。

2.2 找出代码问题

提问:

复制代码
package main

myvar := 1 //error

func main() {  

}
以上golang代码问题出在哪里

chatgpt回答:

2.3 代码优化

提问:

test 复制代码
func ReadFLVTag(r io.Reader) (t byte, timestamp uint32, payload []byte, err error) {
    head := make([]byte, 11)
    if _, err = io.ReadFull(r, head); err != nil {
        return
    }
    t = head[0]
    dataSize := util.ReadBEint
    timestamp = (uint32(head[7]) << 24) | (uint32(head[4]) << 16) | (uint32(head[5]) << 8) | uint32(head[6])
    payload = make([]byte, dataSize)
    if _, err = io.ReadFull(r, payload); err == nil {
        _, err = io.ReadFull(r, head[:4])
    }
    return
}请对以上代码进行优化,并给出优化前后的对比

chatgpt回答:

2.4 解释代码

提问:

test 复制代码
func WriteFLVTag(w io.Writer, t byte, timestamp uint32, payload net.Buffers) (err error) {
    head := make([]byte, 11)
    tail := make([]byte, 4)
    head[0] = t
    dataSize := uint32(util.SizeOfBuffers(payload))
    util.PutBE(tail, dataSize+11)
    util.PutBE(head[1:4], dataSize)
    head[4] = byte(timestamp >> 16)
    head[5] = byte(timestamp >> 8)
    head[6] = byte(timestamp)
    head[7] = byte(timestamp >> 24)
    var tag = net.Buffers{head}
    tag = append(tag, payload...)
    tag = append(tag, tail)
    // Tag Data
    _, err = tag.WriteTo(w)
    return
}请对以上代码进行解释,并添加注释

chatgpt回答:

test 复制代码
以下是对WriteFLVTag函数的注释:
func WriteFLVTag(w io.Writer, t byte, timestamp uint32, payload net.Buffers) (err error) {
    // 创建长度为11的头部和长度为4的尾部
    head := make([]byte, 11)
    tail := make([]byte, 4)
    // 头部第一个字节表示标签类型
    head[0] = t
    // 数据长度为有效负载长度加上11个字节的头部长度
    dataSize := uint32(util.SizeOfBuffers(payload))
    util.PutBE(tail, dataSize+11) // 将标签长度放入尾部中
    util.PutBE(head[1:4], dataSize) // 将数据长度放入头部中
    // 时间戳占用3个字节,需要进行位移和按位或运算
    head[4] = byte(timestamp >> 16)
    head[5] = byte(timestamp >> 8)
    head[6] = byte(timestamp)
    head[7] = byte(timestamp >> 24)
    // 将头部和有效负载合并为一个net.Buffers对象
    var tag = net.Buffers{head}
    tag = append(tag, payload...)
    tag = append(tag, tail)
    // 将合并后的数据写入io.Writer中
    _, err = tag.WriteTo(w)
    return
}
这个函数的作用是将FLV标签写入一个io.Writer对象中。函数接受标签的类型、时间戳和有效负载,然后创建一个FLV标签,包括一个长度为11的头部、有效负载和一个长度为4的尾部。头部包括标签类型、数据长度和时间戳,尾部包括数据长度。然后将这个标签写入io.Writer对象中。
这个函数的核心是构建FLV标签,首先计算标签的长度和各个字段的值,然后将它们放入标签的头部和尾部。最后,将头部、有效负载和尾部合并到一个net.Buffers对象中,并将这个对象写入io.Writer中。

结束语

通过这几个月对chatgpt的使用,发现自己已经非常依赖它了,查资料用它,系统架构设计用它,写代码用它,编写文档也用它,虽然国内还没有城市的类似的产品,但是相信不久的将来基于LLM的应用会无处不在。


相关推荐
GIOTTO情22 分钟前
媒介宣发的技术革命:Infoseek如何用AI重构企业传播全链路
大数据·人工智能·重构
阿里云大数据AI技术30 分钟前
云栖实录 | 从多模态数据到 Physical AI,PAI 助力客户快速启动 Physical AI 实践
人工智能
小关会打代码38 分钟前
计算机视觉进阶教学之颜色识别
人工智能·计算机视觉
IT小哥哥呀44 分钟前
基于深度学习的数字图像分类实验与分析
人工智能·深度学习·分类
机器之心1 小时前
VAE时代终结?谢赛宁团队「RAE」登场,表征自编码器或成DiT训练新基石
人工智能·openai
机器之心1 小时前
Sutton判定「LLM是死胡同」后,新访谈揭示AI困境
人工智能·openai
大模型真好玩1 小时前
低代码Agent开发框架使用指南(四)—Coze大模型和插件参数配置最佳实践
人工智能·agent·coze
jerryinwuhan1 小时前
基于大语言模型(LLM)的城市时间、空间与情感交织分析:面向智能城市的情感动态预测与空间优化
人工智能·语言模型·自然语言处理
落雪财神意1 小时前
股指10月想法
大数据·人工智能·金融·区块链·期股
中杯可乐多加冰1 小时前
无代码开发实践|基于业务流能力快速开发市场监管系统,实现投诉处理快速响应
人工智能·低代码