追踪概念
在本指南中,您可以了解跟踪在生成式AI(GenAI)应用中的含义以及跟踪的主要组成部分是什么。
本指南中的解释有一个很好的伴侣,即 Tracing Schema 指南,它将展示 MLflow Tracing 如何构建这里讨论的概念。
什么是追踪?
在机器学习(ML)的背景下,追踪 指的是在ML模型执行过程中详细跟踪和记录数据流和处理步骤。它提供了模型操作每个阶段的透明度和洞察力,从数据输入到预测输出。这种详细的跟踪对于调试、优化和理解ML模型的性能至关重要。
传统机器学习
在传统的机器学习中,推理过程相对简单。当请求发出时,输入数据被送入模型,模型处理数据并生成预测。
下图展示了输入数据、模型服务接口和模型本身之间的关系。
这个过程是完全可见的,这意味着输入和输出都清晰定义并且对最终用户来说是可理解的。例如,在垃圾邮件检测模型中,输入是一封电子邮件,输出是一个二进制标签,指示该电子邮件是否为垃圾邮件。整个推理过程是透明的,使得很容易确定发送了什么数据以及返回了什么预测,因此在定性模型性能的背景下,全跟踪过程基本上是无关紧要的。
然而,跟踪可能会作为部署配置的一部分被包含,以提供对服务器处理请求的性质、模型预测的延迟以及系统API访问日志的额外洞察。对于这种经典的跟踪日志形式,即从延迟和性能角度监控和记录与推理请求相关的元数据,这些日志通常不被模型开发人员或数据科学家用来理解模型的操作。
Span 的概念
在追踪的上下文中,一个 span 代表系统中的一个单一操作。它捕获元数据,如开始时间、结束时间,以及其他关于操作的上下文信息。除了元数据,提供给工作单元(如对 GenAI 模型的调用、从向量存储中检索查询,或函数调用)的输入,以及操作的输出,都会被记录下来。
下图展示了对 GenAI 模型的调用以及在跨度内收集的相关信息。跨度包括元数据,如开始时间、结束时间以及请求参数,还包括调用输入和输出。
Trace
的概念
在 GenAI 追踪的上下文中,追踪是一组类似有向无环图 (DAG) 的跨度事件的集合,这些事件在处理器中被异步调用和记录。每个跨度代表系统中的一个单一操作,并包含元数据,如开始时间、结束时间和其他上下文信息。这些跨度相互连接,形成一个追踪,提供了端到端过程的全面视图。
类似DAG的结构:DAG结构确保操作序列中没有循环,使得理解执行流程更加容易。
跨度信息:每个跨度捕获一个离散的工作单元,例如函数调用、数据库查询或API请求。跨度包含提供操作上下文的元数据。
层次关联:跨度反映了应用程序的结构,使您能够看到不同组件如何相互作用和依赖。
通过收集和分析这些跨度,可以追踪执行路径,识别瓶颈,并理解系统中不同组件之间的依赖关系和交互。这种可见性对于诊断问题、优化性能以及确保GenAI应用的健壮性至关重要。
为了说明整个跟踪在RAG应用程序中可以捕获的内容,请参见下图。
参与此应用程序的子系统对系统的质量和相关性至关重要。在数据与最终阶段LLM交互时,无法了解数据将遵循的路径,这导致了一个应用程序,其质量只能通过高度单调、繁琐且昂贵的手动验证每个部件来实现。
GenAI ChatCompletions 使用案例
在生成式人工智能(GenAI)应用中,例如聊天完成功能,对于模型和GenAI驱动的应用程序的开发者来说,追踪变得更为重要。这些用例涉及基于输入提示生成类似人类的文本。虽然不像涉及代理或信息检索以增强GenAI模型的应用那样复杂,但聊天界面可以从追踪中受益。通过聊天会话在每次交互界面上启用对GenAI模型的追踪,可以评估整个上下文历史、提示、输入和配置参数以及输出,从而封装已提交给GenAI模型的请求负载的完整上下文。
作为一个例子,下面的图示展示了用于连接部署服务器中的模型与外部GenAI服务的ChatCompletions接口的性质。
推理过程周围的附加元数据在多种情况下都很有用,包括计费、性能评估、相关性、幻觉评估和一般调试。关键元数据包括:
Token 计数:处理的 token 数量,这会影响计费。
模型名称: 用于推理的具体模型。
提供者类型:提供模型的服务或平台。
查询参数: 影响生成过程的设置,如温度和top-k。
查询输入: 请求输入(用户问题)。
查询响应: 系统对输入查询生成的响应,利用查询参数来调整生成。
这些元数据有助于理解不同设置如何影响生成响应的质量和性能,有助于微调和优化。
高级检索增强生成 (RAG) 应用
在像检索增强生成(RAG)这样的复杂应用中,追踪对于有效的调试和优化至关重要。RAG 涉及多个阶段,包括文档检索和与生成式AI模型的交互。当仅能看到输入和输出时,识别问题的根源或改进的机会变得具有挑战性。
例如,如果一个GenAI系统生成了一个不令人满意的响应,问题可能在于:
向量存储优化: 文档检索过程的效率和准确性。
嵌入模型:用于编码和搜索相关文档的模型的质量。
参考资料:被查询的文档的内容和质量。
追踪允许对RAG管道中的每一步进行调查和质量裁决。通过提供每个阶段的可见性,追踪有助于确定需要调整的地方,无论是在检索过程中、嵌入模型中,还是在参考材料的内容中。
例如,下图展示了构成一个简单 RAG 应用程序的复杂交互,其中 GenAI 模型被反复调用,并使用额外的检索数据来指导最终输出生成响应。
在没有启用跟踪的复杂系统中,识别问题的根本原因或瓶颈是具有挑战性的。以下步骤将有效地成为一个“黑箱”:
输入查询的嵌入
编码查询向量的返回
向量搜索输入
从向量数据库中检索到的文档片段
GenAI 模型的最终输入
在没有配置这些5个关键步骤的工具来捕获每个请求的输入、输出和相关元数据的情况下,诊断此类系统中响应的正确性问题会变得非常具有挑战性。在考虑响应性或成本的性能调优时,如果没有对这些步骤的延迟的可视性,将会带来完全不同的挑战,这需要对每个服务进行配置和手动工具化。
开始使用 MLflow 中的跟踪
要学习如何在 MLflow 中使用跟踪,请参阅 MLflow 跟踪指南。