我做了一個 VSCode 插件版的 ChatGPT

来源:https://www.cnblogs.com/fengzheng/archive/2023/05/11/17389879.html
-Advertisement-
Play Games

大家好,我是風箏 其實很早之前就想學學 VSCode 插件開發了,但是又不知道做什麼,加上我這半吊子前端水平,遲遲沒有動手。 最近 ChatGPT 火的一塌糊塗,我也一直在用,真的非常好用,有些問題之前需要 Google 搜索,現在用 ChatGPT 基本上都能直接解決,效率提升了不少。 但是吧,瀏 ...


大家好,我是風箏

其實很早之前就想學學 VSCode 插件開發了,但是又不知道做什麼,加上我這半吊子前端水平,遲遲沒有動手。

最近 ChatGPT 火的一塌糊塗,我也一直在用,真的非常好用,有些問題之前需要 Google 搜索,現在用 ChatGPT 基本上都能直接解決,效率提升了不少。

但是吧,瀏覽器和 IDE 來回切換又很麻煩,所以我靈機一動,那就開發個 ChatGPT 插件吧,即可以學習學習 VSCode 插件開發,又可以做一個方便的效率工具,豈不是一舉兩得,美哉美哉。

於是我就動手寫了下麵這個插件,叫做 mini ChatGPT,現在已經發佈到 VSCode 插件市場了。

有條件的同學可以安裝一下,試試效果如何。

插件功能特點

  • 界面簡潔,沒有多餘的干擾;
  • 像 ChatGPT 官網輸出效果一致,打字效果實時輸出;
  • 支持兩輪上下文(太多了浪費 tokens),大致等於支持上下文;
  • 代碼美化+格式化,並且可以一鍵複製,直接粘貼到 vscode 中;

插件安裝

當然了,這是需要正確的上網姿勢。

你可以直接在 VSCode 的商店直接搜索 mini ChatGPT安裝。

也可以到應用市場上安裝。

插件地址:https://marketplace.visualstudio.com/items?itemName=fengzheng.code-chatgpt-assistant

