{"id":7478,"date":"2024-12-17T18:30:00","date_gmt":"2024-12-17T17:30:00","guid":{"rendered":"https:\/\/haimagazine.com\/?p=7478"},"modified":"2025-06-26T11:10:51","modified_gmt":"2025-06-26T09:10:51","slug":"incepcja-czyli-programowanie-wewnatrz-promptu","status":"publish","type":"post","link":"https:\/\/haimagazine.com\/pl\/hai-magazine\/incepcja-czyli-programowanie-wewnatrz-promptu\/","title":{"rendered":"Incepcja, czyli programowanie wewn\u0105trz promptu"},"content":{"rendered":"<p>Poniewa\u017c do zapisywania kodu u\u017cywano w\u00f3wczas kart perforowanych, pisanie program\u00f3w oraz tym bardziej ich poprawianie by\u0142o umiej\u0119tno\u015bci\u0105 niezwykle rzadk\u0105. Warto nadmieni\u0107 natomiast, \u017ce w\u00f3wczas programowanie stanowi\u0142o naturaln\u0105 \u015bcie\u017ck\u0119 kariery dla kobiet \u2013 szacuje si\u0119, \u017ce od 30 do 50% programist\u00f3w stanowi\u0142y kobiety.<br>Najnowsze \u017ar\u00f3d\u0142a (Statista) podaj\u0105, \u017ce obecnie mamy w populacji jakie\u015b dwadzie\u015bcia par\u0119 milion\u00f3w programist\u00f3w i programistek. Ten absolutnie kosmiczny wzrost jest zapewne pochodn\u0105 wielu czynnik\u00f3w \u2013 powstawania nowych technologii, budowania aplikacji webowych dla niemal ka\u017cdego produktu i us\u0142ugi, potrzeby utrzymywania starych system\u00f3w, tysi\u0119cy hobbystycznych projekt\u00f3w pisanych przez amator\u00f3w.<br>Tylko czym tak naprawd\u0119 zajmuj\u0105 si\u0119 dzi\u015b programi\u015bci i programistki, czym jest programowanie? Yannick Kilcher, badacz i youtuber, znany z dobitnego komentowania praktyk w \u015bwiecie data science, ma gotow\u0105 odpowied\u017a:<\/p><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"746\" height=\"330\" src=\"https:\/\/haimagazine.com\/wp-content\/uploads\/2024\/12\/Screenshot-2024-12-17-at-11.01.04.png\" alt=\"\" class=\"wp-image-7479\" srcset=\"https:\/\/haimagazine.com\/wp-content\/uploads\/2024\/12\/Screenshot-2024-12-17-at-11.01.04.png 746w, https:\/\/haimagazine.com\/wp-content\/uploads\/2024\/12\/Screenshot-2024-12-17-at-11.01.04-300x133.png 300w, https:\/\/haimagazine.com\/wp-content\/uploads\/2024\/12\/Screenshot-2024-12-17-at-11.01.04-600x265.png 600w\" sizes=\"auto, (max-width: 746px) 100vw, 746px\" \/><\/figure><p>Ale ka\u017cdy, kto jest w tej bran\u017cy d\u0142u\u017cej, powiedzmy od dw\u00f3ch\u2013trzech dekad, do\u015bwiadczy\u0142 przynajmniej kilku cykli m\u00f3d, jakie zaczyna\u0142y panowa\u0107 na kolejne nowe j\u0119zyki programowania, na nowy framework, programistyczny wzorzec. Je\u015bli zdarzy\u0142o Ci si\u0119 jeszcze programowa\u0107 w j\u0119zykach niskopoziomowych, poczujesz, \u017ce wspominamy \u201estare dobre czasy\u201d i \u017ce to, co teraz, to ju\u017c nie to samo, bo dzisiaj nie trzeba tyle umie\u0107 (na pami\u0119\u0107!), nie trzeba dba\u0107 o zasoby sprz\u0119towe z tak\u0105 czu\u0142o\u015bci\u0105, nie trzeba rozumie\u0107 niuans\u00f3w systemu, a w nocy nie sp\u0119dzaj\u0105 nam snu z powiek wska\u017aniki, przerwania i tzw.&nbsp;<strong>deadlocki<\/strong>.<\/p><p>S\u0142owem \u2013\u00a0<strong>Assembler<\/strong>\u00a0czy\u00a0<strong>C<\/strong>\u00a0s\u0105 dla \u201eprawdziwych programist\u00f3w\u201d, a\u00a0<strong>Python<\/strong>\u00a0dla dzieciak\u00f3w.<br>I o ile owszem, tu i \u00f3wdzie mo\u017cna jeszcze spotka\u0107 relikty przesz\u0142o\u015bci, jak np. j\u0119zyk\u00a0<strong>COBOL<\/strong>\u00a0czy\u00a0<strong>Fortran<\/strong>, szczeg\u00f3lnie w starych systemach bankowych albo w niekt\u00f3rych projektach uniwersyteckich, o tyle reszta \u015bwiata przenios\u0142a si\u0119 raczej par\u0119 poziom\u00f3w wy\u017cej, na wygodniejsze warstwy programowania. Tutaj mo\u017cesz prze\u015bledzi\u0107, jak zmienia\u0142a si\u0119 popularno\u015b\u0107 j\u0119zyk\u00f3w programowania:<br><a href=\"https:\/\/www.youtube.com\/watch?v=qQXXI5QFUfw\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=qQXXI5QFUfw<\/a><\/p><p><strong>Ale co dzi\u015b, co jutro?<\/strong>&nbsp;Data science jako dziedzina wci\u0105\u017c si\u0119 rozwija \u2013 mimo zagorza\u0142ych zwolennik\u00f3w&nbsp;<strong>Matlaba<\/strong>,&nbsp;<strong>Julii<\/strong>czy przenoszenia ca\u0142ego ekosystemu do&nbsp;<strong>JavaScriptu<\/strong>&nbsp;zdecydowanie najwi\u0119cej zwolennik\u00f3w ma w\u0142a\u015bnie&nbsp;<strong>Python<\/strong>, w kt\u00f3rym dzisiaj mo\u017cna nawet zdawa\u0107 matur\u0119. Co istotne, to w\u0142a\u015bnie Python sta\u0142 si\u0119 mi\u0119dzynarodowym standardem w projektowaniu eksperyment\u00f3w z&nbsp;<strong>AI<\/strong>.<\/p><h3 class=\"wp-block-heading\"><strong>In\u017cynieria promptu<\/strong><\/h3><p>Aczkolwiek, nawet je\u015bli&nbsp;<strong>Python<\/strong>&nbsp;jest \u201edla dzieciak\u00f3w\u201d, to&nbsp;<strong>dzieciak\u00f3w programuj\u0105cych<\/strong>. A co z tymi, kt\u00f3rzy tej umiej\u0119tno\u015bci nie posiadaj\u0105? Ot\u00f3\u017c tutaj wkracza&nbsp;<strong>prompt engineering<\/strong>, kt\u00f3ry daje zupe\u0142nie nowe mo\u017cliwo\u015bci nawet osobom, kt\u00f3re do tej pory nigdy nie programowa\u0142y.<\/p><p><strong>Tworzenie promptu to programowanie?<\/strong><br>Tej tezie mo\u017cna si\u0119 przyjrze\u0107 w dw\u00f3jnas\u00f3b.&nbsp;<strong>Po pierwsze<\/strong>, za pomoc\u0105 odpowiedniego promptu mo\u017cemy wygenerowa\u0107 kod, np. napisany w j\u0119zyku&nbsp;<strong>Python<\/strong>, ale wtedy zwykle ostatecznie i tak przydaje si\u0119 podstawowa wiedza, jak ten kod poprawi\u0107, zmodyfikowa\u0107 itd.<\/p><p>Znacznie ciekawsza jest&nbsp;<strong>perspektywa druga<\/strong>, kt\u00f3ra samo tworzenie promptu, jego&nbsp;<strong>in\u017cynieri\u0119<\/strong>, ju\u017c traktuje jako \u2013 owszem, bardzo wysokopoziomowe \u2013 ale jednak&nbsp;<strong>programowanie<\/strong>. Oczywi\u015bcie, jak to w przypadku dawnych wielbicieli&nbsp;<strong>Assemblera<\/strong>, pojawi\u0105 si\u0119 g\u0142osy, \u017ce to&nbsp;<strong>nie jest prawdziwe programowanie<\/strong>&nbsp;i tak si\u0119 nie robi na produkcji, i to \u201edla dzieciak\u00f3w\u201d. Bo przecie\u017c t\u0119 sam\u0105 operacj\u0119 mo\u017cna wykona\u0107 w Pythonie po stokro\u0107 szybciej (zu\u017cywaj\u0105c jednocze\u015bnie mniej energii czy pieni\u0119dzy).<\/p><p>Mimo to pokusz\u0119 si\u0119 o eksperyment, kt\u00f3ry pozwoli sprawdzi\u0107 mo\u017cliwo\u015bci, jakie daje samo napisanie lub modyfikowanie promptu, niekoniecznie znaj\u0105c si\u0119 na przekle\u0144stwie zale\u017cno\u015bci (<strong>dependency hell<\/strong>) czy wiedz\u0105c, jak odpali\u0107 dany kontener, na jakim klastrze i dlaczego najwy\u017csze uprawnienia ma tylko kolega, kt\u00f3ry akurat jest na urlopie.<\/p><h3 class=\"wp-block-heading\"><strong>Prompting jako programowanie<\/strong><\/h3><p>Spr\u00f3bujmy si\u0119 przekona\u0107, ile typowych konstrukcji znanych z j\u0119zyk\u00f3w programowania da si\u0119 ju\u017c teraz zasymulowa\u0107, u\u017cywaj\u0105c jedynie\u00a0<strong>prompt\u00f3w<\/strong>, czyli pseudokodu bazuj\u0105cego na opisach kolejnych krok\u00f3w i zale\u017cno\u015bci w j\u0119zyku naturalnym.<br>Testowane z&nbsp;<strong>Claude Sonnet 3.5<\/strong>&nbsp;i&nbsp;<strong>OpenAI GPT-4o<\/strong>.<\/p><p>Poni\u017cej startowy kod, aby \u0142atwo by\u0142o korzysta\u0107 z kolejno omawianych prompt\u00f3w. W promptach znajduj\u0105 si\u0119\u00a0<strong>\u201epola\u201d<\/strong>, kt\u00f3re wype\u0142niam, u\u017cywaj\u0105c mechanizmu\u00a0<strong>prompt_template<\/strong>\u00a0z\u00a0<strong>LangChain<\/strong>.<\/p><pre class=\"wp-block-code\"><code>\nimport os\nfrom langchain_core.prompts import PromptTemplate\nfrom langchain_openai import OpenAI, ChatOpenAI\n\n# Set your OpenAI API key\nos.environ&#91;\"OPENAI_API_KEY\"] = \"tu wklej sw\u00f3j API key dla openAI\"\n\n# Prompt template\nprompt_template = \"tu wklejasz sw\u00f3j prompt\"\n\n# Konfiguracja modeli\nllm = OpenAI(temperature=0, model=\"gpt-4o\")\nchatmodel = ChatOpenAI(model=\"gpt-4o\", temperature=0)\n\n# Tworzenie szablonu promptu\nprompt = PromptTemplate(\n    template=prompt_template,\n    input_variables=&#91;\"initial_value\", \"max_value\"]\n)\n\n# Tutaj wymieniasz warto\u015bci, kt\u00f3re maj\u0105 by\u0107 \"wstrzykni\u0119te\" do promptu\n# W prompcie u\u017cywasz {nazwa_zmiennej} w miejscu, gdzie ma pojawi\u0107 si\u0119 informacja\nfinal_prompt = prompt.format(initial_value=105, max_value=150)\n\n# Uruchamianie \u0142a\u0144cucha z finalnym promptem\nresult = chatmodel.invoke(final_prompt)\nprint(result.content)\n<\/code><\/pre><p>Zainstalowane pakiety przy u\u017cyciu pip jako \u015brodowisko typu \u201evenv\u201d.<\/p><p>langchain==0.0.235<\/p><p>langchain-core==0.3.13<\/p><p>langchain-openai==0.2.3<\/p><h2 class=\"wp-block-heading\">WARUNEK I P\u0118TLA WHILE<\/h2><p>Zacznijmy od prostego warunku \u201eif\u201d i p\u0119tli typu \u201ewhile\u201d,<\/p><p>chc\u0105c uzyska\u0107 do\u015b\u0107 trywialne dodawanie co 5.<\/p><p>You are an AI assistant capable of simulating loop-like behavior. Follow these instructions carefully:<\/p><ol class=\"wp-block-list\"><li>Begin with the initial value:\u00a0<strong>{initial_value}<\/strong>.<\/li>\n\n<li>Apply this operation:\u00a0<strong>Add 5<\/strong>\u00a0to the current value.<\/li>\n\n<li>Verify if the new value is\u00a0<strong>less than or equal to {max_value}<\/strong>.<\/li>\n\n<li>If the current value is\u00a0<strong>smaller than or equal to {max_value}<\/strong>, repeat steps 2-4 using the updated value.<\/li>\n\n<li>If the current value\u00a0<strong>exceeds {max_value}<\/strong>, terminate the loop and display the final result.<\/li><\/ol><p>Throughout the process, record each step and iteration. Your response should include:<\/p><ul class=\"wp-block-list\"><li>Each intermediate value after an iteration.<\/li>\n\n<li>The final result once the loop ends.<\/li><\/ul><p><strong>Example format of your response:<\/strong><br>Iteration 1: 5 + 5 = 10<br>Iteration 2: 10 + 5 = 15<br>Iteration 3: 15 + 5 = 20<br>&#8230;<br><strong>Final result: 35<\/strong><\/p><p>Now, begin the loop simulation with the following values:<br><strong>Initial value:<\/strong>&nbsp;{initial_value}<br><strong>Max value:<\/strong>&nbsp;{max_value}<\/p><p><strong>Your response:<\/strong><\/p><p>W odpowiedzi dostaniemy pi\u0119kne kolejne warto\u015bci wydrukowane jak na pierwszych zaj\u0119ciach z informatyki.<\/p><p>Iteration 1: 105 + 5 = 110<\/p><p>Iteration 2: 110 + 5 = 115<\/p><p>Iteration 3: 115 + 5 = 120<\/p><p>Iteration 4: 120 + 5 = 125<\/p><p>Iteration 5: 125 + 5 = 130<\/p><p>Iteration 6: 130 + 5 = 135<\/p><p>Iteration 7: 135 + 5 = 140<\/p><p>Iteration 8: 140 + 5 = 145<\/p><p>Iteration 9: 145 + 5 = 150<\/p><p>Final result: 150<\/p><h2 class=\"wp-block-heading\">P\u0118TLA FOR<\/h2><p>Czy w przypadku tej p\u0119tli te\u017c sobie tak dobrze poradzi?<\/p><p>You are an AI assistant capable of simulating a basic programming flow using commands. Follow these instructions carefully:<\/p><ul class=\"wp-block-list\"><li>Do not include any additional information in the response; only follow the instructions.<\/li><\/ul><p>Repeat the following process&nbsp;<strong>{number_of_times}<\/strong>&nbsp;times:<\/p><ol class=\"wp-block-list\"><li>Start with the initial text:\u00a0<strong>{incoming_text}<\/strong>, and add something completely absurd to form a sentence.<\/li>\n\n<li>Append this sentence to the output.<\/li>\n\n<li>Use the new sentence as the incoming text for the next iteration.<\/li><\/ol><p><strong>Your response:<\/strong><\/p><p>R\u00f3wnie\u017c udaje si\u0119 bez problemu wykona\u0107 tak\u0105 instrukcj\u0119. Zaczynamy od \u201ePoland is an amazing country\u201d {incoming_text} i po 5 iteracjach {number_of_times} otrzymujemy:<\/p><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"670\" height=\"494\" src=\"https:\/\/haimagazine.com\/wp-content\/uploads\/2024\/12\/Screenshot-2024-12-17-at-11.17.06.png\" alt=\"\" class=\"wp-image-7484\" srcset=\"https:\/\/haimagazine.com\/wp-content\/uploads\/2024\/12\/Screenshot-2024-12-17-at-11.17.06.png 670w, https:\/\/haimagazine.com\/wp-content\/uploads\/2024\/12\/Screenshot-2024-12-17-at-11.17.06-300x221.png 300w, https:\/\/haimagazine.com\/wp-content\/uploads\/2024\/12\/Screenshot-2024-12-17-at-11.17.06-600x442.png 600w\" sizes=\"auto, (max-width: 670px) 100vw, 670px\" \/><\/figure><p><strong>SKOK W KODZIE<\/strong><br>Zwykle w programach potrzebujemy te\u017c \u201eskok\u00f3w\u201d do innych miejsc w kodzie. W najprostszej wersji j\u0119zyk\u00f3w typu Basic b\u0119dzie to skok typu \u201egoto\u201d, czyli przej\u015bcie do konkretnej linijki.<br>You are an AI assistant capable of simulating a basic programming flow commands. Follow these instructions carefully:<br>Do not add any additional information to the response, only follow the instructions.<\/p><ol class=\"wp-block-list\"><li>Asses initial text {incoming_text} sentiment and decide if it is positive or negative.<\/li>\n\n<li>If the sentiment is positive, go to step nr 5.<\/li>\n\n<li>If the sentiment is negative go to step nr 4.<\/li>\n\n<li>Return &#8222;this text is negative&#8221;. Finish the process.<\/li>\n\n<li>Return &#8222;this text is positive&#8221;. Finish the process.<\/li><\/ol><p>W prostych sytuacjach taka konstrukcja mo\u017ce w zupe\u0142no\u015bci wystarczy\u0107. Ale je\u015bli chcemy robi\u0107 to bardziej profesjonalnie, potrzebujemy ju\u017c funkcji i\/lub metod. Mo\u017cna zauwa\u017cy\u0107, \u017ce 3 i 4 linijka w powy\u017cszym prompcie to nasz odpowiednik funkcji \u201emain\u201d, kt\u00f3ry uruchamia poszczeg\u00f3lne funkcje, sprytnie przekazuj\u0105c warto\u015bci. Dodatek \u201eFinish the process\u201d powoduje, \u017ce po wykonaniu 4 kroku, nie idziemy do pi\u0105tego, tylko ko\u0144czymy generacj\u0119 \u2013 troch\u0119 jak w przypadku metody \u201ereturn\u201d czy \u201eexit\u201d.<\/p><p><strong>FUNKCJE<\/strong><br>Zwykle szybko z jednolinijkowych instrukcji chcemy stworzy\u0107 bardziej rozbudowane i je zgrupowa\u0107, tworz\u0105c metody lub funkcje. Poni\u017cej przedstawiam pr\u00f3b\u0119 zasymulowania w\u0142a\u015bnie takich zachowa\u0144 wewn\u0105trz promptu.<br>You are an AI assistant capable of simulating a basic programming flow commands. Follow these instructions carefully:<br>Do not add any additional information to the response, only follow the instructions. Do not add anything about functions.<br>Creates an interesting story for a children\u2019s book. Follow these instructions carefully:<br>Take the initial text {incoming_text} and run function \u201eCreate an blue version\u201d {blue_times} times. Use this function output and run function \u201eCreate a white version\u201d {white_times} times.<\/p><p><strong>Function \u201eCreate a white version\u201d<\/strong><\/p><ol class=\"wp-block-list\"><li>Add new idea containing word \u201eblue\u201d. Do not repeat the same word. Make it funny.<\/li>\n\n<li>Return new sentence as input for the next iteration.<\/li><\/ol><p><strong>Function \u201eCreate an blue version\u201d<\/strong><\/p><ol class=\"wp-block-list\"><li>Add new idea containing word\u00a0<strong>\u201ewhite\u201d<\/strong>. Do not repeat the same word. Make it serious.<\/li>\n\n<li>Return new sentence as input for the next iteration.<br>Return only the final sentence.<br>Verify you have followed the instructions correctly.<\/li><\/ol><p>Your response should be in format:<br><strong>&lt;final_response&gt; response &lt;\/final_response&gt;<\/strong><\/p><p>Je\u015bli uruchomimy ten prompt, wpisuj\u0105c \u201eI love red cars\u201d, otrzymamy:<br><strong>&lt;final_response&gt; I love red cars with white stripes that zoom past white clouds, and sometimes they race with white snowflakes, creating a white winter wonderland, where blue penguins juggle blue balloons, and blue elephants dance with blue butterflies. &lt;\/final_response&gt;<\/strong><\/p><p>To dodatkowe zdanie&nbsp;<strong>\u201everify you have followed the instructions correctly\u201d<\/strong>&nbsp;to klasyczna podpowied\u017a, aby LLM sprawdzi\u0142 swoje obliczenia przed podaniem wynik\u00f3w.<\/p><p>W takich miniprogramach cz\u0119sto potrzebne jest wykonanie drobnych oblicze\u0144. Ale przecie\u017c LLM-y nie potrafi\u0105 w matematyk\u0119 (jak mawiaj\u0105 na mie\u015bcie\u2026)?<\/p><hr class=\"wp-block-separator has-alpha-channel-opacity\"\/><p>You are an AI assistant capable of simulating a basic programming flow commands. Follow these instructions carefully:<\/p><ul class=\"wp-block-list\"><li>Do not add any additional information to the response, only follow the instructions.<\/li>\n\n<li>Do not add anything about functions.<\/li>\n\n<li>Do not round calculations.<\/li><\/ul><p><strong>Take the initial value {incoming_value} and run function \u201emultiplier\u201d.<\/strong><br><strong>Take output from multiplier and run function \u201edivider\u201d with this value.<\/strong><\/p><p><strong>Function \u201emultiplier\u201d<\/strong><\/p><ol class=\"wp-block-list\"><li>Start with input value and multiply it by 5.5<\/li>\n\n<li>Add\u00a0<strong>\u201emultiply_result: &lt;result>\u201d<\/strong>\u00a0to final response.<\/li>\n\n<li>Return\u00a0<strong>&lt;result><\/strong><\/li><\/ol><p><strong>Function \u201edivider\u201d<\/strong><\/p><ol class=\"wp-block-list\"><li>Start with input value and divide it by 11<\/li>\n\n<li>Add\u00a0<strong>\u201edivide_result: &lt;result>\u201d<\/strong>\u00a0to final response.<\/li>\n\n<li>Return\u00a0<strong>&lt;result><\/strong><\/li><\/ol><p>Verify you have followed the instructions correctly.<br>Your response should be in format:<br><strong>&lt;final_response&gt; response &lt;\/final_response&gt;<\/strong><\/p><p>Je\u015bli uruchomi\u0119 powy\u017cszy prompt z warto\u015bci\u0105 dla&nbsp;<strong>{incoming_value}<\/strong>&nbsp;r\u00f3wn\u0105 10, to z GPT-4o mini oraz Claude Sonnet otrzymam prawid\u0142owe wyniki, czyli 55 i 5.<\/p><p>You are an AI assistant capable of simulating basic programming flow commands. Follow these instructions carefully:<\/p><ul class=\"wp-block-list\"><li>Do not add any additional information to the response.<\/li>\n\n<li>Do not add anything about functions.<\/li><\/ul><p>You will receive a piece of data&nbsp;<strong>{ai_dict}<\/strong>.<br>The counter is set to&nbsp;<strong>0<\/strong>.<\/p><p>Run the following steps in a loop&nbsp;<strong>{max_value}<\/strong>&nbsp;times:<\/p><ol class=\"wp-block-list\"><li>Increase the counter by\u00a0<strong>1<\/strong>.<\/li>\n\n<li>Replace the\u00a0<strong>id<\/strong>\u00a0field with the value of the counter.<\/li>\n\n<li>Create a\u00a0<strong>1-sentence summary<\/strong>\u00a0of the &#8222;reasons&#8221; field. Be creative and funny. Use a different seed every time.<\/li>\n\n<li>Place the summary in the\u00a0<strong>summary<\/strong>\u00a0field.<\/li>\n\n<li>Add the full updated data to the response.<\/li>\n\n<li>Using the regex\u00a0<strong>\\bA(?:.?I.?|I)\\b<\/strong>, replace the found word in &#8222;reasons&#8221; with a random word. Do not modify the summary.<\/li><\/ol><p><strong>Your response must match the exact format of the incoming data.<\/strong><\/p><p>Na wej\u015bciu we\u017amy nast\u0119puj\u0105cy s\u0142ownik:<\/p><p>prepared_dict = {<br>&#8222;id&#8221;: 1,<br>&#8222;name&#8221;: &#8222;AI Benefits&#8221;,<br>&#8222;reasons&#8221;: [<br>&#8222;AI can process vast amounts of data quickly.&#8221;,<br>&#8222;It enhances decision-making in various fields.&#8221;,<br>&#8222;AI improves efficiency in many industries.&#8221;,<br>&#8222;It can perform dangerous tasks, keeping humans safe.&#8221;,<br>&#8222;AI assists in medical diagnoses and treatment plans.&#8221;<br>],<br>&#8222;summary&#8221;: &#8222;&#8221;<br>}<\/p><p>Po wykonaniu tego promptu otrzymamy 3 s\u0142owniki o\u00a0<strong>id<\/strong>\u00a01, 2, 3 z r\u00f3\u017cnymi podsumowaniami wstawionymi w pole \u201esummary\u201d oraz lekko zmienionymi wersjami pola \u201ereasons\u201d:<\/p><p>{<br>&#8222;id&#8221;: 1,<br>&#8222;name&#8221;: &#8222;AI Benefits&#8221;,<br>&#8222;reasons&#8221;: [<br>&#8222;Banana can process vast amounts of data quickly.&#8221;,<br>&#8222;It enhances decision-making in various fields.&#8221;,<br>&#8222;Banana improves efficiency in many industries.&#8221;,<br>&#8222;It can perform dangerous tasks, keeping humans safe.&#8221;,<br>&#8222;Banana assists in medical diagnoses and treatment plans.&#8221;<br>],<br>&#8222;summary&#8221;: &#8222;AI is like a superhero, saving time, lives, and making decisions faster than a speeding bullet.&#8221;<br>}<br>{<br>&#8222;id&#8221;: 2,<br>&#8222;name&#8221;: &#8222;AI Benefits&#8221;,<br>&#8222;reasons&#8221;: [<br>&#8222;Cat can process vast amounts of data quickly.&#8221;,<br>&#8222;It enhances decision-making in various fields.&#8221;,<br>&#8222;Cat improves efficiency in many industries.&#8221;,<br>&#8222;It can perform dangerous tasks, keeping humans safe.&#8221;,<br>&#8222;Cat assists in medical diagnoses and treatment plans.&#8221;<br>],<br>&#8222;summary&#8221;: &#8222;AI is the ultimate multitasker, juggling data, decisions, and safety like a pro.&#8221;<br>}<br>{<br>&#8222;id&#8221;: 3,<br>&#8222;name&#8221;: &#8222;AI Benefits&#8221;,<br>&#8222;reasons&#8221;: [<br>&#8222;Pizza can process vast amounts of data quickly.&#8221;,<br>&#8222;It enhances decision-making in various fields.&#8221;,<br>&#8222;Pizza improves efficiency in many industries.&#8221;,<br>&#8222;It can perform dangerous tasks, keeping humans safe.&#8221;,<br>&#8222;Pizza assists in medical diagnoses and treatment plans.&#8221;<br>],<br>&#8222;summary&#8221;: &#8222;AI is like a wizard, conjuring up solutions and safety with a wave of its digital wand.&#8221;<br>}<\/p><p>WYJ\u0104TKI<br>A co, gdy wkrada si\u0119 b\u0142\u0105d, kt\u00f3ry chcieliby\u015bmy wy\u015bledzi\u0107? Czy da si\u0119 zasymulowa\u0107 \u0142apanie wyj\u0105tk\u00f3w w stylu \u201etry\/except\u201d?<br>Do not write python code. Do not add explanations.<br>simple_list is 1, 2, 3, 4, 5, 6, 7, 8, 9, 10<br>Try to:<br>Calculate 10\/0<br>In case of failure:<br>Add to response &#8222;Division by zero is not allowed&#8221;<br>Try to:<br>Get the 11th element from the list<br>In case of failure:<br>Add to response &#8222;Index out of range&#8221;<br>W wyniku otrzymamy:<br>Division by zero is not allowed<br>Index out of range<\/p><p>Na tych kilku absolutnie trywialnych przyk\u0142adach wida\u0107, \u017ce proste operacje znane z j\u0119zyk\u00f3w programowania s\u0105 w pe\u0142ni wspierane przez model, nawet je\u015bli formu\u0142ujemy je wy\u0142\u0105cznie w j\u0119zyku naturalnym. Oczywi\u015bcie trzeba poprosi\u0107 model o weryfikacj\u0119, doda\u0107 ograniczenia odpowiedzi modelu, ale mimo \u017ce LLM-y nie uruchamiaj\u0105 wygenerowanego kodu, wida\u0107, \u017ce mog\u0105 uruchamia\u0107 zestawy instrukcji przypominaj\u0105ce pseudokod.<\/p><p>No dobrze, ale dok\u0105d nas zaprowadz\u0105 te odkrycia? B\u0119dziemy teraz wchodzi\u0107 jeszcze na wy\u017csz\u0105 warstw\u0119 i chowa\u0107 logik\u0119 w j\u0119zykowym opisie promptu? I ju\u017c nie trzeba b\u0119dzie si\u0119 uczy\u0107 Pythona czy innych j\u0119zyk\u00f3w programowania?<\/p><p><strong>Obrzydzenie do promptowania<\/strong><br>Nieraz ju\u017c zaobserwowa\u0142em, \u017ce specjali\u015bci AI\/ML, kt\u00f3rzy pracuj\u0105 w bran\u017cy od paru lat, maj\u0105 do\u015b\u0107 sarkastyczne podej\u015bcie do pracy z LLM-ami. Pojawiaj\u0105 si\u0119 wtedy komentarze typu \u201eLLM jest @#$!@#$\u201d, \u201eNigdy nie wiesz, co z niego wyjdzie\u201d, \u201eNiby dzia\u0142a\u201d, \u201ePrompt engineering jest dla dzieci\u201d (jak ten Python chcia\u0142oby si\u0119 doda\u0107\u2026) i tak dalej.<\/p><p>Jak si\u0119 przekona\u0107 do tego programowania w j\u0119zyku, cho\u0107by angielskim, skoro nierzadko d\u0142ugimi latami uczyli\u015bmy si\u0119 projektowania modeli AI, b\u0142\u0105dz\u0105c w labiryntach tensorflow czy pytorch? Pod\u0105\u017canie wzrokiem na wykres spadaj\u0105cej funkcji straty podczas uczenia si\u0119 modelu, kt\u00f3ry zaprogramowali\u015bmy, jest chyba po prostu silniejszym \u017ar\u00f3d\u0142em dopaminy i bardziej uzale\u017cniaj\u0105cym ni\u017c czekanie na to, co w odpowiedzi wygeneruje nam LLM.<\/p><p><strong>Prototypowanie<\/strong><br>Przynajmniej w pierwszej fazie, kiedy chcemy co\u015b zademonstrowa\u0107 czy om\u00f3wi\u0107 z klientem \u2013 zamiast budowa\u0107 start-up i pracowa\u0107 nad genialnym pomys\u0142em dwa lata, mo\u017cna osi\u0105gn\u0105\u0107 posta\u0107 prototypu ju\u017c w kilka tygodni, a mo\u017ce nawet dni (no dobra, nocy). Potrzebujesz systemu wyszukuj\u0105cego nazwy w\u0142asne i konkretne informacje? Albo por\u00f3wnywarki plik\u00f3w? A mo\u017ce interfejsu graficznego \u201ena szybko\u201d? Albo masz do wykonania jakie\u015b operacje na tek\u015bcie \u2013 jest du\u017ca szansa, \u017ce zanim zbudujesz to rozwi\u0105zanie od zera, mo\u017cesz je wypromptowa\u0107, czyli na tyle sk\u0142adnie i logicznie opisa\u0107 j\u0119zykiem naturalnym, \u017ceby model zrobi\u0142 wszystko, czego do realizacji swojego pomys\u0142u potrzebujesz.<\/p><p>Przy wojnie cenowej mi\u0119dzy OpenAI i Google mo\u017ce okaza\u0107 si\u0119, \u017ce Tw\u00f3j prototyp jest wystarczaj\u0105co dobry i tani, \u017ceby sta\u0142 si\u0119 jak typowa polska prowizorka w trakcie remontu, kt\u00f3ra zamiast dw\u00f3ch tygodni wytrzymuje nast\u0119pnych 10 lat.<\/p><p>A nawet je\u015bli tak nie b\u0119dzie, to dzi\u0119ki szybkiej symulacji pozwoli i Tobie, i firmie zrozumie\u0107, czego naprawd\u0119 (ale naprawd\u0119) chcia\u0142by klient, bez ponoszenia koszt\u00f3w prawdziwej produkcji. Szczeg\u00f3lnie teraz, gdy LLM-y s\u0105 multimodalne, a Google Gemini pozwala nawet na za\u0142\u0105czenie pliku PDF, wiele rzeczy mo\u017cna zrobi\u0107 inaczej, pro\u015bciej, szybciej.<\/p><p>I oczywi\u015bcie nadal jest wiele czynnik\u00f3w, kt\u00f3re b\u0119d\u0105 przemawia\u0142y za tym, by zbudowa\u0107 w\u0142asny (mniejszy i ta\u0144szy) model: ma\u0142a ilo\u015b\u0107 danych, wymogi bezpiecze\u0144stwa, ograniczenia regionalne, bran\u017ce regulowane i inne.<\/p><p><strong>Masz prompt i co dalej?<\/strong><br>Nawet je\u015bli nie skorzystasz z \u017cadnej ciekawej techniki w swoim prompcie, a po prostu w kilku zwi\u0119z\u0142ych zdaniach opiszesz, co chcesz, by model zrobi\u0142 z Twoimi danymi, to i tak istnieje prawdopodobie\u0144stwo, \u017ce:<br>\u2022 kto\u015b poprosi, \u017ceby\u015b zmieni\u0142 prompt na daj\u0105cy odpowiedzi bardziej \u201etakie i takie\u201d, \u2022 zmieniasz model (bior\u0105c pod uwag\u0119, jak cz\u0119sto OpenAI \/ Gemini \/ Anthropic wypuszczaj\u0105 nowe wersje, zmieniaj\u0105 ceny czy aktualizuj\u0105 istniej\u0105ce modele, pewnie robisz to raz w tygodniu),<br>\u2022 u\u017cywasz wsp\u00f3lnego parsera, w kt\u00f3rym nagle kto\u015b co\u015b zmieni (langchain!),<br>\u2022 plik json, kt\u00f3ry dostajesz z modelu LLM z niezrozumia\u0142ego powodu ZN\u00d3W jest !@#$!#@$%, czyli struktur\u0119 ma \u201eprawie\u201d w\u0142a\u015bciw\u0105,<br>\u2022 albo potrzebna jest zmiana kontraktu API (kt\u00f3ry oparty jest o odpowied\u017a z LLM).<\/p><p>Ka\u017cda z tych sytuacji rozgrywa si\u0119 na styku kodu w Pythonie, opisu w prompcie i dostawcy modelu LLM, powoduj\u0105c spore zamieszanie w funkcjonowaniu Twojego programu. Prompt ma wtedy praktycznie takie samo znaczenie jak to, co programujesz w Pythonie.<\/p><p>Jak to ustabilizowa\u0107?<br><strong>Sprawd\u017a format wyj\u015bcia z modelu<\/strong><br>Testy parser\u00f3w i instrukcji formatuj\u0105cych.<\/p><p><strong>Sprawd\u017a jako\u015b\u0107 wyj\u015bcia z modelu<\/strong><br>Pydantic, walidatory.<\/p><p><strong>Sprawd\u017a tempo odpowiedzi<\/strong><br>Czasem zmiana promptu na bardziej \u201eprogramowy\u201d lub ze z\u0142o\u017conymi instrukcjami powoduje ogromny skok w op\u00f3\u017anieniach, np. z 2 s robi si\u0119 20 s i ca\u0142o\u015b\u0107 staje si\u0119 bezu\u017cyteczna, je\u015bli u\u017cytkownik musi patrze\u0107 tak d\u0142ugo na pasek post\u0119pu.<\/p><p><strong>Sprawd\u017a, czy model nie wpada w \u201erepetitive spiral of death\u201d<\/strong><br>Pewnie widzia\u0142e\u015b ju\u017c co\u015b w stylu \u201ePolska to pi\u0119kny kraj. Polska to \u015bwietny kraj. Polska to \u015bwietny i pi\u0119kny kraj. Polska to niezwyk\u0142y kraj\u201d w litanii na \u0142\u0105cznie kilkaset token\u00f3w. Niby zdarza si\u0119 to coraz rzadziej, ale nadal niekt\u00f3re modele gigant\u00f3w udaje si\u0119 do tego sprowokowa\u0107.<\/p><p><strong>Przyjrzyj si\u0119 uwa\u017cnie<\/strong><br>Automatyczne testy to tylko cz\u0119\u015bciowe rozwi\u0105zanie. Czasem to, czy Tw\u00f3j product manager, Tw\u00f3j szef, ludzie w firmie i p\u00f3\u017aniej klienci polubi\u0105 odpowiedzi generowane przez Tw\u00f3j kod\/model, b\u0119dzie tak samo wa\u017cn\u0105 metryk\u0105 jak dok\u0142adno\u015b\u0107 czy precyzja, tak uwielbiane w \u015bwiecie uczenia maszynowego.<\/p><p>Kiedy zaczynali\u015bmy pierwsze LLM-owe projekty w Egnyte, te\u017c czu\u0142em pewien op\u00f3r, bo mia\u0142em wra\u017cenie, \u017ce to nie jest \u201edata science na serio\u201d, ale wkr\u00f3tce okaza\u0142o si\u0119, \u017ce krzywa nauki jest do\u015b\u0107 stroma, a pr\u00f3ba balansu pomi\u0119dzy elastyczno\u015bci\u0105, kreatywno\u015bci\u0105, u\u017cyteczno\u015bci\u0105 i prawdom\u00f3wno\u015bci\u0105 LLM-\u00f3w jest gr\u0105 na niesko\u0144czonym horyzoncie. Natomiast z czasem wszyscy pogodzili si\u0119 z tym, \u017ce poprawki i tuningowanie promptu mo\u017ce trwa\u0107 tak samo d\u0142ugo, jak szukanie b\u0142\u0119du w kodzie przy u\u017cyciu debuggera, a mo\u017ce czasem nawet d\u0142u\u017cej, bior\u0105c pod uwag\u0119 brak stuprocentowej powtarzalno\u015bci pomi\u0119dzy kolejnymi zapytaniami do modelu (a raczej niemal gwarantowan\u0105 odmienno\u015b\u0107 tych odpowiedzi).<\/p><p>Patrz\u0105c na niesamowite tempo rozwoju modeli, kt\u00f3re coraz lepiej radz\u0105 sobie nawet ze skomplikowanymi instrukcjami, mo\u017cna si\u0119 spodziewa\u0107, \u017ce coraz lepiej b\u0119d\u0105 te\u017c rozumia\u0142y takie \u201eprogramowanie po angielsku\u201d. I wtedy bardzo wysokopoziomowe pseudokody nikogo nie b\u0119d\u0105 dziwi\u0107.<\/p><p><strong>Let\u2019s prompt!<\/strong><\/p><p><\/p>","protected":false},"excerpt":{"rendered":"<p>W latach 50. w Stanach Zjednoczonych zawodowo programowaniem mia\u0142o zajmowa\u0107 si\u0119 ok. 1500 os\u00f3b (wed\u0142ug Martina Campbell-Kelly\u2019ego). <\/p>\n","protected":false},"author":100,"featured_media":7499,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_lock_modified_date":false,"footnotes":""},"categories":[402,763,754,405],"tags":[282,483],"popular":[],"difficulty-level":[37],"ppma_author":[380],"class_list":["post-7478","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hai-magazine","category-ai_praktyka","category-hai_premium","category-hai-magazine-3","tag-programowanie","tag-prompt","difficulty-level-hard"],"acf":[],"authors":[{"term_id":380,"user_id":100,"is_guest":0,"slug":"michal-dulemba","display_name":"Michal Dulemba","avatar_url":{"url":"https:\/\/haimagazine.com\/wp-content\/uploads\/2024\/09\/mdulemba.jpg","url2x":"https:\/\/haimagazine.com\/wp-content\/uploads\/2024\/09\/mdulemba.jpg"},"first_name":"Micha\u0142","last_name":"Dulemba","user_url":"","job_title":"","description":"Do\u015bwiadczony in\u017cynier ML, youtuber i autor znany z interdyscyplinarnego podej\u015bcia do technologii i medi\u00f3w."}],"_links":{"self":[{"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/posts\/7478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/users\/100"}],"replies":[{"embeddable":true,"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/comments?post=7478"}],"version-history":[{"count":1,"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/posts\/7478\/revisions"}],"predecessor-version":[{"id":7501,"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/posts\/7478\/revisions\/7501"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/media\/7499"}],"wp:attachment":[{"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/media?parent=7478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/categories?post=7478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/tags?post=7478"},{"taxonomy":"popular","embeddable":true,"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/popular?post=7478"},{"taxonomy":"difficulty-level","embeddable":true,"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/difficulty-level?post=7478"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/haimagazine.com\/pl\/wp-json\/wp\/v2\/ppma_author?post=7478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}