一個開源的 VS Code 大模型聊天插件:Light-at

這篇文章是一個開發雜談。對于有經驗的開發者來說,可能這個項目并不算特別復雜或者高技術,只是對我個人來說算一個里程碑,因此寫篇雜談文章記錄一下。也許也能給起步者一些參考。


項目地址:https://github.com/HiMeditator/light-at

插件下載:Light At - Visual Studio Marketplace

背景

最近組里在做相關項目,學了些 VS Code 插件開發,就想著自己做一個插件。花了一個月,終于做出一款個人還算滿意的插件,這也是第一次一個人做原創項目,下面介紹一下。

自從大模型出現后,開發就越來越依賴大模型了。再后來以 Copilot 為首的 IDE 內智能代碼助手更是讓 IDE 內開發更加方便。這些智能代碼插件重點關注代碼功能,比如代碼補全、代碼生成、錯誤修復。對于 IDE 內聊天也側重于代碼相關的內容。作為 VS Code 重度用戶,有時候覺得這些智能代碼助手在通用聊天上有些不足,于是我準備自己做一個大模型聊天插件,著重關注聊天功能(還沒做代碼功,能主要是技術難度要高得多)。

如圖,流行的智能助手基本不渲染數學公式

目前主流的智能助手插件(不代表全部)在聊天上可能的缺點有:

  1. 不渲染數學公式(這個沒太大技術壁壘,可能是覺得沒必要)
  2. 模型選擇有限,一般只支持自家模型和開源模型(自己不做模型的Continue不在其中)
  3. 缺少多模態交互(這個我也沒做😂,現在有多模態大模型API,技術上可行)

插件介紹

Light-at(輕亮)插件主要是為了解決問題1和問題2。數學渲染使用了開源的庫,為了同時能正確渲染 markdown(marked庫)、代碼(highlight.js庫)和數學公式(katex庫)調了好久。

公式渲染和代碼高亮

模型支持本地 Ollama 模型和云端的支持 OpenAI 接口的模型,直接配置好需要的模型調接口就行了。自己電腦有條件的可以搞幾個 Ollama 本地模型玩玩,離線模型回答會更自由一些。云端模型主要測試了通義千問 API、DeepSeek API 和 OpenAI API,均可以正常使用。

我目前的模型列表

另一個優點是可以配置 System Prompt(系統提示詞),這樣可以基于一個模型衍生出多個滿足特定需求的分支,用于完成不同的任務。

添加系統提示詞,apiKey 可以使用環境變量

然后是支持選擇打開過的文本文件作為聊天上下文。主流的智能助手在這方面往往有更強大的支持,比如包含文件夾、代碼塊檢索等。不過對于單純聊天來說,現在的上下文選擇功能也基本上夠了。現在我的技術積累還不足,后面再考慮提升吧。

聊天上下文選擇

還有一些其他基本功能,比如支持多語言(中文、英語、日語)、聊天記錄保存、刪除聊天條目、回答內容快速復制、對模型推理內容的單獨展示等。更多內容可以參考Light-at用戶手冊。

聊天記錄管理,右邊是插件設置

開發過程

功能介紹得差不多了,再講講開發過程吧。這個插件可以分為前端和插件端。

前端開發

前端主要顯示用戶界面,獲取用戶輸入并展示反饋內容。前端剛開始我是用原生(html+css+js)寫的,隨著項目內容逐漸增加,前端維護越來越越痛苦,各種全局變量和 DOM 操作亂飛。因此我決定重構前端。

本科學了 Vue2,因此決定使用 Vue 開發前端。學了整整三天 Vue3,然后開始重寫項目。我放棄了之前寫的Light-assistant項目,重開了一個倉庫,取名為Light-at。

VS Code 插件中前端界面比較特殊,是通過 Webview 展示的,有很多限制,比如只能加載 VS Code 處理過的本地資源,頁面跳轉難以實現等。

我在網上查了一天資料,各種試錯,才終于搞定了在 VS Code 插件中嵌入 Vue 前端頁面的問題。我現在插件的架構基本上是按照_code_bear的帖子構建的,采用 monorepo 的開發范式,使用 pnpm 在同一個倉庫中同時管理前端子項目和插件子項目。

但是根據教程也是遇到了一些問題,比如某些實現有些復雜、插件打包會報錯。經過多次修改,總結了自己的開發流程,這是對我這個插件開發入門者一個比較寶貴的經驗。以后有時間專門開一個帖細說:用 Vue3 開發 VS Code 插件的前端頁面

