最近,我们发布了新版本的 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): Remove this field injection and use 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: Slack Tokenregex: "(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 上进行反馈与交流。