Shire 0.5 发布:构建数据安全 RAG,充分整合研发资产

最近,我们发布了新版本的 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 中的结果,含有问题的详细信息。

你就可以直接使用这两个变量,来进行代码质量检查与修复。示例如下:

go 复制代码
修复如下的 Sonar 问题:
$sonarResults

输出示例如下:

go 复制代码
修复如下的 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。如下是一个简单的示例:

go 复制代码
---
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 函数,增加了对正则表达式的支持。如下是一个简单的示例:

go 复制代码
---
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 作为敏感数据的配置文件, 用于对数据进行脱敏处理。

普通变量使用示例:

go 复制代码
---
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

在该文件中,你可以定义一些敏感数据的规则,如:

go 复制代码
patterns:
  - pattern:
      name: Slack Token
      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 上进行反馈与交流。