如何通過AI掃描代碼中的問題

??代碼質量其實在需求高壓,業務快速迭代的場景下往往容易被人忽視的問題,大家的編碼習慣和規范也經常會各有喜好,短期之內獲取看不出來什么問題,但長此以往就會發現,屎山逐步成型了,而線上代碼跑著往往就不想改也不敢改了,所以團隊成員有一個良好的開發習慣,統一的編碼規范和一定的代碼潔癖是很重要的。
??但是項目代碼量一上來,其實再想逐行分析代碼的問題就很麻煩了,由此便有了本文的亡羊補牢的方案。(最好還是防患于未然,不要亡羊補牢,至于預防方案后續再更)。

設計圖

在這里插入圖片描述

clone代碼

賬號準備

??公共賬號1個,使用公共賬號作為clone倉庫的賬號,避免使用個人賬號受權限和人員變動影響

clone工具

??可以通過simple-git或者直接執行shell命令的方式來操作git倉庫代碼,機器硬盤存儲空間充足的情況下可以考慮保存clone后的代碼目錄,clone前檢查是否存在,存在就pull更新避免每次clone提高效率

入口文件分析

??一般而言倉庫代碼入口文件是可知的,拿前端代碼舉例,一般為路由對應的頁面入口文件或者npm包的入口文件。尤其在團隊規范統一的情況下,入口文件的邏輯應該是一個相對標準的,更加易于識別。

構建依賴圖

??“依賴”和“圖”是兩個點,前端代碼我們可以像項目構建一樣,通過@babel/parser中的parse來從入口文件開始解析成ast,然后通過@babel/traverse來遍歷ast解析其代碼依賴文件,遞歸處理獲取依賴關系,其他語言的項目也會有類似的工具可以處理。因為代碼依賴不會是一個簡單的“樹”形結構,往往樹“圖”結構的,而“圖”的結構數據體積也會相對小一些。

代碼分塊

??模型在一次對話的輸入數據的大小往往是有限制的,也就是常見的長文本處理問題。我們在通過@babel/parser獲取ast后可以通過遍歷ast.program.body來獲取完整的代碼區塊。

