AICOMMAND 命令

通过将 Analytics 与外部 AI 服务进行集成来支持自然语言数据分析。

说明

要使用 AICOMMAND,您必须在将运行命令的计算机上安装并配置 Python 的兼容版本。您还必须安装两个 Python 库:Pandas 和 OpenAI Python API。有关更多信息,请参阅配置 Python 以便与 Analytics 一起使用

外部 AI 服务并非由 Diligent 提供。它必须由贵组织提供。

仅连接到贵组织批准使用的外部 AI 服务。如果您打算将敏感数据从 Analytics 传输到 AI 服务,请务必遵循所有安全协议。

AI 结果可能包含不准确或错误。如果需要绝对准确性,请使用替代方法验证结果。

语法

AICOMMAND {<FIELDS> field <...n>|<FIELDS> ALL} <SCRIPT "path_and_filename"> TO table_name USER_PROMPT "user_prompt_text" <PASSWORD num> MODEL "model_information" URL "ai_service_api_url" <BATCHSIZE number_of_records> <IF test> <WHILE test> <FIRST range|NEXT range> <OPEN>

参数

名称 描述

FIELDS 域名称 <...n> | FIELDS ALL

Analytics 表中要发送到 AI 服务的域或表达式。

您必须至少选择一个域或表达式。

  • FIELDS field_name包含指定的一个或多个域或者表达式

    请用空格分隔文件名。域被按照您列出它们的顺序导出。

    要导出相关域,请指定完全限定域名称(表名称.域名称)。例如:Vendor.Vendor_Name

  • FIELDS ALL包含表中的所有域

    域会按照在表布局中的顺序被导出。相关域不会被导出。

说明

通过仅指定分析目标所严格必需的域来限制发送至 AI 服务的数据总量。

如果要将从 AI 服务返回的表与原始源表进行联接或关联,请包含一个唯一标识符域。有关更多信息,请参阅创建唯一标识符域

SCRIPT "path_and_filename"

可选

如果您将自己的 Python 脚本与 AICOMMAND 一起使用,则为脚本的文件路径和名称。

如果您指定了脚本,则 PASSWORD、MODEL 和 URL 是可选的。有关更多信息,请参阅使用您自己的 Python 脚本

TO 表名

要将命令结果发送到的位置:

  • table_name将结果保存到 Analytics

    请将表名称指定为具有 .FIL 文件扩展名的带引号的字符串。例如:TO "Output.FIL"

    默认情况下,表数据文件 (.FIL) 被保存到包含 Analytics 项目的文件夹。

    请使用绝对或相对文件路径将该数据文件保存到另外的现有文件夹:

    • TO "C:\Output.FIL"
    • TO "Results\Output.FIL"

    说明

    表名称限制为不超过 64 个字母数字字符,且不包括 .FIL 扩展名。该名称可以包括下划线字符 ( _ ),但不能包括其他特殊字符或任何空格。该名称不能以数字开头。

USER_PROMPT "user_prompt_text"

输入到 AI 服务中的提示词文本。

提示词会告诉 AI 服务如何处理您发送的输入数据以及您想要的输出内容。

说明

