评估驱动开发简介:构建交付真正价值的 AI 助手

Daniel Rodriguez

在 Anaconda,我们开发了一种严谨的全新 AI 开发方法,称为评估驱动开发 (EDD)。通过使用真实世界的案例和用户反馈持续测试 AI 模型,EDD 使我们能够创建可靠、相关且对用户真正有影响力的 AI 助手。

我们的 Anaconda Assistant 是一款面向数据科学家的 AI 编码助手,它体现了 EDD 的强大功能。它在真实的代码示例、错误和修复程序上进行训练,提供上下文相关的建议和调试帮助,从而增强您的 Python 工作流程。得益于 EDD,它在每次更新时都会变得更智能。

我们相信 EDD 是 AI 开发的未来,它确保 AI 工具不仅演示效果好,而且能交付真正的价值。如果您对 AI 的潜力感到兴奋,但又对炒作持谨慎态度,请继续阅读以了解 EDD 的工作原理以及为何它对于构建能够发挥作用的 AI 应用程序来说是颠覆性的。

Anaconda Assistant:您的 AI 驱动的数据科学助手

作为一名使用 Python 的数据科学家,您知道代码中遇到障碍时的挫败感。这就是 Anaconda Assistant 的用武之地。

Assistant 利用在真实世界的 Python 代码、错误和解决方案上训练的先进语言模型,提供一系列功能来简化您的工作流程

  • 生成带有清晰解释的复杂代码片段
  • 建议改进代码风格和可读性
  • 为函数和模块提供上下文相关的解释
  • 推荐针对您的项目量身定制的数据预处理技术

但 Assistant 最受欢迎的功能无疑是智能调试。遥测数据显示,60% 的用户交互都涉及到寻求错误帮助。

只需向 Assistant 描述您的错误,几秒钟内,您就会得到对该问题的通俗易懂的解释和修复建议。不再需要花费数小时搜索 Stack Overflow!

最棒的是,得益于我们的评估驱动开发 (EDD) 流程,Assistant 始终在变得更智能。每次与已同意数据收集的用户进行交互,都是一次改进我们用来从底层语言模型中获得相关、可靠支持的提示和查询的机会。

在下一节中,我们将探讨 EDD 如何使我们能够持续改进 Anaconda Assistant,而无需耗费大量时间和成本的模型重新训练。

我们的方法:使用“llm-eval”进行评估驱动开发

我们的评估驱动开发 (EDD) 方法论由我们内部的“llm-eval”框架提供支持,包括严格测试和改进我们用来从底层语言模型中获得相关、可靠输出的提示和查询。我们不只是针对抽象的基准进行优化,而是评估 Anaconda Assistant 处理数据科学家日常工作中面临的实际挑战的能力。

这就是“llm-eval”的用武之地。它是一个全面的测试框架,使我们能够模拟数千次真实的用户交互,并评估 Assistant 在各种场景下的响应,从调试复杂错误到生成可读、文档完善的代码。

以下是其工作原理的高级概述

  1. 我们首先定义关键的评估标准,重点关注对我们的用户最重要的领域,例如错误解释的准确性和代码解释的清晰度。
  2. 接下来,我们策划了一组多样化的测试用例,涵盖数据科学家最常见的任务和挑战,从简单的语法错误到围绕数据类型和性能的复杂问题。
  3. 然后,我们针对每个测试用例运行 Anaconda Assistant,并根据我们的标准评估其性能。“llm-eval”自动化了大部分此过程,使我们能够有效地在各种场景中测试 Assistant。
  4. 根据结果,我们确定 Assistant 的输出可以改进的领域,并使用这些见解来改进我们的提示、查询和知识库。
  5. 最后,我们重新运行评估以验证我们的改进是否显着提高了 Assistant 的性能。然后,循环重新开始,每次迭代都推动 Assistant 朝着更高水平的可靠性和实用性发展。

为了使这更具体一些,让我们仔细看看我们如何将 EDD 应用于 Anaconda Assistant 最重要的功能之一:错误处理。

错误处理:EDD 的案例研究

