第7章 提示工程在软件开发领域的应用
7.1 用 ChatGPT 帮助写代码
代码生成是指使用自动化工具和技术,根据指定的输入规则和要 求,生成相应的计算机代码。这种自动生成代码的技术在各个领域都 有广泛的应用,尤其在软件开发、数据分析、人工智能等领域中更加常见。
在软件开发领域,代码生成可以帮助开发人员快速创建模板代码、 重复性的代码,从而提高开发效率。在数据分析领域,代码生成可以 根据数据分析结果自动生成相应的数据处理代码。在人工智能领域, 代码生成可以帮助机器学习模型自动生成相应的代码,以实现更高效的模型构建和测试。
通过代码生成,提高代码的质量,减少错误和重复性的工作,从而缩短开发时间,提高开发效率。此外,代码生成也可以提高代码的 可读性、可维护性和可扩展性,帮助开发人员更好地管理和维护代码库。
ChatGPT 在代码生成中的应用可以通过输入关键词、选择编程语言、生成代码等步骤来实现。具体步骤如下。
① 输入关键词。用户可以根据需求输入关键词,例如,“生成随机 数列表”“读取 CSV 文件”等。关键词的准确性和清晰度将对生成的代码质量产生重要的影响。
③ 生成代码。根据用户输入的关键词和选择的编程语言,ChatGPT 可以生成对应的代码。用户可以对生成的代码进行调整和优化,以满足自己的需求。
接下来,我们看一个具体的例子。例如,我们在ChatGPT 中输入如下内容。
利用 Python编程语言生成一个随机序列,并且实现一个排序算法。
ChatGPT 输出如下内容。
生成随机序列可以使用 Python 内置的 random 模块。排序算法可以使用经典的冒泡排序算法。
以下是示例代码。
import randon
#生成一个包含10个随机整数的列表
random_list = [random.randint(1,100) for i in range(10)]
print(" 随机序列:", random_list)
# 冒泡排序算法
def bubble_sort(array):
n =len(array)
for i in range(n):
for j in range(n-i-1):
if array[j] >array[j+1]:
array[j],array[j+1] =array[j+1],array[j]
return array
#对随机序列进行排序
sorted_list =bubble_sort(random_list)
print("排序结果:", sorted_list)
以上代码使用Python 编程语言内置的 random.randint 函数来生成 10个范围在1~100的随机整数,并使用冒泡排序算法对序列进行排序。输出结果如下。
随机序列:[90,49,57,60,51,24,48,9,38,83]
排序结果:[9,24,38,48,49,51,57,60,83,90]
上述输出结果非常神奇——ChatGPT可以帮助用户写代码。可能 我们会觉得这种基础代码在现实中并不会用到,我们也可以让ChatGPT 写一段项目代码。例如,我们希望读取数据库中的新闻文本数据,然后对相应的数据进行分析。我们可以在 ChatGPT 中输入如下内容。
ChatGPT 输出如下内容。
以下是一段示例代码,可以实现从 MySQL 数据库读取新闻文本、 识别股票名称、进行情感分类,并输出对应的公司名称和情感分类。 需要安装 Pandas、PyMySQL、Jieba、SnowNLP 等库。
import pandas as pd
Import pymysql
import jieba
From snownlp import SnowNLP
MySQt(host='localhost',user='root',
password='password',database='news', charset='utf8mb4')
sql='SELECT *FROM news'
Df =pd.read_sql(sql,conn)
conn.close()
#识别股票名称
stock_list =[ '腾讯' ,'阿里巴巴','美团','百度','京东','华为', '小米',‘苹果','微软','谷歌’,‘亚马逊']
company_sentiment_dict ={}
For index,row in df.iterrows():
tnlro'wti[t'n']tent']
Keywords =jieba.lcut(title +content,cut_all=False)
Companies =[stock for stock in stock_list if stock in keywords]
# 进行情感分类
s = SnowNLP (content)
sentiment = s . sentiments
if sentiment > 0.5:
sentiment _ label = 'positive'
elif sentiment < 0.5:
sentiment _ label = 'negative'
else:
sentiment _ label = 'neutral'
#输出对应的公司名称和情感分类
for company in companies:
if company not in company _ sentiment_dict:
company _ sentiment _ dict [company] = {'positive ':0,' negative ':0,' neutral ':0}
company _ sentiment _dict [ company][sentiment _ label] += 1
for company , sentiment
print (company_dict+':'+
in company _ sentiment
str (sentiment _dict
_dict . items ():
))
这段代码首先从名为“news”的MySQL数据库中读取新闻文本,并使用Jieba库识别其中的股票名称。然后,对每段文本进行情感分类,并将其与对应的股票名称关联。最后,输出每个公司的情感分类结果。
ChatGPT 很快生成了代码。如果你对这段代码不满意,那么也可 以直接对其进行修改。例如,目前的公司名字直接放到 stock_list 列表中并不合适,如果我们希望从数据库中读取这个变量,那么可以再次在 ChatGPT中输入如下内容。
将上面这行代码修改为从 MySQL 数据库读取公司名字,ChatGPT 输出如下内容。
假设数据库中有一张名为“company” 的表,包含一个名为“name” 的列,其中存储了公司名字信息。可以使用Python 的 pymysql 库连接到 MySQL 数据库,并执行SQL 语句来读取公司名字信息,例如:
import pymysql
# 连 接 MySQL 数据库
conn =pymysql.connect(
host='localhost',
port=3306,
user='root',
password='123456'
database='mydatabase'
#读取公司名字信息
cursor =conn.cursor()
x)FROM company')
#将结果转换为列表
stock_list = [result[0] for result in results]
上述代码首先使用PyMySQL 库连接到 MySQL 数据库,然后执行 SQL语句 “SELECT name FROM company”, 并使用 fetchall()方法获取查询结果。最后将结果转换为列表 stock list, 其中每个元素为一个公司名字。
这样我们就对特定的代码进行了改写。如果我们希望对代码进行转写,也就是从一种编程语言转换成另一种编程语言,那么这个工作 交给ChatGPT也是非常合适的。例如,如果我们需要将上面的代码转换成 Go 语言代码,那么可以在 ChatGPT 中输入如下内容。
将下面的 Python 语言代码转换成 Go 语言代码:
import pymysql
# 连 接 MySQL 数据库
conn =pymysql.connect(
host='localhost',
port=3306,
user='root',
password='123456',
database='mydatabase'
)
#读取公司名字信息
cursor =conn.cursor()
)FROM company')
#将结果转换为列表
stock_list= [result[0] for result in results]
ChatGPT 输出如下内容。
以下是Go 语言的代码翻译版本:
package main
import (
"database/sql"
"fmt"
"github.com/go-sql-driver/mysql"
func main (){
//连接 MySQL 数据库
db, err:=sql. Open (" mysql "," root :123456@ tcp (localhost :3306)/
mydatabase")
if err != nil {
panic ( err. Error ())
defer db . Close ()
//查询公司名字信息
rows , err := db . Query (" SELECT name FROM company")
if err != nil {
panic ( err. Error ())
defer rows . Close ()
//将结果转换为列表
var stock_ list []string
for rows. Next (){
var name string
err = rows . Scan (&name)
if err != nil {
panic ( err . Error ())
stock _list = append (stock _list , name)
//输出结果
fmt . Println ( stock_ list)
注意:安装Go 语言之前,需要先安装Go 语言的 MySQL驱动程 序“go-sql-driver”.
ChatGPT 在代码生成中的优点很多,具体如下。
● 提高效率。 自动生成代码可以大大缩短开发人员手动编写代码的时间,提高工作效率。
● 减少错误。由于自动生成的代码是基于模型学习而来的,因此可以减少人为导致的错误。
● 增强灵活性。可以根据不同的输入关键词生成不同的代码,增强代码的灵活性。
虽然 ChatGPT 拥有很多的优点,但是ChatGPT 在代码生成中存在一定的局限性,具体如下。
● 生成结果的准确性有时难以保证。由于代码生成是基于模型学习得到的,因此生成结果的准确性有时难以保证。
● 存在语义理解的限制。 由于自然语言和编程语言之间存在差 异,因此模型可能会对输入语句理解不准确,生成的代码不符合预期。
● 缺乏领域知识。模型缺乏特定领域的知识和经验,可能导致生成的代码无法满足特定领域的需求。
为了提高生成结果的准确性和流畅度,可以通过以下方式进行优化。
● 增加训练数据。通过增加训练数据,提高模型对不同场景下的理解能力,进而提高生成结果的准确性。
● 改进模型结构。优化模型结构,增加模型的深度和宽度,提高模型的泛化能力,减少过拟合的情况。
● 结合领域知识。通过引入领域专家的知识和经验,帮助模型更好地理解特定领域的语义和逻辑。
ChatGPT 在代码生成领域的应用不断增多,未来的发展趋势如下。
● 结合代码模板和规则。尽 管ChatGPT 具有强大的自然语言处 理能力,但是在生成代码时还需要遵循一定的代码规则和模 板,以确保生成的代码符合语法和逻辑。因此,未来的发展趋 势之一是将 ChatGPT 与代码模板和规则相结合,从而提高生 成的准确性和可读性。
● 增加训练数据。 由于ChatGPT 的生成结果受到训练数据的影 响,因此随着越来越多的代码生成数据集的发布和使用,未来 的发展趋势之一是增加训练数据来提高生成结果的质量。
● 结合其他技术和工具。除 ChatGPT 之外,许多其他的自然语 言处理技术和代码生成工具也可以用于生成代码。未来的发展 趋势之一是将这些技术和工具结合起来,以提高生成效率和代 码的准确性。例如,可以结合代码注释生成工具,通过自动生 成注释提高代码的可读性和可维护性。
● 面向特定领域的模型训练。在某些特定领域中,代码生成的需 求比其他领域更加复杂和具体化。因此,未来的发展趋势之一 是针对特定领域开展模型训练,以生成更加符合实际需求的代 码。例如,针对机器学习领域,可以训练一个专门生成机器学习算法的模型。
综上所述, ChatGPT 在代码生成领域的应用还有很大的发展空间,未来 ChatGPT将会结合代码模板和规则以及其他技术和工具,通过增 加训练数据,面向特定领域进行模型训练等提高生成效率和代码的准确性。