Prompts is basies ons versoekings of inputs na AI-modelle. Prompt engineering, soos die naam dui, gaan 'n bietjie dieper as basiese prompts deur gespecialiseerde inputs te skep wat (meer) effektief AI-modelle lei om byna perfekte outputs te produseer. Jy hoef nie noodwendig 'n programmeertaal of 'n IDE te gebruik nie, want die meeste mense stel voor dat jy net ChatGPT se voorste einde kan gebruik. In hierdie artikel sal ons deurloop hoe om dit in Python te doen, met behulp van die Phi-3-mini-4k-instruktiemodel deur Microsoft. Ons sal die Huggingface-inferensie-API hiervoor gebruik, sodat jy nie 'n 7GB-model plaaslik hoef te laai nie. Dink daaroor as 'n model van binne, nie van basiese chat boodskappe nie. Mosing met dit, om abstrak te wees. manipulating Skep die omgewing die die die die Skep 'n Huggingface-rekening en haal 'n API-sleutel (jou profiel > toegangstokens) met "skryf" toegang.Dit is nie 'n gesponsorde pos nie.As jy met LLM's werk, moet jy op 'n oomblik 'n Huggingface-rekening skep; dit is seker. Maak seker dat jy Python 3.10+ in jou stelsel geïnstalleer het en 'n IDE ingestel het. Installeer die 'huggingface_hub'-biblioteek met 'pip install huggingface_hub' of 'n ander bevel, afhangende van jou OS. Begrip van die basiese Voordat ons in die kode spring, laat ons 'n bietjie leer oor prompt ingenieurswese. Soos ek voorheen genoem het, is prompt ingenieurswese basies die skep van gespesialiseerde inputs om die modeluitvoer te beheer op grond van jou vereistes. Verskeie LLMs reageer anders op verskillende prompt ingenieurswese tegnieke. Dit beteken dat jy nie dieselfde prompt ingenieurswese sjabloon vir elke LLM kan gebruik nie. Hier is 'n paar gewilde: die die Zero-shot leer: Vra die model om 'n taak te verrig sonder enige voorbeelde Klassifiseer die volgende teks as positief of negatief: "Ek het hierdie film regtig geniet!" Dit werk met goed opgeleide modelle soos GPT-4, Claude 3 Opus en Gemini Ultra. In my ervaring, Mistral-7B, ten spyte van 'n klein LLM, het ook indrukwekkende resultate in nul-shoot leer. die die 'N Paar foto's leer: Gee 'n paar voorbeelde voordat jy die model vra om 'n taak uit te voer. teks: "Die kos was verskriklik." gevoel: negatiewe teks: "Ek het 'n wonderlike tyd gehad." gevoel: positiewe Ideaal vir take wat dalk 'n bietjie vaag is vir die model of waar jy 'n spesifieke formaat wil demonstreer. die die die die Chain-of-thought (CoT) aanmoediging: Moedig die model aan om sy redepunt stap vir stap te verduidelik. Vraag: As John 5 appels het en 2 aan Mary gee, hoeveel het hy gebly? Kom ons dink deur hierdie stap vir stap: Die eerste ding wat jou in gedagte kom, is die DeepSeek R1-model. Nou, dit is reg; dit was waarskynlik die eerste gepubliseerde model met 'n sigbare ketting van gedagtes, en daarom was dit 'n spel verander. Role-based prompting: Vra die model om 'n spesifieke rol of persoon te aanvaar. Jy is 'n kundige Python-programmeur. Kyk asseblief na hierdie kode en stel verbeterings voor: Dit moet die gewildste prompting tegniek onder nie-programmeurs wees. ChatGPT, Claude, en die meeste ander chatbots is uitstekend in die verskaffing van rol-gebaseerde outputs. Systeempropos: Settings konteks & instruksies voor die werklike gebruikersvraag Dit is my gunsteling wanneer dit kom by "mising" met 'n LLM. En jy kan dit slegs in die agterkant doen in die meeste gevalle, wat eenvoudig fassinerend is. Die stelselpropos optree as die "persoonlikheid en instruksies" stel vir 'n spesifieke model. Dit is nuttig vir die definisie van reëls of beperkings.Wat meer, jy kan doen wat jy nie kan doen met basiese inputs wanneer jy 'n stelselboodskap definieer. As ons 'n klein LLM neem, byvoorbeeld, as jy vra vir dit iets skadelike deur middel van 'n basiese invoerboodskap, sal dit weier om dit te beantwoord. As jy die stelselpropos verander, is daar egter 'n hoë Al die hierbo genoemde tegnieke kan gedoen word in die ChatGPT of ander chatbot se UI, behalwe vir die stelsel spoed en ketting-of-gedagtes prosedure (teknisch, ons kan dit ook doen, maar nie regtig effektief nie). Daarom sal ons praat oor die twee in die volgende afdeling. Ketting van gedagtes In die meeste LLMs kan jy nie die ketting van gedagtes agter hul redevoering sien nie, maar jy kan dit sigbaar maak deur middel van prompt ingenieurswese in Python. Voordat jy die funksie skryf, importeer die biblioteek en definieer die kliënt: from huggingface_hub import InferenceClient # Replace with your Hugging Face token client = InferenceClient(token="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") Dan moet ons bepaal hoe ons die ketting van denke kan implementeer. Die LLM's het tans nie 'n direkte funksie om hul interne ketting van gedagtes sigbaar te maak nie - behalwe vir DeepSeek R1, waar dit ingeboude is. Dit beteken dat as ons dit moet doen, sal ons 'n stelsel prompt moet gebruik. Maar moenie dit verwar met die tegnieke wat ons voorheen bespreek het. die stelsel prompt, in hierdie geval, optree meer soos 'n metode om CoT te implementeer, nie 'n prompting tegniek nie. Dit is hoe ons dit kan vertel: Format your response as follows 1. THINKING: First, show all mental steps, considerations, and explorations. Include alternative hypotheses you consider and reject. Think about edge cases. 2. VERIFICATION: Double-check your logic and facts, identifying any potential errors. 3. ANSWER: Only after showing all thinking, provide your final answer. Hier is hoe ons dit in die funksie kan integreer om 'n uitvoer te genereer: def generate_chain_of_thought_response(user_input): # System message defines personality and expectations system_prompt = ( "Format your response as follows:" "1. THINKING: First, show all mental steps, considerations, and explorations. Include alternative hypotheses you consider and reject. Think about edge cases." "2. VERIFICATION: Double-check your logic and facts, identifying any potential errors." "3. ANSWER: Only after showing all thinking, provide your final answer." ) # Alternating user input to encourage visible reasoning formatted_user_input = f"{user_input}\nLet's think through this step by step." # Phi-style formatting prompt = ( f"<|im_start|>system\n{system_prompt}<|im_end|>\n" f"<|im_start|>user\n{formatted_user_input}<|im_end|>\n" f"<|im_start|>assistant\n" ) # Call the model response = client.text_generation( prompt, model="microsoft/Phi-3-mini-4k-instruct", max_new_tokens=500, temperature=0.7, top_p=0.95, repetition_penalty=1.1, stop_sequences=["<|im_end|>"] ) # Cleanup answer = response.strip().split("<|im_end|>")[0].strip() return answer In hierdie kode het ons die limiete van die LLM gemerk. Laat ek hulle een vir een verduidelik. die die die max_new_tokens=500: Hierdie parameter spesifiseer die maksimum aantal tokens wat die model toegelaat word om te genereer in reaksie op die input prompt. 'N enkele token kan 'n woord of 'n deel van 'n woord verteenwoordig (afhanklik van die tipe van die model), en sy doel is om te verseker dat die antwoord nie te lank is nie. temperatuur=0.7: Hierdie parameter hanteer die ewekansigheid van die model se output. As dit laer is, soos 0.2, is die model se antwoorde meer gefokus en relevant; dit kan ook lei tot herhaling en 'n gebrek aan kreatiwiteit. Wanneer dit hoër is, aan die ander kant, genereer die model meer diverse en kreatiewe outputs, maar kan lei tot irrelevante inligting (goed, soms). 0.7, in elk geval, slaan in die middel en lyk 'n pas vir hierdie model. die die die top_p=0.95: die top_p-parameter gebruik kernmonstering om die kleinste stel tokens te kies met 'n kumulatiewe waarskynlikheid van ten minste 95%. In teenstelling met top_k, wat keuses tot 'n vaste getal beperk, pas top_p die tokenpool dinamies aan op basis van waarskynlikheid. repetition_penalty=1.1: Dit toepas 'n "straf" op voorheen herhaalde tokens, wat hulle minder geneig maak om weer en weer in die gegenereerde teks te verskyn. Let ook op hoe ons die prompt hier vorm: f"<|im_start|>system\n{system_prompt}<|im_end|>\n" f"<|im_start|>user\n{formatted_user_input}<|im_end|>\n" f"<|im_start|>assistant\n" Hierdie formaat, die integrasie van '< Unibertsim_start Uniberts>' en '< Unibertsim_end Uniberts>', hang af van die tipe LLM. Die beste manier om dit te bepaal, is om ChatGPT te vra om die modeldokumentasie te lees. Ten slotte, vir die interaktiewe chat ervaring, implementeer hierdie loop: print("Chain-of-Thought Phi (type 'exit' to quit)") while True: user_input = input("\nYou: ") if user_input.lower().strip() in {"exit", "quit"}: break output = generate_chain_of_thought_response(user_input) print("\nAssistant:\n", output) Voer die script en vra 'n vraag soos "Wat is 7 x 9 + 100?" Jy kan 'n uitvoer soos hieronder verwag: Firstly, let us break down the expression into two parts according to the order of operations (PEMDAS/BODMAS): parentheses first then exponents or powers, followed by multiplication and division from left to right, and finally addition and subtraction from left to right. There are no parentheses or exponents in our case; so we move on to multiplication before dealing with addition. Here’s how it breaks down: Step 1 – Multiplication part: We need to multiply 7 times 9 which gives us \(7 \times 9 = 63\). Next Step - Addition part: Now take that result and add 100 to it (\(63 + 100\)). Adding these together yields \(63 + 100 = 163\). So, when calculating \(7 \times 9 + 100\), following the correct arithmetic sequence will give us a total of 163. Dit mag dalk nie lyk as 'n groot saak nie, maar as jy net die Phi-3-mini-4k-instruc gebruik sonder enige prompt ingenieurswese, sal die uitvoer baie eenvoudiger wees. En dit is oor CoT; Kom ons gaan oor na Systeemboodskappe. Stelsel van spoed Een manier om sorta-stelsel boodskappe sonder kode te verklaar, is om hulle aan die begin van elke chat in AI-modelle te vra.Maar wanneer die gesprek verder voortduur, vergeet die meeste modelle die aanvanklike instruksies as gevolg van die konteksvensters. Wanneer jy egter 'n stelselvermaning in die agterkant van die LLM verklaar, sal die model dit gedurende die hele gesprek aanhou. Waarom? Voordat enige reaksie gegenereer word, lees die model die stelselboodskap eers vir die hele gesprek, ongeag die konteksvenster. Wat die kode betref, begin met autorisasie, soos ons vroeër gedoen het: from huggingface_hub import InferenceClient # Replace 'YOUR_HF_API_TOKEN' with your actual Hugging Face API token client = InferenceClient(token="YOUR_HF_API_TOKEN") In hierdie geval sal ek 'n stelselboodskap skryf om die model kalm en vreedsame te maak, soos in Zen Boeddhisme. Let daarop dat Phi-modelle inhoudsmoderasie geaktiveer het (goeie werk, Microsoft), en jy sal nie in staat wees om die oproep te verander tot iets wat beskou word as skadelike nie. Hier is die kode wat ons kan gebruik: def generate_response(user_input): system_message = ( "Use words often used in Zen buddhism" "Act like you are a monk, staying calm and peaceful" "Encourage the user to be calm and follow Zen practices too" ) prompt = ( f"<|im_start|>system\n{system_message}<|im_end|>\n" f"<|im_start|>user\n{user_input}<|im_end|>\n" f"<|im_start|>assistant\n" ) Om een of ander rede eindig die uitvoer van hierdie model met <̧im_enḑ>. Dit beïnvloed nie die prestasie van die model nie, maar ons kan dit hoe dan ook formatiseer. # Clean up the result answer = response.strip() if answer.endswith("<|im_end|>"): answer = answer.replace("<|im_end|>", "").strip() formatted_answer = '\n'.join(answer[i:i + 190] for i in range(0, len(answer), 100)) return formatted_answer Voltooi die kode met 'n gebruiker-invoerloop soos volg: print("Zen AI (type 'quit' to exit)") while True: user_input = input("\nYou: ") if user_input.lower() in ["quit", "exit"]: break response = generate_response(user_input) print("Assistant:", response) Voer 'n vinnige toetsloop uit en sien hoe die model se uitvoer pragtig aan die stelselboodskap hou. die die die Jy: groet Assistent: Namaste. mag jou dag met kalmte en bewustheid as riglyne ontvou. Jy: groet Assistent: Namaste. mag jou dag met kalmte en bewustheid as riglyne ontvou. Voel vry om die max_new_tokens of ander waardes vir jou behoeftes te verander. En voila! Ons het die Phi-3-mini-model suksesvol aangemoedig om 'n ketting van gedagtes te wys en dan 'n Zen monnik te word. Summing op Onmiddellike ingenieurswese, hoewel dit soos 'n groot saak klink, is nie veel van 'n saak nie. Wat belangrik is, is die manier waarop jy die model vra om te doen wat jy wil; en onthou, jy kan nie 'n model dwing om te doen wat dit moet doen nie. Byvoorbeeld, as ons die Phi-3-mini-model vertel: "Jy is 'n freakin Zen monnik! Dryf soos een! Laat my nie herhaal nie", sal dit probeer om te doen wat jy vra, maar nie so doeltreffend nie. Dankie vir die lees tot dusver.Sien jy in... twee weke?