分享

2024 年 11 月 14 日

利用 Gemini API 增强 AI 赋能的开发者工具

Scott Werner

Sublayer 首席执行官

Paige Bailey

AI 开发者体验工程师

Vishal Dharmadhikari

产品解决方案工程师

子层展示英雄

过去一年人工智能的普及为开发者带来了两大机遇——将尖端人工智能集成到项目中变得极其容易,以及将人工智能驱动的效率提升到开发流程中。

Sublayer 是一个基于 Ruby 的 AI 代理框架,它通过将我们的 1.5 模型集成到其核心开发者产品以及其自身的工具工作流中,展示了 Gemini API 的强大功能和效率。

使用 Gemini 更新子层文档

对于开发者而言,AI 的一个机遇是让团队(尤其是小型初创公司)能够以更少的资源完成更多工作。对于许多人来说,这可能体现在文档等简单而关键的方面。在他们自己的工作流程中,Sublayer 通过将他们的库与 Gemini 1.5 Pro 集成,并构建 AI 自动化来解决这个问题,以支持保持文档更新和确定改进领域的工作。

“这一切都得益于 Gemini 庞大的上下文窗口,它让您有足够的空间来尝试新想法,而无需一开始就陷入复杂、优化的实现中,”

Sublayer 首席执行官 Scott Werner 最近在 Waste Inferences! 一文中写到了这个概念。

该工作流程如下:

  1. 每当 PR 合并到主 Sublayer 代码库中时,都会触发代理开始更新文档。

  2. 该代理会生成一个提示,其中包含库的全部内容、文档的全部内容以及 PR 的所有相关内容,并附带说明任务的指令,然后将该提示发送给 Gemini。

  3. 然后,Gemini 会返回结构化的输出,其中包含文件路径、名称和内容,Sublayer 库会将这些输出转换为可供使用的对象。

  4. 最后,代理会获取收到的结构化信息,并使用这些信息来创建新分支、对文件进行所请求的更改,以及提交新的 PR。

            
              
# Get the diff from the PR
diff = GithubGetDiffAction.new(repo: repo, pr_number: pr_number).call

# Get the contents of the library repository and docs repository
code_context = GetContextAction.new(path: code_repo_path).call
doc_context = GetContextAction.new(path: doc_repo_path).call

# Use Gemini 1.5 Pro to decide whether this PR requires a documentation update
result = DocUpdateNecessityGenerator.new(
  code_context: code_context,
  doc_context: doc_context,
  diff: diff
).generate

# Use Gemini 1.5 Pro to generate suggested changes to the documentation
doc_update_suggestions = DocUpdateSuggestionGenerator.new(
  code_context: code_context,
  doc_context: doc_context,
  context_ignore_list: context_ignore_list,
    diff: diff
).generate

# Use Gemini 1.5 Pro to generate the changes to the suggested files
file_updates = DocUpdateGenerator.new(
  code_context: code_context,
  suggestions: suggestions,
  doc_context: doc_context,
  context_ignore_list: context_ignore_list
).generate

# Update each of the files returned by Gemini 1.5 Pro and create a new PR  
          
            
          

Sublayer 的开源示例中查看完整的工作流代码

在第一个项目取得成功后,他们进一步扩展到监控独立资源库的代理,专注于保持其文档的特定目录页面保持最新状态。甚至还有一个类似的夜间运行任务,Gemini 会分析当前文档,确定几个需要改进的方面,根据影响程度对它们进行排名,并生成一个 PR,供 Sublayer 团队每天早上醒来后查看。

通过 Gemini 模型为 Ruby 开发者社区引入 AI

除了提高自身开发者基础设施和工具的效率外,Sublayer 还在其核心产品功能中支持 Gemini 模型。

Sublayer 的使命是赋能个人开发者和小团队,让他们能够应对以前由于成本或复杂性而无法实现的雄心勃勃的项目。他们专注于自动化繁琐、耗时、重复性的任务——这是人工智能的完美应用案例。这可能包括大规模代码迁移(需要重复数千次类似操作),也可能包括通过自动化处理清单上耗时耗力的小任务来提高日常效率。

Sublayer 的主要挑战在于支持 Ruby 开发者社区,该社区在 AI 生态系统中相对缺乏服务。通过集成 Gemini,他们能够满足其工具中对 Gemini 支持日益增长的需求。由于采用了抽象层,Sublayer 的 Gemini 实现效率很高,只需要大约 60 行代码。它们使用结构化输出,并通过单轮迭代流程与模型进行交互。这种方法可简化开发和调试流程,帮助开发者构建稳健的应用。

Werner 建议:“构建基于 LLM 的应用时,请将问题分解为尽可能小的组件。”“你需要设计出能够有效处理任何模型输出的程序,这甚至可能意味着要特意增加一些步骤,让用户在继续进行之前进行审核和编辑。”

LLM 是 AI 基础设施拼图的核心部分

对于 Sublayer 而言,Gemini 等 LLM 是必不可少的基础设施,类似于数据库。该框架旨在无缝集成对 Gemini 1.5 Pro 和 Gemini 1.5 Flash 的调用,从而检索开发者可在其应用中轻松使用的结构化数据。这种方法开辟了无限可能,从从各种数据源中提取数据洞见到生成代码,再到跨语言和库转换代码库,无所不能。Sublayer 甚至利用 Gemini 模型,使用户能够在框架本身内生成新的功能组件。这种“自组装”特性鼓励用户进行实验,并允许用户快速探索新颖的想法。

“Gemini 非常擅长解决我们框架旨在简化的所有问题——代码生成、任务分解、遵循指令以及基于示例生成新的数据结构”

— Scott Werner,Sublayer

后续步骤

展望未来,Sublayer 正准备推出 Augmentations.ai,这是一个可让所有开发团队使用其创建的自动化功能的平台。其初始版本将包含两款由 Gemini 1.5 Pro 提供支持的工具:Semantic Linting,可让团队创建依托 AI 技术的代码审核规则,这些规则能够理解上下文并强制执行不断演变的最佳实践;Weekly Summaries,可将多个代码库和产品管理工具中的开发活动转化为可供领导层采取行动的数据分析。

随着在 Augmentations 平台上发布更多工具,他们计划继续混合使用 Gemini 1.5 Pro 来处理更复杂的任务,并使用 Gemini 1.5 Flash 来处理对延迟更敏感、面向用户的任务。这项工作还将反馈到他们的开源框架中,使 Ruby 社区能够利用新推出的 Gemini 功能,同时受到 Sublayer 团队实际使用的推动。

Sublayer 的故事展示了 Gemini API 的变革潜力。这充分证明了开发者可以轻松将 Gemini 集成到自己的工作流程中,从而开启创新和自动化新机遇。如需开始使用 Gemini 模型构建应用,请参阅我们的 API 文档