Π‘Π²ΡΠΆΠΈΡ‚Π΅ΡΡŒ с Π½Π°ΠΌΠΈ:

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ LLM с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DSPy: пошаговоС руководство ΠΏΠΎ созданию, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ΅ систСм искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°

Быстрый ΠΈΠ½ΠΆΠΈΠ½ΠΈΡ€ΠΈΠ½Π³

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ LLM с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DSPy: пошаговоС руководство ΠΏΠΎ созданию, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ΅ систСм искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°

mm
DSPy β€” это ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для алгоритмичСской ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ подсказок ΠΈ вСсов LM.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ возмоТности Π±ΠΎΠ»ΡŒΡˆΠΈΡ… языковых ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (LLM) ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… систСм искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΈΡ… ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π», становится всС Π±ΠΎΠ»Π΅Π΅ слоТной. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ часто Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя слоТныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ подсказок, Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… для Ρ‚ΠΎΡ‡Π½ΠΎΠΉ настройки ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ руководство для обСспСчСния соблюдСния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, спСцифичных для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области. Однако этот процСсс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½Ρ‹ΠΌ ошибкам ΠΈ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°.

Enter DSPy, Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½Π°Ρ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, прСдназначСнная для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ систСм искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° Π½Π° Π±Π°Π·Π΅ LLM. DSPy прСдставляСт систСматичСский ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ подсказок ΠΈ вСсов LM, Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ слоТныС прилоТСния с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ€ΡƒΡ‡Π½Ρ‹ΠΌΠΈ усилиями.

Π’ этом ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΌ руководствС ΠΌΡ‹ рассмотрим основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ DSPy, Π΅Π³ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΈ Π½Π°Π±ΠΎΡ€ ΠΌΠΎΡ‰Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ рассмотрим практичСскиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅, ΠΊΠ°ΠΊ DSPy ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ваш ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ систСм ИИ с участиСм LLM.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ DSPy ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½?

DSPy β€” это ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, которая раздСляСт ΠΏΠΎΡ‚ΠΎΠΊ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (modules) ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (подсказок LM ΠΈ вСсов) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ шага. Π’Π°ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ позволяСт систСматичСски ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ подсказки ΠΈ вСса LM, позволяя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ слоТныС систСмы искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° с большСй Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈ соблюдСниСм ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, спСцифичных для ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСм искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ LLM Π²ΠΊΠ»ΡŽΡ‡Π°Π»Π° Π² сСбя Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠΉ процСсс разбиСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π° этапы, создания слоТных подсказок для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ шага, создания синтСтичСских ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² для Ρ‚ΠΎΡ‡Π½ΠΎΠΉ настройки ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ управлСния LM для соблюдСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π½ΠΈΠΌΠ°Π» ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΠΈ Π±Ρ‹Π» ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ ошибкам, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°ΠΆΠ΅ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ измСнСния Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π΅, LM ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ подсказок ΠΈ шагов Ρ‚ΠΎΡ‡Π½ΠΎΠΉ настройки.

DSPy Ρ€Π΅ΡˆΠ°Π΅Ρ‚ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, вводя Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ: ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹. Π­Ρ‚ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π½Π° основС LM ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ подсказки ΠΈ вСса Π²Π°ΡˆΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² LM с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ показатСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Автоматизируя процСсс ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, DSPy Π΄Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ систСмы искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€ΡƒΡ‡Π½Ρ‹ΠΌ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎΠΌ, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² LM.

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° DSPy

Π’ основС DSPy Π»Π΅ΠΆΠΈΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, которая ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ слоТных систСм искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° прСдоставляСт Π½Π°Π±ΠΎΡ€ встроСнных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ подсказок, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ dspy.ChainOfThought ΠΈ dspy.ReAct. Π­Ρ‚ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π² Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ слоТныС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹, Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊ ΠΈΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ трСбованиям.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ инкапсулируСт ΠΎΠ±ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ инструкции, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с нСсколькими ΡƒΠ΄Π°Ρ€Π°ΠΌΠΈ ΠΈ вСса LM. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ модуля ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ DSPy ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для максимизации ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, гарантируя, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ LM ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ограничСниям ΠΈ трСбованиям.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DSPy

DSPy прСдставляСт ряд ΠΌΠΎΡ‰Π½Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ надСТности Π²Π°ΡˆΠΈΡ… систСм искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°. Π­Ρ‚ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π½Π° основС LM для настройки подсказок ΠΈ вСсов Π²Π°ΡˆΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² LM, максимизируя Π·Π°Π΄Π°Π½Π½ΡƒΡŽ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΡƒ, соблюдая ΠΏΡ€ΠΈ этом ограничСния, спСцифичныС для ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области.