本次開發沒有使用前端組件庫,大部分樣式都是手搓的,因為有點強迫癥,經常一個樣式調好久。

插件端開發

插件端開發要簡單一些,不了解的內容就問大模型或者查 VS Code 插件文檔,功能實現注意模塊化,盡量降低耦合,不然后面開發容易出現牽一發動全身的問題。

為了做國際化(多語言支持)還是花了一些功夫,插件端配置文件需要 package.nls.*.json 國際化、插件內的內容需要 l10n 國際化,前端界面使用 i18n 國際化。內容不多但搞了三個方案才全部支持多語言。最近在學日語,就把日語支持也做進去了,內容基本上是大模型翻譯的,我就主要能看懂片假名,語法是否正確就不知道了。

總結

總的來說算是一次不錯的開發經歷,自己做出來的東西也自己用著也挺舒服的,后面如果有新的需求還能繼續改進。

項目目前代碼量并不高,并不算復雜,歡迎感興趣的同學參考:Github - Light At。

最后貼一張項目結構圖:

標看上去很長,但是代碼量不多

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900487.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900487.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900487.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL121 創建索引

-- 普通索引 CREATE INDEX idx_duration ON examination_info(duration);-- 唯一索引 CREATE UNIQUE INDEX uniq_idx_exam_id ON examination_info(exam_id);-- 全文索引 CREATE FULLTEXT INDEX full_idx_tag ON examination_info(tag);描述 現有一張試卷信息表examination_in…

【Pandas】pandas DataFrame set_flags

Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于獲取 DataFrame 的行索引DataFrame.columns用于獲取 DataFrame 的列標簽DataFrame.dtypes用于獲取 DataFrame 中每一列的數據類型DataFrame.info([verbose, buf, max_cols, …])用于提供 Dat…

Linux終止進程(kill process)的一些玩法

經常運行一個程序時,表面上已經終止了,實際上還在后臺運行。一來呢,它可能占據端口,導致端口復用的時候報錯。二來呢,它可能占用GPU,讓你顯存直接少一塊。 尤其是在多進程程序,假如運行“python…

《比特城傳奇:公鑰、私鑰與網絡安全的守護之戰》

點擊下面圖片帶您領略全新的嵌入式學習路線 🔥爆款熱榜 88萬閱讀 1.6萬收藏 第一章:雙鑰之謎 比特城的清晨總是籠罩著一層薄霧,仿佛這座城市本身就是由無數個0和1編織而成的幻境。在這里,信息如同空氣般無處不在,但…

BGP路由協議之屬性1

公認屬性是所有 BGP 路由器都必須能夠識別的屬性 公認必遵 (Well-known Mandatory) : 必須包括在每個 Update 消息里公認任意 (Well-known Discretionary) : 可能包括在某些 Update 消息里。 可選屬性不需要都被 BGP 路由器所識別 可選過渡(OptionalTransitive) : BGP 設備不…

Pr視頻剪輯 Premiere Pro 2024 for Mac

Pr視頻剪輯 Premiere Pro 2024 for Mac 文章目錄 Pr視頻剪輯 Premiere Pro 2024 for Mac一、介紹二、效果三、下載 一、介紹 Premiere Pro 2024 for Mac是一款專業的視頻編輯軟件,廣泛應用于電影、電視、廣告等領域。它為Mac用戶提供了強大的剪輯、調色、音頻處理等…

oracle 包的管理

在PL/SQL程序開發中,為了方便實現模塊化程序的管理,可以將PL/SQL元素(如存儲過程、函數、變量、常量、自定義數據類型、游標等)根據模塊的程序結構組織在一起,存放在一個包中,稱為一個完整的單元&#xff0…

LINUX 5 cat du head tail wc 計算機拓撲結構 計算機網絡 服務器 計算機硬件

計算機網絡 計算機拓撲結構 計算機按性能指標分:巨型機、大型機、小型機、微型機。大型機、小型機安全穩定,小型機用于郵件服務器 Unix系統。按用途分:專用機、通用機 計算機網絡:局域網‘、廣域網 通信協議’ 計算機終端、客戶端…

從零開始的圖論講解(1)——圖的概念,圖的存儲,圖的遍歷與圖的拓撲排序