错误处理是 Assistant 功能的关键方面,因为数据科学家在代码中遇到错误时依赖于清晰、可操作的指导。为了评估 Assistant 在这方面的性能,我们使用了“llm-eval”框架来系统地测试其在各种真实世界调试场景中诊断和修复错误的能力。

一个特别有启发性的案例研究涉及以下代码,当无效年龄传递给 `create_person` 函数时,该代码会引发 `ValueError`

class Person:

    def __init__(self, name, age):

        self.name = name

        self.age = age

    def __str__(self):

        return f"Name: {self.name}, Age: {self.age}"

def create_person(name, age):

    if age < 0:

        raise ValueError("Age cannot be negative.")

    return Person(name, age)

def print_person_details(person):

    print(f"Person Details: {person}")

# Example usage

people = [

    create_person("Alice", 25),

    create_person("Bob", -5),  # Raises ValueError

    create_person("Charlie", 30),

]

for person in people:
    print_person_details(person)

   

我们向 Assistant 提供了此代码片段和相应的错误消息,并根据准确性评估其响应:它是否正确识别根本原因并提供解决问题的修复程序?

为了评估 Assistant 的性能,我们使用不同的语言模型、版本和温度设置测试了其响应。在像 Anaconda Assistant 背后的 AI 模型中,温度设置控制生成文本的随机性和创造性。较低的温度会导致更精确但保守的响应,而较高的温度允许更大的多样性,但可能会以连贯性或事实准确性为代价。找到正确的平衡是实现可靠、高质量结果的关键。

最初的评估结果令人大开眼界

模型温度迭代次数成功率
GPT-3.5-Turbo (v0125)050012%
GPT-3.5-Turbo (v0125)150013%
Mistral 7B Instruct v0.205000%
Mistral 7B Instruct v0.215002%

在这些条件下,Anaconda Assistant 最多只能在 13% 的测试执行中正确识别错误并提供可行的解决方案。然而,我们并没有因这些结果而气馁,而是将它们视为一个宝贵的机会,可以利用从我们的“llm-eval”框架中获得的见解来显着提高 Assistant 的性能。通过仔细设计用于获得错误解释和修复程序的提示和查询,并通过根据评估结果迭代这些提示,我们相信我们可以显着增强 Assistant 的错误处理能力。在下一节中,我们将探讨我们如何应用这些提示工程技术将 Assistant 转化为强大而可靠的调试助手。

提示工程和评估

提示工程是仔细设计提供给 AI 模型的文本输入(“提示”)以引导其生成所需输出的过程。正如措辞得当的问题可以帮助人类给出更相关和有用的答案一样,有效设计的提示可以显着提高 AI 响应的质量。这可能涉及提供示例、将复杂任务分解为步骤或指定格式要求等技术。

为了提高 Anaconda Assistant 在错误处理方面的准确性,我们采用了几种提示工程技术,这些技术已被证明可以有效地引导语言模型生成更准确和相关的响应

  1. 少样本学习: 通过在提示中提供先前解释过的错误及其修复程序的示例,我们的目标是引导模型生成更准确的错误解释和代码更正。这些示例是从常见 Python 错误及其相应修复程序的数据集中精心选择的,确保它们代表用户可能遇到的问题类型。
  2. 思维链提示: 我们构建提示以在请求修复后的代码之前先请求错误的解释。这种方法鼓励模型逐步推理问题,可能导致更可靠的解决方案。通过将问题解决过程分解为离散步骤,我们希望模仿人类开发人员可能采用的调试方法。

以下是使用的原始提示的简化版本

system:

You are an AI Assistant called 'Anaconda Assistant'. As a Jupyter Notebook expert, your main task is to help debug code and briefly explain errors. Ask before providing corrected code. If providing corrected code, only provide the corrected code, nothing else.

[...]

user:

```python

def fibonacci(n):

    fib = [0, 1]

    for i in range(2, n+1):

        fib.append(fib[i] + fib[i-1])

    return fib fibonacci(10)

```

<output>

IndexError Traceback

----> 1 fibonacci(10)

----> 4 fib.append(fib[i] + fib[i-1])

</output>

Explain this error.

assistant:

The error occurs because the code is trying to access an index that is not yet in the list. To fix this error, you need to change the indexing in the loop.

