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 服务的域或表达式。 您必须至少选择一个域或表达式。
|
|
SCRIPT "path_and_filename" 可选 |
如果您将自己的 Python 脚本与 AICOMMAND 一起使用,则为脚本的文件路径和名称。 如果您指定了脚本,则 PASSWORD、MODEL 和 URL 是可选的。有关更多信息,请参阅使用您自己的 Python 脚本。 |
| TO 表名 |
要将命令结果发送到的位置:
|
| 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,则会默认处理所有记录。 |
|
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 服务之间往返集成的起点:
-
AnalyticsAICOMMAND 从 Analytics 表中提取选定域并将其保存到 CSV 文件中。
-
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 脚本位于正确的位置且保持不变。
-
PythonPython 脚本会导入 CSV 文件并将其转换为 Pandas DataFrame。
-
PythonPython 脚本会将 DataFrame 和用户提示词发送给 AI 服务 API。为了确保不超过 API 数据限制,脚本会分批发送 DataFrame。
-
AI 服务AI 服务会根据用户提示词中的说明处理 DataFrame。
-
AI 服务AI 服务会将 DataFrame 返回给 Python 脚本,并添加包含 AI 处理结果的 ai_response 列。
-
PythonPython 脚本会将返回的 DataFrame 转换为 Analytics 表,并使用 AICOMMAND 中指定的输出表名将其导出到 Analytics。
-
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( ) 函数创建一个此类域。
-
在源表中,创建使用以下表达式的计算域 record_number:
RECNO( )
对于表中的每条记录,RECNO( ) 函数将在 record_number 域中添加唯一的记录编号。
有关更多信息,请参阅 DEFINE FIELD。。COMPUTED 命令。
-
使用 AICOMMAND 通过外部 AI 服务来处理数据。
-
将 record_number 域用作公共键域,以便将从 AI 服务返回的表与源表联接起来。
有关更多信息,请参阅 JOIN 命令。
分隔 ai_response 域中的多个组成部分
在 AICOMMAND 返回的输出表中,ai_response 域中的值可以包含多个组成部分或元素。例如,下面显示的单个值包含四个组成部分:sentiment、sentiment_score、key_reasons 和 themes。themes 组成部分包含三个独立值。
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 |