插件使用

  1. 點擊查看->命令面板,或者使用快捷鍵(MacOS: Shift + Command + P,Windows:Shift + Control + P
  2. 輸入 Chat 並回車。
  3. 如果是首次使用,會彈出提示輸入框,在此輸入 ChatGPT 的 API。使用的就是原滋原味的 ChatGPT API 介面,官網上都寫的很清楚,所以需要使用插件的小伙伴提供自己賬號的 API key。下麵有介紹如何獲取ChatGPT API key。
  4. 之後就可以使用啦
  5. 如果之後想更換 ChatGPT 的 API key,在命令面板中輸入 ChatGPT API 即可。

使用建議

此插件只有一個 webview 實現,打開之後獨占一個 tab,可以設置向左或向右拆分,然後在左側使用此插件向 ChatGPT 提問,右側是代碼文件,這樣就不用來回切換了,而且可以將代碼片段一鍵複製,然後直接運行。

獲取 ChatGPT API key

  1. 先準備好正確的上網工具,不要用亞洲節點。

  2. 之後到 OpenAI 官網註冊賬號。

  3. 個人中心 創建一個 API key。

開發歷程

作為一個後端開發,我的前端水平是非常一般的,所以代碼中有瑕疵的地方還請見諒。對了,代碼已經放到 GitHub 上了。

倉庫地址:https://github.com/huzhicheng/vscode-ChatGPT

VSCode 插件開發,官方建議是用 TypeScript 開發,所以項目完全採用了 TS 開發。由於功能比較簡單,沒有那麼多複雜的設置,由於邊學邊做,太複雜的也沒考慮。整個插件的核心其實就是一個 webview,在webview中實現界面佈局和樣式,難點就在於webview與插件本身來回的數據傳遞,但也都是常規用法。

整個寫代碼的過程其實也就幾個小時,當然過程中的遇到的一些問題我都是跟 ChatGPT 提問的,包括樣式都是直接描述需求,ChatGPT 給我一個大致的框架,我再微調一下就可以了。

所以這樣看下來,其實是我和 ChatGPT 合作開發的。

後來發佈到應用商店,寫 readme 介紹和使用說明花了一些時間。

問題和建議

目前的版本功能比較簡單,沒有 ChatGPT 官方的聊天記錄列表功能,如果真的有人用的話,後期考慮加上。

由於ChatGPT 官方並未提供上下文的 API 支持,所以只能採用其他方式模仿上下文能力,目前的做法是記錄前兩輪提問和回答,然後在下次提問的時候,將前兩輪的提問和回答告訴 ChatGPT ,並且明確告訴 ChatGPT,例如下麵這樣。

第一輪問題:你好。

第一輪迴答:你好,請問有什麼要幫忙的嗎?

第二論問題:請幫我寫一段 Python 爬蟲抓取知乎回答的 demo。

第二輪迴答:好的,下麵是一段抓取知乎回答的 Python 示例。....省略多行代碼。

第三輪問題:幫我改成 Java 的。

這時候,我會將實際的 prompt 改成下麵這樣的。

下麵中括弧部分是前兩輪的問題和回答,只用作參考。[my question is:"你好",your anwser is:"你好,請問有什麼要幫忙的嗎?".my question is:"請幫我寫一段 Python 爬蟲抓取知乎回答的 demo。",your anwser is:"好的,下麵是一段抓取知乎回答的 Python 示例。....省略多行代碼。".]

下麵引號包含的這部分是真正的問題:"幫我改成 Java 的。"

採用這種方式,幾乎可以模擬上下文的操作,但是偶爾會出現錯亂,這塊兒還有優化空間,還會繼續優化。

如果各位小伙伴使用過程中發現什麼問題,或者有什麼更好的建議,都可以加我好友直接跟我說。

歡迎捧場,趕緊用一用吧,覺得好用的話,可以推薦給身邊的小伙伴也用一下。

人生沒有回頭路,珍惜當下。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、本文想給你聊的東西包含一下幾個方面:(僅限於es6之前的語法哈,因為es6裡面class這關鍵字用上了。。) 1.原型是啥?原型鏈是啥? 2.繼承的通用概念。 3.Javascript實現繼承的方式有哪些? 二、原型是啥?原型鏈是啥? 1.原型是函數本身的prototype屬性。 首先js和ja ...
  • 背景: 本來項目開發系統防掛機功能,在其餘游覽器中均可以使用。但是呢在蘋果的safair游覽器中會出現幾率失效,最後經過排查發現是蘋果的墓碑機制導致。即:此標簽頁活躍,其他標簽頁假死。然後就導致防掛機失效了。 原理: 假如當前游覽器中有3個標簽頁分別是A,B,C,每個標簽頁都有倒計時。正常情況下,每 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 Vue3+TS(uniapp)手擼一個聊天頁面 前言 最近在自己的小程式中做了一個智能客服,API使用的是雲廠商的API,然後聊天頁面...嗯,找了一下關於UniApp(vite/ts)版本的好像不多,有一個官方的但其中的其他代碼太多了, ...
  • 本系列內容為JS全解析,為千鋒教育資深前端老師獨家創作 致力於為大家講解清晰JavaScript相關知識點,含有豐富的代碼案例及講解。如果感覺對大家有幫助的話,可以【點個關註】持續追更~ this指向(掌握) this 是一個關鍵字,是一個使用在作用域內的關鍵字 作用域分為全局作用域和局部作用域(私 ...
  • 1、深拷貝 1.1、概念 對象的深拷貝是指其屬性與其拷貝的源對象的屬性不共用相同的引用(指向相同的底層值)的副本。 因此,當你更改源或副本時,可以確保不會導致其他對象也發生更改;也就是說,你不會無意中對源或副本造成意料之外的更改。 在深拷貝中,源和副本是完全獨立的。深拷貝與其源對象不共用引用,所以對 ...
  • 作者:京東科技 牛志偉 近期對Webpack5構建性能進行了優化,構建耗時從150s到60s再到10s,下麵詳細講解下優化過程。 優化前現狀 1.歷史項目基於Vue3 + Webpack5技術棧,其中webpack配置項由開發者自己維護(沒有使用@vue/cli-service),並且做了環境分離。 ...
  • 效果如下 代碼實現 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>帖子類別</title> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Comp ...
  • 在JavaScript中,箭頭函數是一種簡化的函數語法,它在ES6(ECMAScript 2015)引入。箭頭函數的語法比傳統的function表達式更簡潔,同時還有一些特性,例如繼承外部作用域的this值。 箭頭函數的基本語法如下: (param1, param2, ..., paramN) => ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...