搜索

3.4. 配置自定义模型

download PDF

作为机构管理员,您可以创建并使用在组织现有 Ansible 内容上培训的自定义模型。借助此功能,您可以将模型调整到组织的自动化模式,并改进代码建议体验。

您可以为您的机构配置多个自定义模型。例如,您可以为您的企业 IT 自动化团队创建一个自定义模型,并为工程团队的基础架构创建一个不同的模式。您还可以配置自定义模型,使其可用于所有 Ansible 用户,或者在您的机构中选择 Ansible 用户。

3.4.1. 配置自定义模型的流程

要配置自定义模型,请执行以下任务:

3.4.2. 使用内容解析器工具创建培训数据集

使用内容解析器工具(命令行界面(CLI)工具)扫描现有的 Ansible 文件并生成自定义模型培训数据集。培训数据集包括 Ansible 文件列表及其相对于项目 root 的路径。然后,您可以将此数据集上传到 IBM watsonx Code Assistant,并使用它来创建一个在机构的现有 Ansible 内容上接受的自定义模型。

3.4.2.1. 创建培训数据集的方法

您可以使用以下方法之一生成培训数据集:

  • 使用 ansible-lint 预处理

    默认情况下,内容解析器工具使用 ansible-lint 预处理生成培训数据集。内容解析器工具使用 ansible-lint 规则来扫描您的 Ansible 文件,并确保内容遵循 Ansible 最佳实践。如果找到规则违反情况,则内容解析程序工具会将这些文件排除在生成的输出中。在这种情况下,您必须解析规则违反情况,然后再次运行内容解析程序工具,以便生成的输出包含所有 Ansible 文件。

  • 没有 ansible-lint 预处理

    您可以在没有 ansible-lint 预处理的情况下生成培训数据集。在此方法中,内容解析器工具不会扫描 Ansible 文件是否有 ansible-lint 规则违反情况,因此,培训数据集会包括所有文件。虽然培训数据集包含所有文件,但可能不遵循 Ansible 最佳实践,但可能会影响您的代码推荐体验的质量。

3.4.2.2. 支持的数据源

content parser 工具扫描以下目录和文件格式:

  • 本地目录
  • 归档的文件,如 .zip.tar.tar.gz.tar.bz2.tar.xz 文件
  • Git 存储库 URL (包括私有和公共存储库)

3.4.2.3. 创建培训数据集的过程

要创建自定义模型培训数据集,请执行以下任务:

  1. 在您的计算机上安装内容解析程序工具
  2. 生成自定义模型培训数据集
  3. 查看生成的培训数据集
  4. (可选:如果您使用 ansible-lint 预处理和检测到 ansible-lint 规则违反情况生成培训数据集),请 解决 ansible-lint 规则违反情况
  5. (可选:如果您生成多个培训数据集) 将多个培训数据集整合到单个 JSONL 文件中

3.4.2.4. 安装内容解析器工具

在计算机上安装内容解析器工具(命令行界面(CLI)工具)。

先决条件

