Sven Bader | qui mächtige l'affaire hieran ist eigentlich qui Verwendung de cURL, là sich so komplexe Web-Anfragen per POST aussi JSON kodiert versenden laisser. cURL ist depuis 2018 partie de Windows 10 et dans Windows 11 disponible, avec Windows 7/8 wird es pas sans weiteres aller.
qui Antwort wird ensuite aus qui Console geholt.
son nécessaire une eigenen API-Schlüssel. on muss zwar un paire Dollar hinterlegen mais j'ai pour rund 100 (kleineren) Anfragen justement einmal une Cent usé. ( [...] )
qui Code funktioniert avec X4 mais aussi avec XProfan 10. Viel Amusement beim Testen
$H Windows.ph
Def GetSysColor(1) !"User32", "GetSysColor"'Systemfarben abfragen
Proc Utf8Decode
'dans neueren XProfan Versionen wird automatisch qui gleichnamige interne Funktion verwendet
Paramètres utf8$
Déclarer ansistring$, unicode$, laenge&
laenge& = len(utf8$) * 2
unicode$ = mkstr$(chr$(0),laenge&)
~MultiByteToWideChar(~CP_UTF8,0,Addr(utf8$),-1,Addr(unicode$),laenge&)
ansistring$ = mkstr$(chr$(0),laenge&)
~WideCharToMultiByte(~CP_ACP,0,Addr(unicode$),-1,Addr(ansistring$),laenge&,0,0)
ansistring$ = substr$(ansistring$,1,chr$(0))
Retour ansistring$
ENDPROC
Proc CMDOut
'ursprünglich de Andreas Miethe
Paramètres Progname$,Command$,MemBuffer&
Struct PROCESS_INFORMATION = hProcess&,hThread&,dwProcessId&,dwThreadId&
Struct SECURITY_ATTRIBUTES = nLength&,lpSecurityDescriptor&,bInheritHandle&
Struct STARTUPINFO =cb&,lpReserved&,lpDesktop&,lpTitle&,dwX&,dwY&,dwXSize&,dwYSize&,dwXCountChars&,dwYCountChars&,dwFillAttribute&,dwFlags&,wShowWindow%,cbReserved2%,lpReserved2&,hStdInput&,hStdOutput&,hStdError&
Def &NORMAL_PRIORITY_CLASS $20
Def &STARTF_USESTDHANDLES $100
Def &STARTF_USESHOWWINDOW $1
Déclarer hRPipe&,hWPipe&,pRBytes&,Result&
Déclarer PI#,SI#,SA#, out$
Faible PI#,PROCESS_INFORMATION
Faible SI#,STARTUPINFO
Faible SA#,SECURITY_ATTRIBUTES
Déclarer StringBuffer$, output$
StringBuffer$ = Space$(MemBuffer&)
SA#.nLength& =SizeOf(SA#)
SA#.bInheritHandle& = 1
SA#.lpSecurityDescriptor& = 0
Result& = ~CreatePipe(Addr(hRPipe&), Addr(hWPipe&), SA#, 0)
Si Result& = 0
Retour »'MessageBox("Pipe konnte pas gestartet werden",»,0)
EndIf
Si Progname$ <> »
Command$ = " " + Command$
EndIf
SI#.cb& = SizeOf(SI#)
SI#.dwFlags& = &STARTF_USESHOWWINDOW | &STARTF_USESTDHANDLES
SI#.hStdOutput& = hWPipe&
SI#.hStdError& = hWPipe&
Si Progname$ = »
Result& = ~CreateProcess(0, Addr(Command$), SA#, SA#, 1, &NORMAL_PRIORITY_CLASS, 0, 0, SI#,PI#)
D'autre
Result& = ~CreateProcess(Addr(Progname$), Addr(Command$),SA#,SA#,1,&NORMAL_PRIORITY_CLASS, 0, 0,SI#,PI#)
EndIf
Si Result& <> 1
Retour »'MessageBox("Datei pas gefunden",»,0)
EndIf
Result& = ~CloseHandle(hWPipe&)
Tandis que Result& <> 0
Result& = ~ReadFile(hRPipe&,Addr(StringBuffer$),MemBuffer&,Addr(pRBytes&), 0)
Si pRBytes& > 0
Out$ = Left $(StringBuffer$,pRBytes&)
output$ = output$ + Out$
EndIf
Endwhile
~CloseHandle(PI#.hProcess&)
~CloseHandle(PI#.hThread&)
~CloseHandle(hRPipe&)
Dispose PI#
Dispose SI#
Dispose SA#
output$ = Utf8Decode(output$)
Retour output$
ENDPROC
Fenêtre Style 1+2+4+8+16
Titre de la fenêtre "ChatGPT"
Fenêtre 100,100 - 650,600;0
Cls GetSysColor(15)'Fensterfarbe
Utilisateur Messages 16
UseFont "Tahoma",15,0,0,0,0'Standardfont
SetDialogFont 1
Déclarer edit&,font&[10],button&,text&
Font&[1] = Créer("Font","Tahoma",15,0,0,0,0)'normal
text& = Créer("Text",%hWnd,», 20, 20, 600, 320)
Edit& = Créer("MultiEdit", %hWnd, », 20, 400, 600, 96)
button& = Créer("Button", %hWnd, "Senden", 20, 500, 600, 24)
SetFont Edit&,font&[1]
Proc GPT
Paramètres prompt$
Déclarer api_key$, endpoint$, payload$, response$,responseJson$, content$,model$,curl_exe$
Déclarer curl_command$
curl_exe$ = $ Trim(CMDOut(», "where curl", 8192))
api_key$ = "sk-proj-..........................................................................................."
endpoint$ = "https://api.openai.com/v1/chat/completions"
content$ = »'Vorabbriefing, z.B. "Du es Yoda aus Star Wars."
model$ = "gpt-4o-mini"
payload$ = "{\\\qmodel\\\q:\\\q" + model$ + "\\\q,\\\qmessages\\\q:[{\\\qrole\\\q:\\\qsystem\\\q,\\\qcontent\\\q:\\\q" + content$ + "\\\q},{\\\qrole\\\q:\\\quser\\\q,\\\qcontent\\\q:\\\q" + prompt$ + "\\\q}]}"
curl_command$ = curl_exe$ + " -s -k -X POST " + endpoint$ + " -H \qAuthorization: Bearer " + api_key$ + "\q -H \qContent-Type: application/json\q -d \q" + payload$ + "\q"
responseJson$ = CMDOut(», curl_command$, 8192)
'on pourrait aussi qui JSON Funktionen de XProfan X4 verwenden, mais pas sans Umwege sur une Dossier
response$ = translate$(responseJson$,"\\\q", "\\q")' \" dans XProfan-Syntax transformer (encore escaped)
response$ = Substr$(response$,2, "\qcontent\q: \q")' Antwort extrahieren
response$ = Substr$(response$,1, "\q")' Antwort extrahieren
response$ = translate$(response$,"\\q", "\q")' Anführungszeichen final kodieren
response$ = translate$(response$,"\\n","\n" )' Zeilenumbrüche
Si (response$ = »)
SetText text&, responseJson$
D'autre
SetText text&, response$
EndIf
ENDPROC
WhileNot (%umessage = 16)
WaitInput
Si Clicked(button&)
GPT(gettext$(edit&))
EndIf
Endwhile
|
|