孫洪迪 賈民政 楊民峰
(北京工業(yè)職業(yè)技術(shù)學(xué)院信息工程學(xué)院,北京 100042)
ChatGPT全稱是Chat Generative Pre-trained Transformer,是OpenAI公司于2022年11月發(fā)布的一款聊天機(jī)器人程序。ChatGPT能根據(jù)用戶提出的問題,經(jīng)人工標(biāo)注數(shù)據(jù)集訓(xùn)練的算法智能生成回答內(nèi)容,而不僅僅只是加工現(xiàn)有內(nèi)容。它能夠像人類一樣自然地進(jìn)行對(duì)話,并且具備完成各種任務(wù)的能力,包括郵件撰寫、視頻腳本創(chuàng)作、文案編寫、翻譯以及代碼生成等。
Java語言、Python語言等計(jì)算機(jī)編程語言類課程在教學(xué)中面臨諸多困難,如教材教輔體量有限,學(xué)生程序代碼閱讀量有限;有的學(xué)生編程思路不清晰編寫程序困難,有的學(xué)生編寫出程序但不會(huì)調(diào)試等。若將ChatGPT引入到計(jì)算機(jī)編程語言類課程的學(xué)習(xí)和教學(xué)中,可以促進(jìn)學(xué)生對(duì)該類課程的學(xué)習(xí)和理解。本文設(shè)計(jì)的基于ChatGPT的計(jì)算機(jī)編程語言類課程學(xué)習(xí)助手系統(tǒng),不僅是一個(gè)技術(shù)創(chuàng)新,更是一種教育改進(jìn)的嘗試,旨在克服傳統(tǒng)計(jì)算機(jī)編程語言教育中的各種挑戰(zhàn)。
ChatGPT發(fā)布后,學(xué)者們圍繞ChatGPT的應(yīng)用領(lǐng)域進(jìn)行了廣泛研究。吳俊雄[1]提出ChatGPT在金融領(lǐng)域客服咨詢、文案生成、市場評(píng)估等方面的應(yīng)用可能性,并分析了金融風(fēng)險(xiǎn)及局限性。金源等[2]提出一套使用ChatGPT構(gòu)建問答式財(cái)務(wù)知識(shí)庫的可行框架,并分析了對(duì)于財(cái)務(wù)公司的應(yīng)用價(jià)值。吳英華等[3]分別針對(duì)醫(yī)務(wù)管理人員、醫(yī)生醫(yī)技人員以及患者三類用戶群體,梳理ChatGPT技術(shù)在智慧醫(yī)療領(lǐng)域的典型應(yīng)用場景。Biswas[4]分析了ChatGPT在公共衛(wèi)生中的潛在用途。
ChatGPT在教育領(lǐng)域也同樣得到深入研究。胡影等[5]分析了ChatGPT對(duì)于教育領(lǐng)域的影響和展望。谷生然等[6]研究了ChatGPT對(duì)于大學(xué)生數(shù)字教育的影響。范春蕾等[7]針對(duì)ChatGPT在大學(xué)基礎(chǔ)課教學(xué)個(gè)性化學(xué)習(xí)支持、即時(shí)問題解答、學(xué)習(xí)資源和教學(xué)案例等方面的應(yīng)用進(jìn)行了研究。
筆者通過分析計(jì)算機(jī)編程語言類課程在教學(xué)過程中遇到的各種困難,設(shè)計(jì)了一款基于ChatGPT的計(jì)算機(jī)編程語言類課程學(xué)習(xí)助手系統(tǒng)。系統(tǒng)通過調(diào)用ChatGPT API接口,實(shí)現(xiàn)知識(shí)點(diǎn)儲(chǔ)備以供用戶學(xué)習(xí);通過配置關(guān)鍵字,可以及時(shí)響應(yīng)用戶編程時(shí)各種需求,幫助用戶解決編程過程中遇到的困難。該系統(tǒng)在實(shí)踐教學(xué)中投入使用,效果良好。
通過分析計(jì)算機(jī)編程語言類課程教學(xué)中遇到的問題,設(shè)計(jì)課程學(xué)習(xí)助手系統(tǒng)的核心功能:給用戶提供計(jì)算機(jī)編程語言課程學(xué)習(xí)內(nèi)容;在系統(tǒng)內(nèi)進(jìn)行程序代碼編寫,當(dāng)遇到編程問題,系統(tǒng)可以對(duì)其進(jìn)行提示性輔助幫助。
系統(tǒng)事先通過ChatGPT收集整理課程知識(shí)點(diǎn),將知識(shí)點(diǎn)內(nèi)容存放在數(shù)據(jù)庫中。用戶使用系統(tǒng)時(shí),從數(shù)據(jù)庫中加載與該知識(shí)點(diǎn)相關(guān)的學(xué)習(xí)內(nèi)容,包括課程大綱、授課方式以及詳細(xì)的知識(shí)點(diǎn)描述等內(nèi)容以供用戶學(xué)習(xí)。加載完成后,系統(tǒng)轉(zhuǎn)入代碼編寫模式,等待用戶的輸入。用戶開始輸入時(shí),系統(tǒng)監(jiān)測用戶的輸入內(nèi)容,以便快速識(shí)別用戶需要的支持。當(dāng)用戶輸入內(nèi)容與數(shù)據(jù)庫關(guān)鍵信息匹配時(shí),系統(tǒng)智能地將用戶的問題以及知識(shí)點(diǎn)信息,組織成一個(gè)ChatGPT會(huì)話請求,交由ChatGPT進(jìn)行分析和解答。
系統(tǒng)可以幫助用戶解決課程教學(xué)中遇到的困難,包括根據(jù)用戶輸入的代碼實(shí)時(shí)進(jìn)行分析,提供有關(guān)語法和邏輯錯(cuò)誤的提示與建議;解釋程序代碼的含義、程序設(shè)計(jì)中的知識(shí)點(diǎn)以及編程技巧,幫助初學(xué)者更好地理解編程基礎(chǔ)知識(shí);提供多種示例代碼,幫助用戶更好地理解編程語言和程序設(shè)計(jì)思想,掌握編程技能。
ChatGPT能基于輸入內(nèi)容生成詳細(xì)且相關(guān)的教學(xué)回應(yīng),并將回應(yīng)以一種清晰易懂的方式呈現(xiàn)在編程提示反饋框中,供用戶查閱和參考。這種實(shí)時(shí)性智能互動(dòng),能夠大幅度提升編程的學(xué)習(xí)效率,使用戶能夠在實(shí)際編寫代碼過程中獲得及時(shí)指導(dǎo)和反饋,從而更深入地理解知識(shí)點(diǎn),提高編程技能,掌握編程知識(shí)。
OpenAI為了使開發(fā)者能夠更輕松地利用這一技術(shù),推出自然語言處理工具ChatGPT API,該API允許開發(fā)者與ChatGPT進(jìn)行交互,并在應(yīng)用程序或網(wǎng)站中集成ChatGPT的功能。ChatGPT API基于GPT-3.5-turbo模型構(gòu)建,是GPT-3.5系列中最快速、最靈活的模型之一。
ChatGPT API提供多種接口,以http方式提供服務(wù),請求和響應(yīng)數(shù)據(jù)采用.json格式,能夠方便地與各種編程語言進(jìn)行交互。本文設(shè)計(jì)的系統(tǒng)采用最常用的問答功能接口作為編程輔助功能的AI支持,接口使用POST請求,地址為api.openai.com/v1/completions。具體的請求參數(shù)如表1所示。
表1 ChatGPT API接口參數(shù)表
上述參數(shù)中,prompt參數(shù)用于傳遞給ChatGPT的對(duì)話內(nèi)容,以數(shù)組形式提供多個(gè)對(duì)話或上下文信息。在開發(fā)上下文感知型問答系統(tǒng)時(shí),將更多相關(guān)信息包含在數(shù)組中,可以促進(jìn)ChatGPT理解上下文內(nèi)容,增強(qiáng)對(duì)話能力。課程學(xué)習(xí)助手系統(tǒng)將更多信息輸入到ChatGPT中,使其能更加全面理解課程內(nèi)容以及學(xué)生當(dāng)前的具體需求。系統(tǒng)請求操作如下。
POST請求響應(yīng)以json字符串形式呈現(xiàn),其中包含一個(gè)回答列表,具體回答內(nèi)容存儲(chǔ)在choices字段并反映在界面,以便用戶查看。詳細(xì)返回參數(shù)如表2所示。
表2 請求響應(yīng)返回字段參數(shù)表
以上述示例的請求為例,該請求響應(yīng)如下。
"choices":["學(xué)生提供的for循環(huán)語句存在一些語法錯(cuò)誤。正確的for循環(huán)語法結(jié)構(gòu)由三個(gè)部分組成:初始化、條件判斷和迭代操作。修正后的代碼以及對(duì)每個(gè)部分的解釋:for(inti=1;i<=9;i++)。",
"1.初始化部分:inti=1,初始化一個(gè)整數(shù)變量i并將其賦值為1。這是循環(huán)開始時(shí)的初始條件。",
"2.條件判斷部分:i<=9,循環(huán)執(zhí)行的條件。只有當(dāng)i的值小于或等于9時(shí),循環(huán)才會(huì)繼續(xù)執(zhí)行。當(dāng)條件為假時(shí),循環(huán)將結(jié)束。",
"3.迭代操作部分:i++,每次循環(huán)迭代時(shí)執(zhí)行的操作。它將i的值增加1,以控制循環(huán)變量i的變化。",
"若輸入中包含語法錯(cuò)誤,應(yīng)該更正為上述形式,以正確執(zhí)行循環(huán)并完成九九乘法表的打印任務(wù)。"],
課程學(xué)習(xí)助手系統(tǒng)中,每門課程內(nèi)容編排以及不同章節(jié)對(duì)應(yīng)學(xué)習(xí)任務(wù)的設(shè)計(jì),都需要預(yù)先編輯并保存到磁盤中,以便系統(tǒng)啟動(dòng)時(shí)加載使用。系統(tǒng)的數(shù)據(jù)管理采用SQLite輕量級(jí)數(shù)據(jù)庫作為底層存儲(chǔ)引擎,優(yōu)勢為SQLite具有卓越性能和高度可靠性,能夠快速響應(yīng)大量查詢請求;SQLite不需要獨(dú)立服務(wù)器或配置復(fù)雜管理系統(tǒng),使得部署和維護(hù)變得相對(duì)簡單;系統(tǒng)更新時(shí),只需要下載并替換本地SQLite存儲(chǔ)文件即可。
設(shè)計(jì)系統(tǒng)的數(shù)據(jù)庫時(shí),每一門課程是一個(gè)獨(dú)立數(shù)據(jù)表,同時(shí)可以建立多張數(shù)據(jù)表對(duì)應(yīng)多門課程。此外,為更好支持學(xué)生學(xué)習(xí),每一張數(shù)據(jù)表被進(jìn)一步劃分為不同章節(jié),每個(gè)章節(jié)記錄相關(guān)知識(shí)點(diǎn)的詳細(xì)信息。這種劃分設(shè)計(jì),讓學(xué)生能夠有針對(duì)性地練習(xí)和學(xué)習(xí)特定知識(shí)點(diǎn),從而更全面地掌握編程技能。
由于ChatGPT API支持對(duì)話信息以數(shù)組方式代入,系統(tǒng)在數(shù)據(jù)庫設(shè)計(jì)中選擇更加精細(xì)的列分割方式,以便對(duì)知識(shí)點(diǎn)進(jìn)行更全面和詳細(xì)的記錄。這一方法有助于ChatGPT更準(zhǔn)確地理解教師所要傳達(dá)給學(xué)生的知識(shí)內(nèi)容,為學(xué)生學(xué)習(xí)知識(shí)點(diǎn)提供更精確的支持。數(shù)據(jù)表分列劃分如表3所示。
課程編排的存儲(chǔ)方式,較為關(guān)鍵的是Hit字段。用戶編程輸入過程中,通過預(yù)先配置的關(guān)鍵字與輸入內(nèi)容進(jìn)行實(shí)時(shí)匹配,以便用戶在需要時(shí)得到輔助信息。關(guān)鍵字設(shè)計(jì)不僅能夠有效幫助課程設(shè)計(jì)者安排每個(gè)知識(shí)點(diǎn)的關(guān)鍵教學(xué)內(nèi)容,還有助于ChatGPT生成更為精準(zhǔn)和針對(duì)性的內(nèi)容。
用于檢測的關(guān)鍵字可以是豐富多樣的,它們的設(shè)計(jì)和應(yīng)用可以提升編程效率和授課效果。根據(jù)具體課程和知識(shí)點(diǎn)教學(xué)要求,通過Description字段與Hit字段的搭配使用,可以產(chǎn)生注釋解讀、Bug查找、代碼注解、代碼示例等多種輔助教學(xué)形式。當(dāng)用戶輸入回車后,系統(tǒng)會(huì)自動(dòng)檢查用戶輸入的該行代碼,如果命中到相關(guān)的關(guān)鍵字,就會(huì)實(shí)時(shí)給出相應(yīng)回復(fù)。
關(guān)鍵字的配置:①注釋解讀配置。當(dāng)用戶輸入并命中注釋關(guān)鍵字時(shí),系統(tǒng)會(huì)智能解析注釋內(nèi)容,然后根據(jù)用戶意圖和需求,自動(dòng)補(bǔ)全后續(xù)代碼,并給出后續(xù)代碼的編寫思路。這一功能可以幫助用戶梳理編程思路,提高編程效率。②Bug查找配置。Bug是編程中常見問題,它可能導(dǎo)致程序運(yùn)行時(shí)出現(xiàn)錯(cuò)誤。系統(tǒng)可以根據(jù)每一章節(jié)重點(diǎn)教學(xué)內(nèi)容,為用戶設(shè)計(jì)Bug查找關(guān)鍵字。例如教學(xué)內(nèi)容是for循環(huán),那么可以設(shè)計(jì)Hit字段為“for”,字段Description1為“檢查該行代碼是否有Bug,如果有Bug,請給出正確寫法”,當(dāng)用戶書寫for循環(huán)代碼時(shí),系統(tǒng)會(huì)檢查for代碼中是否存在潛在Bug,并實(shí)時(shí)指出Bug,同時(shí)提供多種修復(fù)方法和調(diào)試手段。③代碼注解配置。代碼注解關(guān)鍵字用于解釋用戶輸入代碼塊功能和用途。這一功能有助于用戶更好地理解所編寫的每行代碼以及代碼的整體邏輯。例如可以設(shè)計(jì)“if”關(guān)鍵字,字段Description1中加入“將該代碼加上注釋”。通過代碼注解,用戶可以深入了解代碼設(shè)計(jì)思路和執(zhí)行流程,從而提高用戶對(duì)編程思路的理解。④代碼示例配置。代碼示例關(guān)鍵字提供與特定知識(shí)點(diǎn)相關(guān)的代碼示例。例如Hit為“continue”關(guān)鍵字時(shí),字段Description1可以描述為“給出更多關(guān)于continue的代碼例子”。這些示例代碼可以幫助用戶學(xué)習(xí)和參考,為其提供實(shí)際的編程示范,有助于用戶加深對(duì)知識(shí)點(diǎn)的理解,提高編程技能水平。
關(guān)鍵字不同形式的設(shè)計(jì),是根據(jù)課程內(nèi)容和用戶需求設(shè)定的,旨在為用戶提供個(gè)性化支持,確保用戶能夠充分掌握編程知識(shí)和技能。關(guān)鍵字設(shè)計(jì)時(shí),盡量以“for”“if”等簡單形式存在,如果設(shè)計(jì)的關(guān)鍵字較復(fù)雜,用戶代碼編寫有誤時(shí),可能會(huì)無法命中對(duì)應(yīng)的關(guān)鍵字。例如,關(guān)鍵字設(shè)計(jì)為“if(i==1)”,當(dāng)用戶錯(cuò)誤書寫成“if(i=1)”,那么系統(tǒng)將無法命中該關(guān)鍵字,導(dǎo)致用戶錯(cuò)過利用ChatGPT檢查錯(cuò)誤的機(jī)會(huì)。
使用多種關(guān)鍵字形式,可以為系統(tǒng)注入更多靈活性和多樣性,以滿足不同用戶的學(xué)習(xí)需求,促進(jìn)更有效的計(jì)算機(jī)編程語言教育。通過課程學(xué)習(xí)助手系統(tǒng),無論是初學(xué)者還是有經(jīng)驗(yàn)的編程者,都可以獲得實(shí)時(shí)的、有針對(duì)性的幫助,從而更有效地學(xué)習(xí)和應(yīng)用編程知識(shí)。
為了確保用戶可以在Windows,Linux,IOS等各種操作系統(tǒng)上無縫使用課程學(xué)習(xí)助手系統(tǒng),采用Java語言開發(fā)軟件,以實(shí)現(xiàn)跨系統(tǒng)的運(yùn)行兼容性。
課程學(xué)習(xí)助手系統(tǒng)的界面設(shè)計(jì),選擇Swing作為底層界面顯示框架。它能夠提供豐富多樣的窗口和控件,使得界面設(shè)計(jì)變得輕松而靈活。Swing不僅提供可定制的用戶界面元素,還具備多種消息傳遞機(jī)制,可以實(shí)現(xiàn)用戶與軟件有效交互。
系統(tǒng)分別針對(duì)Java語言、Python語言以及編程中出現(xiàn)的Bug進(jìn)行測試。
Java語言測試中,首先測試注釋解讀關(guān)鍵字。在注釋里輸入“寫一個(gè)帶Main函數(shù)的類”,很快在ChatGPT反饋區(qū)中,就展示如何使用Java語言編寫一個(gè)帶有Main函數(shù)的類,并在圖1所示的測試結(jié)果圖中用右邊灰色區(qū)域提示用戶相應(yīng)的操作;繼續(xù)在注釋行里輸入“寫一個(gè)九九乘法表”,ChatGPT反饋區(qū)馬上顯示完整的九九乘法表代碼,并告訴用戶這段代碼的執(zhí)行結(jié)果。
Python語言測試中,對(duì)注釋解讀關(guān)鍵字進(jìn)行測試。在注釋中輸入“引入圖形顯示庫”,在ChatGPT反饋區(qū)中,就展示了Python的圖形顯示庫如何引用。對(duì)代碼注解關(guān)鍵字進(jìn)行測試,輸入一個(gè)for循環(huán)代碼,ChatGPT詳細(xì)解釋用戶輸入for語句的含義,并給出更多的for循環(huán)示例。測試結(jié)果如圖2所示。
圖2 Python編程測試結(jié)果圖
以Java語言為例,進(jìn)行Bug查找關(guān)鍵字測試。書寫一個(gè)錯(cuò)誤的if語句,ChatGPT馬上發(fā)現(xiàn)這個(gè)錯(cuò)誤,并給出正確寫法,同時(shí)向用戶詳細(xì)解釋原因。測試結(jié)果如圖3所示。
圖3 Bug編程測試結(jié)果圖
實(shí)驗(yàn)測試結(jié)果表明,課程學(xué)習(xí)助手系統(tǒng)在處理各種編程語言方面表現(xiàn)出色。通過針對(duì)不同關(guān)鍵字的檢測,能夠滿足用戶多樣化需求,為用戶在學(xué)習(xí)編程過程中提供豐富支持和幫助。但系統(tǒng)仍存在不完善之處,如由于用戶的原因輸錯(cuò)關(guān)鍵字,將“for”輸成“far”,則系統(tǒng)無法使用模糊比對(duì)方式命中該關(guān)鍵字,從而失去對(duì)用戶的矯正。
隨著ChatGPT的推出和發(fā)展,研究人員在各個(gè)領(lǐng)域?qū)ζ溥M(jìn)行了深入研究,但大部分研究還停留在理論探討層面。本文通過設(shè)計(jì)一款基于ChatGPT的計(jì)算機(jī)編程語言課程學(xué)習(xí)助手系統(tǒng),圍繞API調(diào)用、數(shù)據(jù)集構(gòu)建、關(guān)鍵字構(gòu)建三個(gè)技術(shù)點(diǎn)實(shí)現(xiàn)系統(tǒng)功能,將ChatGPT強(qiáng)大潛力轉(zhuǎn)化為實(shí)際教育領(lǐng)域中的創(chuàng)新和應(yīng)用。通過一系列的測試和評(píng)估,該系統(tǒng)在教學(xué)環(huán)境中能夠順利運(yùn)行,并在實(shí)際計(jì)算機(jī)編程語言教學(xué)環(huán)境中為教師和學(xué)生提供幫助。