您必须用双引号 ( " ) 将 user_prompt_text 括起来。但是,请勿在 user_prompt_text 的正文中包含任何双引号。提示词文本正文中的双引号导致命令失败。您可以在提示词文本中使用单引号 ( ' )。

PASSWORD num

可选

要使用的密码定义。

您不使用 PASSWORD 数字 提示用户提供或者指定实际密码。密码定义是指先前使用 PASSWORD 命令、SET PASSWORD 命令或 PASSWORD 分析标记提供或设置的密码。

数字是密码定义的编号。例如,如果之前已在脚本中或在调度分析脚本时提供或设置了两个密码,则 PASSWORD 2 指定使用密码 #2。

有关提供或设置密码的详细信息,请参阅:

说明

AICOMMAND 使用保存在本地注册表中的 AI API 密钥(假设密钥已保存)。如果未保存任何密钥,或者如果您想要使用其他密钥,则必须使用 PASSWORD。有关更多信息,请参阅外部 AI 服务的连接设置

MODEL "model_information"

您想要使用的特定 AI 模型的标识信息。

例如:

MODEL "anthropic.claude-3-5-sonnet-20241022-v2:0"

AI 服务可能提供您可以使用的不同模型。

您可以使用任何与 OpenAI 兼容的大型语言模型 (LLM),即 OpenAI 模型,或使用 API 架构与 OpenAI 模型相同的其他模型。

URL "ai_service_api_url"

AI 服务 API 的完整 URL。

例如:

URL "https://api.anthropic.com/v1"
BATCHSIZE number_of_records

可选

要包含在发送到 AI 服务的每个批次中的记录数。

如果 AICOMMAND 失败,请尝试将批次大小指定为 50 或 25。

如果您不指定 BATCHSIZE,则系统会使用 100 条记录的默认批次大小。

AI 服务通常会限制它将在每次操作中处理的数据量。Analytics 表中的记录会被分批发送到 AI 服务,以提高保留在数据限制范围内的可能性。所有批次的 AI 响应都汇总在单个 Analytics 输出表中。

IF 测试

可选

要处理当前记录所必须满足的条件。发送到 AI 服务的数据仅包含那些满足该条件的记录。

IF 条件必须至少包含表中的一条记录。如果该条件排除了表中的所有记录,则会出现错误,并且命令不会运行。

WHILE 测试

可选

一个条件表达式,它必须为真以便处理每个记录。该命令被一直执行到条件的计算结果为假或者到达表的末尾为止。

说明

如果您将 WHILE 与 FIRST 或 NEXT 结合使用,请在达到一个限制时立即记下处理步骤。

FIRST 范围 | NEXT 范围

可选

要处理的记录数:

  • FIRST从第一条记录开始处理,直到达到指定的记录数为止
  • NEXT从当前选定的记录开始处理,直到达到指定的记录数为止

请使用范围指定要处理的记录数。

如果您省略 FIRST 和 NEXT,则会默认处理所有记录。

OPEN

可选

在命令执行后打开该命令创建的表。仅当该命令创建输出表时有效。

示例

使用 AI 进行供应商评估

您想要对供应商表执行基础检查,以发现任何可能的虚假供应商。您将供应商名称和地址域输入 AI 服务,并要求其将供应商分类为“常见”、“罕见”或“未知”。

对于任何归类为“未知”的供应商,都需要进行进一步调查以确定它们是否真实存在。

OPEN Vendors
AICOMMAND FIELDS vendor_name address TO "ai_vendor_classification" USER_PROMPT "Is this a commonly known vendor? The output value should be COMMON if common, RARE if known but uncommon, UNKNOWN otherwise."MODEL "anthropic.claude-3-5-sonnet-20241022-v2:0" URL "https://hackfest-bedrock-proxy.diligentoneplatform-dev.com/api/v1"

使用 AI 进行费用审核

您想要审核采购卡交易记录,并标记出商品或服务与购买价格不符的所有费用。您将费用描述和成本域输入 AI 服务,并要求其评估费用是否合理。

OPEN PcardTransactions
AICOMMAND FIELDS Description UnitCost TO "ai_expense_cost_review" USER_PROMPT "Given the combination of Description and Unit Cost, indicate whether the cost is typical or unusual."MODEL "anthropic.claude-3-5-sonnet-20241022-v2:0" URL "https://hackfest-bedrock-proxy.diligentoneplatform-dev.com/api/v1"

使用 AI 对酒店评价进行情感分析

在一个包含顾客酒店评价的表中,您想要对其中的自由文本评论进行情感分析及归类。您要求 AI 服务按人类的六种基本情绪对评论进行分类。

OPEN hotel_reviews
AICOMMAND FIELDS reviews_rating reviews_text TO "ai_hotel_reviews_sentiment_analysis" USER_PROMPT "Perform a sentiment analysis on the reviews_text field and categorize the reviews by the following basic human emotions: Happiness, Anger, Fear, Sadness, Disgust, Surprise."MODEL "anthropic.claude-3-5-sonnet-20241022-v2:0" URL "https://hackfest-bedrock-proxy.diligentoneplatform-dev.com/api/v1" BATCHSIZE 50 OPEN

备注

Analytics 与外部 AI 服务之间的集成是如何运作的

选择域、创建用户提示词并运行 AICOMMAND 是 Analytics 与外部 AI 服务之间往返集成的起点:

  1. AnalyticsAICOMMAND 从 Analytics 表中提取选定域并将其保存到 CSV 文件中。

  2. AnalyticsAICOMMAND 使用户提示词和 AI 服务 API 的连接信息可供默认 Python 脚本或您创建的 Python 脚本使用。

    默认 Python 脚本的位置:

    C:\Program Files (x86)\ACL Software\ACL for Windows <version>\acl_py_util\ai_main.py

    注意

    请勿移动默认的 Python 脚本,也不要以任何方式更改它。AICOMMAND 的默认操作取决于默认 Python 脚本位于正确的位置且保持不变。

  3. PythonPython 脚本会导入 CSV 文件并将其转换为 Pandas DataFrame。

  4. PythonPython 脚本会将 DataFrame 和用户提示词发送给 AI 服务 API。为了确保不超过 API 数据限制,脚本会分批发送 DataFrame。

  5. AI 服务AI 服务会根据用户提示词中的说明处理 DataFrame。

  6. AI 服务AI 服务会将 DataFrame 返回给 Python 脚本,并添加包含 AI 处理结果的 ai_response 列。

  7. PythonPython 脚本会将返回的 DataFrame 转换为 Analytics 表,并使用 AICOMMAND 中指定的输出表名将其导出到 Analytics

  8. Analytics您可以在 Analytics 中打开输出表以查看 AI 处理的结果,也可以将结果用作其他数据分析的基础。

使用您自己的 Python 脚本

您可以将自己的 Python 脚本与 AICOMMAND 配合使用。创建包含所需逻辑的脚本,用于和 AI 服务 API 进行交互。在 AICOMMAND 中,使用 SCRIPT 参数指定脚本的路径和文件名。

一种可行的做法是复制 AICOMMAND 使用的默认 Python 脚本,以此作为您自行编写脚本的基础。默认脚本位于 Analytics 安装文件夹中。如果您在默认位置安装了 Analytics,则脚本位于以下位置:

C:\Program Files (x86)\ACL Software\ACL for Windows <version>\acl_py_util\ai_main.py

注意

请勿移动默认的 Python 脚本,也不要以任何方式更改它。AICOMMAND 的默认操作取决于默认 Python 脚本位于正确的位置且保持不变。

AICOMMAND 使用的 Python 脚本必须包含外部 AI 服务的连接设置,而与其是默认脚本还是您自己的脚本无关。在您自己的脚本中,您有两个选项:

  • 使用 Analytics 中的连接设置使用 AICOMMAND 参数中指定的主机、模型和 AI API 密钥值。

    要在 Python 脚本中使用 AICOMMAND 值,请定义三个变量,或从默认 Python 脚本复制变量定义。

    an_api_key = os.getenv("ACL_PY_API_KEY")
    ai_base_url = os.getenv("ACL_PY_AI_BASE_URL")
    ai_model = os.getenv("ACL_PY_AI_MODEL")
  • 使用您自己的方法使用您自己的方法提供主机、模型和 AI API 密钥值。如果您使用自己的方法,则不需要在 AICOMMAND 参数中指定连接值。

创建唯一标识符域

如果要将从 AI 服务返回的表与原始源表联接起来,但缺少唯一标识符域,则您可以在使用 AICOMMAND 之前通过 RECNO( ) 函数创建一个此类域。

  1. 在源表中,创建使用以下表达式的计算域 record_number

    RECNO( )

    对于表中的每条记录,RECNO( ) 函数将在 record_number 域中添加唯一的记录编号。

    有关更多信息,请参阅 DEFINE FIELD。。COMPUTED 命令

  2. 使用 AICOMMAND 通过外部 AI 服务来处理数据。

  3. record_number 域用作公共键域,以便将从 AI 服务返回的表与源表联接起来。

    有关更多信息,请参阅 JOIN 命令

分隔 ai_response 域中的多个组成部分

在 AICOMMAND 返回的输出表中,ai_response 域中的值可以包含多个组成部分或元素。例如,下面显示的单个值包含四个组成部分:sentimentsentiment_scorekey_reasonsthemesthemes 组成部分包含三个独立值。

sentiment: Positive, sentiment_score: 0.6, key_reasons: clean rooms, friendly staff, breakfast issues, themes: cleanliness, staff, food

为了支持后续分析,您可以使用下方显示的计算表达式创建单独的计算域,将组件和值分离出来。

有关如何构建计算域的一般信息,请参阅定义计算域

计算域名称 计算表达式 结果值
sentiment
REGEXREPLACE(ai_response, "sentiment\:\s(.*?),.*", "$1")
Positive
sentiment_score
VALUE(REGEXREPLACE(ai_response, ".*sentiment_score\:\s(.*?),.*", "$1"), 1)
0.6
key_reasons
REGEXREPLACE(ai_response, ".*key_reasons\:\s(.*?),\sthemes.*", "$1")
clean rooms, friendly staff, breakfast issues
themes
REGEXREPLACE(ai_response, ".*themes\:\s(.*?)", "$1")
cleanliness, staff, food
theme_1
SPLIT(REGEXREPLACE(ai_response, ".*themes\:\s(.*?)", "$1"), ",", 1)
cleanliness
theme_2
SPLIT(REGEXREPLACE(ai_response, ".*themes\:\s(.*?)", "$1"), ",", 2)
staff
theme_3
SPLIT(REGEXREPLACE(ai_response, ".*themes\:\s(.*?)", "$1"), ",", 3)
food