评估驱动开发介绍:构建真正有价值的 AI 助手

Daniel Rodriguez

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

我们的 Anaconda 助手是数据科学家的 AI 编码伙伴,它体现了 EDD 的强大功能。它通过真实的代码样本、错误和修复进行训练,提供上下文相关的建议和调试帮助,以增强您的 Python 工作流程。由于 EDD,它在每次更新中都会变得更智能。

我们相信 EDD 是 AI 开发的未来,它确保 AI 工具不仅演示良好,而且能提供真正的价值。如果您对 AI 的潜力感到兴奋,但对炒作感到担忧,请继续阅读,了解 EDD 的工作原理以及为什么它是构建真正有用的 AI 应用程序的颠覆者。

Anaconda 助手:您的 AI 驱动的 Data Science 助手

作为一名使用 Python 的数据科学家,您知道在代码中遇到障碍的沮丧感。这就是 Anaconda 助手发挥作用的地方。

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

  • 生成具有清晰解释的复杂代码片段
  • 建议改进代码风格和可读性
  • 提供函数和模块的上下文解释
  • 推荐适合您项目的 数据预处理 技术

但助手的最受欢迎的功能是智能调试。遥测数据显示,60% 的用户交互涉及寻求对烦人错误的帮助。

只需将您的错误描述给助手,几秒钟内,您就会获得对问题的通俗易懂的解释以及修复它的建议。不再需要花费数小时在 Stack Overflow 上搜索!

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

在下一节中,我们将探讨 EDD 如何使我们能够在无需昂贵且耗时的模型重新训练的情况下持续改进 Anaconda 助手。

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

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

这就是“llm-eval”发挥作用的地方。它是一个全面的测试框架,使我们能够模拟数千种现实的用户交互,并在广泛的场景中评估助手的响应,从调试复杂错误到生成可读且文档良好的代码。

以下是它的工作原理的概述

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

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

错误处理:EDD 的案例研究

错误处理是助手功能的关键方面,因为数据科学家在代码中遇到错误时需要清晰、可操作的指导。为了评估助手在此领域的性能,我们使用“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)

   

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

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

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

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

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

提示工程和评估

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

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

  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 助手在解释和修复真实世界 Python 错误方面的准确性。由此产生的评估数据为我们提供了有关助手性能的宝贵见解,包括

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

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

工作原理:代理反馈迭代

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

以下是工作原理:

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

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

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

用户提示修改

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

系统提示更改

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

通过多轮“代理反馈迭代”,我们正在显著提高 Anaconda 助手响应的准确性,特别是在最具挑战性和细微的错误情况下。在下一部分中,我们将深入探讨此优化过程的详细结果,并探索一些最令人印象深刻的改进。

结果

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

  • 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 助手能够在每次测试执行中正确识别错误并生成有效的解决方案。

这些结果为评估驱动开发的强大功能以及先进语言模型与严格测试、提示工程和“代理反馈迭代”等技术相结合的变革潜力提供了令人信服的证据。通过不断改进我们的方法并扩展其应用,我们相信我们可以释放更高的性能和多功能性,不仅适用于 Anaconda 助手,还适用于广泛领域的 AI 驱动的工具。

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

Anaconda 中的评估驱动开发的下一步

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

EDD 在显著提高 Anaconda 助手性能和可靠性方面的成功仅仅是个开始。展望未来,我们很高兴探索建立在这个基础上的新机遇,推动更大的创新和影响力。

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

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

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

拥抱 AI 驱动开发的未来

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

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

AI 驱动开发的未来一片光明,而评估驱动开发是我们的指路明灯,我们很高兴看到这段旅程将带我们走向何方。让我们共同拥抱这种新范式,并释放 AI 的全部潜能,为我们的世界带来更好的改变。

与专家交谈

与我们的专家交谈,找到适合您 AI 旅程的解决方案。

与专家交谈