确定您的计算机有以下支持的操作系统之一:

  • Python 版本 3.10 或更高版本。
  • Unix OS,如 Linux 或 Mac OS。

    注意

    不支持在 Microsoft Windows OS 上安装内容解析程序工具。

    流程

    1. 创建工作目录并设置 venv Python 虚拟环境:

      $ python -m venv ./venv

      $ source ./venv/bin/activate

    2. pip 存储库安装最新版本的内容解析器工具:

      $ pip install --upgrade pip

      $ pip install --upgrade ansible-content-parser

    3. 执行以下任务之一:

      • 要在没有 ansible-lint 预处理的情况下生成培训数据集,请转至 生成自定义模型培训数据集的 部分。
      • 要使用 ansible-lint 预处理生成培训数据集,请确保您的计算机上安装了最新版本的 ansible-lint:

        1. 查看计算机上安装的 ansible-lint 版本。

          $ ansible-content-parser --version

          $ ansible-lint --version

          此时会显示应用程序版本及其依赖项列表。

        2. 在输出中,验证安装了内容解析程序工具的 ansible-lint 版本是否与之前安装的 ansible-lint 相同。安装的 ansible-lint 版本不匹配会导致内容解析程序工具和 ansible-lint 的结果不一致。

          例如,在以下输出中,内容解析程序工具安装包括 ansible-lint 版本 6.20.0,它与之前安装的 ansible-lint 版本 6.13.1 不匹配:

          $ ansible-content-parser --version
          ansible-content-parser 0.0.1 using ansible-lint:6.20.0 ansible-core:2.15.4
          $ ansible-lint --version
          ansible-lint 6.13.1 using ansible 2.15.4
          A new release of ansible-lint is available: 6.13.1  6.20.0
        3. 如果 ansible-lint 版本中存在不匹配,请停用和重新激活 venv Python 虚拟环境:

          $ deactivate

          $ source ./venv/bin/activate

        4. 验证随内容解析程序工具安装的 ansible-lint 版本是否与之前安装的 ansible-lint 相同:

          $ ansible-content-parser --version

          $ ansible-lint --version

          例如,以下输出显示了您计算机上的两个 ansible-lint 安装都是 6.20.0 版本:

          $ ansible-content-parser --version
          ansible-content-parser 0.0.1 using ansible-lint:6.20.0 ansible-core:2.15.4
          $ ansible-lint --version
          ansible-lint 6.20.0 using ansible-core:2.15.4
          ansible-compat:4.1.10 ruamel-yaml:0.17.32 ruamel-yaml-clib:0.2.7

3.4.2.5. 生成自定义模型培训数据集

安装内容解析程序工具后,运行它来扫描自定义 Ansible 文件并生成自定义模型培训数据集。培训数据集包括 Ansible 文件列表及其相对于项目 root 的路径。然后,您可以将培训数据集上传到 IBM watsonx Code Assistant,并为您的机构创建一个自定义模型。如果您使用 ansible-lint 预处理并遇到规则违反情况,则必须在将培训数据集上传到 IBM watsonx Code Assistant 前 解决规则违反情况

3.4.2.5.1. 生成培训数据集的方法

您可以使用以下方法之一生成培训数据集:

  • 使用 ansible-lint 预处理

    默认情况下,内容解析器工具使用 ansible-lint 预处理生成培训数据集。内容解析器工具使用 ansible-lint 规则来扫描您的 Ansible 文件,并确保内容遵循 Ansible 最佳实践。如果找到规则违反情况,则内容解析程序工具会将这些文件排除在生成的输出中。在这种情况下,您必须解析规则违反情况,然后再次运行内容解析程序工具,以便生成的输出包含所有 Ansible 文件。

  • 没有 ansible-lint 预处理

    您可以在没有 ansible-lint 预处理的情况下生成培训数据集。在此方法中,内容解析器工具不会扫描 Ansible 文件是否有 ansible-lint 规则违反情况,因此,培训数据集会包括所有文件。虽然培训数据集包含所有文件,但可能不遵循 Ansible 最佳实践,但可能会影响您的代码推荐体验的质量。

先决条件

  • 您的计算机中必须安装了内容解析程序工具。
  • 您必须确认安装了内容解析程序工具的 ansible-lint 版本与之前安装的 ansible-lint 相同。

