
Imp: DSPy-ის სრული პორტი BEAM-ზე, ტიპიზებული ხელმოწერებითა და ოპტიმიზატორებით
Elixir-ისთვის შექმნილი Imp არის 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 ითვლის, მაგალითად kind ველის ზუსტ დამთხვევას.
შემდეგ საქმეს ოპტიმიზატორი იკისრებს: Imp.Optimizer.GEPA.new/2 უფრო ძლიერ მოდელს (reflection_lm) იყენებს, რომ წარუმატებლობები წაიკითხოს და ინსტრუქციები გადაწეროს. ასევე არის LabeledFewShot და BootstrapFewShot მაგალითების შესარჩევად, MIPROv2 კომბინაციების საძიებლად, SIMBA პროგრამის საკუთარი ცდებიდან წესებისთვის და წონების გაწვრთნა. შედეგი ახალი პროგრამაა, რომლის ინსტრუქციები და მაგალითები JSON-ად ინახება და დიფის სახით გადაიხედება.
აგენტები და OTP-ის წესები
ხელსაწყო Imp-ში ჩვეულებრივი 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-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.