一、絮絮叨叨
用 GPT 辅助编程是啥体验?用 DevChat 辅助编程是啥体验?体验就是,每天和这货聊聊天,事件就干完了,你看:
每天上午睡懒觉,中午睡午觉,下午醒来就和 DevChat 唠唠嗑,而后这货就帮我写了几百行代码。
赶在上班前一个提交,
老板还得夸我效率高,
“辛苦辛苦,写这么多!”
今日个早起了吧?
中午忘了劳动吧?
累坏身材可不行,
早点上班,回家吧~
(呵,可能让老板晓得这个“秘密武器”,不然得给我派三个人的活!)
1.1 缘起
四月底的一个早上,CEO 拉我开了一个 1-1 的会。
- 他问:“胡涛,你怎么看 ChatGPT 和 GPT-4?”
- 我答:“我感觉 第四次工业革命 真的来了。”
- 他又问:“要不,来一块搞点事件吧?”
- 我又答:“好!”
1.2 厌弃
起初过了没过多久 DevChat 就公布了一款 VS Code 插件,提供了“一站式 AI 辅助编程 ”体验。但我并不是第一批用户。没错, 我本人都不必,哇咔咔,你敢信?(别纳闷,参加 DevChat 我的项目 != 参加插件开发)
我习惯 在网页上用 ChatGPT,写代码的时候一个屏幕开着 Goland/Pycharm,另一个屏幕开着浏览器,外面常驻两个 tab 页,ChatGPT 和 Google。而且我作为 JetBrains 用户,从第一份工作开始就始终在用 JetBrains 系列 IDE 的 7 年死忠粉,没有足够的理由是很难说服我转到 VS Code 阵地的。
不过想想为了用上 GPT-4,千方百计搞过虚构电话卡,搞过海内信用卡,倒腾好一阵也没有胜利。然而当初 DevChat 间接对接 GPT-4 还让收费用,这也的确也够怂恿我试用一下 DevChat 了。这不,前不久,我试着下载了 VS Code,试着用了一下 DevChat。好家伙,那天早晨我没忍住,在外部群里抛了好几个 bug,而后:
WTF 啊,
你们用了个把月都没发现 bug 吗?
啊……
气人啊……
这几个程序员是不是有 bug 不修啊……
1.3 驯服
我是一个“Late Majority”,你很难说服我去应用一个刚推出的新工具,因为尝鲜须要老本,我深信 十次尝鲜九次悲观。同时我是也是一个刻薄的人,会过分看重细节,又患强迫症早期……
“ 鸿沟实践 ” 里的“前期多数派”(Late Majority):这个群体的人们通常会在大多数人曾经承受新产品或新想法后,才会抉择承受。他们通常对新事物持有疑虑,须要看到显著的证据才会承受。
所以 每次一个生疏的工具落到我的手里,都免不了被一顿挑刺。有时候我甚至感觉本人适宜去当一个产品经理或者测试工程师。最初这些工具在我这里只能失去 2 种评估:
- “S**T!”
- “还行”
没错,我嘴里的“还行”差不多就是最高评估了。
所以 DevChat VS Code 插件 在我这里被喷再失常不过了。不过喷完之后,我发现 这货色的确解决了理论问题,可能帮我进一步晋升编程效率 。应用网页版 GPT 时遇到的很多切实的麻烦事被它解决了。哎,找谁说理去啊,骂都骂了,后果发现, 这货色还蛮好用的嘞。
(其实我也奇怪,为什么老板始终没有“强制”大家用。他深信酒香不怕巷子深?管他呢。反正,我尝到苦头了,而且收费续杯,我没理由回绝。)
二、认真聊聊
咳咳,我要认真了。
少年,既然你看到了这里,我想你对 DevChat 到底无能啥,到底怎么用,到底还是感兴趣的。那好,你负责扶着方向盘,让 DevChat 当你的领航员,体验一把和 AI 结对编程的乐趣!
剧透:下文会演示如何让 DevChat 代劳,一步一步实现框架抉择、代码编写、Dockerfile 编写、Helm Chart 打包、拉起 Kubernetes 集群测试 Chart 包、解决运行谬误、编写 commit message……
2.1 老板给了少年一个工作
老板:“少年,你用 Golang 写一个 API 服务吧,跑 Kubernetes 里……”
少年并不会写 Golang,少年善于的是写业务代码。于是,少年试着装了 DevChat,试着把“脏活累活”都给 GPT 去做。
2.2 少年祭出了 DevChat
- 先筹备一个 Git 仓库
$ mkdir golang-webapp
$ cd golang-webapp
$ git init
- 接着关上 VS Code,装置 DevChat 插件
- 到 https://www.devchat.ai 注册一个 key
注册只须要提供用户名和邮箱,实现注册后,少年收到了一封蕴含 key 的邮件:
- 配置 DevChat
接着将 key 配置到 DevChat 插件(Mac:⌘ + , | Windows:Win + ,):
- 来,打个招呼
轻易说点啥,如果 DevChat 回复你了,祝贺,一切顺利,少年露出了笑颜!
2.3 让 DevChat 帮着选 web 框架
少年:我须要用 Golang 写一个 API 服务,跑 Kubernetes 里。首先请帮我抉择一个适合的 web 框架。
DevChat 给出了 4 个选项,你能够进一步针对每个框架诘问 DevChat 相干的细节,也能够抉择间接 Google 查问这个框架的官网地址,进去看具体文档。这里少年抉择了 Gin。
2.4 让 DevChat 帮着写代码
少年:请通知我如何用 Gin 框架来写一个 webapp,我须要一个能运行的示例,比方实现一个 GET /ping 接口。
少年跟着操作了一下:
- 装置 Gin
$ go get -u github.com/gin-gonic/gin
go: go.mod file not found in current directory or any parent directory.
'go get' is no longer supported outside a module.
To build and install a command, use 'go install' with a version,
like 'go install example.com/cmd@latest'
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
报错了,正如一开始所说,少年并不善于 Golang,所以嘛,掉坑太失常了。不过没关系,少年反手就把这段谬误一个复制,间接贴给 DevChat,没情绪思考,没能源解释,让 DevChat 本人意会:
DevChat: 看起来你的 Go 环境没有启用 Go Modules,这是 Go 1.11 当前版本推出的一种依赖管理工具。在 Go 1.16 当前,go get 命令在没有 go.mod 文件的环境下不再反对获取依赖。
你能够通过以下步骤来创立一个新的 Go module 并获取 Gin 框架:
在你的工作目录下,运行
go mod init <module-name>
来初始化一个新的 Go module。这里的<module-name>
是你的模块名,通常是你的我的项目在版本控制系统中的门路,例如github.com/yourname/yourproject
。go mod init github.com/yourname/yourproject
这将会在当前目录下创立一个 go.mod 文件。
而后,你能够应用 go get 命令来获取 Gin 框架:
go get github.com/gin-gonic/gin
这将会下载 Gin 框架,并更新你的 go.mod 和 go.sum 文件。
当初,你能够开始编写你的 web 利用了。
少年对着操作了一下:
很谐和,胜利了。
- 插入代码
持续跟着 DevChat 的节奏走,创立一个 main.go 文件,而后,magic:
- 运行,测试
还记得 DevChat 说怎么测试吗?少年持续跟着操作:
跑通了,代码架子有了。
2.5 让 DevChat 帮着写 Dockerfile
写 Dockerfile 须要留神啥?
不好意思,记不得,注意事项太多了。少年决定持续让 DevChat 全权包干:
在说出“接下来请帮我写一个 Dockerfile,我要将这个 golang-webapp 打包到容器里。”之前,这里多了一步操作,也就是将 main.go
增加到了 DevChat 上下文,这样 DevChat 就能依据这个信息,给出更加精确的 Dockerfile 了,比方 DevChat 因而会晓得这个利用监听的是 8080 端口。
最初 DevChat 还说能够运行上面命令测试:
docker build -t golang-webapp .
docker run -p 8080:8080 golang-webapp
- 构建镜像
- 启动运行(前置条件是装好了 Docker Desktop)
2.6 让 DevChat 帮着封装 Helm Chart
少年:好的,我曾经实现了 Dockerfile 的测试,胜利构建出了镜像 golang-webapp:latest,当初我心愿将其通过 Helm Chart 的形式打包,请通知怎么做。
DevChat:要应用 Helm Chart 打包你的利用,你须要首先装置 Helm。而后,你能够依照以下步骤来创立和配置你的 Helm Chart:
- 创立一个新的 Helm Chart:
helm create mychart
这将在当前目录下创立一个名为 mychart 的新目录,其中蕴含了一个根本的 Helm Chart 构造。
- 批改 mychart/Chart.yaml 文件,更新 chart 的形容和版本信息。
- 在 mychart/values.yaml 文件中,你须要配置你的利用的 Docker 镜像和端口。例如:
image: repository: golang-webapp tag: latest pullPolicy: IfNotPresent service: type: ClusterIP port: 8080
- 在 mychart/templates/deployment.yaml 文件中,你须要确保你的利用的 Docker 镜像和端口被正确地应用。例如:
spec: containers: - name: {{.Chart.Name}} image: "{{.Values.image.repository}}:{{.Values.image.tag}}" imagePullPolicy: {{.Values.image.pullPolicy}} ports: - name: http containerPort: 8080 protocol: TCP
- 最初,你能够应用以下命令来打包你的 Helm Chart:
helm package mychart
这将创立一个名为 mychart-0.1.0.tgz 的文件,其中蕴含了你的 Helm Chart。你能够将这个文件部署到你的 Kubernetes 集群。
留神:以上步骤假如你的 Docker 镜像曾经被推送到一个能够拜访的 Docker registry。如果你的 Docker 镜像依然在你的本地机器上,你须要首先将它推送到 DockerHub 或其余 Docker registry。
行吧,咱照着这个步骤试试:
- helm create
太强了,由衷对 Helm 命令竖起大拇指,一行就能进去一个谐和的脚手架!
- 更新 values.yaml
在 values.yaml 里 service 和 image 的配置并没有挨着,所以少年插入 DevChat 给的配置后,将 service 相干的配置往后面挪了挪:
而后在大概 40 行左右间接批改 service.port,把默认的 80 改成 8080:
service:
type: ClusterIP
port: 8080
- 更新 deployment.yaml
DevChat 提到须要留神 deployment.yaml,不过关上这个文件后,其实能够看到 containerPort 不须要批改,它的值从 values.yaml 里读取,错不了。不过这里得注意下 livenessProbe 和 readinessProbe 的 path,显然默认值是 /,然而少年只实现了 /ping 这个 API,所以得相应更新下这里才行:
- helm package
$ helm package golang-webapp
Successfully packaged chart and saved it to: /Users/danielhu/Work/golang-webapp/golang-webapp-0.1.0.tgz
2.7 让 DevChat 帮着拉起 K8s 集群以便测试利用
少年:我曾经打出了相应 Chart 包 golang-webapp-0.1.0.tgz,本地也有了镜像 golang-webapp:latest,上面请通知我如何在本地用 minikube 启动一个测试用的 k8s 集群,并且将我的 Helm 包部署下来测试。我的本地环境是 Macbook M1,曾经装置好了 Docker Desktop。
DevChat:首先,你须要在你的本地机器上装置 Minikube。Minikube 是一个工具,能够让你在本地运行 Kubernetes。你能够应用 Homebrew 来装置 Minikube:
brew install minikube
而后,你能够应用以下命令来启动一个 Minikube 集群:
minikube start --driver=docker
这将应用 Docker 驱动来启动一个 Minikube 集群。如果你的本地机器上曾经装置了 Docker,这是最简略的形式。
接下来,你须要将你的 Docker 镜像加载到 Minikube 的 Docker daemon 中。你能够应用以下命令来做到这一点:
minikube image load golang-webapp:latest
当初,你能够应用 Helm 来部署你的利用。首先,你须要增加你的 Helm Chart 到本地的 Helm repository:
helm repo add local file://path/to/your/chart/directory
而后,你能够应用以下命令来部署你的利用:
helm install myapp local/golang-webapp
这将部署你的利用到 Minikube 集群。你能够应用以下命令来查看你的利用的状态:
kubectl get pods
如果一切正常,你应该能看到你的利用正在运行。
少年照抄作业,一步步继续执行:
- 装置 minikube
brew install minikube
- 用 minikube 拉起一个默认 K8s 集群
$ minikube start --driver=docker
😄 minikube v1.29.0 on Darwin 13.1 (arm64)
✨ Using the docker driver based on existing profile
🎉 minikube 1.30.1 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.30.1
💡 To disable this notice, run: 'minikube config set WantUpdateNotification false'
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
🤷 docker "minikube" container is missing, will recreate.
🔥 Creating docker container (CPUs=2, Memory=4000MB) ...
🐳 Preparing Kubernetes v1.26.1 on Docker 20.10.23 ...
🔗 Configuring bridge CNI (Container Networking Interface) ...
🔎 Verifying Kubernetes components...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Enabled addons: storage-provisioner, default-storageclass
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
- load 镜像到 minikube 环境
minikube image load golang-webapp:latest
- 部署 Helm Chart
DevChat 说能够执行相似这样的命令:
helm repo add local file://path/to/your/chart/directory
helm install myapp local/golang-webapp
少年不信。显然这时候应该执行:
helm install myapp ./golang-webapp-0.1.0.tgz
不过不论少年是不是能一眼看穿 GPT 的这次“不苟言笑地胡言乱语”,都不打紧,执行一下,发现报错,把谬误再次通过 DevChat 通知 GPT,也能很快失去正确的操作步骤。
$ helm install myapp ./golang-webapp-0.1.0.tgz
NAME: myapp
LAST DEPLOYED: Thu Jun 29 15:51:10 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=golang-webapp,app.kubernetes.io/instance=myapp" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
- 查看部署后果
行,到此,架子根本就搭好了。
2.8 让 DevChat 帮着写 Commit Message
一时没收住,干的事有点多了。到了提交代码的工夫,这次不必为 commit message 如何写而懊恼了,少年方才写了 Golang 代码,Dockerfile,Helm Chart,分 3 个 commits,且看 DevChat 如何丝滑实现这个工作:
git add
增加你的第一个 commit 想要蕴含的内容
既然要分成几个 commits,天然须要先将第一个 commit 的“范畴”add 一波:
- 让 DevChat 拿着 git add 的 cache 内容去写 commit message
点击“+”将方才 git add 的内容退出会话上下文,而后通知 DevChat 执行“commit_message”命令,就能够拿到 GPT-4 总结的 commit message 了
- 提交 commit
DevChat 会输入一段 commit message 备选文案,少年能够点击复制,而后本人编辑后手动 git commit -m
,也能够间接点击“commit”按钮。
- 反复这个过程,实现剩下的 commits
最终少年失去了这样 3 个 commits:
$ git log --oneline
b54b57a (HEAD -> master) Add Helm chart for Golang web application
a528930 Add Dockerfile for Go application
4057bac Add project dependencies and basic server setup
当然,对于 DevChat 给出的后果,少年也能够依据本人的口味微调后再提交,不过明天少年只想偷懒,毕竟,当初的后果曾经比满屏“Update”难看太多了。
最初,当然你还能够持续让 DevChat 帮助你实现具体的业务代码编写,测试用例编写,CICD 配置等等。不过,我就不再此持续赘述了。
三、心动了吗
如你所见,我并没有演示 DevChat 的全副能力,不过管中窥豹,我置信你曾经感触到了在软件我的项目开发过程中应用 DevChat 和应用“网页版 GPT 们”有啥区别。
如你所见,DevChat 并不是简略地将 ChatGPT 那个聊天框搬到了 VS Code 里,而是在此之上联合软件开发过程的各种场景,尽可能优化应用体验,将“GPT-4 与 VS Code 之间的那个缝”逐步填平!
还在等什么?还不连忙到 https://www.devchat.ai 注册一个 key,而后试着开始用 DevChat 编程?!
BTW:
- GitHub:https://github.com/devchat-ai
- 注册网站:https://www.devchat.ai
- 微信群:注册后会收到一封邮件,内附群二维码
- Discord:https://discord.gg/9t3yrbBUXD
- 微信公众号:微信号为“devchat-ai”,名称暂为“思码逸智能编程”