今年的小鲜肉报到了,军训完就要开始上虐人的编程课了, 大部分学Python,一部分学C,还有一部分学C++。万事开头难,面对全新的课程和学习模式,一部分同学痛不欲生。或许,AI能帮忙渡劫。

  本文以百度文心快码为例,介绍在Visual Studio Code中安装、使用AI助手进行辅助编程的方法。本文以Python语言为背景展开,C和C++大同小异。

版权声明

本文节选自《Python编程基础及应用》第2版,高等教育出版社,作者:陈波,刘慧君, 向涛

本文可以在互联网上自由转载,但必须:注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。本文不可以以纸质出版为目的进行改编、摘抄。

  随着深度学习技术的发展,尤其是大规模预训练语言模型的兴起,AI辅助程序设计逐步成为现实。通过对大量代码的预训练,可以训练出一种能够“理解”编程语言的大模型,这样的模型可以直接从自然语言需求或其他提示中生成代码片段或完整程序。表1-1列出了目前常见的用于辅助程序设计的专用模型。开发者也可以使用通用大模型辅助编程,如文心一言、百川智能、通义千问、ChatGPT、星火、混云、盘古大模型等。

表1-1 常见的AI辅助程序设计模型
名称 供方 名称 供方
通义灵码 阿里云 代码小浣熊 商汤科技
GitHub Copilot GitHub、OpenAI、 Microsoft iFlyCode 科大讯飞
CodeWhisperer 亚马逊 MarsCode 字节跳动
CodeGeeX 清华大学、智谱AI Comate 百度

  上述专用模型的功能和使用方法大同小异。为便于教学,本书选用百度公司的Comate作为AI辅助编程工具。第一种使用Comate的方法是直接访问Comate网站(http://comate.baidu.com),通过自然语言进行问答交流。

  第二种也是更专业的使用Comate的方法是将Comate插件工具安装到诸如Visual Studio Code这样的IDE环境中。

1. 在Visual Studio Code中安装Baidu Comate插件

  如图1所示,打开Visual Studio Code,点击窗口左侧的“Extensions(扩展)”按钮 ,输入Comate进行检索,在检索结果中找到Baidu Comate,然后点击对应的“Install”按钮即可安装Comate插件。

image-20240907142743495

图1 查找并安装Comate插件

  安装完成后,Visual Studio Code窗口左侧会出现“Baidu Comate”按钮。点击此按钮,即见Comate的登录页面,如图2所示。读者需要注册并登录,才能正常使用Comate。

image-20240907143337841

图2 Comate的登录页面

  点击图2中的登录按钮,软件会弹出如图3所示的对话框要求打开外部网站,选择“Open”,同意打开外部网站。

image-20240907143605528

图3 打开外部网站确认对话框

  接下来,系统会打开浏览器,读者将看到如图4所示的登录窗口。注意,如果读者已经在浏览器中登录了百度账号且未退出,看到的界面可能与图4不同。

image-20240907143851718

图4 百度账号登录窗口

  图4的登录窗口提供了很多登录方法。作者由于已经拥有百度账号,选择直接使用账号密码登录,如图5所示。

image-20240907144203812

图5 通过已有的百度账号登录

  读者如果还没有百度账号,可以点击右下方的”立即注册“注册百度账号,也可以点选左下方的新浪微博、微信、QQ等图标绑定并使用微博、微信、QQ的已有账号。在登录过程中,系统为了确保安全,可能还会要求通过邮箱、手机号验证等手段确认账号的正确归属。在完成上述过程后,作者得到如图6所示的登录成功页面。

image-20240907144639536

图6 登录成功

image-20240907144815109

图7 VSC中的Comate扩展页面

2. 通过自然语言问答使用AI编程助手

  关闭浏览器,回到Visual Studio Code中,发现图2的Comate登录页面变成了图7的模样。图中右上侧的karlcbalex为作者的百度账号,图中下方则有一个对话框,读者可以在该对话框中直接使用自然语言向Comate发问。

image-20240907145418532

图8 与Comate对话

  我们先择著名的”鸡兔同笼“问题来牛刀小试。输入如图8下方所示的提问,然后点击右下侧的蓝色纸飞机按钮。经过一通”思考“,Comate给出了解决方案,如图9所示。

image-20240907150244244

图9 Comate给出的“鸡兔同笼”解决方案

  Comate给出的回应较长,一屏显示不下,读者可以拖动图9右侧的上下滚动条滚动阅读。如图所见,对于作者所提的问题,Comate不光给出了Python程序,还说明了程序的工作原理和过程。需要注意的是,包括Comate在内的大模型一直在进化和发展,当读者向Comate提出相同问题时,Comate给出的解答不太可能跟图9完全一致。

  我们点击图中的“复制”按钮复制代码,然后将其粘贴(使用Ctrl + V快捷键或者Edit->Paste菜单)到Python程序文件中,如图10所示。

image-20240907154544756

图10 粘贴并运行"鸡兔同笼"程序

  如图10所示,运行程序,可见程序正常运行。稍加验算可知,程序执行结果也是正确的。

  需要注意的是,读者千万不要产生AI已经“会”编程了,人类学习编程已经没有用的错觉。象鸡兔同笼这样简单的数学问题,互联网上存在大量的现有解决方案和代码,经过训练的AI模型容易找到解决方案。 但对于复杂的工程问题,以及那些超出人类知识边界的新领域的探索,当前阶段的AI至多还是一个配合者,人类的智力思考仍牢牢占据C位。

3. 体验AI助手的代码补全

image-20240908110334422

  如果读者已经成功安装并登录了百度的Comate插件,则可借助Comate来完成上述习题2-1。

image-20240908110446373

图11 Comate中的代码补全

  如图11所示,当作者录入到demo.py程序的第6行时,Comate给出了代码补全建议,图中的浅灰色文字即为建议内容。此时,按下Tab键即可接受补全建议,在Comate的辅助下,程序员的工作效率有了显著提升。

image-20240908110515376

图12 通过注释给Comate提要求或者给出提示

  在程序设计过程中,程序员也可以通过书写注释的方式与Comate交互,交互内容可以是对AI的请求,也可以是对AI进行下一步工作的指示。在图12中,当作者写完第8行的注释并按下Enter键后,Comate立即给出了代码补全建议,该建议包含了习题2-1中第2空的正确答案。

4. 使用AI助手给程序挑错

  图13中的程序包含多处新手程序员常犯的错误。AI编程工具Comate可以帮助程序员找出这些错误并提供优化建议。

image-20240908110815041

图13 包含多个错误的程序

  使用Ctrl + A组合键或者按住鼠标左键拖动选中全部代码,然后右击鼠标,在弹出菜单中选择Baidu ComateàOptimize Code(优化代码)。

image-20240908110847044

图14 使用Baidu Comate的Optimize Code功能

  Visual Studio Code事实上将上述操作转换成了一次要求Comate对特定代码段进行优化的对话。稍作等待后,Comate给出了如图15所示的回应。

image-20240908110932364

图15 Comate的优化建议

  图15中可见,Comate正确找出了程序中的三处错误,其中语法错误两项(缩进、字符串单双引号不匹配),逻辑错误一项(age未转换成整数)。同时,Comate还给出了修复后的代码片段。程序员如果认同Comate的修改建议,可以点击“采纳”按钮,让Comate将修改应用到程序文件中。

5. AI助手生成代码完成matplotlib绘图

  示例源自Python教材案例 - 滚雪球的复利,源代码如下,供复制:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#loan.py
balance = 10000 #贷款初始余额
rate = 0.0005 #日利万分之五
balances = [] #贷款余额列表
for i in range(365*30):
balance = balance + balance*rate #贷款余额 = 本金 + 本金*利率
balances.append(balance/10000) #把贷款余额(万元)存入列表绘图用
print("30年后连本带利贷款余额: {:.2f}".format(balance))

from matplotlib import pyplot as plt #贷款余额 vs 天数增长曲线
plt.rcParams["font.family"] = "SimHei" #指定字体,确保中文显示正确
plt.plot(list(range(365*30)),balances) #绘制折线图
plt.xlabel("天") #设置横轴标签
plt.ylabel("贷款余额(万元)") #设置纵轴标签
plt.title("利滚利30年") #设置标题
plt.show() #显示绘图结果

  当前阶段,读者尚未学习使用matplotlib进行绘图。在AI时代,这种简单的低水平劳动可以由AI替代。在图5-4的第10行(我们书写了一行注释,要求AI辅助编程工具提供协助,在按下Enter后,Comate立即给出了代码补全建议。

image-20240908111216365

图5-4 通过注释给AI辅助编程工具提要求

  按下Tab键接受代码补全建议后执行代码,会发现折线图虽然绘制成功,但图中的中文信息未能正确显示,如图5-5所示。

image-20240908111249996

图5-5 图表中的中文未能正确显示

  为解决这一问题,我们按下Ctrl + A组合键全选代码,然后再按下Ctrl + I组合键调出Baidu Comate交互对话框,并提交了如图5-6所示的反馈信息。

image-20240908111322901

图5-6 与Baidu Comate进行文字交互

  稍作等待后,Comate做出了如图5-7所示的回应。其中,第1 ~ 16行为原有代码,第17 ~ 34行为建议后修正代码。按照屏幕提示按下Alt + A组合键,接受代码修正。再次运行程序,可见图表中的中文显示正常,如图5-8所示。

image-20240908111414552

图5-7 Comate对中文未能正确明显的回应

image-20240908111439760

图5-8 图表中的中文显示问题被修正

  接下来,请读者尝试应用前述方法与Comate进行交互,将折线图的横轴改为以年为单位显示。

6. 程序看不懂?让AI助手给讲讲

  示例源自Python教学案例 - 发现圆周率,原始代码如下,供复制:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#picalc.py
import random #随机数模块
N,nHits = 10000,0 #总投点数,圆内投点数
xs,ys = [],[] #投点的x,y坐标列表

for i in range(N): #N次投点
x = random.random()*2-1 #随机数取投点坐标
y = random.random()*2-1
xs.append(x) #投点坐标存入列表
ys.append(y)
if x*x+y*y <= 1: #投点位于内切圆内
nHits += 1 #圆内投点数 + 1

pi = 4*nHits/N #通过计算圆面积估算圆周率
print("pi =",pi)

import matplotlib.pyplot as plt #绘图展现投点落在正方形/圆内的情况
from matplotlib.patches import Circle
fig = plt.figure(figsize=(6,6)) #创建宽高均为6英寸的图
plt.scatter(xs,ys,s=1,color='black') #绘制散点图
c = Circle(xy=(0,0), radius=1, alpha=0.4, color="black") #创建半透明的圆对象c
plt.gca().add_patch(c) #将圆对象c加入当前子图
plt.show() #显示绘图结果

  当读者遇到读不懂的程序时,也可以请AI工具Comate来帮助解释。如图5-11所示,我们选中“发现圆周率”程序的全部代码(示例来自微实践 - 发现圆周率),右击鼠标右键,然后在弹出菜单中选择Baidu ComateàExplain Selected Code(解释全部代码)。

image-20240908111607482

图5-11 使用Baidu Comate的Explain Selected Code功能

  接下来,Visual Studio Code发起了一项要求Comate解释相关代码的对话。几秒钟之后,Comate给出了它对程序的解释,如图5-12、5-13所示。Comate的回应分4个部分解释了程序的工作原理和执行过程,准确而又详细。

image-20240908111633283

图5-12 Comate解释程序“发现圆周率”(第1部分)

image-20240908111652408

图5-13 Comate解释程序“发现圆周率”(第2部分)

欢迎支持海洋饼干叔叔系列程序设计教材,案例、配套资源丰富,实践性强,都是高等教育出版社出版的。

高校教学同行如果需要样书,或者索取教学支持资源, 请联系公众号或者海洋饼干叔叔本人。

《Python编程基础及应用》 《Python编程基础及应用实验教程》 《C++编程基础及应用》
book1 实验书图片 Cpp小尺寸