The error occurs in the following line:

```python

fib.append(fib[i-1] + fib[i-2])

```

Explanation:

The code tries to access `fib[i]` and `fib[i-1]` to calculate the next Fibonacci number. \nHowever, `fib[i]` is not yet in the list, causing the IndexError. By changing the line to `fib.append(fib[i-1] + fib[i-2])`, \nwe correctly access the two previous Fibonacci numbers to calculate the next one.

[...]

```python

{error_cell_code}

```

<output>

{error_output}

</output>
Explain this error.

为了严格评估生成响应的准确性,我们在“llm-eval”中开发了一个全面的测试框架,该框架在受控环境中执行生成的代码片段。此框架捕获有关执行过程的详细信息,包括遇到的任何错误或异常,并将输出与预期结果进行比较。

通过对数百个生成的代码片段运行此评估过程,我们系统地衡量 Anaconda Assistant 在解释和修复真实世界 Python 错误方面的准确性。由此产生的评估数据提供了有关 Assistant 性能的大量见解,包括

  • 解释和修复不同类型错误的总体准确率
  • Assistant 遇到困难的特定模式和边缘情况(例如,涉及复杂数据结构或多个相互关联文件的错误)
  • 不同提示工程技术在提高准确性方面的有效性

这些见解正在成为我们提示工程工作的重要指南。在下一节中,我们将仔细研究这种评估驱动的优化过程的结果,并探讨我们能够实现的一些具体改进。

工作原理:Agentic 反馈迭代

作为我们的评估驱动开发 (EDD) 框架的一部分,我们正在采用一种称为 Agentic 反馈迭代的创新技术,以进一步改进 Anaconda Assistant 中使用的提示和查询。此过程利用大型语言模型的先进功能,根据评估结果提供有针对性的反馈和改进建议。

以下是其工作原理

  1. 我们将评估结果(包括原始提示、查询、生成的响应和准确性指标)输入到语言模型中。
  2. 该模型分析这些数据,并提供有关如何修改提示和查询以解决已识别的弱点和边缘情况的具体建议。例如,它可能会建议添加更多上下文以帮助 Assistant 更好地理解用户的意图,或者调整格式以优先考虑某些类型的响应。
  3. 我们将模型的建议纳入提示和查询中,并重新运行评估过程以衡量对准确性的影响。
  4. 我们重复此迭代过程,模型提供进一步的反馈和改进轮次,直到我们在响应准确性方面取得显着提高。

通过利用大型语言模型的先进语言理解和生成能力,Agentic 反馈迭代使我们能够以数据驱动、有针对性的方式快速优化提示和查询。

通过此过程对提示和查询进行的具体更改直接解决了我们在最初评估中确定的关键挑战和机遇。例如

用户提示修改

  • 原始提示:“解释此错误”
  • 更新提示:“如何修复此错误?”

系统提示更改

  • 原始提示:“您是名为 ‘Anaconda Assistant’ 的 AI 助手。作为 Jupyter Notebook 专家,您的主要任务是帮助调试代码并简要解释错误。在提供更正后的代码之前先询问。如果提供更正后的代码,则仅提供更正后的代码,不提供其他内容。”
  • 更新提示:“作为 ‘Anaconda Assistant’,您是一位 Jupyter Notebook 专家,负责调试 Python 代码并向用户解释错误。在回复查询时,请遵循以下准则:1. 提供带有输出错误的代码片段。2. 用简单的术语解释错误的原因。3. 在提供更正后的代码版本之前,询问是否获得许可。4. 在解决所提及特定错误的单个 Python 代码块中提供更正后的代码。5. 在解释错误或提供更正后的代码时,在代码中包含注释以突出显示更改以及更改原因。”

通过多轮 Agentic 反馈迭代,我们显着提高了 Anaconda Assistant 响应的准确性,尤其是在最具挑战性和细微差别的错误场景中。在下一节中,我们将深入探讨此优化过程的详细结果,并探讨已实现的一些最令人印象深刻的改进。

结果