НСкоторыС ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², доступных Π² DSPy, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚:

  1. BootstrapFewShot: этот ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ сигнатуру, автоматичСски гСнСрируя ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π² модСль, рСализуя ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π·Π° нСсколько шагов.
  2. BootstrapFewShotWithRandomSearch: ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ BootstrapFewShot нСсколько Ρ€Π°Π· случайным ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ΠΎΠΌ ΠΏΠΎ сгСнСрированным дСмонстрациям, Π²Ρ‹Π±ΠΎΡ€ Π»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.
  3. MIPRO: Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ инструкции ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ°Π΄Ρ€ΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС, ΠΏΡ€ΠΈ этом гСнСрация инструкций ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±Π°ΠΉΠ΅ΡΠΎΠ²ΡΠΊΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ для эффСктивного поиска Π² пространствС инструкций Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ дСмонстраций Π²Π°ΡˆΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.
  4. BootstrapFinetune: ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ DSPy Π½Π° основС подсказок Π² обновлСния вСса для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… LM, Ρ‡Ρ‚ΠΎ позволяСт Π²Π°ΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ LLM для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ систСматичСски ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои систСмы искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°, обСспСчивая высокоС качСство Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², соблюдая ΠΏΡ€ΠΈ этом ограничСния ΠΈ трСбования, спСцифичныС для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области.

Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ с DSPy

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ возмоТности DSPy, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим практичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания систСмы Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ поисковой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (RAG) для вопросно-ΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

Π¨Π°Π³ 1. Настройка языковой ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ поиска

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ настройку языковой ΠΌΠΎΠ΄Π΅Π»ΠΈ (LM) ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ поиска (RM) Π² DSPy.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ DSPy, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

pip install dspy-ai

DSPy ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько API-интСрфСйсов LM ΠΈ RM, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ хостинг ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… Π²Π°ΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.

import dspy

# Configure the LM and RM
turbo = dspy.OpenAI(model='gpt-3.5-turbo')
colbertv2_wiki17_abstracts = dspy.ColBERTv2(url='http://20.102.90.50:2017/wiki17_abstracts')

dspy.settings.configure(lm=turbo, rm=colbertv2_wiki17_abstracts)

Π¨Π°Π³ 2. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… HotPotQA, содСрТащий Π½Π°Π±ΠΎΡ€ слоТных ΠΏΠ°Ρ€ «вопрос-ΠΎΡ‚Π²Π΅Ρ‚Β», ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π°ΡŽΡ‚ΡΡ Π² многоадрСсной ΠΌΠ°Π½Π΅Ρ€Π΅.

from dspy.datasets import HotPotQA

# Load the dataset
dataset = HotPotQA(train_seed=1, train_size=20, eval_seed=2023, dev_size=50, test_size=0)

# Specify the 'question' field as the input
trainset = [x.with_inputs('question') for x in dataset.train]
devset = [x.with_inputs('question') for x in dataset.dev]

Шаг 3. БозданиС подписСй

DSPy ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ сигнатуры для опрСдСлСния повСдСния ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ сигнатуру для Π·Π°Π΄Π°Ρ‡ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°, ΡƒΠΊΠ°Π·Π°Π² Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ поля (контСкст ΠΈ вопрос) ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ (ΠΎΡ‚Π²Π΅Ρ‚).

class GenerateAnswer(dspy.Signature):
"""Answer questions with short factoid answers."""

context = dspy.InputField(desc="may contain relevant facts")
question = dspy.InputField()
answer = dspy.OutputField(desc="often between 1 and 5 words")

Π¨Π°Π³ 4: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°

ΠœΡ‹ построим наш ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ RAG ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ DSPy, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (__init__) для объявлСния ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (dspy.Retrieve ΠΈ dspy.ChainOfThought) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° пСрСсылки (forward) для описания ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ Π½Π° вопрос с использованиСм этих ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

class RAG(dspy.Module):
    def __init__(self, num_passages=3):
    super().__init__()

        self.retrieve = dspy.Retrieve(k=num_passages)
        self.generate_answer = dspy.ChainOfThought(GenerateAnswer)

    def forward(self, question):
        context = self.retrieve(question).passages
        prediction = self.generate_answer(context=context, question=question)
        return dspy.Prediction(context=context, answer=prediction.answer)

Π¨Π°Π³ 5: ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² DSPy. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ BootstrapFewShot, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ эффСктивныС подсказки для Π½Π°ΡˆΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½Π° основС ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π°Π±ΠΎΡ€Π° ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

from dspy.teleprompt import BootstrapFewShot

# Validation metric
def validate_context_and_answer(example, pred, trace=None):
answer_EM = dspy.evaluate.answer_exact_match(example, pred)
answer_PM = dspy.evaluate.answer_passage_match(example, pred)
return answer_EM and answer_PM

