解锁 GPT4 的潜能:在复杂业务开发中用好 AI

chatGpt在线2024-05-04 19:46:43130

GPT4 作为一种先进的语言生成模型,目前在聊天场景中大放异彩,很多人通过问答来解决一些简单问题。然而,在实际程序开发工作中,我们面临着错综复杂的业务需求和丰富的上下文知识。在这种情况下,简单地将所有任务交给 GPT4 处理显然是不切实际的。


那么问题来了,在这个复杂的真实业务世界里,GPT4 究竟能在哪些方面发挥作用呢?首先,我们需要理解GPT-4的核心优势和局限性。作为一种语言模型,GPT-4擅长处理和生成文本,但在处理需要深入理解和复杂推理的任务时,它可能会遇到困难。因此,我们应该聚焦于那些可以充分利用 GPT4 文本处理能力的场景。


接下来,我们将深入探讨 GPT4 在复杂业务开发中的应用场景。通过几个具体的业务例子,分析如何结合人的专业知识和 GPT4 的文本生成能力,来更高效率、更高标准的完成工作任务。这里以后台开发业务场景为例,其他前端或者算法开发,应该也能有类似的 GPT4 使用场景。


(写这篇文章的时候,GPT4 即将对所有 Plus 用户开放 Code Interpreter,到时候可以直接上传文件,让 AI 写代码并且执行,来分析数据,创建表格等。到时候 GPT4 能完成的工作会更多了,可以期待。)



命令和脚本

日常工作中,往往会遇到一些需要迅速解决的临时问题,这时候编写一些“胶水脚本”就变得不可或缺。这些脚本通常用于执行一些特定的任务,比如从庞大的日志文件中筛选出关键信息,或者对一大段文本进行批量处理。在这种情境下,GPT4 就显得格外强大和好用。


拿过滤格式化的日志来说,一般会用到 awk, grep, sort 等工具,刚开始写的话可能要去查文档看语法,比较耗时。如果交给 GPT4 的话,瞬间就能拿到想要的结果。详细可以看我之前的一篇文章 GPT4 帮忙写 sed, awk 数据处理命令,GPT4 可以帮写脚本,解释脚本,纠正错误的脚本,很是方便。


再比如有时候想把 mysql 的执行结果 dump 到一个文件中,mysql 的 client 肯定有一些参数可以完成这个工作,但是需要看文档。交给 GPT4 的话,只用提问,立马就能拿到一个可以用的命令了, GPT4 还会给你详细的参数说明,真香。


1
mysql -h [hostname/IP] -P [port] -u [username] -p[password] -D [database] -e "SELECT * FROM [table]" | sed 's/\t/,/g' > output.csv


此外,基本每个后台都会写点 shell 脚本,但 shell 的语法并不那么直观好记,经常需要去边搜索边写。用 GPT4 的话就简单多了,比如可以这样向 GPT4 提需求:


我有一个 csv 文件,里面有两列,name, age, 帮我写一个 shell 脚本,循环读每一行,然后发一个post 请求到 http://demo.com?n=name&a=age ,并且如果请求返回不是 200,打印这一行的内容。


很快就能拿到一个不错的 shell 脚本了:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
# CSV 文件路径
FILE_PATH="path_to_your_csv_file.csv"

# 读取 CSV 文件的每一行
while IFS=, read -r name age; do
# 发送 POST 请求
response=$(curl -s -o /dev/null -w "%{http_code}" "http://demo.com?n=$name&a=$age")

# 检查 HTTP 响应代码是否为 200
if [ "$response" -ne 200 ]; then
# 如果响应代码不是 200,则打印这一行的内容
echo "Failed row: name=$name, age=$age"
fi
done < <(tail -n +2 "$FILE_PATH") # 跳过 CSV 文件的标题行


除了上面的脚本工作,开发中也会用 Excel 处理一些简单数据。Excel 的功能太过强大,没有深入学习的话,还是很难用的好。比如有一个简单的对比去重任务,在一个 Excel 中,有两列数据,P 和 U,找到所有在 P 和 U 都有的列,然后删除对应的行。交给 GPT4 来完成的话,就很简单,一步步傻瓜式跟着操作就行。



解释、优化代码

虽然 GPT4 还没法理解大型项目的复杂业务逻辑,但是可以用来阅读一小部分代码,解释代码的作用,甚至可以用来优化代码,或者翻译成另一种语言的代码。


解释代码

我们以 Clickhouse 的 CurrentMetrics.cpp 为例。这个类用来统计当前 clickhouse 中的一些观测指标,比如正在执行的 queries 等。但是它的实现用到了宏,看起来有点难懂,可以直接询问 GPT4 实现细节。


GPT4 对这段代码的总体解释如下:


这段代码似乎是一个度量收集系统的一部分,它定义了一系列度量,每个度量都有一个名称和文档字符串,并使用原子变量存储度量值。这可能是一个性能监控或诊断工具的一部分。


对于一些实现细节也有不错的解释,比如


