Enhed 4 / 11

Symbolsk beregning: Styring af kunstig intelligens med SymPy

Gevinster:

  • Evne til at genkende SymPys kerneegenskaber (forenkling, faktorisering, ligningsløsning, afledt, integral, grænse) og bruge det til at validere AI-output
  • Evne til at opnå deterministiske og præcise resultater ved at udskrive SymPy-kode til kunstig intelligens og køre selve koden; Forstå, at det ikke er verifikation at have kodeoutput forudsagt af kunstig intelligens
  • Når resultatet af kunstig intelligens ikke stemmer overens med SymPy-outputtet, er muligheden for at bruge SymPy som grundlag for at lokalisere fejlen og manuelt tilføje finesser såsom domæner.

Det mest praktiske og kraftfulde værktøj i dette modul er i denne enhed: symbolsk beregning og dets Python-bibliotek SymPy. Symbolsk regning er at lave nøjagtig matematik, ikke med tal, men med symboler (variabler som x, y osv.): tage et integral med dets nøjagtige formel, løse en ligning med bogstaver, forenkle et udtryk. SymPy er et open source, gratis og deterministisk Python-bibliotek, der gør dette - hvilket betyder, at det altid giver det samme nøjagtige korrekte resultat til det samme input. Dette gør den ideel til at validere AI-output: AI giver hastighed og indsigt, SymPy giver præcision.

Den centrale idé med denne enhed er denne: få AI til at regne ud, men få SymPy til at validere resultatet. Endnu bedre: Få AI til at skrive SymPy-koden, du kører koden og får det endelige resultat. Så du eliminerer hallucinationsrisikoen ved AI med determinismen fra SymPy.

Endnu en definition: CAS (Computer Algebra System) er den generelle betegnelse for software, der udfører symbolsk matematik; SymPy er et CAS. Kommercielle eksempler er Mathematica og Maple, men SymPy er gratis og tilgængelig, fordi den kører i Python.

SymPys kerneegenskaber

SymPy gør følgende præcist:

  • Simplification: simplify(expression) reducerer et udtryk til dets simpleste form.
  • Factoring / expanding: factor() og expand().
  • Løsning af en ligning: solve(ligning, x) giver de nøjagtige rødder af ligningen.
  • Afledt: diff(udtr., x).
  • Integral: integrere(udtr., x) (ubestemt) eller integrere(udt., (x, a, b)) (bestemt).
  • Limit: limit(udtryk, x, prik).
  • Serier står for: serie(udtryk, x, 0, n).
  • Matrixoperationer, ligningssystemer, differentialligninger og mere.

Trin for trin: AI + SymPy valideringsworkflow

1. Få AI til at løse problemet. Få en trinvis løsning og endeligt resultat.

2. Få AI til at skrive SymPy-koden til det samme problem. Sig "Skriv kode, der bekræfter dette resultat med SymPy."

3. Kør selv koden. Lad ikke AI'en "forudsige" outputtet af koden - det ville være hallucination. Kør koden i et rigtigt Python-miljø.

4. Sammenlign de to resultater. Hvis resultatet fundet manuelt af AI og SymPy-outputtet er det samme, øges tilliden; hvis anderledes, er fejlen i AI (trust SymPy).

5. Find fejlen, hvis der er en forskel. Fortæl AI'en: "SymPy gav dette, dit resultat er anderledes; find din fejl."

Bemærk: Hvis du tager kode fra AI og spørger "hvad producerer denne kode?" At spørge AI'en" er IKKE verifikation - fordi AI'en også kan udgøre kodeoutputtet. Sørg for at køre koden i et rigtigt Python-miljø (lokal installation, Jupyter eller en online Python-løber). Styrken i SymPy afsløres, når den køres.

AI manuel løsning etc. SymPy — sammenligning

funktion

AI manuel løsning

SymPy

hastighed

meget hurtigt

hurtigt

præcision

Ingen garanti (hallucination)

Deterministisk, bestemt

Forklar trinene

godt

