В этом новом эталоне LLM нескольким моделям был задан один и тот же вопрос. Их ответы позволяют нам оценить их относительную компетентность в решении конкретной задачи. Это очень важное упражнение, поскольку оно позволяет нам определить лучшую модель для поставленной задачи.

Давайте посмотрим пример. Для оценки компетентности модели в программировании каждой модели было предложено написать функцию для поиска n-го числа в последовательности Фибоначчи. Вот точная подсказка:

Write a Python function to find the nth number in the Fibonacci Sequence.

Довольно простая подсказка.

Вот некоторые ответы, которые вы можете получить от разных моделей.

GPT3.5 использует итерационный цикл для вычисления n-го числа. Это также добавляет некоторые пояснения.

Here is a Python function that finds the nth number in the Fibonacci Sequence:

```python
def fibonacci(n):
    if n <= 0:
        return "Invalid input. Please enter a positive integer."
    elif n == 1:
        return 0
    elif n == 2:
        return 1
    else:
        a, b = 0, 1
        for _ in range(3, n+1):
            a, b = b, a + b
        return b
```

To use this function, you can call it with the desired value of n:

```python
print(fibonacci(10))  # Output: 34
print(fibonacci(20))  # Output: 4181
```

The function first checks if the input is valid (i.e., a positive integer). If n is less than or equal to 0, it returns an error message. If n is 1, it returns 0, and if n is 2, it returns 1, as these are the first two numbers in the Fibonacci Sequence.

For n greater than 2, the function uses a loop to calculate the nth number in the sequence. It initializes two variables, a and b, with the values 0 and 1, respectively. Then, it iterates from 3 to n, updating the values of a and b in each iteration by swapping them and adding them together. Finally, it returns the value of b, which represents the nth number in the Fibonacci Sequence.

NSQL LLaMA-2 (7B) отвечает следующее:

SELECT FLOOR(SQRT(5) * SQRT(5)) / 2 AS "nth_number" FROM (VALUES (1), (1)) AS "fibonacci_sequence"

Глядя на такое сравнение, вы можете предпочесть использовать GPT3.5 для простых задач программирования, а не NSQL LLaMA-2. Изучив ответы большего количества моделей, вы получите четкое представление об относительных способностях различных моделей при написании простых программ. Теперь давайте рассмотрим немного более сложную задачу.

Каждой модели была дана следующая подсказка:

Write a Python function that prints the next 20 leap years. 
Reply with only the function.

В ответе можно ожидать некоторых ключевых элементов:

  1. Ответ содержит действительный код Python.
  2. Ответ содержит только функцию. Никакого лишнего текста.
  3. Функция дает результат ровно за 20 лет.
  4. Функция не создает каких-либо непредусмотренных функций.
  5. Каждый произведенный год на самом деле является високосным годом в будущем.
  6. Функцию можно запустить в любое время в будущем, чтобы получить действительный результат.

Давайте посмотрим на некоторые примеры.

Начнем с Альпака (7Б).

def print_leap_years():
    for i in range(20):
        if i % 400 == 0:
            print(i)
    print("End")

print_leap_years()</s>

Есть несколько проблем с этой программой:

  1. Неверный синтаксис — </s> в конце препятствует запуску программы.
  2. Поиск високосных лет начинается с 0 вместо текущего года (2023).
  3. Его выходные данные содержат только один високосный год (0) вместо 20.
  4. Он печатает End в конце последовательности, чего ему не было поручено сделать. При программном использовании генеративного ИИ это может легко привести к появлению непредусмотренной функциональности.

Давайте посмотрим на Хронос Гермес (13Б) дальше:

def leap_years(n):
    years = [2000, 2004, 2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036, 2040, 2044, 2048, 2052, 2056, 2060, 2064, 2068, 2072, 2076, 2080, 2084, 2088, 2092, 2096, 2100]
    for i in range(n):
        print(years[i])
leap_years(20)

Это интересный подход, но он имеет ряд ограничений.

  1. Все значения жестко запрограммированы.
  2. Годы 2000 и 2100 на самом деле не являются високосными. (Как вы можете видеть здесь, если вы не знали.)
  3. Полученные значения на самом деле не являются «следующими» 20 високосными годами, это 20 високосных лет, начиная с 2000 года.

Давайте рассмотрим ответ Клода v2:

Here is a Python function to print the next 20 leap years:

def print_next_20_leap_years():
  current_year = 2023
  num_leap_years = 0
  while num_leap_years < 20:
    if current_year % 4 == 0 and (current_year % 100 != 0 or current_year % 400 == 0):
      print(current_year)
      num_leap_years += 1
    current_year += 1

Это намного лучше, но у него все еще есть две проблемы.

  1. Вверху есть дополнительный текст (без комментариев). Итак, если вы хотите получить ответ программно и запустить его, вы не сможете.
  2. Он предполагает, что текущий год — 2023, вместо того, чтобы рассматривать его как параметр или динамическое значение. Итак, если вы запустите ту же функцию в 2025 году, она даст неправильные результаты.

Код Лама (34Б) позволяет избежать одной проблемы, но привносит другую:

def leap_years(year):
    for i in range(year, year + 20):
        if i % 4 == 0 and i % 100 != 0 or i % 400 == 0:
            print(i)

leap_years(2020)

Он ловко добавляет параметр года, что позволяет использовать его в будущем, но у него есть и одна проблема: Вместо того, чтобы создавать 20 високосных лет, он будет создавать до 5 високосных лет.

Наконец, давайте посмотрим на GPT 4:

def print_leap_years():
    import datetime
    current_year = datetime.datetime.now().year
    count = 0
    while count < 20:
        if (current_year % 4 == 0 and current_year % 100 != 0) or (current_year % 400 == 0):
            print(current_year)
            count += 1
        current_year += 1

print_leap_years()

Это очень хорошо. Давайте пробежимся по нашему первоначальному контрольному списку:

  1. Он создает действительный код Python.
  2. Ответ содержит только код, без дополнительного текста.
  3. Производит ровно 20 лет.
  4. Нет непредвиденных функций.
  5. Каждый произведенный год на самом деле находится в будущем и является високосным годом.
  6. Я могу запустить функцию в 2025 году и при этом получить действительный список следующих 20 високосных лет.

Единственный недостаток, подсказка просила написать функцию, а не выполнить ее. Но это ошибка большинства моделей, поэтому я пока ее проигнорирую. В целом GPT4 показал себя очень хорошо. Вот табель успеваемости моделей, которые я оценивал:

Конечно, для любого реального проекта вам потребуется провести гораздо больше анализа, чтобы определить пригодность модели в данной области, но такие тесты позволяют нам сузить дальнейший анализ до 2–3 моделей.

Если вам интересно, вы можете увидеть ответы других моделей здесь: LLM Benchmark (llmonitor.com)