SWE-bench Verified-də Claude 3.5 Sonnet ilə səviyyəni yüksəltmək

Ən son modelimiz, təkmilləşdirilmiş Claude 3.5 Sonnet, proqram mühəndisliyi qiymətləndirməsi olan SWE-bench Verified-də 49% nəticə göstərərək, əvvəlki ən yaxşı modelin 45%-lik nəticəsini üstələdi. Bu yazı modelin ətrafında qurduğumuz "agent"i izah edir və tərtibatçılara Claude 3.5 Sonnet-dən mümkün olan ən yaxşı performansı əldə etməyə kömək etmək üçün nəzərdə tutulub.

SWE-bench modelin real proqram mühəndisliyi tapşırıqlarını yerinə yetirmə qabiliyyətini qiymətləndirən süni intellekt benchmark-ıdır. Konkret olaraq, modelin populyar açıq mənbəli Python repozitoriyalarından GitHub issue-larını necə həll edə biləcəyini test edir. Benchmark-dakı hər bir tapşırıq üçün süni intellekt modelinə qurulmuş Python mühiti və issue həll edilməzdən dərhal əvvəlki repozitoriyanın checkout-u (lokal işçi nüsxəsi) verilir. Model daha sonra kodu başa düşməli, dəyişdirməli və test etməli, sonra təklif etdiyi həllini təqdim etməlidir.

Hər bir həll orijinal GitHub issue-nu bağlayan pull request-dən real unit testləri ilə qiymətləndirilir. Bu, süni intellekt modelinin PR-ın orijinal insan müəllifi ilə eyni funksionallığa nail olub-olmadığını test edir.

SWE-bench süni intellekt modelini təkcə təkbaşına qiymətləndirmir, əksinə bütöv bir "agent" sistemini qiymətləndirir. Bu kontekstdə "agent" süni intellekt modeli və onun ətrafındakı proqram qatının birləşməsini ifadə edir. Bu qat modelə göndərilən prompt-ların yaradılması, modelin çıxışının təhlil edilərək hərəkətə keçirilməsi və modelin əvvəlki hərəkətinin nəticəsinin növbəti prompt-una daxil edildiyi qarşılıqlı əlaqə dövrünün idarə olunması üçün məsuliyyət daşıyır. Agent-in SWE-bench-dəki performansı eyni əsas süni intellekt modelindən istifadə edilsə belə, bu qata görə əhəmiyyətli dərəcədə dəyişə bilər.

Böyük Dil Modellərinin kodlaşdırma qabiliyyətləri üçün bir çox başqa benchmark-lar mövcuddur, lakin SWE-bench bir neçə səbəbə görə populyarlıq qazanıb:

  1. Müsabiqə və ya müsahibə tipli suallar əvəzinə, real layihələrdən real mühəndislik tapşırıqlarından istifadə edir;
  2. Hələ doyma nöqtəsinə çatmayıb — təkmilləşdirmə üçün çoxlu yer var. Heç bir model hələlik SWE-bench Verified-də 50% tamamlanma həddini keçməyib (baxmayaraq ki, yenilənmiş Claude 3.5 Sonnet yazı vaxtı 49%-dədir);
  3. Modeli təkbaşına deyil, bütöv bir "agent"i ölçür. Açıq mənbəli tərtibatçılar və startap-lar eyni modelin ətrafındakı qatları optimallaşdıraraq performansı əhəmiyyətli dərəcədə artırmaqda böyük uğur əldə ediblər.

Qeyd edək ki, orijinal SWE-bench məlumat dəsti GitHub issue-dan kənar əlavə kontekst olmadan həll edilməsi mümkün olmayan bəzi tapşırıqları ehtiva edir (məsələn, qaytarılmalı olan xüsusi xəta mesajları haqqında). SWE-bench-Verified SWE-bench-in insanlar tərəfindən həll edilə bilən olduğu təsdiqlənmiş 500 problemlik alt dəstidir və beləliklə kodlaşdırma agent-lərinin performansının ən aydın ölçüsünü təmin edir. Bu yazıda istinad edəcəyimiz benchmark budur.

Ən yaxşı nəticənin əldə edilməsi

Tool İstifadə Edən Agent

Yenilənmiş Claude 3.5 Sonnet üçün optimallaşdırılmış agent qatını yaradarkən dizayn fəlsəfəmiz dil modelinin özünə mümkün qədər çox nəzarət vermək və qatı minimal saxlamaq idi. Agent-in prompt-u, bash əmrlərini icra etmək üçün Bash Tool-u və faylları və qovluqları baxmaq və redaktə etmək üçün Edit Tool-u var. Model bitirdiyinə qərar verənə və ya 200k kontekst uzunluğunu aşana qədər nümunələməyə davam edirik. Bu qat modelə müəyyən bir nümunəyə və ya iş axınına sərt şəkildə kodlanmaq əvəzinə, problemin həllinə necə yanaşacağı barədə öz mühakiməsini istifadə etməyə imkan verir.