Svag (resultatorienteret)

Intuition/strategi

godt

Ingen

Berettigelse til verifikation

nej

Ja

Bedste kombination: AI til forklaring og strategi, SymPy for præcision.

tre minisager

Tilfælde 1 — Integral mismatch. En elev spurgte AI ∫ x/(x²+1) dx. YZ gav (1/2)·ln(x²+1) + C. Eleven kørte integrate(x/(x**2+1), x); SymPy returnerede log(x**2 + 1)/2. De var de samme - fuldstændig tillid. Så blev den afledte kontrol også udført med diff; Det er tilbage til x/(x²+1). Tredobbelt bekræftelse, 3 minutter.

Tilfælde 2 — Forenklingsfejl. En lærer fik AI til at forenkle udtrykket (x²−1)/(x−1); YZ sagde x+1 (korrekt, men udeladte betingelsen x≠1). SymPy simplify((x**2-1)/(x-1)) gav også x+1, men læreren tilføjede manuelt domænebegrænsningen (udefineret ved x=1). Lektion: Selv SymPy lægger nogle gange ikke vægt på domænefinesser; menneske tilføjer matematisk kontekst.

Tilfælde 3 — Ligningssystem. En ingeniør fik AI til at løse et system af lineære ligninger med 3 ubekendte og lavede en fejl i en variabel. SymPy med solve([ligninger], [x, y, z]) gav den nøjagtige løsning; AI's z-værdi var forkert. Ingeniøren tog SymPy-resultatet og fik AI til at finde fejlen: en tegnfejl. Det blev løst på 4 minutter.

Fire kopierbare skabeloner

1) Anmodning om SymPy-bekræftelseskode fra YZ:

Du løste følgende problem: [problem], dit resultat er [resultat]. Skriv nu en SymPy eksekverbar kode, der VERIFICERER dette resultat. Lad koden definere symbolerne, beregn resultatet og udskriv det. Gæt ikke outputtet af koden; Jeg vil køre det.

2) Løsning fra bunden med SymPy:

Skriv en Python-kode, der løser følgende problem med SymPy: [problem]. Tilføj de nødvendige importer, symboldefinitioner og udskrifter. Skriv hvad koden producerer; Bare giv mig koden, så kører jeg den. Tilføj en kort kommentar til hver linje kode.

3) Ret AI med SymPy-output:

Du sagde [resultat], men SymPy gav dette: [SymPy output]. De to er forskellige. Da SymPy er deterministisk, skal du acceptere det som korrekt. Find ud af HVILKE trin du lavede en fejl i din løsning, og vis det.

4) Afledt/integral krydskontrolkode:

Du tog følgende integral: ∫ [f(x)] dx = [F(x)]. For at bekræfte dette, skriv en kode i SymPy, der tager DERIVATIVET af F(x) og kontrollerer, om det er lig med f(x) (med logikken simplify(diff(F)-f) == 0). Bare giv koden.

Svag prompt / Stærk prompt

Svag: "Hvad er ∫ sin²(x) dx? Tjek også med SymPy og skriv output."
Resultat: AI'en passer til både svaret og "SymPy output"; Begge virker konsekvente, men ingen af ​​dem er blevet bekræftet. Falsk tillid.
Stærk: "Skriv en eksekverbar SymPy-kode for ∫ sin²(x) dx (import, symbol, integrer, print). Du skriver ikke outputtet — jeg kører det og ser det. Tilføj også en linje, der kontrollerer for at differentiere resultatet og returnere det til sin²(x)."
Resultat: Du kører koden og ser det nøjagtige output af SymPy; verifikation bliver reel.

Almindelige fejl

  • At have AI til at forudsige kodeoutput. Dette er ikke validering; AI kan også passe til outputtet. Du kører koden.
  • Accepterer SymPy-resultatet uden at læse det. SymPys outputformat er nogle gange usædvanligt (f.eks. log = naturlig logaritme); Ved hvordan man tolker.
  • Glemmer domænet. SymPy-forenkling lægger ikke altid vægt på begrænsninger såsom x≠1; menneske tilføjer kontekst.
  • Forkert symboldefinition. Hvis x = symbols('x') er glemt, vil koden ikke fungere; antagelser (positive, reelle) påvirker resultatet (symboler('x', positive=Sand)).
  • Manglende import. Det er en almindelig fejl at glemme at importere fra sympy import * eller nødvendige funktioner.
