关于chatgpt:DevChat将-GPT4-无缝融入-VS-Code极致提升你的编程体验

12次阅读

共计 8448 个字符,预计需要花费 22 分钟才能阅读完成。

一、絮絮叨叨

用 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 接口。

少年跟着操作了一下:

  1. 装置 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 利用了。

少年对着操作了一下:

很谐和,胜利了。

  1. 插入代码

持续跟着 DevChat 的节奏走,创立一个 main.go 文件,而后,magic:

  1. 运行,测试

还记得 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:

  1. 创立一个新的 Helm Chart:
helm create mychart

这将在当前目录下创立一个名为 mychart 的新目录,其中蕴含了一个根本的 Helm Chart 构造。

  1. 批改 mychart/Chart.yaml 文件,更新 chart 的形容和版本信息。
  2. 在 mychart/values.yaml 文件中,你须要配置你的利用的 Docker 镜像和端口。例如:
image:
  repository: golang-webapp
  tag: latest
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 8080
  1. 在 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
  1. 最初,你能够应用以下命令来打包你的 Helm Chart:
helm package mychart

这将创立一个名为 mychart-0.1.0.tgz 的文件,其中蕴含了你的 Helm Chart。你能够将这个文件部署到你的 Kubernetes 集群。

留神:以上步骤假如你的 Docker 镜像曾经被推送到一个能够拜访的 Docker registry。如果你的 Docker 镜像依然在你的本地机器上,你须要首先将它推送到 DockerHub 或其余 Docker registry。

行吧,咱照着这个步骤试试:

  1. helm create

太强了,由衷对 Helm 命令竖起大拇指,一行就能进去一个谐和的脚手架!

  1. 更新 values.yaml

在 values.yaml 里 service 和 image 的配置并没有挨着,所以少年插入 DevChat 给的配置后,将 service 相干的配置往后面挪了挪:

而后在大概 40 行左右间接批改 service.port,把默认的 80 改成 8080:

service:
  type: ClusterIP
  port: 8080
  1. 更新 deployment.yaml

DevChat 提到须要留神 deployment.yaml,不过关上这个文件后,其实能够看到 containerPort 不须要批改,它的值从 values.yaml 里读取,错不了。不过这里得注意下 livenessProbe 和 readinessProbe 的 path,显然默认值是 /,然而少年只实现了 /ping 这个 API,所以得相应更新下这里才行:

  1. 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

如果一切正常,你应该能看到你的利用正在运行。

少年照抄作业,一步步继续执行:

  1. 装置 minikube
brew install minikube
  1. 用 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
  1. load 镜像到 minikube 环境
minikube image load golang-webapp:latest
  1. 部署 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
  1. 查看部署后果

行,到此,架子根本就搭好了。

2.8 让 DevChat 帮着写 Commit Message

一时没收住,干的事有点多了。到了提交代码的工夫,这次不必为 commit message 如何写而懊恼了,少年方才写了 Golang 代码,Dockerfile,Helm Chart,分 3 个 commits,且看 DevChat 如何丝滑实现这个工作:

  1. git add 增加你的第一个 commit 想要蕴含的内容

既然要分成几个 commits,天然须要先将第一个 commit 的“范畴”add 一波:

  1. 让 DevChat 拿着 git add 的 cache 内容去写 commit message

点击“+”将方才 git add 的内容退出会话上下文,而后通知 DevChat 执行“commit_message”命令,就能够拿到 GPT-4 总结的 commit message 了

  1. 提交 commit

DevChat 会输入一段 commit message 备选文案,少年能够点击复制,而后本人编辑后手动 git commit -m,也能够间接点击“commit”按钮。

  1. 反复这个过程,实现剩下的 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”,名称暂为“思码逸智能编程”
正文完
 0