EdgeGPT # Edge GPT _Ingeniería inversa al nuevo chat integrado en Bing_ English - 简体中文 - 繁體中文 - Español - 日本語

PyPI version Python version Total downloads

# Configuración ## Instalación ```bash python3 -m pip install EdgeGPT --upgrade ``` ## Requisitos - python 3.8+ - Una cuenta de Microsoft con acceso a (Opcional, dependiendo de tu país) - Estar localizado en un país con acceso al nuevo Bing (VPN necesaria para usarios de China) - [Selenium](https://pypi.org/project/selenium/) (para la recolección automática de cookies) ## Autenticación !!! ES PROBABLE QUE YA NO SEA NECESARIO !!! **En algunas regiones**, Microsoft ha **abierto** la función de chat para todos, por lo que es posible que **puedas saltarte este paso**. Puedes comprobarlo con un navegador (con el user-agent modificado para parecer Edge), **intentando abrir un chat sin haber iniciado sesión**. Se ha encontrado que es posible que sea **dependiente de tu dirección IP**. Por ejemplo, si intentas acceder a la función de chat desde una dirección IP que se conoce que **pertenece al rango de un centro de datos** (vServers, servidores raíz, VPN, proxies conocidos, ...), **es posible que tengas que iniciar sesión** y sin embargo puedas acceder sin problemas a las funciones desde tu casa. Si recibes el siguiente error, puedes probar **usando cookies** y viendo si funciona: `Exception: Authentication failed. You have not been accepted into the beta.` ### Recolección de cookies 1. Necesitas un navegador que _parezca_ Microsoft Edge. * a) (Fácil) Instala la última versión de Microsoft Edge * b) (Avanzado) De forma alternativa, puedes usar cualquier navegador y cambiar el user-agent para que parezca que estás usando Edge (e.g., `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`). Puedes hacer esto con extensiones del estilo "User-Agent Switcher and Manager" para [Chrome](https://chrome.google.com/webstore/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg) o [Firefox](https://addons.mozilla.org/en-US/firefox/addon/user-agent-string-switcher/). 2. Abrir [bing.com/chat](https://bing.com/chat) 3. Si ves la nueva función de chat, es que puedes continuar... 4. Instala la extensión cookie editor para [Chrome](https://chrome.google.com/webstore/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm) o [Firefox](https://addons.mozilla.org/en-US/firefox/addon/cookie-editor/) 5. Ve a [bing.com](https://bing.com) 6. Abre la extensión 7. Pulsa en "Export" abajo a la derecha, luego "Export as JSON" (Esto guarda la cookie en el portapapeles) 8. Pega el contenido en un fichero `bing_cookies_*.json`. * NOTA: Los **ficheros de cookies DEBEN seguir el siguiente formato de nombre `bing_cookies_*.json`**, de manera que puedan ser reconocidos por los mecanismos internos de procesado de cookies. ### Uso de la cookie en la librería: ```python cookies = json.loads(open("./path/to/cookies.json", encoding="utf-8").read()) # might omit cookies option bot = await Chatbot.create(cookies=cookies) ```
# Cómo usar Chatbot ## Ejecución desde la línea de comandos ``` $ 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/US/UK/Norway disponen de mejor soporte para la localización) ## Ejecución en Python ### 1. La clase `Chatbot` y la librería `asyncio` para un control más exhaustivo Usa Async para una mejor experiencia, por ejemplo: ```python 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()) ``` ### 2) Las clases auxiliares `Query` y `Cookie` Realiza una petición a la IA de Bing Chat (usa el estilo 'precise' de conversación por defecto) y devuelve la respuesta final sin ver todo el resultado de la API: Recuerda almacenar las cookies en el formato: `bing_cookies_*.json`. ```python from EdgeGPT.EdgeUtils import Query, Cookie q = Query("What are you? Give your answer as Python code") print(q) ``` También puedes cambiar el estilo de conversación o el fichero de cookie a usar: ```python q = Query( "What are you? Give your answer as Python code", style="creative", # or: 'balanced', 'precise' cookie_file="./bing_cookies_alternative.json" ) ``` Obtén rápidamente la respuesta, fragmentos de código, lista de fuentes/referencias, o las preguntas sugeridas usando los siguientes atributos: ```python q.output q.code q.suggestions q.sources # for the full json output q.sources_dict # for a dictionary of titles and urls ``` Obtén la pregunta inicial o el estilo de conversación usado: ```python q.prompt q.style repr(q) ``` Accede a la lista de peticiones realizadas: ```python Query.index # A list of Query objects; updated dynamically Query.request_count # A tally of requests made using each cookie file ``` Finalmente, la clase `Cookie` admite múltiples ficheros de cookie, de manera que si has creado ficheros adicionales de cookies usando el formato de nombrado `bing_cookies_*.json`, las peticiones intentarán usar automáticamente el siguiente fichero (alfabéticamente) si has sobrepasado el límite diario de peticiones (actualmente limitado a 200). Principales atributos que tienes a disposición: ```python Cookie.current_file_index Cookie.dirpath Cookie.search_pattern # default is `bing_cookies_*.json` Cookie.files() # list as files that match .search_pattern Cookie.current_filepath Cookie.current_data Cookie.import_next() Cookie.image_token Cookie.ignore_files ``` --- ## Ejecución en Docker Este ejemplo asume que dispones de un fichero `cookies.json` en tu directorio actual ```bash docker run --rm -it -v $(pwd)/cookies.json:/cookies.json:ro -e COOKIE_FILE='/cookies.json' ghcr.io/acheong08/edgegpt ``` Puedes añadir argumentos adicionales de la siguiente manera ```bash docker run --rm -it -v $(pwd)/cookies.json:/cookies.json:ro -e COOKIE_FILE='/cookies.json' ghcr.io/acheong08/edgegpt --rich --style creative ```
# Cómo usar Image generator ## Ejecución desde la línea de comandos ```bash $ 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 ``` ## Ejecución en Python ### 1) La clase auxiliar `ImageQuery` Genera imágenes de acuerdo a la petición y las descarga en el directorio actual ```python from EdgeGPT.EdgeUtils import ImageQuery q=ImageQuery("Meerkats at a garden party in Devon") ``` Cambia el directorio de descarga para las demás imágenes que se descarguen durante el resto de sesión ``` Query.image_dirpath = Path("./to_another_folder") ``` ### 2) Usa las clases `ImageGen` y `asyncio` para un control más minucioso ```python 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)) ```
# Historial de estrellas [![Gráfica historial de estrellas](https://api.star-history.com/svg?repos=acheong08/EdgeGPT&type=Date)](https://star-history.com/#acheong08/EdgeGPT&Date)
# Contribuidores Este proyecto existe gracias a todas las personas que apoyan y contribuyen.