为了评估我们的提示工程工作和 Agentic 反馈迭代过程的影响,我们使用改进后的提示进行了新一轮评估。我们专注于相同的错误处理场景,运行数百次以检查生成的代码是否仍然包含原始错误或提供了成功的修复。

  • OpenAI GPT-3.5-Turbo (0125) 温度 0:87% 的成功率(从 12% 提高)
  • OpenAI GPT-3.5-Turbo (0125) 温度 1:63% 的成功率(从 13% 提高)
  • Mistral 7B Instruct v0.2 – NVIDIA A10G – 温度 0.1:87% 的成功率(从 0% 提高)  
  • Mistral 7B Instruct v0.2 – NVIDIA A10G – 温度 1:100% 的成功率(从 2% 提高)

结果表明,与我们最初的评估相比,所有模型和设置的性能都显着提高。Mistral 7B 模型的提升最为显着,当使用温度设置为 1 时,其成功率达到了完美的 100%。这意味着,在这些条件下,Anaconda Assistant 能够在每次测试执行中正确识别错误并生成可行的解决方案。

这些结果为评估驱动开发的力量以及先进语言模型与严格的测试、提示工程和 Agentic 反馈迭代等技术相结合的变革潜力提供了令人信服的证据。通过不断改进我们的方法并扩展其应用,我们相信我们不仅可以为 Anaconda Assistant 解锁更高水平的性能和多功能性,还可以为各种领域的 AI 驱动工具解锁更高水平的性能和多功能性。

在下一节中,我们将探讨 EDD 和 Anaconda Assistant 一些令人兴奋的未来方向,以及您如何参与塑造 AI 辅助数据科学的未来。

Anaconda 中评估驱动开发的未来展望

我们的评估驱动开发 (EDD) 流程代表了一种范式转变,它正在彻底改变我们跨行业构建、测试和部署 AI 驱动工具的方式。借助 EDD,我们正在将信任、可靠性和前所未有的能力构建到 AI 开发的结构中。

EDD 在显着提高 Anaconda Assistant 的性能和可靠性方面的成功仅仅是开始。展望未来,我们很高兴探索新的机会,以在此基础上继续发展,并推动更大的创新和影响。

我们未来 EDD 的首要任务包括

  1. 扩展“llm-eval”框架: 通过整合更复杂、多步骤的编码挑战和特定领域的评估标准,我们可以以前所未有的深度和精度评估我们的 AI 解决方案的性能,从而识别新的改进和优化机会。
  2. 与开源社区协作: 我们致力于在不久的将来公开发布“llm-eval”框架,使其他组织能够采用和构建在我们的评估驱动开发方法之上。
  3. 整合用户反馈以持续改进: 通过分析使用模式、功能请求和性能评级,我们可以优先考虑直接满足用户需求和偏好的改进,确保我们的解决方案不仅满足而且超出他们的期望。

无论您是数据科学家、开发人员还是 AI 爱好者,都有许多方法可以参与并为 EDD 和 Anaconda Assistant 的未来做出贡献。从在您自己的项目中试用 Assistant 并提供反馈,到在我们发布“llm-eval”框架后为其开发做出贡献。您的意见和专业知识对于塑造 AI 驱动创新的未来至关重要。

拥抱 AI 驱动开发的未来

想象一下,在未来,像 Anaconda Assistant 这样的 AI 驱动工具不仅仅是锦上添花,而是数据科学工作流程中不可或缺的合作伙伴,使使用者能够专注于高层次的问题解决,而 AI 则处理重复性任务。AI 驱动的代码分析和生成工具可以帮助开发人员编写更可靠、高效和安全的软件。

这就是评估驱动开发旨在实现的未来。通过将严格的、数据驱动的测试与有针对性的提示工程和 Agentic 反馈迭代等技术相结合,我们不仅仅是在改进 AI 模型,我们的目标是从根本上改变我们开发和部署 AI 的方式。

AI 驱动开发的未来是光明的,以评估驱动开发作为我们的指路明灯,我们很高兴看到这段旅程将我们带向何方。让我们一起拥抱这个新范式,释放 AI 的全部潜力,让我们的世界变得更美好。

与专家交谈

与我们的专家之一交谈,为您的 AI 之旅寻找解决方案。

与专家交谈