Italia
Fonte/ Codesnippets

ChatGPT API in XProfan verwenden (per cURL)

 

Sven
Bader
Die mächtige Sache hieran ist eigentlich die Verwendung von cURL, da sich so komplexe Web-Anfragen per POST auch JSON kodiert versenden lassen. cURL ist seit 2018 Teil von Windows 10 und auch in Windows 11 disponibile, mit Windows 7/8 wird es nicht ohne weiteres gehen.

Die Antwort wird dann aus der Konsole geholt.

Ihr necessario einen eigenen API-Schlüssel. Man muss zwar ein paar Dollar hinterlegen aber ich habe nach rund 100 (kleineren) Anfragen gerade einmal einen Cent verbraucht. (  [...]  )

Der Code funktioniert mit X4 aber auch mit XProfan 10. Viel Divertimento beim Testen
 $H Windows.ph
Def GetSysColor(1)      !"USER32", "GetSysColor"'Systemfarben abfragen

Proc Utf8Decode

    'in neueren XProfan Versionen wird automatisch die gleichnamige interne Funktion verwendet
    Parameters utf8$
    Declare 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))
    Return ansistring$

EndProc

Proc CMDOut

    'ursprünglich von Andreas Miethe
    Parameters 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
    Declare hRPipe&,hWPipe&,pRBytes&,Result&
    Declare PI#,SI#,SA#, out$
    Dim PI#,PROCESS_INFORMATION
    Dim SI#,STARTUPINFO
    Dim SA#,SECURITY_ATTRIBUTES
    Declare StringBuffer$, output$
    StringBuffer$ = Space$(MemBuffer&)
    SA#.nLength& =SizeOf(SA#)
    SA#.bInheritHandle& = 1
    SA#.lpSecurityDescriptor& = 0
    Result& = ~CreatePipe(Addr(hRPipe&), Addr(hWPipe&), SA#, 0)

    If Result& = 0

        Return ""'MessageBox("Pipe konnte nicht gestartet werden","",0)

    EndIf

    If Progname$ <> ""

        Command$ = " " + Command$

    EndIf

    SI#.cb& = SizeOf(SI#)
    SI#.dwFlags& = &STARTF_USESHOWWINDOW | &STARTF_USESTDHANDLES
    SI#.hStdOutput& = hWPipe&
    SI#.hStdError& = hWPipe&

    If Progname$ = ""

        Result& = ~CreateProcess(0, Addr(Command$), SA#, SA#, 1, &NORMAL_PRIORITY_CLASS, 0, 0, SI#,PI#)

    Else

        Result& = ~CreateProcess(Addr(Progname$), Addr(Command$),SA#,SA#,1,&NORMAL_PRIORITY_CLASS, 0, 0,SI#,PI#)

    EndIf

    If Result& <> 1

        Return ""'MessageBox("Datei nicht gefunden","",0)

    EndIf

    Result& = ~CloseHandle(hWPipe&)

    While Result& <> 0

        Result& = ~ReadFile(hRPipe&,Addr(StringBuffer$),MemBuffer&,Addr(pRBytes&), 0)

        If 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$)
    Return output$

EndProc

WindowStyle 1+2+4+8+16
WindowTitle "ChatGPT"
Window 100,100 - 650,600;0
Cls GetSysColor(15)'Fensterfarbe
UserMessages 16
UseFont "Tahoma",15,0,0,0,0'Standardfont
SetDialogFont 1
Declare edit&,font&[10],button&,text&
Font&[1] = Create("Font","Tahoma",15,0,0,0,0)'normal
text& = Create("Text",%hWnd,"", 20, 20, 600, 320)
Edit& = Create("MultiEdit", %hWnd, "", 20, 400, 600, 96)
button& = Create("Button", %hWnd, "Senden", 20, 500, 600, 24)
SetFont Edit&,font&[1]

Proc GPT

    Parameters prompt$
    Declare api_key$, endpoint$, payload$, response$,responseJson$, content$,model$,curl_exe$
    Declare 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 bist 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)
    'Man potuto auch die JSON Funktionen von XProfan X4 verwenden, aber nicht ohne Umwege circa eine File
    response$ =  translate$(responseJson$,"\\\q", "\\q")' \" in XProfan-Syntax umwandeln (noch 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

    If (response$ = "")

        SetText text&,  responseJson$

    Else

        SetText text&,  response$

    EndIf

EndProc

WhileNot (%umessage = 16)

    WaitInput

    If Clicked(button&)

        GPT(gettext$(edit&))

    EndIf

EndWhile

 
vor 11 Tagen  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

112 Views

Untitledvor 0 min.
HofK vor 4 Tagen
Walter vor 4 Tagen
R.Schneider vor 7 Tagen
Peter Max Müller vor 8 Tagen
Di più...

Themeninformationen

Dieses Thema hat 1 subscriber:

Sven Bader (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie