
Imp-ը DSPy-ի ամբողջական պորտն է BEAM-ի համար՝ Elixir-ում
Imp-ը Elixir-ի գրադարան է, որը DSPy-ն տեղափոխում է BEAM. ծրագրավորողը նկարագրում է, թե լեզվական մոդելի յուրաքանչյուր քայլ ինչ է ստանում և վերադարձնում, իսկ օպտիմիզատորը բարելավում է ծրագիրը օրինակներով։
Elixir-ի համար նոր Imp գրադարանն իրեն ներկայացնում է որպես DSPy-ի ամբողջական պորտ BEAM-ի համար։ Ծրագրավորողը լեզվական մոդելի քայլը նկարագրում է որպես տիպավորված ֆունկցիա, չափում արդյունքը և փոխանցում օպտիմիզատորին, իսկ OTP-ի հուսալիությունը մնում է տեղում։
Ստորագրություն՝ հուշումի փոխարեն
Հիմնական միավորը ստորագրությունն է. գրում եք միայն այն, ինչ մտնում և դուրս է գալիս, օրինակ՝ "issue -> kind: enum[bug,feature,question], summary", և ավելացնում կարճ նկարագրություն։ Imp.predict/2-ը ինքն է կառուցում հուշումը, պատասխանը համեմատում է դրա հետ և վերադարձնում տիպավորված դաշտեր. kind-ը միշտ երեք թույլատրելի արժեքներից մեկն է, այլապես կանչը սխալով է ավարտվում։
Նույն ստորագրությունն աշխատում է այլ ռեժիմներում. Imp.chain_of_thought/2-ը մոդելին ստիպում է նախ մտածել, իսկ Imp.react/3-ը նրան գործիքներ է տալիս։ Ծրագրավորողը չի գրում ոչ հուշումի ձևանմուշ, ոչ էլ պատասխանի վերլուծիչ։
Չափել, հետո բարելավել
Պիտակավորված օրինակներով և մետրիկայով Imp-ը գնահատում և բարելավում է ծրագիրը։ Պետք է երեք ցուցակ. trainset, որից օպտիմիզատորը սովորում է, valset՝ տարբերակները համեմատելու համար, և testset, որը գնահատվում է առաջ ու հետո։ Imp.evaluate/3-ը հաշվում է մետրիկան, օրինակ Imp.exact_match(:kind)։
Այնուհետև գործի է անցնում օպտիմիզատորը. Imp.Optimizer.GEPA.new/2-ը օգտագործում է ավելի ուժեղ մոդել՝ ձախողումները կարդալու և հրահանգները վերագրելու համար։ Բացի դրանից կան LabeledFewShot և BootstrapFewShot օրինակների ընտրության համար, MIPROv2՝ համակցությունների որոնման, SIMBA՝ ծրագրի սեփական փորձերից կանոններ քաղելու, ինչպես նաև կշիռների մարզում։ Արդյունքը նոր ծրագիր է, որի հրահանգներն ու օրինակները պահվում են JSON-ով և դիտվում որպես դիֆ։
Գործակալներ և OTP-ի կանոններ
Գործիքն այստեղ սովորական Elixir ֆունկցիա է. Imp.tool/3-ը ստանում է անուն, նկարագրություն, ֆունկցիա և JSON Schema, իսկ Imp.react/3-ը կառուցում է գործակալ, որը կանչում է այդ գործիքները՝ մինչև պատասխանը։ README-ի օրինակում գործակալը Req-ով կարդում է վեբ էջը և վերադարձնում տարբերակի համարը։
Imp.call/2-ը ծրագիրն աշխատեցնում է կանչող պրոցեսում, իսկ Imp.start_run/3-ը՝ առանձին պրոցեսում supervisor-ի ներքո, որը կարելի է դիտել, կանգնեցնել և սահմանափակել. authorize callback-ը որոշում է, թե որ կանչերն են թույլատրված։ Imp.Run.events/1-ը վերադարձնում է իրադարձությունների մատյանը, մոդելի հարցումները ժամկետ ունեն, իսկ գործիքի կանչը, որը գուցե արդեն ազդել է, գրանցվում է որպես unknown և լուռ չի կրկնվում։
Imp-ը կարող է ներմուծել հաստատված MCP սերվերի գործիքները, իսկ ACP-ի միջոցով ցանկացած ծրագիր մատուցվում է Zed-ին և այլ հաճախորդների որպես գործակալ։ Գրադարանը Hex-ում է, պահանջում է Elixir 1.19 և C++ կոմպիլյատոր, իսկ մոդելներին կապը կատարվում է ReqLLM-ով։ 0.5-ը փորձարարական է, լիցենզիան՝ MIT։
SiTech — AI-ով հզորացված վեբ մշակում
Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։