Tip: For at kontrollere rigtigheden af ​​en lighed i SymPy er udtrykket simplify(left_side - right_side) == 0 meget nyttigt: to udtryk er identiske, hvis forskellen simplificeres til nul. Dette er den reneste måde at verificere en identitet eller forenkling produceret af AI.

SymPy's antagelser: samme udtryk, andet resultat

Et subtilt, men vigtigt træk ved SymPy er dets antagelsessystem. Når du definerer et symbol, kan du give det egenskaber: symbols('x', positive=True) indikerer at x er positivt, real=True indikerer at det er reelt. Disse antagelser kan ændre resultatet. For eksempel forbliver udtrykket √(x²) sqrt(x**2), hvis der ikke er nogen antagelser om x (fordi SymPy tager højde for, at x kan være negativ og ved, at det skal være |x|); Men hvis x er defineret som positivt, er resultatet direkte x. Dette er ikke en fejl, men matematisk rigor: √(x²) = |x|, ikke x = x.

AI udelader eller antager ofte disse antagelser forkert, når de genererer SymPy-kode. Som følge heraf gør koden, AI'en producerer, muligvis ikke den forenkling, du "forventer" - og det betyder faktisk, at SymPy opfører sig mere præcist. Så når en forenkling ser ud til at "ikke virker", skal du først overveje de faktiske matematiske betingelser for problemet (er x positivt? er det virkeligt? er det ikke-nul?) og føj disse antagelser til koden. At få antagelserne rigtige sikrer ikke kun, at SymPy returnerer det korrekte resultat, men tvinger dig også til at tænke over problemets domæne – hvilket er en del af den matematiske nøjagtighed.

Forsigtig: SymPys manglende evne til at "simplificere" et udtryk er ofte ikke en mangel, men et spørgsmål om matematisk stringens: da de nødvendige antagelser (positivitet, realisme) ikke er givet, har SymPy det mest generelle, sikreste resultat. Hvis du ikke kan se den forenkling, du forventer, skal du først gennemgå symbolantagelserne.

Sammenfattende

SymPy er et ideelt deterministisk værktøj til at validere det matematiske output af AI. Mest kraftfuld arbejdsgang: strategi og beskrivelse til AI, præcision til SymPy. Spørg AI for SymPy-kode, men sørg for at køre outputtet selv - få AI'en til at gætte, at kodeoutputtet ikke er validering. Hvis resultaterne ikke stemmer overens, stol på SymPy og lad AI finde fejlen. Krydstjek identiteter med simplify(difference) == 0 og integraler med diff.

Ansøgningsopgave

Vælg et integral, en ligningsløsning og en udtryksforenkling (tre separate problemer). For hver enkelt skal du få AI til at skrive løsningen manuelt og derefter SymPy-koden. Kør koderne i et rigtigt Python-miljø (lokal installation eller online runner). Sammenlign SymPy-output med AI's manuelle resultater. Prøv at finde mindst én uoverensstemmelse; Hvis du finder det, så lad AI finde sin fejl. Bemærk processen.

tjekliste

  • [ ] Jeg modtog både AI-løsningen og SymPy-koden for hvert problem.
  • [ ] Jeg kørte SymPy-koden i et rigtigt Python-miljø.
  • [ ] Jeg sammenlignede det manuelle YZ-resultat med SymPy-output.
  • [ ] Jeg krydstjekkede den afledede/integrale inverse med SymPy.
  • [ ] Jeg tilføjede domænet og antagelserne (positive/reelle) manuelt.
  • [ ] I tvisten stolede jeg på SymPy og fik AI til at finde sin fejl.