Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
This repository was archived by the owner on Aug 3, 2023. It is now read-only.
/EdgeGPTPublic archive

Reverse engineered API of Microsoft's Bing Chat AI

License

NotificationsYou must be signed in to change notification settings

acheong08/EdgeGPT

Repository files navigation

EdgeGPT

Edge GPT

The reverse engineering the chat feature of the new version of Bing

English -简体中文 -繁體中文 -Español -日本語

PyPI versionPython versionTotal downloads

Setup

Install package

python3 -m pip install EdgeGPT --upgrade

Requirements

  • python 3.8+
  • A Microsoft Account with access tohttps://bing.com/chat (Optional, depending on your region)
  • Required in a supported country or region with New Bing (Chinese mainland VPN required)
  • Selenium (for automatic cookie setup)

Authentication

!!! POSSIBLY NOT REQUIRED ANYMORE !!!

In some regions, Microsoft has made the chat featureavailable to everyone, so you might be able toskip this step. You can check this with a browser (with user-agent set to reflect Edge), bytrying to start a chat without logging in.

It was also found that it mightdepend on your IP address. For example, if you try to access the chat features from an IP that is known tobelong to a datacenter range (vServers, root servers, VPN, common proxies, ...),you might be required to log in while being able to access the features just fine from your home IP address.

If you receive the following error, you can tryproviding a cookie and see if it works then:

Exception: Authentication failed. You have not been accepted into the beta.

Collect cookies

  1. Get a browser that looks like Microsoft Edge.
  • a) (Easy) Install the latest version of Microsoft Edge
  • b) (Advanced) Alternatively, you can use any browser and set the user-agent to look like you're using 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). You can do this easily with an extension like "User-Agent Switcher and Manager" forChrome andFirefox.
  1. Openbing.com/chat
  2. If you see a chat feature, you are good to continue...
  3. Install the cookie editor extension forChrome orFirefox
  4. Go tobing.com
  5. Open the extension
  6. Click "Export" on the bottom right, then "Export as JSON" (This saves your cookies to clipboard)
  7. Paste your cookies into a filebing_cookies_*.json.
    • NOTE: Thecookies file name MUST follow the regex patternbing_cookies_*.json, so that they could be recognized by internal cookie processing mechanisms

Use cookies in code:

cookies=json.loads(open("./path/to/cookies.json",encoding="utf-8").read())# might omit cookies optionbot=awaitChatbot.create(cookies=cookies)

How to use Chatbot

Run from Command Line

 $ 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 exitusage: 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 has enhanced support for locale)

Run in Python

1. TheChatbot class andasyncio for more granular control

Use Async for the best experience, for example:

importasyncio,jsonfromEdgeGPT.EdgeGPTimportChatbot,ConversationStyleasyncdefmain():bot=awaitChatbot.create()# Passing cookies is "optional", as explained aboveresponse=awaitbot.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}    """awaitbot.close()if__name__=="__main__":asyncio.run(main())

2) TheQuery andCookie helper classes

Create a simple Bing Chat AI query (using the 'precise' conversation style by default) and see just the main text output rather than the whole API response:

Remeber to store your cookies in a specific format:bing_cookies_*.json.

fromEdgeGPT.EdgeUtilsimportQuery,Cookieq=Query("What are you? Give your answer as Python code")print(q)

The default directory for storing Cookie files isHOME/bing_cookies but you can change it with:

Cookie.dir_path=Path(r"...")

Or change the conversation style or cookie file to be used:

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.

Quickly extract the text output, code snippets, list of sources/references, or suggested follow-on questions from a response using the following attributes:

q.output# Also: print(q)q.sourcesq.sources_dictq.suggestionsq.codeq.code_blocksq.code_block_formatsgiven)

Get the orginal prompt and the conversation style you specified:

q.promptq.ignore_cookiesq.styleq.simplify_responseq.localerepr(q)

Access previous Queries made since importingQuery:

Query.index# A list of Query objects; updated dynamicallyQuery.image_dir_path

And finally, theCookie class supports multiple cookie files, so if you create additional cookie files with the naming conventionbing_cookies_*.json, your queries will automatically try using the next file (alphabetically) if you've exceeded your daily quota of requests (currently set at 200).

Here are the main attributes which you can access:

Cookie.current_file_indexCookie.current_file_pathCookie.current_dataCookie.dir_pathCookie.search_patternCookie.filesCookie.image_tokenCookie.import_nextCookie.rotate_cookiesCookie.ignore_filesCookie.supplied_filesCookie.request_count

Run with Docker

This assumes you have a file cookies.json in your current working directory

docker run --rm -it -v$(pwd)/cookies.json:/cookies.json:ro -e COOKIE_FILE='/cookies.json' ghcr.io/acheong08/edgegpt

You can add any extra flags as following

docker run --rm -it -v$(pwd)/cookies.json:/cookies.json:ro -e COOKIE_FILE='/cookies.json' ghcr.io/acheong08/edgegpt --rich --style creative

How to use Image generator

Run from Command Line

$ python3 -m ImageGen.ImageGen -husage: ImageGen.py [-h] [-U U] [--cookie-file COOKIE_FILE] --prompt PROMPT [--output-dir OUTPUT_DIR] [--quiet] [--asyncio]optional arguments:  -h, --help            show thishelp message andexit  -U U                  Auth cookie from browser  --cookie-file COOKIE_FILE                        File containing auth cookie  --prompt PROMPT       Prompt to generate imagesfor  --output-dir OUTPUT_DIR                        Output directory  --quiet               Disable pipeline messages  --asyncio             Run ImageGen using asyncio

Run in Python

1) TheImageQuery helper class

Generate images based on a simple prompt and download to the current working directory:

fromEdgeGPT.EdgeUtilsimportImageQueryq=ImageQuery("Meerkats at a garden party in Devon")

Change the download directory for all future images in this session:

Query.image_dirpath = Path("./to_another_folder")

2) TheImageGen class andasyncio for more granular control

fromEdgeGPT.ImageGenimportImageGenimportargparseimportjsonasyncdefasync_image_gen(args)->None:asyncwithImageGenAsync(args.U,args.quiet)asimage_generator:images=awaitimage_generator.get_images(args.prompt)awaitimage_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 cookiewithopen(args.cookie_file,encoding="utf-8")asfile:cookie_json=json.load(file)forcookieincookie_json:ifcookie.get("name")=="_U":args.U=cookie.get("value")breakifargs.UisNone:raiseException("Could not find auth cookie")ifnotargs.asyncio:# Create image generatorimage_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))

Star History

Star History Chart

Contributors

This project exists thanks to all the people who contribute.


[8]ページ先頭

©2009-2025 Movatter.jp