chatgptの使用法と補助プログラミングの経験
記事ディレクトリ
1 はじめに
ここ数ヶ月で最も人気のあるものは何でしょう、それはchatgptです。中国では使用にさまざまな制限がありますが、依然として各界の熱狂を止めることはできません。ちなみに、さまざまなはしごも人気があります。国内大手メーカーもLLMを導入しており、Wen Xin Yi YanやTong Yi Qian Wenなど、LLMをベースにした質疑応答アプリケーションが続々とリリースされています。chatgpt が最初に登場したとき、私はメタバースのような概念で資本市場を狂わせるのではないかと思っていましたが、実際に触ってみると、私の考えはまったく異なりました。これは本当に革命になるでしょう。インターネットのようなもので、人々の暮らし方や働き方を変える革命なのですが、なぜそう言えるのでしょうか? なぜなら、インターネットと同様に、人々に効率の向上と機能の拡張をもたらし、人々を中毒にさせる可能性があるからです。
執筆補助、知識習得補助、デザイン補助、プログラミング補助など、chatgpt に頼り始めた方も多いと思います。本記事では補助プログラミングの観点から、chatgpt の機能を簡単に紹介します。
2 プログラミング支援の経験
ここでは、いくつかの補助的なプログラミング シナリオを簡単に紹介します。自分でプレイする方法をさらに探索できます。
2.1 コードの作成を支援する
質問: Java Swing 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 に解析され、右側のパネルにプレビューが表示されます。
コード生成に関しては、生成されたコードは基本的に、一般的な機械学習アルゴリズム、単純なロジック、およびさまざまなフレームワーク内で一般的に使用されるコードの生成に使用できます。
2.2 コードの問題を見つける
質問:
package main
myvar := 1 //error
func main() {
}
以上golang代码问题出在哪里
chatgptは次のように答えました。
2.3 コードの最適化
質問:
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 コードの説明
質問:
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 ベースのアプリケーションがあらゆる場所に普及すると私は信じています。