# Set up the optimizer
teleprompter = BootstrapFewShot(metric=validate_context_and_answer)

# Compile the program
compiled_rag = teleprompter.compile(RAG(), trainset=trainset)

Π¨Π°Π³ 6: ΠžΡ†Π΅Π½ΠΊΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°

ПослС компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Π°ΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° тСстовом Π½Π°Π±ΠΎΡ€Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° соотвСтствуСт ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ точности ΠΈ надСТности.

from dspy.evaluate import Evaluate

# Set up the evaluator
evaluate = Evaluate(devset=devset, metric=validate_context_and_answer, num_threads=4, display_progress=True, display_table=0)

# Evaluate the compiled RAG program
evaluation_result = evaluate(compiled_rag)

print(f"Evaluation Result: {evaluation_result}")

Π¨Π°Π³ 7: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° истории ΠΌΠΎΠ΄Π΅Π»ΠΈ

Для Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ понимания взаимодСйствий ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ самыС послСдниС поколСния, ΠΈΠ·ΡƒΡ‡ΠΈΠ² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

# Inspect the model's history
turbo.inspect_history(n=1)

Π¨Π°Π³ 8: Π”Π΅Π»Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Ρ‹

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ ΠΎΡ†Π΅Π½Π΅Π½, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для прогнозирования Π½ΠΎΠ²Ρ‹Ρ… вопросов.

# Example question
question = "Which award did Gary Zukav's first book receive?"

# Make a prediction using the compiled RAG program
prediction = compiled_rag(question)

print(f"Question: {question}")
print(f"Answer: {prediction.answer}")
print(f"Retrieved Contexts: {prediction.context}")

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с DSPy

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с использованиСм Набор Π΄Π°Π½Π½Ρ‹Ρ… GSM8K ΠΈ модСль OpenAI GPT-3.5-turbo для модСлирования Π·Π°Π΄Π°Ρ‡ подсказок Π² DSPy.

Установка

Π‘Π½Π°Ρ‡Π°Π»Π° ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ваша срСда настроСна ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ:

import dspy
from dspy.datasets.gsm8k import GSM8K, gsm8k_metric

# Set up the LM
turbo = dspy.OpenAI(model='gpt-3.5-turbo-instruct', max_tokens=250)
dspy.settings.configure(lm=turbo)

# Load math questions from the GSM8K dataset
gsm8k = GSM8K()
gsm8k_trainset, gsm8k_devset = gsm8k.train[:10], gsm8k.dev[:10]

print(gsm8k_trainset)

Команда gsm8k_trainset ΠΈ gsm8k_devset Π½Π°Π±ΠΎΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… содСрТат список ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»Π΅ вопросов ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ².

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Π—Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ChainOfThought для пошагового рассуТдСния:

class CoT(dspy.Module):
def __init__(self):
super().__init__()
self.prog = dspy.ChainOfThought("question -> answer")

def forward(self, question):
return self.prog(question=question)

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ модСль

Π’Π΅ΠΏΠ΅Ρ€ΡŒ скомпилируйтС Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ BootstrapFewShot тСлСсуфлСр:

from dspy.teleprompt import BootstrapFewShot

# Set up the optimizer
config = dict(max_bootstrapped_demos=4, max_labeled_demos=4)

# Optimize using the gsm8k_metric
teleprompter = BootstrapFewShot(metric=gsm8k_metric, **config)
optimized_cot = teleprompter.compile(CoT(), trainset=gsm8k_trainset)

# Set up the evaluator
from dspy.evaluate import Evaluate

evaluate = Evaluate(devset=gsm8k_devset, metric=gsm8k_metric, num_threads=4, display_progress=True, display_table=0)
evaluate(optimized_cot)

# Inspect the model's history
turbo.inspect_history(n=1)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ срСду, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ собствСнный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ модСль ΠΈ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ прСдоставлСнный Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ тСлСсуфлСра.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² DSPy

DSPy Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ для обучСния, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π² Π²Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅, ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ. Π₯отя ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π²Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² DSPy ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° словари Python, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹:

qa_pair = dspy.Example(question="This is a question?", answer="This is an answer.")

print(qa_pair)
print(qa_pair.question)
print(qa_pair.answer)

Π’Ρ‹Π²ΠΎΠ΄:

Example({'question': 'This is a question?', 'answer': 'This is an answer.'}) (input_keys=None)
This is a question?
This is an answer.

УказаниС клавиш ввода

Π’ DSPy ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ with_inputs() для ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ…:

print(qa_pair.with_inputs("question"))
print(qa_pair.with_inputs("question", "answer"))

