LLM 在聊天和数字助理应用中的成功让人们对其在业务流程自动化方面的潜力寄予厚望。虽然在此类工作流程中实现人类水准的可靠性一直具有挑战性,但它突出了需要改进的关键领域,并推动了持续创新。
尽管存在可靠性挑战,但自动化工作流程仍具有巨大的业务潜力,其中涉及自由形式的自然语言内容,而 AI 是人工处理的唯一替代方案。
本文将探讨基于 AI 的自由文本工作流经常失败的原因,并说明如何将 AI 与基于规则的纠错相结合,在金融“假设”分析的交易条目中实现近乎完美的准确性。
我们的实验由 NVIDIA NIM 提供支持,与云 API 相比,NVIDIA NIM 是一种自行托管的推理容器,可解决数据控制问题、降低延迟并降低成本。NIM 用于在本地运行 Qwen-3 和 DeepSeek-v3 等模型,以进行基准测试和性能评估。
贸易条目
“假设”分析涉及在交易执行前评估潜在新交易对金融机构风险、交易限制和资本要求的影响。“假设”分析的第一步是交易进入,即将预期交易添加到交易系统中,以评估其风险和资本要求。
交易输入是自由文本,可能来自电子邮件链、交易员聊天甚至语音。输出是交易系统可以接受的格式的数据。虽然每种交易类型的数据模式是固定的,但描述交易的方式各不相同,从以下示例中的简单行到冗长的描述,其中包含大量细节和大量难以进行清晰分类的内容。
We pay 5y fixed 3% vs. SOFR on 100m, effective Jan 10
此示例描述了利率掉期,这是交易最广泛的金融工具之一。它涉及两个交易对手根据固定或浮动利率定期相互支付息票。
两个方向相反的支付流被称为掉期的“支线”。在这种情况下,单笔付款涉及 3% 的固定付款。由联邦储备银行发布的美元浮动利率指数 (SOFR) 的另一端,5 年期名义金额为 1 亿美元 (也称为掉期期限) 。
由于缺乏任何预定义的贸易说明格式,贸易条目难以实现自动化。这可以通过多种方式指定,从而避免任何规则或基于模板的解析方法。例如,同样的交换也可描述如下:
We are long 3% swap on $100m, maturity 10-Jan-2030
后一种描述包括货币 (USD) ,表示指数 (SOFR) ,而前者包括指数,表示货币。后一种描述还表示长边,根据众所周知的惯例,长边表示“固定支付”,而前一种描述则明确表示这一指定。
上述两个简明示例中嵌入的大多数数据字段未分配交易确认中较为冗长描述的典型显式名称 (例如,“名义:$ 100m”) 。将这些行业描述转换为数据需要从各领域相对于其他领域的位置来解释每个领域的含义,并理解领域价值与金融行业惯例之间的复杂关系。
使用自定义判别模型,可以向 JSON 提供这种结构化输出。但是,它需要仔细的训练和数据标记。现代 LLM 可以根据训练数据,在没有任何专门提示的情况下,轻松理解自由形式的贸易描述。
通过为 Llama 3.1 70B 模型提供第一个示例以及简单的提示“将此数据转换为字典”,生成的示例输出如下:
{
"notional": 100000000,
"tenor": "5Y",
"effective_date": "2024-01-10",
"leg_1": {
"side": "pay",
"fixed_rate": "3%",
},
"leg_2": {
"side": "receive",
"index": "SOFR",
}
}
然而,尽管它在识别交易员术语方面表现出色,但上述 LLM 生成的数据仍存在错误。下一节中,我们将探讨此错误的性质,以及克服类似错误的方法。
控制基于 LLM 的交易捕获工作流中的幻觉
在 CompatibL 2024 年的 TradeEntry.ai 黑客松活动中,参与者展示了对具有详细且精心设计的提示的 LLM 的单次调用在简单交易文本方面的峰值准确率约为 90-95%。但是,对于更复杂的输入,准确率下降到 80% 左右,这对于生产应用来说是不够的。
重要的是,黑客松期间观察到的许多错误并不是因为 AI 做得太少,而是因为 AI 做得太多,即执行从训练数据中学到的额外转换,而这些转换不适用于当前的特定交易。
例如,在所示的 LLM 输出示例中,开始日期 ( 2024-01-10) 包括年份,即使输入没有 (“Jan 10”) 。由于该模型可以访问当前日期 2024 年 12 月 10 日,因此它从训练数据中了解到,生效日期必须包括年份,并使用当前年份。
这种逻辑是错误的,因为对于“假设”分析,开始日期总是在未来。专家可能知道,对于自“1 月 10 日”开始的交易,交易员在 2024 年 12 月请求“假设”分析的意思是 2025 年 1 月 10 日,而不是一年前。
基于 AI 的编码助手通过让人类参与循环来处理错误的模型假设。在多次迭代中,用户会查看临时输出并提示更正,直到结果可以接受。但是,在我们的用例中,让人类参与每个步骤将无法实现自动化的目的。相反,我们将使用自校正方法,防止 LLM 在将自由格式文本输入转换为数据字典时执行任何转换。然后,将根据确定性规则在后处理中执行任何逻辑 (例如插入年份) 。
我们通过提示 LLM 提供字符串模板 (我们使用框模板) 以及数据字典来实施我们的方法,并要求将字典替换为模板将忠实再现原始输入。第一个示例的字符串模板的结构如下:
{fixed_side} {tenor} fixed {fixed_rate} vs. {floating_index} on {notional}, effective {effective_date}
与要求所有输出数据值都是输入文本的子串的更简单的方法相比,基于模板的方法可确保提取的数据完全捕捉交易描述的原始含义和结构。如果仍然存在一些错误或引入了新的错误,该过程将继续进行新的更正。通常,迭代次数少于三次后,所有错误都会消除。
使用此方法生成的数据字典不同于我们在上一节中讨论的示例字典。它不包括隐含的字段,例如浮动支线的侧面 (“接收”) ,该侧面由模型从固定支线的侧面 (“支付”) 推理得出。
最重要的是,包含添加年份的误差已消除,因为“effective_date”字段的逐字值为“Jan 10” ( 1 月 10 日) ,而不包括年份。将数据输入字典后,基于规则的传统处理可以确定年份并执行所有其他必要的转换。对于以文本形式表示的日期和金额,dateparser 和 text2num 等库可在不使用 AI 的情况下提供基于规则的可靠转换。大多数交易分析库已经包含可以使用参考数据库解决默认问题的代码。
本节中描述的自校正过程如下 Python 伪代码所示:
class SelfCorrectingTradeParser:
def __init__(self, llm, max_iter: int = 3):
# LLM object such as LangChain's ChatNVIDIA
self.llm = llm
# Maximum number of self-correction iterations to try
self.max_iter = max_iter
def parse_with_self_correction(self, trade_text: str) -> dict:
# Create prompt describing the trade parsing process
prompt = self._initial_prompt(trade_text)
for _ in range(self.max_iter):
# Get the LLM response
reply = self.llm(prompt)
# Extract trade dictionary and string template
trade_dict, tmpl = self._extract(reply)
# See if we can reconstruct the original trade text
diffs = self._validate(trade_text, tmpl, trade_dict):
# If there are no differences/errors, we are done
if not diffs:
return trade_dict
# Otherwise we create a prompt with the corrections and retry
prompt = self._correction_prompt(trade_text, trade_dict, tmpl, diffs)
return trade_dict
部署开源模型
NVIDIA NIM 提供具有标准 API 的自托管 GPU 加速推理 Docker 容器,并使用 NVIDIA TensorRT 和 NVIDIA TensorRT-LLM 等推理引擎针对低延迟和高吞吐量进行了优化。
具体来说,我们测试了两个版本的提示:一个版本包含一个示例,另一个版本包含 10 个示例。模型提示中的每个示例都包括交易基础交换 (输入) 的文本,以及所需的输出字典和随附的格式化字符串模板 (输出) 。
为评估模型性能,我们测量每个基础交换的以下结果:
- 真阳性 (TP) :有一个值需要提取,例如“概念”,且真值与预测匹配。
- 假阳性 (FP) :模型预测会对不存在或有错误值的事物产生幻觉。
- 假阴性 (FN) :要提取真值,但模型预测无法捕获该值。
通过测量这些结果,我们计算出以下三个指标:
- Recall = TP/ (TP+ FN) 。召回率越高,这意味着我们的模型返回的相关结果就越多。
- Precision = TP/ (TP+ FP) 。更高的精度意味着我们的模型返回的相关结果与不相关结果的比率更高。
- F1-score = (2+ 精度+ 召回率) / (精度+ 召回率) 。F1-score 是精度和召回率的协调平均值。
使用自校正时,我们最多使用 5 次迭代。由于 LLM 每次运行时都会产生不同的结果,因此我们将温度设置为 0.6 (以平衡随机性和一致性) ,并在测试集上对每个模型运行 5 次。然后,我们对这些运行的结果求取平均值,以报告测试集的以下结果:

