自动化脚本
一旦您对脚本感到满意,就可以使用命令行界面来自动化运行它。
通过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。
配置密钥和变量
在您的代码库或组织中配置secrets 和variables 以便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资源访问的详细步骤。
按照从azure密钥连接指南创建一个服务主体。
为服务主体分配Azure订阅中的任何角色(例如Reader)。您需要此角色才能登录。
将Cognitive Services OpenAI User角色分配给服务主体。您需要这样做,以便服务主体可以访问OpenAI资源。
在您的GitHub仓库中配置AZURE_CREDENTIALS密钥,使用服务主体凭据。
{"clientId": "", "clientSecret": "", "subscriptionId": "", "tenantId": "" }在您的仓库GitHub Action变量中配置
AZURE_OPENAI_API_ENDPOINT
。在您的工作流中添加以下步骤到GitHub Action中以登录Azure。
genai.yml - name: Azure Login actionuses: azure/login@v2with:creds: ${{ secrets.AZURE_CREDENTIALS }}更新每个调用cli的步骤,以包含
AZURE_OPENAI_API_ENDPOINT
变量。- name: run genai scriptrun: 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_review
、opened
、reopened
事件。
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",])