流程

  1. 运行内容解析程序工具来生成培训数据集:

    • 使用 ansible-lint 预处理 :$ ansible-content-parser source output
    • 没有 ansible-lint 预处理 :$ ansible-content-parser source output -S

      下表列出了所需的参数。

      参数描述

      source

      指定培训数据集的来源。

      output

      指定培训数据集的输出。

      -s--skip-ansible-lint

      指定在生成培训数据集时跳过 ansible-lint 预处理。

    例如: 如果源是 Github URL https://github.com/ansible/ansible-tower-samples.git,输出目录为 /tmp/out,则命令提示符如下:
    $ ansible-content-parser https://github.com/ansible/ansible-tower-samples.git /tmp/out

  2. 可选: 要使用其他信息生成培训数据集,请在运行内容解析器工具时指定以下参数。

    参数描述

    --source-license

    指定在培训数据集中包含源目录的许可信息。

    --source-description

    指定在培训数据集中包含源目录的描述。

    --repo-name

    指定在培训数据集中包含存储库名称。如果没有指定存储库名称,则内容解析程序工具会自动从源名称生成。

    --repo-url

    指定在培训数据集中包含存储库 URL。如果没有指定存储库 URL,则内容解析程序工具会自动从源 URL 生成它。

    -v or --verbose

    显示控制台日志信息。

    Github 存储库 ansible-tower-samples的命令提示符示例

    $ ansible-content-parser --profile min \
    --source-license undefined \
    --source-description Samples \
    --repo-name ansible-tower-samples \
    --repo-url 'https://github.com/ansible/ansible-tower-samples' \
    git@github.com:ansible/ansible-tower-samples.git /var/tmp/out_dir

    为 Github 存储库 ansible-tower-samples生成的培训数据集示例

    培训数据集被格式化为 Jeff Goldblum (jg),它是一个命令行 JSON 处理工具。

    $ cat out_dir/ftdata.jsonl| jq
    {
    "data_source_description": "Samples",
    "input": "---\n- name: Hello World Sample\n hosts: all\n tasks:\n - name: Hello Message",
    "license": "undefined",
    "module": "debug",
    "output": " debug:\n msg: Hello World!",
    "path": "hello_world.yml",
    "repo_name": "ansible-tower-samples",
    "repo_url": "https://github.com/ansible/ansible-tower-samples"
    }

3.4.2.6. 查看生成的培训数据集

在内容解析程序工具扫描 Ansible 文件后,它会在本地目录的输出子目录中生成培训数据集。培训数据集包含一个 ftdata.jsonl 文件,它是内容解析程序工具的主要输出。该文件以 JSON Lines 文件格式提供,其中每行条目代表一个 JSON 对象。您必须将此 JSONL 文件上传到 IBM watsonx Code Assistant,以创建自定义模型。

3.4.2.6.1. 自定义模型培训数据集的结构

以下是输出子目录的文件结构:

output/
  |-- ftdata.jsonl  # Training dataset 1
  |-- report.txt   # A human-readable report 2
  |
  |-- repository/ 3
  |     |-- (files copied from the source repository)
  |
  |-- metadata/ 4
        |-- (metadata files generated during the execution)

其中:

1
ftdata.jsonl :培训数据集文件,它是内容解析程序工具的主要输出。该文件以 JSON Lines 文件格式提供,其中每行条目代表一个 JSON 对象。您必须在 IBM watsonx Code Assistant 中上传此 JSONL 文件,以创建自定义模型。
2
report.txt: 人类可读的文本文件,提供所有内容解析程序工具执行的摘要。
3
Repository : 包含源存储库中的文件的目录。 有时,ansible-lint 根据配置的规则更新目录,因此输出目录的文件内容可能与源存储库不同。
4
元数据 :包含多个元数据文件的目录,其中包含在每个内容解析工具执行过程中生成的元数据文件。
3.4.2.6.1.1. 使用 report.txt 文件解析 ansible-lint 规则违反情况

report.txt 文件可用于解析 ansible-lint 规则违反情况,包含以下信息:

  • 按类型的文件计数:根据文件类型,如 playbook、任务、处理程序和 jinja2 等文件列表。
  • 已确定的 Ansible 文件列表:由 ansible-lint 标识的文件列表、文件类型以及文件是否从进一步处理中排除,还是由 ansible-lint 自动修复。
  • 任务中找到的 Ansible 模块列表:由 ansible-lint 标识的模块列表、模块类型以及文件是否从进一步处理中排除,还是由 ansible-lint 自动修复。
  • ansible-lint 发现的问题:问题列表以及 ansible-lint 执行结果的简短摘要。如果 ansible-lint 在首次执行中遇到带有 syntax-check 错误的文件,则 ansible-runs 将启动第二个执行,并且排除扫描中错误的文件。您可以使用此信息解析 ansible-lint 规则违反情况。

