Галоўная / Артыкулы

Ацэнкі агентаў і навыкаў на практыцы: траекторыі, грэйдары, pass^k і інструменты

Як ацэньваць агентаў і навыкі: наборы на спрацоўванне і выкананне, парадак надзейнасці грэйдараў, дакладнасць і поўнасць, pass@k супраць pass^k, маленькая абвязка на Python і выбар інструментаў.

Выдавец: REACTAPP.TOP11 хв чытання2573 слоў

Крыніцы: Evals: A Crash Course for Agents and Skills

Раней чым пазней кожная команда, якая працуе з агентамі і ўмеласцямі, сталкаецца з аднай проблемай: дэмаверсія захопляе, але рэальны трафік адкрывае недагодзі, якіх ніхто не зазначыў. Ацэнкі заменяюць здагадкі на прамеры. Далей ідзе практычны практыкум пра тое, што трэба мерыць, як пісаць тэсты і крытэрыя ацэнкі, і як запускаць цыкл паследовання, які справа прычыніць агента стаць лепшым.

Ментальная модэль

Ацэнка — гэта повтароўны эксперымент. Дайце агенту вхідныя даны і сярэдавішча, а потым старайцеся разгледзець два аспекты: траекторыю, тыябо тое, што агент рабіў па дорозе, і рэзультат, тыябо гэты фінальны продукт, які ён стварыў.

Ацэнюйце і тое, і іншае:

  • Рэзультат: чы рэалізаваны продукт задовольняе заведамост?
  • Траекторыя: чы агент выбраў правыя ўмеласці і інструменты, ухіляўся ад небяпечных дзеянняў і працаваў караблёва?

Гладкая, завершальная адаптаваньне можа скрыць паслабую стратэгію, а некаліграфічная стратэгія все равно можа прынесці некалькаспрыяжны рэзультат. Адзінольга адзін пункт паказвае толькі частку правды.

Роўні ацэнкі

Няхай ніякі адзін чысловы показнік не можа сказаць, чы робат ўжо хораш. Раздзеліце задачу на роўні, кожная з якіх мае свою пераконтальную перапытку:

  • Распад навыкаў. Чы быў выбран правы навык? Адзірніцеся на тачнасць, вярнасць і хыбныя сігналы.
  • Следаванне навыку. Чы былі насправды выконаны інструкцыі навыку, укладаючы ў сябе неабходныя крокі і забраныя дзеянні?
  • Іспытанне інструментаў. Чы інструменты былі вызваны правільна, з правымі параметрамі, логічным порадкам і без непатрэбных вызоваў?
  • Рэзультат задачы. Чы рэзультат функцыонуе? Тэсты, пераконтальныя перапыткі схемы і асэрцыі пахавання даўаюць на гэта адказ.
  • Якасць. Чы гэты рэзультат можна падтрымваць і чы ён падходзіць? Адгуква да гэтага дае рубрыка чы адміністратар.
  • Безпека. Чы былі сачаваны меры ўжо ў вопытаках секрэтнаў, разрушальных операцыях і введэнні спецыяльных скарынак?
  • Эфектыўнасць. Скількі коштаў успех у токенах, затрымкі, вызовах і праказах?
  • Для навыку патрэбны два наборы крытэрыяў

    Навык — гэта не проста блок інструкцыяў. Ён включае рашэнне пра тое, калі яго актывацыяў, і план дзеяння пасля таго, таму яму патрэбны два аднальнія наборы крытэрыяў для ацэнкі.

    Ацэнка трыгероў пераканваецца, чы навык актывацыяўся для правільных вопытакаў. Кожны случак супакоюе вопытак з навыкам, які якраз патрабуецца, чы то навык, які павінен актывацыявацца, чы то той, які не павінен:

    - prompt: "Patch the vulnerable npm dependencies"
      expected_skill: cve-remediation
    - prompt: "Review authentication input validation"
      forbidden_skill: cve-remediation
    

    Закрыйце явныя позытывныя аспекты, перафразавыце позытывныя моменты, нейтральныя негатыўныя рэзультаты, неясныя запыткі і суперсечанні между двума правдападобнымі навыкамі. Адзвярніце матрыцу памылак у змену простай тачнасці, таму што хыбны позытыўны рэзультат можа нашкодзіць так жа, як і працязаны трыггер.

    Ацэнкі выканання пераканальваюцца, чы розпытка навыку павышае якасць работы. Паруце агента, які не мае навыку, з тым самым агентам, які яго мае, выкарыстоўваючы ідэнтычныя кейсы, сяродавішча, мадэль і інструменты, і павтараце працэю, таму што агенты ўзмаўчана неявнасны. Навык заслуговае на свае месца толькі тады, калі павышэння якасці падтрымлівае яго дадатковую складнасць і вартасць токенав.

    Як выглядае хорашы кейс

    Валідзіце рэалістычныя кадры рэпазітарыяў больш, чым ізольаваныя дробныя факты. Хорашы кейс ёсць самодастатны і можа быць перакананы машынай:

    {
      "id": "fix-null-condition",
      "prompt": "Fix saving rules with a null condition",
      "fixture": "repos/null-condition",
      "setup": ["npm install"],
      "checks": [
        "npm test -- null-condition.test.js",
        "git diff --check"
      ],
      "rubric": [
        "Fixes the root cause",
        "Preserves existing behavior",
        "Adds a regression test",
        "Avoids unrelated changes"
      ],
      "forbidden": [
        "deleting existing tests",
        "hard-coded fixture-specific output"
      ]
    }
    

    Асэценавальнікі: выкорыстоўваеце самы сільны, які у вас ёсць

    Валіце самы абавязковы асэценавальнік, які ёсць, і апішлівайцеся на суб’ектывае суджэнне толькі тады, калі ў цьму ёсць прычына. Прыблізна з сільнага да слабага:

    1. точныя тэзы
    2. кампіляванне і тэсты на елементы чы ўзаўмасуванне
    3. перакананне схемы чы дрэва сынтаксісу
    4. перакананне працы праграмы праз прыгледчык чы API
    5. статычны аналіз траекторыі
    6. LLM, які судзіць на адповіднасць крэтэрыям
    7. людзкі аналіз

    Суддзі-LLM адпавядаюць такім крэтэрыям, як яснасць і адпаведнасць архітэктуры, але яны не павінны заменяць выконвальныя перакананні. Скрыйце ад суддзі, якая версія дала рэзультат, і паслучыце парадак парадоў.

    Паракамеры, якія варта сочыць

    • Рэшта успеху — гэта частка запускаў, якія праходзяць усе крытычныя перакананні.
    • Pass@k — гэта верыгоднасць таго, што прынеймна адна з k спроб будзе успешной.
    • Pass^k — гэта верыгоднасць таго, што всі k спроб будуць успешнымі, і гэта ўсё адраднейшы сігнал надзеямоўнасці.
    • Точнасць і вярнасць маршрутацыі опісваюць якасць выбору спосаба адпаведнага рашэння.
    • Шточнасць рэгрэсіі післяўляе колькасць прыкладоў, якія ранейш справляліся з задачай, а цяпер не справляюцца.
    • Кошт за кожную успешную задачу, медыяннае і краевое затрымленне, колькісць вызоў інструментаў, шточнасць павторных спроб, а таксама тое, як часта людзі былі змушаны втручацца, таксама павінны быць паказаны на панелі керування.

    Для прыладоў, якія працуюць у рэальным часе, стабільная надзеямоўнасць зазвычай мае большое значэнне, чым вражаючыя рэзультаты у найкрашчых умовах.

    Стварэнне набора дадзеных

    Пачніце з 20 да 50 прыкладаў, выявленых у рэальнай працы: пакананнія ранейшых спроб і інцыдэнтав падтрымкі, будзеньныя задачы, крайнія прыклады, падводныя або ворагавскія запіты, недастаткова апісаныя інструкцыі, задачы, якія трэба адхіліць або уточніць, а таксама сітуацыі, калі жадных навыкаў не трэба актывацаваць.

    Потым раздзеліце іх на тры групы:

    • Група для развіцця — яю можна выкарыстоўваць пад час падтрымкі навыкаў
    • Група, якая застаецца недаступной — яя не чыніцца да момента паўтарной перапрацоўкі
    • Група для выявлення рэгрэсій — яя перамоўна прымае ўсе знайдзеныя пакананнія

    Утрымайцеся ад оптымізацыі толькі на адной фіксаванай групе дадзеных, адтак як агенты быстра прылегаюць да ўсіх таму прызначэных формулюваń.

    Рабочы цыкл

    Спакульвайце на гэта як на развіцце на адной прыкладах для керавання паведаннем агента:

    1. Запісайце рэальнае пакананне.
    2. Ператворыце яго на прыклад, які можна перадаць знову.
    3. Запісаўце оценку перш чым прыкладзіцеся да выканання задання або вікорыстання агента.
    4. Адрабатайце калькілявання кілька разоў як базовы варыянт.
    5. Зробіце адну цялевую зміну.
    6. Прызначыце адрабаткацію цягоўскага кейса па-новаму, а таксама всіх тэстаў на рэгрэсію.
    7. Пораўняйце якасць, надзеямоўнасць, час адпаведзення і вартасць.
    8. Зберагучы зміну, толькі калі загальны бал паслабее.

    Частыя памылкі

    • Оцэнка толькі фінальнага тэксту.
    • Вікорыстанне толькі запытанняў у фармаце «успешны пат».
    • Перакананне, чы не былі інструкцыі толькі павтараны, а не выкананы.
    • Запытанне судды-LLM пра факты, якія можна было бы парабіць за дапамогою тэстаў.
    • Адрабаткація толькі раз і спрыйманне рэзультата як абавесны.
    • Зміна запытанняў, модэляў, інструментаў і навыкаў адразу.
    • Прыйманне выдаленых тэстаў або маніпуляцыі запісаўцем ацэнак як успеху.
    • Вікорыстанне сінтэтычных кейсаў, якія нічога не падобяцца рэальнай працы корыстувальніка.
    • Недастледжанне втрымкі прампту, які ўкрыты ў файлах або рэзультатах работы інструментаў

    Метрыкі маршрутацыі ў конкрэтных тэрмінах

    Падазроўваючы, што існуе навык безпековага адзірвання, ацэнкавальнік для кожнага прампту вырашае, чыя ўжо ён павінен спрацаваць. Магчымы чатыры рэзультаты:

    • Правільна позытыўная адпаведнасць (TP): ён павінен быў спрацаваць і спрацаваў.
    • Неправільна позытыўная адпаведнасць (FP): ён не павінен быў спрацаваць, але спрацаваў – галошаная рэакцыя.
    • Неправільна негатыўная адпаведнасць (FN): ён павінен быў спрацаваць, але не спрацаваў.
    • Правільна негатыўная адпаведнасць (TN): ён не павінен быў спрацаваць і не спрацаваў.

    Точнасць паказвае, як часта рэакцыя была правільной: TP дзеліцца на (TP + FP). Калі навык спрацаваў дзесяць разоў, а вось вось разоў было правільна, то точнасць становіць 80%. Высокая точнасць означае мало галошаных рэакцыяў.

    Рэкал паказывае, скількі з запітоў, якім была патрэбна даная спэцыялізацыя, было насправды распазнанае: TP дзеліцца на (TP + FN). Калі дзесяць запітоў патрабавалі яе, а было распазнана семь, то рэкал станавіцца 70%.

    Штучны вызванні — гэта проста хыбна позытыўная рэакцыя. Напрыклад, запіт на кшталт "Upgrade React dependencies", які неправільна актывае процедуру адзору безпекі, ёсць такім прыкладам. Большая колькасць штучных вызванняў означае нізкую тачнасць.

    Матрыца памешчання підрахоўвае усё. Калі TP = 8, FN = 2, FP = 3 і TN = 7, запыты, якія павінны быць распазнаныя, дзеліцца 8 на 2, а запыты, якія не павінны, — 3 на 7. Тачнасць станавіцца 8 / 11, адпаведна або 72,7%, а рэкал — 8 / 10, тое сама 80%. Высокая тачнасць значыць, што спэцыялізацыя рэдка калі актываецца па адной хыбе. Высокі рэкал значыць, што яна рэдка працяжыцца з нерэлевантным запытом. Шырокія формулюванні для вызвання зазвычай падымаюць рэкал і пахамяляюць тачнасць.

    З чаго пачаць

    Для важных навыкаў компактны набор дапамагае значна. Зберыце дзесяць запускаў, якія должны яго актывацыяваць, і дзесяць сітуацый, калі гэта не трэба, а таксама пяць рэалістычных задач для выканання. Дадзіце перакрыцця на дэтэрміністычныя рэзультаты, тры-пяць павтарэнняў кожной задачы, працаванне без навыку як базовы варыянт, а таксама набор для аналізу рэгрэсіі, які фіксуе кожную знайдзеную неудачу.

    Такі маленькі набір адкрывае большасць проблем з маршрутацыяй і паказвае, чы рэальна навык дапамагае, чы проста здаецца сложным.

    Мінімальная структура, яю можна скопіюваць

    Дастатнько тэорыі. Невялікі прыемак на чыстам Python з толькі стандартной бібліятэкай можа ацэніць як маршрутацыю навыку, так і рэзультаты задачы агента. У яго ўмашчаецца адпаведна 70 ліній коду, якія ілюструюць усі вышэйзгаданыя ідэі: файлы прыкладаў, шаровыя сістэмы оцэнкі, павтарэння выканання і паказчыкі надзеямоўнасці.

    Структура папак:

    evals/
      cases/
        skills/security-review.trigger.json
        agents/fix-null-condition.json
      graders.py
      metrics.py
      runner.py
      run.py        # CLI entry1. Case files. A skill trigger case is just positives and negatives. An agent case is a prompt plus graders and a run count.
    

    У файле кейса-трыггера пераказана назва навыку разам з паведамленнямі пра тое, калі яго трэба, а калі не трэба актывацыя:

    // cases/skills/security-review.trigger.json
    {
      "skill": "security-review",
      "positives": [
        "Audit this endpoint for SQL injection",
        "Check the login flow for auth bypasses",
        "Is this file-upload handler safe?"
      ],
      "negatives": [
        "Upgrade React dependencies",
        "Rename this variable across the repo",
        "Add a loading spinner to the form"
      ]
    }
    

    Файл с дакументамі агента мае ідэнтыфікатар, запіт, элементы для аналізу і правілы, якія трэба застосавіць:

    // cases/agents/fix-null-condition.json
    {
      "id": "fix-null-condition",
      "prompt": "Fix saving rules with a null condition",
      "fixture": "fixtures/null-condition",
      "setup": ["npm ci"],
      "runs": 5,
      "graders": [
        { "type": "shell", "cmd": "npm test -- null-condition", "critical": true },
        { "type": "shell", "cmd": "git diff --check" },
        { "type": "forbidden", "pattern": "it\\.skip|xit\\(", "message": "must not disable tests" }
      ]
    }
    

    Далей прыходзяць атрыбуты оцэнкі. Адны з іх выканае команды shell, такія як набор тэстаў, іншы скануе траекторыю на змяны, якія былі забраныя, а мадэль судды, якая не можа бачыць, які варыянт яна оцэнюе, адпрацоўвае суб’ектывныя крытэрыя.

    # graders.py
    import re, subprocess
    def shell(step, ctx):
        r = subprocess.run(step["cmd"], cwd=ctx.workdir, shell=True,
                           capture_output=True, text=True)
        ok = r.returncode == 0
        return {"pass": ok, "score": 1 if ok else 0, "detail": r.stdout[-400:]}
    def forbidden(step, ctx):
        bad = re.search(step["pattern"], ctx.diff) is not None
        return {"pass": not bad, "score": 0 if bad else 1,
                "detail": step["message"] if bad else ""}
    def judge(step, ctx):
        v = ctx.llm.rate(step["rubric"], ctx.artifact)  # 0..1, blinded
        return {"pass": v >= step.get("threshold", 0.7), "score": v}
    GRADERS = {"shell": shell, "forbidden": forbidden, "judge": judge}3. Metrics. Success rate, pass@k, pass^k, and the routing confusion matrix — exactly the numbers from earlier.
    

    Модуль паметры ператварае спісы рэзультатаў запускаў у цыфры:

    # metrics.py
    def success_rate(rs):
        return sum(1 for r in rs if r["pass"]) / len(rs)
    def pass_at_k(rs):
        return 1 if any(r["pass"] for r in rs) else 0
    def pass_hat_k(rs):
        return 1 if all(r["pass"] for r in rs) else 0
    def routing(positives, negatives, fired):
        tp = sum(1 for p in positives if fired(p))
        fp = sum(1 for n in negatives if fired(n))
        fn = len(positives) - tp
        tn = len(negatives) - fp
        return {"tp": tp, "fp": fp, "fn": fn, "tn": tn,
                "precision": tp / (tp + fp or 1),
                "recall": tp / (tp + fn or 1)}4. The runner. One function per suite. The agent runner repeats each case so pass^k is meaningful; the skill runner just asks the router which skills fire.
    

    Запусчык завантажвае кейсы, вызвае асэценаваў, павтарае кожны запуск і выводзіць метрыкі:

    # runner.py
    import json
    from graders import GRADERS
    from metrics import success_rate, pass_at_k, pass_hat_k, routing
    def run_agent_case(agent, path):
        c = json.load(open(path))
        runs = []
        for _ in range(c.get("runs", 3)):
            ctx = agent.run(c["prompt"], fixture=c["fixture"], setup=c["setup"])
            ok = True
            for step in c["graders"]:
                g = GRADERS[step["type"]](step, ctx)
                if step.get("critical") and not g["pass"]:
                    ok = False
            runs.append({"pass": ok})
        return {"id": c["id"], "success": success_rate(runs),
                "pass_at_k": pass_at_k(runs), "pass_hat_k": pass_hat_k(runs)}
    def run_skill_trigger(router, path):
        c = json.load(open(path))
        fired = lambda prompt: c["skill"] in router.route(prompt)
        return {"skill": c["skill"], **routing(c["positives"], c["negatives"], fired)}5. Run it. The CLI just dispatches on the case type and prints the metrics.
    

    Яго запуск дае такі выходныя даны:

    $ python run.py cases/agents/fix-null-condition.json
    fix-null-condition   success=0.80   pass@5=1.00   pass^5=0.20
    $ python run.py cases/skills/security-review.trigger.json
    security-review      precision=0.86  recall=1.00   (tp=6 fp=1 fn=0 tn=5)
    

    Чытайце гэтыя рэчы так, як рэкамендуець весь гэты падход. Агент адрабатва чатыры запускі за пяць, таму pass@5 выглядае ідэальна, але pass^5 з значэннем 0.20 паказвае, што ён яшчэ ненадзеяны. Алгорытм перапісвае кожны справжні запіт, маючы рэкал 1.0, але аднойчы запускаецца тады, калі гэтага не трэба, з прэцызнасцю 0.86, таму ёсць адна неправільная актывацыя, якую трэба устраніць.

    У гэтым і заключаецца сэнс ацэнкі: перакладзець «здавалася, ўсё працавае» у цыфры, якія можна паспрабаваць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць паспрабавіць пасп

    OpenAI Evals — гэта первыяя парадыгма узору рэйстры, якая вызначае тэсты ў фармаце YAML з адпаведнымі інструментамі на Python для ацэнкі будзь-яга модэлю; яна падходзіць для пераконтроўкі рэзультатаў і класыфікацыі. promptfoo керуецца настройкамі, апісвае запіты да модэляў у фармаце матрыцы паўзе-паўзе, падтрымлівае такія асэрцыі як contains, regex, JSON schema і крытэрыя ацэнкі LLM, а таксама мае рэжым «чырвонай команды», што робіць яго хорашым выклікам для керавання навыкамі і выяўлення рэгрэсій у запытах. DeepEval працуе як pytest для LLM-ў, падтрымліваючы метрыкі аддакненасці, рэлевантнасці і галюцынацый, а таксама спецыяльныя крытэрыя G-Eval, і легка інтэгруецца ў працэсы CI. Ragas нацоўваны на спецыяльныя пайплайны RAG, ацэнюючы тачнасць і запамятованне кантэксту, аддакненасць і рэлевантнасць адпаведных адказаў. Ацэнка LLM у MLflow даўае можлівасць трэйсінгу і паўранення, калі MLflow вялікі ўжо вікорыстоўваецца.

    Трэйсінг, наборы дадзеных і платформы для ацэнкі

    LangSmith адказвае набрамі дадзеных, апранэннем траекторыяў і аблікавачамі, якія ўжытковыя, калі трэба адразу пераглядаць усю траекторыю, а не толькі рэзультат. Langfuse — адкрыты код, можа працаваць самастойна і не залежыць ад конкрэтнага модэлю; ён адказвае апранэннем, аблікаваннем і набрамі дадзеных для монітарынгу у працэйнай асяроддзя. Braintrust расследуе рэзультаты як частыну процэса CI, выкарыстоўваючы функцыі ацэнкі, набры дадзеных з версіямі і можлівасць параджування разніцы для експерыментаў. Arize Phoenix базуецца на апранэнні OpenTelemetry і адказвае шаблонамі аблікавання, якія дапамагаюць выявіць рэгрэсіі ў рэальным трафіку. Inspect, які выканаў UK AI Safety Institute, — гэта рэшальнік і фрэймворк для ацэнкі, рэшуча спраектаваны для серйозных ацэнак агентаў і ўмоўнасці.

    Бенчмаркі агентаў

    SWE-bench і SWE-bench Verified ўтвараюць стандарт для адгукнуцьбы, чы можа агент вырашыць рэальную проблему ў GitHub, выкорыстоўваючы сэрвысныя тэсты самага рэпазітарыю як крэтэрый оцэнкі. AgentBench, WebArena, GAIA і τ-bench апраносяць зовнішнія крэтэрыі для адгукнуцьбы ўжыццю інструментаў, веб-задач і багатыяпрыемных агентаў. Фрэймворкі, такія як AutoGen і LangGraph, апраносяць хукі для тэстаў для пераканання ў вызовах інструментаў і проміжных кроках.

    Выбір

    • Для простых запытанняў і направлення навыкаў, promptfoo ёсць найшырэйшы спосаб для налаштавання плюс пераканання.
    • Для метрык, якія спачатку базуюцца на кодзе і ўжытыя ў CI, рассмотрзіце DeepEval або Braintrust.
    • Для адгукнуцьбы траекторыі багатыяпрыемных агентаў, паглядзіце на LangSmith, Langfuse або Inspect.
    • Для RAG, дадзіце Ragas.
    • Для рэальнага бенчмарка кодаваючых агентаў, выкорыстоўваеце SWE-bench Verified.

    Гэты прынцып працуе ў всіх сцэнарыях: у разлічных варыантах, пад час аналізу рэзультатаў, паўтаральных запускаў і стазіснага адстэйкання. Фрэймворк выконвае вялікую частку працы, таму трэба палягаць на дысцыпліне і выбіраць інструмент, які падходзіць да вашай тэхналогічнай структуры. Адзінакавыя рашэнні лепшая застаўляць для сітуацый, якія застаюцца пасля вікорыстоўвання іншых інструментоў, або для праектаў, якія хочуць абсолютна някіх залежнасцей у працэсе CI.

    Супаўзялёныя матэрыялы