1
2
#define M(NAME, DOCUMENTATION) extern const Metric NAME = Metric(__COUNTER__); 
// 这一行定义了一个宏M,它接受两个参数NAME和DOCUMENTATION,并定义一个外部常量NAME,其类型为Metric,值为Metric(__COUNTER__)。这里的__COUNTER__是一个预处理器宏,它表示这个宏每次展开时的递增整数。


翻译代码

另一个常见的开发场景就是,可能项目用 js 实现了一个计算过程,后来需要用 go 语言实现同样的计算过程。这时候就需要用 go 重写之前的 js 代码,人工来写的话比较费时,这种翻译工作恰恰是 GPT 很擅长的。比如下面这段 js 代码:


1
2
3
4
5
6
7
8
9
10
11
function encrypt(str) {
if (typeof str === 'number') {
str = str.toString();
}
if (typeof str !== 'string') {
return str;
}
const strMd5 = crypto.createHash('md5').update(str).digest('hex');
let result = strMd5.substr(0, 4);
return result
}


GPT4 翻译后的 golang 代码如下, 这里不只翻译了这个函数,还提供了完整的测试代码,可以拿来直接用。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

import (
"crypto/md5"
"encoding/hex"
"fmt"
"strconv"
)

func encrypt(input interface{}) string {
switch v := input.(type) {
case int:
input = strconv.Itoa(v)
case float64:
input = strconv.FormatFloat(v, 'f', -1, 64)
case string:
hasher := md5.New()
hasher.Write([]byte(v))
strMd5 := hex.EncodeToString(hasher.Sum(nil))
return strMd5[:4]
default:
return fmt.Sprintf("%v", input)
}
return ""
}

func main() {
fmt.Println(encrypt("hello")) // Example usage with a string
fmt.Println(encrypt(12345)) // Example usage with a number
fmt.Println(encrypt(true)) // Example usage with a non-string, non-number
}


优化代码

除了可以用来解释、翻译代码,GPT4 做重构优化也是很厉害的。看下面的一段 python 代码,if 分支写了一堆,不太优雅。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql -h [hostname/IP] -P [port] -u [username] -p[password] -D [database] -e "SELECT * FROM [table]" | sed 's/\t/,/g' > output.csv
1


可以让 GPT4 来,简单提示词:”优化下面的代码实现,去掉这里的分支,并且使代码更好扩展“。就能得到一个更好的代码实现,如下所示。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql -h [hostname/IP] -P [port] -u [username] -p[password] -D [database] -e "SELECT * FROM [table]" | sed 's/\t/,/g' > output.csv
3


如果对这个代码不满意,可以继续让它优化。比如下面这样提示 “可以换一种实现,用一些二分查找的库来实现“,于是又得到一个用到 bisect 模块的写法。Python的 bisect 模块提供了对有序列表进行二分查找的支持,当阈值列表很大时,查找更加高效。新的优化实现如下:


1
2
3
4
5
6
7
8
9
10
11
12
mysql -h [hostname/IP] -P [port] -u [username] -p[password] -D [database] -e "SELECT * FROM [table]" | sed 's/\t/,/g' > output.csv
5


生成测试代码

写测试用例是一个费心费力费时间,但是又没有成就感的事情。有了 GPT4,写测试会变得舒服多了,我们只用提供代码实现,然后就可以让 GPT4 来写各种测试用例。比如我在印象笔记导入 notion 的项目 html2notion 中,需要判断一个 url 是不是合法的,于是有了下面的实现:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql -h [hostname/IP] -P [port] -u [username] -p[password] -D [database] -e "SELECT * FROM [table]" | sed 's/\t/,/g' > output.csv
7


然后就可以让 GPT4 生成 pytest 的测试用例了,如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql -h [hostname/IP] -P [port] -u [username] -p[password] -D [database] -e "SELECT * FROM [table]" | sed 's/\t/,/g' > output.csv
9


这里使用 pytest.mark.parametrize装饰器为 is_valid_urlis_valid_port 函数提供了多个测试用例。是不是很方便,不用自己编码了,拿来就能直接用。


展望

随着AI基础模型的不断发展和进步,我们可以预见,在不久的将来,AI有潜力替代日常开发中的大部分工作。这不仅能大大提高开发效率,还能为开发人员提供更多的空间去关注更加复杂和创新性的任务。


目前市面上已经出现了一些令人瞩目的开源项目,如AutoGPT,只需简洁地描述他们的需求,AutoGPT 就会自动收集相关资料,进行深入的推理分析,编写高效的代码,并执行这些代码。这一切都在 GPT4 的帮助下完成,无需过多的人工干预。


这还是只刚出道没多久的 GPT4,等后面 GPT5,GPTX 出来,会是一番怎么样的场景,真让人期待。最后放一张微软的 AI 发展历程的一个手绘图片,等待更强大的 AI 的到来。


本文链接:https://www.joeyce.com/chatgpt/79.html

相关文章

网友评论