Доступ ΠΊ значСниям ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Ρ‚ΠΎΡ‡ΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠ°ΠΊ inputs() ΠΈ labels(), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, содСрТащиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈΠ»ΠΈ нСвходящиС ΠΊΠ»ΡŽΡ‡ΠΈ соотвСтствСнно.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ Π² DSPy

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ DSPy настраиваСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ DSPy (Ρ‚. Π΅. подсказки ΠΈ/ΠΈΠ»ΠΈ вСса LM) для максимизации Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. DSPy ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ встроСнныС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ стратСгии.

ДоступныС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹

  • BootstrapFewShot: Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… снимков, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ прСдоставлСнныС ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….
  • BootstrapFewShotWithRandomSearch: примСняСт BootstrapFewShot нСсколько Ρ€Π°Π· со случайным поиском ΠΏΠΎ сгСнСрированным дСмонстрациям.
  • Copro: Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ уточняСт Π½ΠΎΠ²Ρ‹Π΅ инструкции для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ шага, оптимизируя ΠΈΡ… с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.
  • MIPRO: ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ инструкции ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с нСсколькими ΠΊΠ°Π΄Ρ€Π°ΠΌΠΈ с использованиСм байСсовской ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π’Ρ‹Π±ΠΎΡ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π°

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ BootstrapFewShotWithRandomSearch:

Для ΠΎΡ‡Π΅Π½ΡŒ нСбольшого количСства Π΄Π°Π½Π½Ρ‹Ρ… (10 ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ BootstrapFewShot.
Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС Π΄Π°Π½Π½Ρ‹Ρ… (50 ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ BootstrapFewShotWithRandomSearch.
Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… (Π±ΠΎΠ»Π΅Π΅ 300 ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ MIPRO.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ BootstrapFewShotWithRandomSearch:

from dspy.teleprompt import BootstrapFewShotWithRandomSearch

config = dict(max_bootstrapped_demos=4, max_labeled_demos=4, num_candidate_programs=10, num_threads=4)
teleprompter = BootstrapFewShotWithRandomSearch(metric=YOUR_METRIC_HERE, **config)
optimized_program = teleprompter.compile(YOUR_PROGRAM_HERE, trainset=YOUR_TRAINSET_HERE)

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ сохранитС Π΅Π΅ для дальнСйшСго использования:

оптимизированная_ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.save(ВАШ_ПУВЬ_БОΠ₯Π ΠΠΠ•ΠΠ˜Π―)

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

loaded_program = YOUR_PROGRAM_CLASS()
loaded_program.load(path=YOUR_SAVE_PATH)

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: утвСрТдСния DSPy

УтвСрТдСния DSPy Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ для LM, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… LM.

ИспользованиС ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ утвСрТдСния послС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ. НапримСр:

dspy.Suggest(
len(query) <= 100,
"Query should be short and less than 100 characters",
)

dspy.Suggest(
validate_query_distinction_local(prev_queries, query),
"Query should be distinct from: " + "; ".join(f"{i+1}) {q}" for i, q in enumerate(prev_queries)),
)

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ

from dspy.primitives.assertions import assert_transform_module, backtrack_handler

baleen_with_assertions = assert_transform_module(SimplifiedBaleenAssertions(), backtrack_handler)

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ утвСрТдСния нСпосрСдствСнно Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:

baleen_with_assertions = SimplifiedBaleenAssertions().activate_assertions()

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° основС ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ

УтвСрТдСния DSPy Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ DSPy, особСнно с BootstrapFewShotWithRandomSearch, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Π°ΠΊΠΈΠ΅ настройки, ΠΊΠ°ΠΊ:

  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ с утвСрТдСниями
  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ + Π²Ρ‹Π²ΠΎΠ΄ с утвСрТдСниями

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

DSPy ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΈ систСматичСский ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ языковых ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ ΠΈΡ… подсказок. БлСдуя инструкциям, описанным Π² этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, Π²Ρ‹ смоТСтС Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ слоТныС систСмы искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°. ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ структура DSPy ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языковых ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ†Π΅Π½Π½Ρ‹ΠΌ инструмСнтом для всСх, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² области ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ СстСствСнного языка ΠΈ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°.

НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, создаСтС Π»ΠΈ Π²Ρ‹ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ вопросно-ΠΎΡ‚Π²Π΅Ρ‚Π½ΡƒΡŽ систСму ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТный ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, DSPy обСспСчиваСт Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для достиТСния высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ надСТности.

ПослСдниС ΠΏΡΡ‚ΡŒ Π»Π΅Ρ‚ я погруТался Π² ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΡ€ машинного обучСния ΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния. Моя ΡΡ‚Ρ€Π°ΡΡ‚ΡŒ ΠΈ ΠΎΠΏΡ‹Ρ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ ΠΌΠ½Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ участиС Π² Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 50 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, удСляя особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ AI/ML. МоС постоянноС Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚ΡΡ‚Π²ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ»ΠΎ мСня ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ СстСствСнного языка, области, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ‡Ρƒ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ дальшС.