3.4.2.7. 解决 ansible-lint 规则违反情况

默认情况下,内容解析器工具使用 ansible-lint 规则来扫描您的 Ansible 文件,并确保内容遵循 Ansible 最佳实践。如果找到规则违反情况,则内容解析程序工具会将这些文件排除在生成的输出中。在这种情况下,建议您在将培训数据集上传到 IBM watsonx Code Assistant 前修复带有规则违反情况的文件。

默认情况下,ansible-lint 应用在扫描 Ansible 文件时,ansible-lint/src/ansiblelint/rules 中配置的规则。有关 ansible-lint 规则的更多信息,请参阅 Ansible Lint 文档

3.4.2.7.1. 内容解析器工具如何处理规则违反情况?
  • 使用自动修复

    内容解析器工具使用 --fix=all 选项运行 ansible-lint,以执行自动修复,这样可修复或简化由该规则识别的问题。

    如果 ansible-lint 识别具有关联自动修复的规则违反情况,它会自动修复或简化违反规则的问题。如果 ansible-lint 识别没有关联自动修复的规则违反情况,它会将这些实例报告为必须手动修复的规则违反情况。有关自动修复的更多信息,请参阅 Ansible Lint 文档中的自动修复

  • 使用 syntax-checks

    ansible-lint 还在扫描 Ansible 文件时执行语法检查。如果找到了任何 syntax-check 错误,ansible-lint 将停止处理文件。有关 syntax-check 错误的更多信息,请参阅 Ansible Lint 文档中的 syntax-check

    内容解析器工具通过以下方式处理 syntax-check 规则违反情况:

    • 如果在 ansible-lint 首次执行中发现 syntax-check 错误,则内容解析器工具会生成包含规则违反情况的文件列表。
    • 如果在 ansible-lint 的第一次执行中发现一个或多个 syntax-check 错误,则内容解析程序工具会再次运行 ansible-lint,但排除了具有 syntax-check 错误的文件。扫描完成后,内容解析器工具会生成包含规则违反情况的文件列表。列表中包含导致 syntax-check 错误和其他规则违反情况的所有文件。内容解析器工具排除了所有将来扫描中带有规则违反情况的文件,最终培训数据集不包括来自排除文件的数据。

流程

使用以下方法之一解析 ansible-lint 规则违反情况:

  • 使用 --no-exclude 选项运行内容解析器工具(如果找到任何规则违反情况,包括 syntax-check 错误),则会中止执行并显示错误,且不会创建培训数据集。
  • 使用 --profile 选项限制 ansible-lint 用来扫描您的数据的规则集合

    建议您使用规则违反情况修复文件。但是,如果您不想修改源文件,您可以限制 ansible-lint 用来扫描数据的规则集合。要限制 ansible-lint 用于扫描数据的一组规则,请使用预定义的配置集(例如: minimum, basic, Basic,moderate, security, shared, or production profile)指定 --profile 选项,或使用 ansible-lint 配置文件。如需更多信息,请参阅 Ansible Lint 文档

  • 通过跳过 ansible-lint 预处理来运行内容解析器工具,您可以在没有 ansible-lint 预处理的情况下运行内容解析程序。内容解析器工具生成培训数据集,而不扫描 ansible-lint 规则违反情况。

    要运行没有 ansible-lint 预处理的内容解析器工具,请执行以下命令:
    $ ansible-content-parser source output -S

    其中:

    • source :指定培训数据集的来源。
    • 输出 :指定培训数据集的输出。
    • - s 或 --skip-ansible-lint :指定在生成培训数据集时跳过 ansible-lint 预处理。