Prompt model üçün təklif olunan yanaşmanı təsvir edir, lakin bu tapşırıq üçün həddən artıq uzun və ya çox ətraflı deyil. Model ciddi və diskret keçidlər əvəzinə, addımdan addıma necə keçəcəyini özü seçə bilər. Əgər token həssaslığınız yoxdursa, modeli uzun cavab verməyə açıq şəkildə təşviq etmək faydalı ola bilər.

Aşağıdakı kod agent qatımızdakı prompt-u göstərir:

$18

Modelin ilk alətı Bash əmrlərini icra edir. Sxem sadədir, yalnız mühitdə icra ediləcək əmri qəbul edir. Lakin alətin təsviri daha çox əhəmiyyət daşıyır. O, model üçün daha ətraflı təlimatları, o cümlədən giriş verilənlərinin escape edilməsi, internet girişinin olmaması və əmrlərin arxa planda necə icra ediləcəyini əhatə edir.

Növbəti olaraq Bash Tool-un spesifikasiyasını göstəririk:

{
   "name": "bash",
   "description": "Run commands in a bash shell\n
* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n
* You don't have access to the internet via this tool.\n
* You do have access to a mirror of common linux and python packages via apt and pip.\n
* State is persistent across command calls and discussions with the user.\n
* To inspect a particular line range of a file, e.g. lines 10-25, try 'sed -n 10,25p /path/to/the/file'.\n
* Please avoid commands that may produce a very large amount of output.\n
* Please run long lived commands in the background, e.g. 'sleep 10 &' or start a server in the background.",
   "input_schema": {
       "type": "object",
       "properties": {
           "command": {
               "type": "string",
               "description": "The bash command to run."
           }
       },
       "required": ["command"]
   }
}

Modelin ikinci aləti (Edit Tool) daha mürəkkəbdir və modelin fayllara baxmaq, yaratmaq və redaktə etmək üçün ehtiyac duyduğu hər şeyi ehtiva edir. Yenə də, alət təsvirimiz modelin aləti necə istifadə edəcəyi haqqında ətraflı məlumat ehtiva edir.

Biz bu alətlərin təsvirləri və spesifikasiyaları üzərində geniş spektrli agent tapşırıqlarında çox səy göstərdik. Modelin spesifikasiyanı yanlış başa düşə biləcəyi yolları və ya alətlərdən istifadənin mümkün tələlərini aşkar etmək üçün onları test etdik, sonra bu problemləri əvvəlcədən aradan qaldırmaq üçün təsvirləri redaktə etdik. Hesab edirik ki, insanlar üçün alət interfeysləri dizayn edilərkən böyük diqqət göstərildiyi kimi, modellər üçün alət interfeysləri dizayn edilərkən də daha çox diqqət göstərilməlidir.

Aşağıdakı kod Edit Tool-umuzun təsvirini göstərir:

$19

Performansı artırdığımız yollardan biri alətlərimizi "xətaya davamlı" etmək oldu. Məsələn, bəzən modellər agent kök qovluqdan çıxdıqdan sonra nisbi fayl yollarını səhv edə bilirdi. Bunun qarşısını almaq üçün sadəcə alətin həmişə mütləq yol tələb etməsini təmin etdik.

Mövcud fayllar üçün redaktələrin təyin edilməsinin bir neçə fərqli strategiyası ilə təcrübə apardıq və ən yüksək etibarlılığı sətir əvəzetmə ilə əldə etdik — burada model verilmiş faylda old_str-i new_str ilə əvəz etməyi göstərir. Əvəzetmə yalnız old_str-in tam olaraq bir uyğunluğu olduqda baş verir. Daha çox və ya daha az uyğunluq olduqda, modelə yenidən cəhd etməsi üçün müvafiq xəta mesajı göstərilir.

Edit Tool-umuzun spesifikasiyası aşağıda göstərilib:

$1a

Nəticələr

Ümumiyyətlə, yenilənmiş Claude 3.5 Sonnet əvvəlki modellərimiz və əvvəlki ən yaxşı nəticəli modellə müqayisədə daha yüksək mühakimə, kodlaşdırma və riyazi qabiliyyətlər nümayiş etdirir. O, həmçinin təkmilləşdirilmiş agent qabiliyyətləri nümayiş etdirir: alətlər və qat bu təkmilləşdirilmiş qabiliyyətləri ən yaxşı şəkildə istifadə etməyə kömək edir.

Model Claude 3.5 Sonnet (yeni) Əvvəlki SOTA Claude 3.5 Sonnet (köhnə) Claude 3 Opus
SWE-bench Verified nəticəsi 49% 45% 33% 22%

