详细内容或原文请订阅后点击阅览
人工智能不是一个库:针对非确定性依赖性进行设计
在软件工程的大部分历史中,我们都是围绕一个简单而令人欣慰的假设构建系统:给定相同的输入,程序将产生相同的输出。当出现问题时,通常是由于错误、配置错误或依赖关系未按照宣传的方式运行。我们的工具、测试策略,甚至 [...]
来源:O'Reilly Media _AI & ML在软件工程的大部分历史中,我们都是围绕一个简单而令人欣慰的假设构建系统:给定相同的输入,程序将产生相同的输出。当出现问题时,通常是由于错误、配置错误或依赖关系未按照宣传的方式运行。我们的工具、测试策略,甚至我们的心理模型都是围绕这种决定论的期望而演变的。
人工智能悄然打破了这一假设。
随着大型语言模型和人工智能服务进入生产系统,它们通常通过熟悉的形状到达。有一个 API 端点、一个请求负载和一个响应正文。延迟、重试和超时看起来都是可控的。从架构的角度来看,将这些系统视为图书馆或外部服务是很自然的。
实际上,这种熟悉感会产生误导。人工智能系统的行为不太像确定性组件,而更像是非确定性协作者。相同的提示可能会产生不同的输出,上下文的微小变化可能会导致结果不成比例的变化,甚至重试也会以难以推理的方式改变行为。这些特征不是错误;而是错误。它们是这些系统工作方式所固有的。真正的问题是我们的架构常常假装不是这样。我们不需要问如何将人工智能集成为另一个依赖项,而是需要问如何围绕不能保证稳定输出的组件设计系统。事实证明,将人工智能视为一种不确定的依赖关系比将其视为更智能的 API 更有用。
这种转变也改变了我们对正确性的看法。团队通常需要询问输出对于给定的上下文是否可接受,而不是询问输出是否正确。这种重新构建可能会让人感到不舒服,特别是对于习惯于精确规范的工程师来说,但它更准确地反映了现实。随着时间的推移,可接受性可以受到限制、衡量和改进,即使不能完全保证。