目錄 前言 圖的概念 1. 頂點和邊 2. 圖的分類 3. 圖的基本性質 圖的存儲 鄰接矩陣存圖 鄰接表存圖 圖的基本遍歷 拓撲排序 拓撲排序是如何寫的呢? 1. 統計每個節點的入度 2. 構建鄰接表 3. 將所有入度為 0 的節點加入隊列 4. 不斷彈出隊頭節點,更新其…

強化學習Q-Learning:DQN

強化學習Q-Learning/DQN 本文是一篇學習筆記,主要參考李宏毅老師的強化學習課程。 目前主流的強化學習方法大致可以分為 policy-based 和 value-based 兩大類。之前我們介紹的 policy gradient 策略梯度,就是 policy-based 的方法。本文要介紹的 Q-learn…

W公司云安全解決方案

1 安全理念DevOpvSec 統一安全運營 2 安全責任分層模型 3 云安全產品線 4 云安全解決方案/部署架構 5 安全能力 6 信創云平臺適配 7 統一化安全運營 利用云安全平臺實現統一的安全運維 8 安全資源池的統一納管 9 案例分享:私有云 10 云安全解決方案的衍生特點 11 …

python中的in關鍵字查找的時間復雜度

列表(List) 對于列表來說, in 運算符的復雜度是 O(n),其中n是列表的長度。這意味著如果列表中有n個元素,那么執行 in 運算符需要遍歷整個列表來查找目標元素。 以下是一個示例,演示了在列表中使用 in 運算…

MySQL基礎 [一] - Ubuntu版本安裝

目錄 預安裝 先查看自己操作系統的版本 添加MySQL APT下載源 下載 安裝 正式安裝 查看MySQL狀態 打開MySQL 預安裝 先查看自己操作系統的版本 lsb_release -a 添加MySQL APT下載源 下載 下載發布包 下載地址 : https://dev.mysql.com/downloads/repo/apt/ 這里下…

Springboot整合Mybatis+Maven+Thymeleaf學生成績管理系統

前言 該系統為學生成績管理系統,可以當作學習參考,也可以成為Spirng Boot初學者的學習代碼! 系統描述 學生成績管理系統提供了三種角色:學生,老師,網站管理員。主要實現的功能如下: 登錄 &a…

操作系統之文件系統

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/literature?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,…

AG32:MCU和CPLD如何交互?

本文檔介紹了AG32開發中,MCU與CPLD交互的具體方式以及例子。如需了解AG32更多資料可發郵件:salesagm-micro.com 一、MCU和CPLD直接交互 cpld工程創建及編譯的操作流程,參考文檔《AG32下fpga和cpld的使用入門》 在工程中,用戶邏輯…

機器人軌跡跟蹤控制——CLF-CBF-QP

本次使用MATLAB復現CLF-CBF-QP算法,以實現機器人軌跡跟蹤同時保證安全性能 模型 使用自行車模型來進行模擬機器人的移動動態,具體的模型推導參考車輛運動學模型-自行車模型 采用偏差變量 p ~ = p ? p r e f u ~ = u ? u r e f \tilde{p} = p - p_{ref} \\ \tilde{u} = …

009_抽象類和接口

抽象類和接口 final關鍵字常量 單例模式(設計模式)枚舉類抽象類抽象類的注意事項、特點使用抽象類的好處模版方法設計模式 接口接口的好處接口的注意事項 final關鍵字 final關鍵字是最終的意思,可以修飾類、方法、變量。 修飾類:…

新潮透明液體水珠水滴失真故障扭曲折射特效海報字體標題設計ps樣機動作素材 Bubble Photoshop Templates

只需單擊幾下即可創建引人注目的視覺效果!您需要做的就是將您的文本或圖像放入智能對象中并應用作。 包中包含: 15 個靜態 Photoshop 模板(PS 2019 及更高版本) 01-05 垂直布局 (22504000)06-10 水平布局…

Android DiaLog全屏設置,帶有叉號的彈窗,這個彈窗分為兩個部分,一個是主體,另一個是關閉部分。自定義布局彈窗

1.先上圖。要實現的效果圖。 2.這是我自己實現的效果圖,是不是跟效果圖一摸一樣 來看看整體效果 3.我把自己實現的效果圖的代碼寫出來。如下就是我的代碼 3.1首先是MainActivity類 import androidx.appcompat.app.AppCompatActivity;import android.app.Alert…