Agent davranış nümunələri

Benchmark-ı icra etmək üçün agent kodumuzun əsası kimi SWE-Agent framework-ündən istifadə etdik. Aşağıdakı log-larımızda agent-in mətn çıxışını, alət çağırışlarını və alət cavablarını THOUGHT, ACTION və OBSERVATION olaraq göstəririk, baxmayaraq ki, modeli sabit sıralamaya məcbur etmirik.

Aşağıdakı kod blokları Sonnet 3.5-in SWE-bench problemini həll etməsinin tipik bir nümunəsini addım-addım göstərəcək.

Bu ilk blokda modelə verilən ilkin prompt-un bir hissəsini görə bilərsiniz, burada {pr_description} SWE-bench tapşırığından real dəyərlə doldurulub. Vacib olan odur ki, bu tapşırıq problemi təkrar yaratmaq üçün addımlar ehtiva edir, bu da modelə araşdırmağa başlamaq üçün dəyərli bir başlanğıc nöqtəsi verəcək.

<uploaded_files>
/repo
</uploaded_files>
I've uploaded a python code repository in the directory /repo (not in /tmp/inputs). Consider the following PR description:

<pr_description>
linear_model.RidgeClassifierCV's Parameter store_cv_values issue
#### Description
Parameter store_cv_values error on sklearn.linear_model.RidgeClassifierCV

#### Steps/Code to Reproduce
import numpy as np
from sklearn import linear_model as lm

#test verilənlər bazası
n = 100
x = np.random.randn(n, 30)
y = np.random.normal(size = n)

rr = lm.RidgeClassifierCV(alphas = np.arange(0.1, 1000, 0.1), normalize = True, 
                                         store_cv_values = True).fit(x, y)

#### Expected Results
Expected to get the usual ridge regression model output, keeping the cross validation predictions as attribute.

#### Actual Results
TypeError: __init__() got an unexpected keyword argument 'store_cv_values'

lm.RidgeClassifierCV actually has no parameter store_cv_values, even though some attributes depends on it.

Model cavab verir və əvvəlcə repozitoriya strukturunu görmək üçün Edit Tool-dan istifadə edir. Modelin mətn çıxışını və alət çağırışı arqumentlərini THOUGHT və ACTION altında, alətin çıxışının bir hissəsini isə OBSERVATION altında görə bilərsiniz:

THOUGHT:
I'll help you implement the changes to satisfy the PR description. Let's follow the steps you outlined.

1. First, let's explore the repo structure:
ACTION (str_replace_editor):
command:
view

path:
/repo

OBSERVATION:
Here's the files and directories up to 2 levels deep in /repo, excluding hidden items:
/repo
/repo/PULL_REQUEST_TEMPLATE.md
/repo/ISSUE_TEMPLATE.md
/repo/sklearn
/repo/sklearn/decomposition
/repo/sklearn/kernel_ridge.py
/repo/sklearn/model_selection
/repo/sklearn/covariance
/repo/sklearn/cluster
/repo/sklearn/base.py
/repo/sklearn/dummy.py
/repo/sklearn/naive_bayes.py
...

İndi model repozitoriya strukturunu daha yaxşı başa düşdükdən sonra, Edit Tool-dan istifadə edərək problemi təkrar yaratmaq və düzəlişini test etmək üçün istifadə edəcəyi yeni skript yaradır:

THOUGHT:
Based on the repository structure, we'll need to modify the Ridge Classifier in the `sklearn/linear_model` directory.

Let's create a script to reproduce the error:
ACTION (str_replace_editor):
command:
create

path:
/repo/reproduce_error.py

file_text:
import numpy as np
from sklearn import linear_model as lm

#test verilənlər bazası
n = 100
x = np.random.randn(n, 30)
y = np.random.normal(size = n)

rr = lm.RidgeClassifierCV(alphas=np.arange(0.1, 1000, 0.1), normalize=True, 
                         store_cv_values=True).fit(x, y)

OBSERVATION:
File created successfully at: /repo/reproduce_error.py

Model daha sonra yazdığı skripti icra etmək üçün Bash Tool-dan istifadə edir və tapşırıqdakı problemi uğurla təkrar yaradır:

THOUGHT:
Let's verify that we can reproduce the error:
ACTION (bash):
command:
python3 /repo/reproduce_error.py

OBSERVATION:
Traceback (most recent call last):
  File "/repo/reproduce_error.py", line 10, in <module>
    store_cv_values=True).fit(x, y)
TypeError: __init__() got an unexpected keyword argument 'store_cv_values'

Bundan sonra model repozitoriyadakı mənbə kodunu dəyişdirmək üçün Edit Tool-dan istifadə edir və dəyişikliyin problemi həll edib-etmədiyini yoxlamaq üçün skriptini yenidən icra edir:

$1b

Bu konkret nümunədə model təqdim etməyə hazır olduğuna qərar verməzdən əvvəl 12 addım işlədi. Tapşırığın testləri daha sonra uğurla icra olundu və modelin həllinin problemi həll etdiyini təsdiqlədi. Bəzi tapşırıqlar modelin həllini təqdim etməzdən əvvəl 100-dən çox dövr tələb etdi; digərlərində isə model kontekst bitənə qədər cəhd etməyə davam etdi.

Yenilənmiş Claude 3.5 Sonnet-in köhnə modellərlə müqayisədə cəhdlərini nəzərdən keçirdikdə, yenilənmiş 3.5 Sonnet daha tez-tez özünü düzəldir. O, həmçinin eyni səhvi təkrar-təkrar etmək əvəzinə, bir neçə fərqli həll yolu sınamaq bacarığı nümayiş etdirir.

Çətinliklər

SWE-bench Verified güclü bir qiymətləndirmədir, lakin onu icra etmək sadə, tək dönüşlü qiymətləndirmələrdən daha mürəkkəbdir. Bunlar ondan istifadə edərkən qarşılaşdığımız çətinliklərdir — digər süni intellekt tərtibatçılarının da qarşılaşa biləcəyi çətinliklər.

  1. Müddət və yüksək token xərcləri. Yuxarıdakı nümunələr 12 addımda uğurla tamamlanmış bir haldan götürülüb. Lakin bir çox uğurlu icra modelin həll etməsi üçün yüzlərlə dövr və 100k-dan çox token tələb etdi. Yenilənmiş Claude 3.5 Sonnet inadkardır: kifayət qədər vaxt verildikdə problemin öhdəsindən tez-tez gələ bilir, lakin bu bahalı ola bilər;
  2. Qiymətləndirmə. Uğursuz tapşırıqları araşdırarkən, modelin düzgün davrandığı, lakin mühit quraşdırma problemləri və ya install yamaqlarının iki dəfə tətbiq edilməsi ilə bağlı problemlər olan hallar tapdıq. Bu sistem problemlərinin həlli süni intellekt agent-inin performansının dəqiq mənzərəsini əldə etmək üçün vacibdir.
  3. Gizli testlər. Model qiymətləndirildiyi testləri görə bilmədiyinə görə, tapşırıq əslində uğursuz olduğu halda tez-tez uğurlu olduğunu "düşünür". Bu uğursuzluqların bəzisi modelin problemi yanlış abstraksiya səviyyəsində həll etməsinə görədir (dərin refaktorinq əvəzinə müvəqqəti həll tətbiq etmək). Digər uğursuzluqlar isə bir qədər daha ədalətsiz hiss olunur: problemi həll edirlər, lakin orijinal tapşırığın unit testlərinə uyğun gəlmirlər.
  4. Multimodal. Yenilənmiş Claude 3.5 Sonnet-in mükəmməl görüntü və multimodal qabiliyyətlərinə baxmayaraq, fayl sisteminə saxlanmış və ya URL olaraq istinad edilmiş faylları görə bilməsi üçün bir yol tətbiq etmədik. Bu, bəzi tapşırıqların (xüsusən Matplotlib-dən olanların) debug edilməsini xüsusilə çətinləşdirdi və həmçinin model hallüsinasiyalarına meyilli etdi. Burada tərtibatçıların təkmilləşdirə biləcəyi mütləq asan həllər var — və SWE-bench multimodal tapşırıqlara yönəlmiş yeni qiymətləndirmə təqdim edib. Yaxın gələcəkdə tərtibatçıların Claude ilə bu qiymətləndirmədə daha yüksək nəticələr əldə etməsini görmək istəyirik.

Yenilənmiş Claude 3.5 Sonnet sadə bir prompt və iki ümumi təyinatlı alətlə SWE-bench Verified-də 49% əldə edərək əvvəlki ən yaxşı nəticəni (45%) üstələdi. Əminik ki, yeni Claude 3.5 Sonnet ilə inşa edən tərtibatçılar burada ilkin nümayiş etdirdiyimiz nəticədən daha yaxşı SWE-bench nəticələri əldə etmək üçün tezliklə yeni, daha yaxşı yollar tapacaqlar.

Təşəkkürlər

Erik Schluntz SWE-bench agent-ini optimallaşdırdı və bu bloq yazısını yazdı. Simon Biggs, Dawn Drain və Eric Christiansen benchmark-ın tətbiqinə kömək etdi. Shauna Kravec, Dawn Drain, Felipe Rosso, Nova DasSarma, Ven Chandrasekaran və bir çox başqaları Claude 3.5 Sonnet-in agent kodlaşdırmasında əla olması üçün öyrədilməsinə töhfə verdi.

{{relatedArticles}}