Skip to content
This repository has been archived by the owner on Aug 3, 2023. It is now read-only.

Latest commit

 

History

History
392 lines (285 loc) · 11.6 KB

README_es.md

File metadata and controls

392 lines (285 loc) · 11.6 KB
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

python3 -m pip install EdgeGPT --upgrade

Requisitos

  • python 3.8+
  • Una cuenta de Microsoft con acceso a https://bing.com/chat (Opcional, dependiendo de tu país)
  • Estar localizado en un país con acceso al nuevo Bing (VPN necesaria para usarios de China)
  • 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 o Firefox.
  1. Abrir bing.com/chat
  2. Si ves la nueva función de chat, es que puedes continuar...
  3. Instala la extensión cookie editor para Chrome o Firefox
  4. Ve a bing.com
  5. Abre la extensión
  6. Pulsa en "Export" abajo a la derecha, luego "Export as JSON" (Esto guarda la cookie en el portapapeles)
  7. 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:

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:

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.

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:

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:

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:

q.prompt
q.style
repr(q)

Accede a la lista de peticiones realizadas:

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:

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

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

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

$ 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

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

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

Contribuidores

Este proyecto existe gracias a todas las personas que apoyan y contribuyen.