Dieses Projekt wurde archiviert. Aufgrund persönlicher Umstände fehlt mir die Zeit, dieses Repository zu pflegen.
Das Reverse Engineering der Chat-Funktion der neuen Version von Bing
Englisch – 简体中文 – 繁體中文 – Spanisch – 日本語
python3 -m pip install EdgeGPT --upgrade
!!! Möglicherweise nicht mehr erforderlich!!!
In einigen Regionen hat Microsoft die Chat-Funktion für alle verfügbar gemacht, sodass Sie diesen Schritt möglicherweise überspringen können. Sie können dies mit einem Browser überprüfen (wobei der Benutzeragent auf Edge eingestellt ist), indem Sie versuchen, einen Chat zu starten, ohne sich anzumelden .
Es wurde auch festgestellt, dass es möglicherweise von Ihrer IP-Adresse abhängt . Wenn Sie beispielsweise versuchen, über eine IP-Adresse, die bekanntermaßen zu einem Rechenzentrumsbereich gehört (vServer, Root-Server, VPN, gemeinsame Proxys usw.), auf die Chat-Funktionen zuzugreifen, müssen Sie sich möglicherweise anmelden, obwohl dies möglich ist Sie können problemlos von Ihrer privaten IP-Adresse aus auf die Funktionen zugreifen.
Wenn Sie die folgende Fehlermeldung erhalten, können Sie versuchen, ein Cookie bereitzustellen und zu sehen, ob es dann funktioniert:
Exception: Authentication failed. You have not been accepted into the beta.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.51
). Dies geht ganz einfach mit einer Erweiterung wie „User-Agent Switcher and Manager“ für Chrome und Firefox.bing_cookies_*.json
ein.bing_cookies_*.json
folgen , damit sie von internen Cookie-Verarbeitungsmechanismen erkannt werden können cookies = json . loads ( open ( "./path/to/cookies.json" , encoding = "utf-8" ). read ()) # might omit cookies option
bot = await Chatbot . create ( cookies = cookies )
$ python3 -m EdgeGPT.EdgeGPT -h
EdgeGPT - A demo of reverse engineering the Bing GPT chatbot
Repo: github.com/acheong08/EdgeGPT
By: Antonio Cheong
!help for help
Type !exit to exit
usage: EdgeGPT.py [-h] [--enter-once] [--search-result] [--no-stream] [--rich] [--proxy PROXY] [--wss-link WSS_LINK]
[--style {creative,balanced,precise}] [--prompt PROMPT] [--cookie-file COOKIE_FILE]
[--history-file HISTORY_FILE] [--locale LOCALE]
options:
-h, --help show this help message and exit
--enter-once
--search-result
--no-stream
--rich
--proxy PROXY Proxy URL (e.g. socks5://127.0.0.1:1080)
--wss-link WSS_LINK WSS URL(e.g. wss://sydney.bing.com/sydney/ChatHub)
--style {creative,balanced,precise}
--prompt PROMPT prompt to start with
--cookie-file COOKIE_FILE
path to cookie file
--history-file HISTORY_FILE
path to history file
--locale LOCALE your locale (e.g. en-US, zh-CN, en-IE, en-GB)
(China/USA/Großbritannien/Norwegen haben die Unterstützung für das Gebietsschema verbessert)
Chatbot
-Klasse und asyncio
für eine detailliertere KontrolleVerwenden Sie Async für das beste Erlebnis, zum Beispiel:
import asyncio , json
from EdgeGPT . EdgeGPT import Chatbot , ConversationStyle
async def main ():
bot = await Chatbot . create () # Passing cookies is "optional", as explained above
response = await bot . ask ( prompt = "Hello world" , conversation_style = ConversationStyle . creative , simplify_response = True )
print ( json . dumps ( response , indent = 2 )) # Returns
"""
{
"text": str,
"author": str,
"sources": list[dict],
"sources_text": str,
"suggestions": list[str],
"messages_left": int
}
"""
await bot . close ()
if __name__ == "__main__" :
asyncio . run ( main ())
Query
und Cookie
Erstellen Sie eine einfache Bing Chat-KI-Abfrage (standardmäßig mit dem Konversationsstil „präzise“) und sehen Sie nur die Haupttextausgabe und nicht die gesamte API-Antwort:
Denken Sie daran, Ihre Cookies in einem bestimmten Format zu speichern: bing_cookies_*.json
.
from EdgeGPT . EdgeUtils import Query , Cookie
q = Query ( "What are you? Give your answer as Python code" )
print ( q )
Das Standardverzeichnis zum Speichern von Cookie-Dateien ist HOME/bing_cookies
aber Sie können es ändern mit:
Cookie . dir_path = Path ( r"..." )
Oder ändern Sie den Konversationsstil oder die zu verwendende Cookie-Datei:
q = Query (
"What are you? Give your answer as Python code" ,
style = "creative" , # or: 'balanced', 'precise'
cookie_file = "./bing_cookies_alternative.json"
)
# Use `help(Query)` to see other supported parameters.
Extrahieren Sie schnell die Textausgabe, Codeausschnitte, Quellen-/Referenzlisten oder vorgeschlagene Folgefragen aus einer Antwort mithilfe der folgenden Attribute:
q . output # Also: print(q)
q . sources
q . sources_dict
q . suggestions
q . code
q . code_blocks
q . code_block_formatsgiven )
Rufen Sie die ursprüngliche Eingabeaufforderung und den von Ihnen angegebenen Konversationsstil ab:
q . prompt
q . ignore_cookies
q . style
q . simplify_response
q . locale
repr ( q )
Zugriff auf frühere Abfragen seit dem Importieren Query
:
Query . index # A list of Query objects; updated dynamically
Query . image_dir_path
Und schließlich unterstützt die Cookie
-Klasse mehrere Cookie-Dateien. Wenn Sie also zusätzliche Cookie-Dateien mit der Namenskonvention bing_cookies_*.json
erstellen, versuchen Ihre Abfragen automatisch, die nächste Datei (alphabetisch) zu verwenden, wenn Sie Ihr tägliches Kontingent an Anfragen überschritten haben ( derzeit auf 200 eingestellt).
Hier sind die Hauptattribute, auf die Sie zugreifen können:
Cookie . current_file_index
Cookie . current_file_path
Cookie . current_data
Cookie . dir_path
Cookie . search_pattern
Cookie . files
Cookie . image_token
Cookie . import_next
Cookie . rotate_cookies
Cookie . ignore_files
Cookie . supplied_files
Cookie . request_count
Dies setzt voraus, dass Sie in Ihrem aktuellen Arbeitsverzeichnis eine Datei „cookies.json“ haben
docker run --rm -it -v $( pwd ) /cookies.json:/cookies.json:ro -e COOKIE_FILE= ' /cookies.json ' ghcr.io/acheong08/edgegpt
Sie können wie folgt zusätzliche Flags hinzufügen
docker run --rm -it -v $( pwd ) /cookies.json:/cookies.json:ro -e COOKIE_FILE= ' /cookies.json ' ghcr.io/acheong08/edgegpt --rich --style creative
$ python3 -m ImageGen.ImageGen -h
usage: ImageGen.py [-h] [-U U] [--cookie-file COOKIE_FILE] --prompt PROMPT [--output-dir OUTPUT_DIR] [--quiet] [--asyncio]
optional arguments:
-h, --help show this help message and exit
-U U Auth cookie from browser
--cookie-file COOKIE_FILE
File containing auth cookie
--prompt PROMPT Prompt to generate images for
--output-dir OUTPUT_DIR
Output directory
--quiet Disable pipeline messages
--asyncio Run ImageGen using asyncio
ImageQuery
HilfsklasseGenerieren Sie Bilder anhand einer einfachen Eingabeaufforderung und laden Sie sie in das aktuelle Arbeitsverzeichnis herunter:
from EdgeGPT . EdgeUtils import ImageQuery
q = ImageQuery ( "Meerkats at a garden party in Devon" )
Ändern Sie das Download-Verzeichnis für alle zukünftigen Bilder in dieser Sitzung:
Query.image_dirpath = Path("./to_another_folder")
ImageGen
-Klasse und asyncio
für eine detailliertere Steuerung from EdgeGPT . ImageGen import ImageGen
import argparse
import json
async def async_image_gen ( args ) -> None :
async with ImageGenAsync ( args . U , args . quiet ) as image_generator :
images = await image_generator . get_images ( args . prompt )
await image_generator . save_images ( images , output_dir = args . output_dir )
if __name__ == "__main__" :
parser = argparse . ArgumentParser ()
parser . add_argument ( "-U" , help = "Auth cookie from browser" , type = str )
parser . add_argument ( "--cookie-file" , help = "File containing auth cookie" , type = str )
parser . add_argument (
"--prompt" ,
help = "Prompt to generate images for" ,
type = str ,
required = True ,
)
parser . add_argument (
"--output-dir" ,
help = "Output directory" ,
type = str ,
default = "./output" ,
)
parser . add_argument (
"--quiet" , help = "Disable pipeline messages" , action = "store_true"
)
parser . add_argument (
"--asyncio" , help = "Run ImageGen using asyncio" , action = "store_true"
)
args = parser . parse_args ()
# Load auth cookie
with open ( args . cookie_file , encoding = "utf-8" ) as file :
cookie_json = json . load ( file )
for cookie in cookie_json :
if cookie . get ( "name" ) == "_U" :
args . U = cookie . get ( "value" )
break
if args . U is None :
raise Exception ( "Could not find auth cookie" )
if not args . asyncio :
# Create image generator
image_generator = ImageGen ( args . U , args . quiet )
image_generator . save_images (
image_generator . get_images ( args . prompt ),
output_dir = args . output_dir ,
)
else :
asyncio . run ( async_image_gen ( args ))
Dieses Projekt existiert dank aller Menschen, die dazu beitragen.