最近几个月什么最火,那一定时chatgpt,虽然在国内使用存在各种限制,但是还是挡不住各行各业的热情,顺便各种梯子也火了起来,国内大厂也纷纷布局LLM,先后推出了文心一言、通义千问等基于LLM的问答式应用。chatgpt刚出来时,我以为可能和元宇宙一样炒个概念,让资本市场疯狂一次,但是当我真的接触之后,想法完全不一样了,它真的会成为一次革命,一次像互联网一样,能够改变人们生活、工作方式的革命,为什么这样说?因为它像互联网一样,给人们带来的是效率的提升和能力的延展,会让人上瘾。
相信很多人已经开始依赖chatgpt了,比如协助写作、协助知识获取、协助设计、协助编程等等,本文从辅助编程的角度来简单介绍下chatgpt的能力。
这里简单介绍下几个辅助编程的场景,更多玩法可自行摸索。
提问:请帮我用java swing编写markdown编辑器
chatgpt回答:好的,以下是一个简单的Java Swing Markdown编辑器的示例代码:
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,并在右侧的面板中显示预览。
生成代码方面,对于通用机器学习算法、简单逻辑、各种框架内常用代码的生成,生成的代码基本可用。
提问:
package main
myvar := 1 //error
func main() {
}
以上golang代码问题出在哪里
提问:
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
}请对以上代码进行优化,并给出优化前后的对比
提问:
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回答:
以下是对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的应用会无处不在。