跳至内容

自动化脚本

一旦您对脚本感到满意,就可以使用命令行界面来自动化运行它。

通过CLI运行脚本

CLI的基本用法是使用工具名称和文件列表运行脚本。

终端窗口
npx --yes genaiscript run <script> <...files>

CLI将使用.env文件中的密钥,用<...files>填充env.files,运行脚本并将输出发送到标准输出。

您可以使用CLI在CI/CD流水线中运行脚本。 如果脚本执行失败,CLI将返回非零退出码,这可用于使流水线失败。

应用编辑

在CLI中添加--apply-edits标志以自动写入文件编辑。

终端窗口
npx --yes genaiscript run <script> <...files> --apply-edits

GitHub 操作

GitHub Actions 是一个持续集成和持续交付(CI/CD)平台,可让您自动化构建、测试和部署流程。本节介绍如何在GitHub Actions工作流和拉取请求中集成您的GenAIScript。

配置密钥和变量

在您的代码库或组织中配置secretsvariables 以便GenAIScript可以连接到您的LLM。

密钥和变量应与本地环境中的.env文件匹配。

运行脚本

使用cli在GitHub Action中运行脚本。

  • 确保将密钥和变量传递给脚本,以便LLM能够访问。
  • 使用 --out 标志将结果存储在目录中,以便您可以将它们作为工件上传。
- run: npx --yes genaiscript run <script> <...files> --out genairesults
env:
# variables
OPENAI_API_TYPE: ${{ env.OPENAI_API_TYPE }}
OPENAI_API_BASE: ${{ env.OPENAI_API_BASE }}
# secret, redacted
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

将跟踪添加到操作摘要中

使用 out-trace 标志将追踪信息输出到摘要文件 $GITHUB_STEP_SUMMARY 中(参见示例)。

- run: npx --yes genaiscript run ... --out-trace $GITHUB_STEP_SUMMARY

差异对比

您可以使用host.exec来执行git命令以获取当前分支的变更。

const { stdout: changes } = await host.exec("git", [
"diff",
"main",
"--",
":!**/genaiscript.d.ts",
":!**/jsconfig.json",
":!genaisrc/*",
":!.github/*",
":!.vscode/*",
":!*yarn.lock",
])
def("GIT_DIFF", changes, {
language: "diff",
maxTokens: 20000,
})

请注意,您需要拉取origin/main分支才能使此命令在操作中生效。

- run: git fetch origin && git pull origin main:main

将输出存储在制品中

确保包含结果的目录已作为工件上传。您可以通过打开压缩工件中的res.trace.md文件来查看追踪记录。

- uses: actions/upload-artifact@v4
if: always()
with:
path: |
genairesults/**

使用服务主体的Azure OpenAI

azure login action的官方文档包含了从GitHub Actions配置Azure资源访问的详细步骤。

  1. 按照从azure密钥连接指南创建一个服务主体。

  2. 为服务主体分配Azure订阅中的任何角色(例如Reader)。您需要此角色才能登录。

  3. Cognitive Services OpenAI User角色分配给服务主体。您需要这样做,以便服务主体可以访问OpenAI资源。

  4. 在您的GitHub仓库中配置AZURE_CREDENTIALS密钥,使用服务主体凭据。

    {
    "clientId": "",
    "clientSecret": "",
    "subscriptionId": "",
    "tenantId": ""
    }
  5. 在您的仓库GitHub Action变量中配置AZURE_OPENAI_API_ENDPOINT

  6. 在您的工作流中添加以下步骤到GitHub Action中以登录Azure。

    genai.yml
    - name: Azure Login action
    uses: azure/login@v2
    with:
    creds: ${{ secrets.AZURE_CREDENTIALS }}
  7. 更新每个调用cli的步骤,以包含AZURE_OPENAI_API_ENDPOINT变量。

    - name: run genai script
    run: npx --yes genaiscript run ...
    env:
    AZURE_OPENAI_API_ENDPOINT: ${{ env.AZURE_OPENAI_API_ENDPOINT }}

GitHub 拉取请求

如果您的GitHub Action是由拉取请求事件触发的, 您可以使用以下标志来添加评论:description(描述)、conversation(对话)和reviews(评审)。

为了创建评论, 工作流必须拥有pull-requests: write permission权限 并且必须将GITHUB_TOKEN密钥传递给脚本。

permissions:
pull-requests: write
...
- run: npx --yes genaiscript run ...
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
...

更新说明

--pull-request-description 参数会将LLM输出插入到拉取请求部分(参见示例)。 该命令接受一个可选的字符串参数来唯一标识此评论,用于更新评论(默认为脚本ID)。

- run: npx --yes genaiscript run --pull-request-description

如果您希望在拉取请求准备好进行审查时运行此脚本,请使用ready_for_reviewopenedreopened事件。

on:
pull_request:
types: [ready_for_review, opened, reopened]

对话评论

--pull-request-comment 参数会将LLM输出作为评论添加到拉取请求对话中(参见示例)。 可选参数是评论的标识符(默认为脚本ID),这样每个ID只会显示一条评论。

- run: npx --yes genaiscript run --pull-request-comment
env: ...

审阅评论

使用 --pull-request-reviews 参数将 annotations 转换为审查评论 提交到拉取请求的最后一次提交(参见 example)。

- run: npx --yes genaiscript run --pull-request-reviews
env: ...

GenAIScript 会自动尝试忽略重复的审查评论,仅创建新的评论。

要收集拉取请求分支中最后一次提交的变更(参见酷博客文章),您可以尝试以下git命令:

const { stdout: changes } = await host.exec("git", [
"diff",
"HEAD^",
"HEAD",
"--",
"**.ts",
])