We pay 5y fixed 3% vs. SOFR on 100m, effective Jan 10
0
两个图形都强调,使用自校正方法可以将错误减少 20% 到 25%,并将 F1 分数提高 3% 到 5%。此外,为推理而明确训练的模型 (例如 DeepSeek-R1) 的性能优于通用模型 (例如 DeepSeek-v3) 。它们在 10 个镜头的场景中实现了近乎完美的准确性,凸显了我们的自校正循环所需的卓越的纠错和结构化任务分解能力。最后,增加少量样本的数量持续提升性能,其中 DeepSeek-v3 将 F1 分数提高了约 4.8% (从 91.5%提高到 96.3%) ,Qwen3-235B 提高了近 6% (从 90.7%提高到 96.9%) ,显示了更丰富的提示上下文的具体优势。
总结
与人类非常相似,AI 通常会做出隐含的假设。许多错误 (包括我们在这篇博文中分析的示例) 都是由隐式推理引起的,即模型尝试执行超过任务要求的操作,但漏掉了关键数据。通过将 AI 与基于规则的验证相结合的自校正工作流,可以消除此类错误。
人类从实际示例和专家指导中学习得最好,而不是在他们独自查看可能发生的所有可能错误的很长列表时学习。自校正工作流程使用对人类非常适用的“通过示例学习”方法,首先提供少量样本 (实践训练) ,然后纠正任何残差 (监督) 。如果您要为金融工作流构建基于 LLM 的自动化,建议您采用自校正方法,首先利用我们在 build.nvidia.com 上提供的免费云模型 API 根据您自己的交易数据进行评估,或者使用 NIM 在本地部署这些 API。
与我们一起参加 6 月 10 日至 12 日在巴黎举行的 NVIDIA GTC,聆听行业领导者关于金融服务业 AI 的演讲。我们将举办一场关于金融服务业中的生成式 AI 应用的专家对接会议,您可以从在生产环境中部署此类系统中汲取经验教训。