const ast = parse(code, {sourceType: 'module',plugins: ['typescript'],errorRecovery: true,attachComment: false,});
for (const node of ast.program.body) {const codeSnippet = code.slice(node.start, node.end);// TODO: 自行拼接代碼區塊}

然后按照模型單次對話接收文本長度閾值的限制來拼接代碼塊,分多次對話提供給模型,利用模型記憶多輪歷史對話的能力即可全部提供給模型。

模型分析

??模型在接收完全部代碼區塊和依賴圖數據后,對內容進行整體分析即可檢查出代碼存在的問題,此外我們可以通過在知識庫中補充團隊的代碼規范、優秀代碼demo示例等信息利用RAG的能力來提高輸出結果的質量。因為模型會存在幻覺的問題,所以我們在模型輸出一波問題以后讓其參考人工標注過的無效問題數據來進行二次過濾,篩選出真正有效的問題,自此便可以拿到我們需要的結果


備注

提示詞書寫可以參考之前的文章:如何寫高效的Prompt?

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

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

相關文章

Java 大視界 -- Java 大數據機器學習模型在金融衍生品市場波動特征挖掘與交易策略創新中的應用(363)

Java 大視界 -- Java 大數據機器學習模型在金融衍生品市場波動特征挖掘與交易策略創新中的應用(363)引言:正文:一、Java 構建的金融數據處理架構1.1 多源異構數據實時融合1.2 新聞輿情與市場沖擊建模二、Java 驅動的波動特征挖掘與…

Cartographer安裝測試與模塊開發(三)--Cartographer在Gazebo仿真環境下的建圖以及建圖與定位階段問題(實車也可參考)

參數介紹之所以要首先介紹參數而不是實操,是因為大部分建圖失敗、漂移基本上都是參數設置錯誤引起的,或者說大部分都是TF存在問題,主要是坐標系Frame之間有沖突或者對不上等原因導致的,因此把參數放在前面介紹,了解了參…

uniapp nvue開發App 橫豎屏切換丟失上下文導致 setTimeout和clearTimeout報錯

報錯內容如下 [JS Framework] Failed to find taskCenter (35). [JS Framework] Failed to execute the callback function:TypeError: c.clearTimeout is not a function reportJSException >>>> exception function:__WEEX_CALL_JAVASCRIPT__, exception:JavaSc…

Mirauge3D 賦能:全自動建模,讓城市規劃與建筑設計擁有高分辨率實景三維模型

在數字化浪潮席卷各行各業的當下,高精度、多元化的空間數據已成為基礎測繪、智慧城市建設、自然資源管理等領域高質量發展的核心支撐。從城市交通網絡的智能規劃到國土空間的優化配置,從災害監測的精準預警到生態環境保護的科學決策,空間數據…

Javaweb————學習javaweb的預備知識

??????一.javase,javaweb,javaee的區別和聯系 💙💙💙javase: 通俗的來講就是java技術棧,做java相關開發的基礎,比如javaweb,javaee開發都是必備javase的基礎的,包括java語言基礎&#xff…

zabbix服務自動發現、自動注冊及配置釘釘告警(小白的“升級打怪”成長之路)

目錄 一、自動發現及自動注冊 1、自動發現 2、自動注冊規則 二、監控告警并發送電子郵件 1、設定發郵件的地址 2、設定發郵件的用戶 3、設定監控及觸發的條件 4、開始告警并設置觸發發郵件 三、釘釘告警 1、配置zabbix-server 2、配置監控及觸發 3、web頁面操作 4、…

OSPF多區域

OSPF多區域劃分的必要性 OSPF單區域存在的問題 LSDB 龐大,占用內存大,SPF計算開銷大。 LSA洪泛范圍大,拓撲變化影響范圍大。 路由不能被匯總,路由表龐大,查找路由開銷大 解決辦法 劃分區域可以解決上述問題 每個區域獨…

質數、因數、最大公約數經典問題整理

1、計數質數 MX 5000000 is_prime [1] * MX is_prime[0] is_prime[1] 0 for i in range(2, MX):if is_prime[i]:for j in range(i * i, MX, i):is_prime[j] 0class Solution:def countPrimes(self, n: int) -> int:return sum(is_prime[:n]) 2、序列中不同最大公約數的…

Java NIO FileChannel在大文件傳輸中的性能優化實踐指南

Java NIO FileChannel在大文件傳輸中的性能優化實踐指南 在現代分布式系統中,海量數據的存儲與傳輸成為常見需求。Java NIO引入的FileChannel提供了高效的文件讀寫能力,尤其適合大文件傳輸場景。本文從原理深度解析出發,結合生產環境實戰經驗…

SQLite Insert 語句詳解

SQLite Insert 語句詳解 SQLite 是一種輕量級的數據庫管理系統,它以其簡潔的設計、強大的功能和易于使用而聞名。在 SQLite 中,INSERT 語句用于向數據庫表中添加新數據。本文將詳細介紹 SQLite 的 INSERT 語句,包括其基本語法、使用方法以及一些高級特性。 基本語法 SQLi…

git更新內核補丁完整指南

Git操作完整指南 ?? 目錄 項目概述 Git基礎配置 日常操作流程 補丁更新操作 分支管理 沖突解決 常見問題 最佳實踐 命令速查表 ?? 項目概述 </

關于回歸決策樹CART生成算法中的最優化算法詳解

首先&#xff0c;一共比如有M個特征&#xff0c;N個樣本&#xff0c;對于每一個特征j&#xff0c;遍歷其中的N個樣本&#xff0c;得到N個值中&#xff0c;最小的值&#xff0c;作為這個特征的最優切分點&#xff0c;而其中的c1&#xff0c;c2是可以直接得到的。然后&#xff0c…

Ubuntu 環境下創建并啟動一個 MediaMTX 的 systemd 服務

文章目錄一、簡介二、安裝及使用三、創建系統服務小結一、簡介 MediaMTX 是一個現代、高性能、跨平臺的 流媒體服務器&#xff0c;主要用于接收、轉發、轉碼和分發 音視頻流&#xff0c;支持多種協議。它的前身是 rtsp-simple-server&#xff0c;后來重命名為 MediaMTX&#x…

在React中,函數式組件和類組件各有優缺點

函數式組件&#xff1a;無this&#xff0c;無生命周期&#xff0c;配合使用useEffect&#xff0c; 可使用Hooks。 類組件&#xff1a;有生命周期&#xff0c;狀態管理&#xff0c;無Hooks&#xff0c;適用于需要明確生命周期方法和實例方法的場景。 函數式組件 優點&#xff1a…

【SketchUp插件推薦】Profile Builder 4.0 中文版下載安裝使用教程(含語言設置圖解)

一、插件簡介 Profile Builder 4.0 是一款適用于 SketchUp 2017-2024 的高效參數化建模插件&#xff0c;中文名稱為「參數化造型建模工具」。該插件基于參數化設計原理&#xff0c;允許用戶通過簡單的路徑定義和參數設定&#xff0c;快速生成智能模型&#xff0c;從而大幅提高…

【小沐學GIS】基于Unity3d繪制三維數字地球Earth(Unity3d、OpenGL、GIS)

&#x1f37a;三維數字地球GIS系列相關文章如下&#x1f37a;&#xff1a;1【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐學GI…

ARM匯編的一些編寫和調用規范總結

ARM匯編在格式上有少數硬性要求&#xff0c;在排版上幾乎沒什么硬性要求&#xff0c;都不多&#xff0c;以下分別說明。格式要求 ARM 匯編有一些格式上的硬性要求&#xff0c;這些規則由匯編器&#xff08;如 GNU 的gas、ARM 官方的armasm&#xff09;強制執行&#xff0c;違反…

FastAPI框架下集成智譜大模型的RAG流式響應服務框架

RAG&#xff08;檢索增強生成&#xff09;是結合檢索與生成式 AI 的技術框架。核心邏輯是先從外部知識庫精準檢索相關信息&#xff0c;再將其作為上下文輸入大模型生成回答。技術上依賴檢索引擎&#xff08;如向量數據庫、BM25&#xff09;、大語言模型&#xff08;如 GPT、LLa…

基于深度學習的胸部 X 光圖像肺炎分類系統(三)

目錄 二分類胸片判斷&#xff1a; 1. 數據加載時指定了兩類標簽 2. 損失函數用了二分類專用的 3. 輸出層只有 1 個神經元&#xff0c;用了sigmoid激活函數 4. 預測時用 0.5 作為分類閾值 二分類胸片判斷&#xff1a; import numpy as np import matplotlib.pyplot as plt f…

深入理解 BIO、NIO、AIO

目錄 一、同步與非同步 二、阻塞與非阻塞 三、BIO&#xff08;Blocking I/O&#xff0c;阻塞I/O&#xff09; 四、NIO&#xff08;Non-blocking I/O&#xff0c;非阻塞I/O&#xff09; 五、AIO&#xff08;Asynchronous I/O&#xff0c;異步I/O&#xff09; 同步阻塞&…