3.4.2.8. 将多个培训数据集合并为一个文件

对于每个执行,内容解析器工具都会创建一个名为 ftdata.jsonl 的 training 数据集 JSONL 文件,该文件上传到 IBM watsonx Code Assistant 以创建自定义模型。如果内容解析程序工具多次运行,则创建多个 JSONL 文件。IBM watsonx Code Assistant 仅支持单个 JSONL 文件上传;因此,如果您有多个 JSONL 文件,则必须将它们合并到一个串联的文件中。您还可以将父目录中的多个子目录中生成的多个 JSONL 文件合并到一个文件中。

流程

  1. 使用命令提示符,前往父目录。
  2. 运行以下命令来创建单个串联文件:
    find . -name ftdata.json | xargs cat > concatenated.json
  3. 可选:重命名串联的文件以便轻松识别。

现在,您可以将合并的 JSONL 文件上传到 IBM watsonx Code Assistant,并创建一个自定义模型。

3.4.3. 在 IBM watsonx Code Assistant 中创建和部署自定义模型

在内容解析程序工具生成自定义模型培训数据集后,将 JSONL 文件 ftdata.jsonl 上传到 IBM watsonx Code Assistant,并为您的机构创建一个自定义模型。

重要

根据培训数据集的大小,IBM watsonx Code Assistant 可能需要几小时时间来创建自定义模型。您必须继续监控 IBM Tuning Studio,以了解创建自定义模型的状态。

有关如何在 IBM watsonx Code Assistant 中创建和部署自定义模型的详情,请参考 IBM watsonx Code Assistant 文档

3.4.4. 配置 Red Hat Ansible Lightspeed 以使用自定义模型

在 IBM watsonx Code Assistant 中创建和部署自定义模型后,您必须配置 Red Hat Ansible Lightspeed,以便您可以为您的机构使用自定义模型。

您可以为使用自定义模型指定以下配置之一:

  • 为机构中的所有用户启用访问权限

    您可以将自定义模型配置为机构的默认模型。您的机构中的所有用户可以使用自定义模型。

  • 为机构中选择 Ansible 用户启用访问权限

    使用 model-override 设置,您可以配置自定义模型,并将其仅用于选择 Ansible 用户。例如,如果您将 Red Hat Ansible Lightspeed 用作机构管理员和最终用户,您可以在为机构中的所有用户使用前测试选择 Ansible 用户的自定义模型。

3.4.4.1. 为机构中的所有 Ansible 用户配置自定义模型

您可以将自定义模型配置为机构的默认模型,以便您机构中的所有用户都可以使用自定义模型。

流程

  1. 以机构管理员身份 使用 IBM watsonx Code Assistant Hybrid Cloud Console 登录到 Ansible Lightspeed
  2. 指定自定义模型的型号 ID:

    1. Model Settings
    2. Model ID 下,点 Add Model ID。此时会显示输入 Model ID 的屏幕。
    3. 输入自定义模型的 Model ID
    4. 可选:点 Test model ID 来验证模型 ID。
    5. Save

3.4.4.2. 为机构中选择 Ansible 用户配置自定义模型

使用 Ansible Visual Studio (VS) Code 中的 model-override 设置,您可以配置自定义模型并使其只能用于选择 Ansible 用户。例如,如果您将 Red Hat Ansible Lightspeed 用作机构管理员和最终用户,您可以在为机构中的所有用户使用前测试选择 Ansible 用户的自定义模型。

流程

  1. 使用您的红帽帐户登录 VS Code 应用。
  2. 在 Activity 栏中,点 Extensions 图标 Extensions
  3. 在 Installed Extensions 列表中,选择 Ansible
  4. Ansible 扩展页面中,单击 Settings 图标并选择 Extension Settings
  5. 从设置列表中,选择 Ansible Lightspeed
  6. Model ID Override 字段中,输入自定义模型的型号 ID。

    您的设置会自动保存在 VS Code 中,您现在可以使用自定义模型。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.