最近,我們釋出了新版本的 Shire,在這個新的釋出(Shire 0.5)裡,你可以更好地融合本地研發資產,同時構建資料安全 RAG。在這次版本中,我們增加了:
-
對 SonarQube 的 issue 支援。可以直接獲取到當前檔案的 SonarQube 問題列表等。
-
增強了 ShireQL 的能力。增加了對 Git 的支援,可以直接對 Git 進行查詢與分析。
-
自定義 RAG 能力增強。增加了
reranking
函式,用於對檢索到的資訊進行重新排序。 -
新增了 AI 資料安全保護函式:
redact
。可以對資料進行脫敏處理。 -
自定義
.shireSecretPattern.yaml
。用於定義自定義的敏感資料規則。
有了這些新能力,你可以快速、安全地構建自己的 AI 編碼智慧體。
開始之前,再讓我們回顧一下 Shire 的基本能力:
Shire 是一個基於 IDE 的開源 AI 編碼智慧體語言,你可以用 Shire 建立輕量級編碼任務、編碼智慧體。其 Prompt 即程式碼的實踐方式,可以讓你與團隊 成員共享這些編排好的 AI 任務。
整合研發生態,融合資料資產
Shire 的核心能力在於透過 Shire 語言來抽象 IDE 的 API,同時利用 IDE 的生態(外掛、工具等)來提供更多的能力。IDE 本身提供了大量的資料資產,如程式碼 、版本管理等,而其生成(如外掛)則提供了更多的能力,如程式碼質量檢查、程式碼生成等。
作為 AI 輔助研發的非常重要的一部分,我們需要整合這些生態資產、組織內部研發資產,以提供更好的 AI 能力,提升開發人員的效率。
結合 SonarQube 的程式碼質量檢查與修復

在先前版本中,你可以透過
$codeSmell
變數來獲取當前檔案的程式碼壞味道問題。在 0.5 版本中,我們增加了對 SonarQube 的支援, 你可以直接獲取到當前檔案的 SonarQube 問題列表等。新功能要求你的 IDE 安裝了 SonarQube 外掛時,你就可以透過 Shire 與 SonarQube 進行互動。當前,Shire 支援兩個變數:
-
sonarIssues
,當前檔案的 SonarQube 中的問題列表。 -
sonarResults
,當前檔案的 SonarQube 中的結果,含有問題的詳細資訊。
你就可以直接使用這兩個變數,來進行程式碼質量檢查與修復。示例如下:
-
修復如下的Sonar問題:
-
$sonarResults
輸出示例如下:
-
修復如下的Sonar問題:
-
File: file:///Users/phodal/IdeaProjects/shire-demo/src/main/java/com/phodal/shire/demo/service/BlogService.java
-
- MAJOR,(293,303):Removethis field injection anduse constructor injection instead.
-
-[]
ShireQL 增強:Git 支援

ShireQL 是一個基於 IDE 的資料查詢語言,它允許你查詢當前檔案的 AST(抽象語法樹)、Git、依賴資訊等。它在 Shire 中用於定義當前檔案的上下文以及可以在當前檔案上執行的操作。
在上一個版本中,ShireQL 原來只針對的是程式碼檔案(PsiClass、 PsiMethod 等)。而在在這個版本中,我們增加了對 Git 的支援,並將其重新命名為 ShireQL。如下是一個簡單的示例:
-
---
-
variables:
-
"phodalCommits":{
-
from{
-
GitCommit commit,Date date
-
}
-
where{
-
commit.authorName =="Phodal Huang"and commit.authorDate <= date.now()
-
}
-
select{
-
commit.authorName, commit.authorEmail, commit.message
-
}
-
}
-
---
-
根據如下的資訊,總結這個人的提交:
-
$phodalCommits
更詳細的文件見:https://shire.phodal.com/shireql
構建資料安全的 RAG

由於 Shire 的使用者都是使用公開的模型,因此在處理資料時,我們需要保護資料的隱私。在這個版本中,我們增加了一些新的功能,用於保護資料的隱私。
使用 sed 函式保護資料
在新的版本中,我們優化了
sed
函式,增加了對正則表示式的支援。如下是一個簡單的示例:-
---
-
variables:
-
"var2":/.*ple.shire/{ cat | sed("(?i)\b(sk-[a-zA-Z0-9]{20}T3BlbkFJ[a-zA-Z0-9]{20})(?:['|\"|\n|\r|\s|\x60|;]|${'$'})","sk-***")}
-
---
-
Summary webpage: $var2
在這個例子中,我們定義了一個變數
var2
,它的值是從所有 *.shire
檔案中檢索 openai key 的內容,並對其進行脫敏處理。而考慮到,有大量的類似 場景,所以我們添加了新的函式 redact
。AI 資料安全保護函式: redact
資料安全保護函式(Data Guarding Functions)是用於進行對與模型互動的資料進行資料保護、去敏感化等操作的一種機制。
在 redact 函式中, 我們使用 db/pii-stable.yml 作為敏感資料的配置檔案, 用於對資料進行脫敏處理。
普通變數使用示例:
-
---
-
variables:
-
"var2":/.*ple.shire/{ cat | redact }
-
---
在這裡,程式碼中類似於
086-1234567890
這樣的手機吰資訊,將會被脫敏為 "****"
。詳細見:https://shire.phodal.com/data-privacy/guarding-functions
自定義 .shireSecretPattern.yaml
除此,我們還在 Shire 中支援與 Secrets Patterns DB 相似的配置檔案,用於對資料進行脫敏處理。你可以在專案中新建一個
.shireSecretPattern.yaml
結尾的檔案,用於定義自定義的敏感資料規則,如: Phodal.shireSecretPattern.yaml
。在該檔案中,你可以定義一些敏感資料的規則,如:
-
patterns:
-
- pattern:
-
name:SlackToken
-
regex:"(xox[pborsa]-[0-9]{12}-[0-9]{12}-[0-9]{12}-[a-z0-9]{32})"
-
confidence: high
隨後,Shire 將會在處理資料時,自動對匹配到的資料進行脫敏處理。
其它更新
除了上述的更新外,我們還增加了一些其它的一些功能。
自定義 RAG 能力增強: reranking
在 RAG 函式中, 我們增加了
reranking
函式,用於對檢索到的資訊進行重新排序。不過,當前僅支援 lostInTheMiddle 模式,未來我們將新增更多的 適合於編碼場景的 reranker
。.shire
字尾推薦
如下圖所示,當你在專案中建立一個
.shire
檔案時,IDE 會判斷是否存在 Shire 外掛,如果沒有則會提示你安裝。
這樣一來,你就擁有了一種更加簡單的方式來與 IDE 進行互動。
總結
構建自定義 AI 編碼智慧體,是一個非常有趣的事情。透過 Shire,你可以更好地整合研發資產,構建資料安全的 RAG,以及更好地保護資料隱私。如果你有 任何問題,歡迎在 GitHub 上進行反饋與交流。