Skip to content

Latest commit

 

History

History
326 lines (234 loc) · 8.93 KB

README_zh-tw.md

File metadata and controls

326 lines (234 loc) · 8.93 KB
EdgeGPT

Edge GPT

新必應的逆向工程

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

PyPI version Python version Total downloads

設置

安裝模組

python3 -m pip install EdgeGPT --upgrade

要求

  • python 3.8+
  • 一個可以訪問必應聊天的微軟帳戶 https://bing.com/chat (可選)
  • 需要在 New Bing 支持的國家或地區(中國大陸需使用VPN)
  • Selenium (對於需要自動配置cookie的情況)

聊天機器人

認證

不用,不需要了。微軟已向所有人提供聊天功能,因此这一步可以跳過了。

  1. 安裝最新版本的 Microsoft Edge
  1. 或者, 您可以使用任何瀏覽器並將用戶代理設置為Edge的用戶代理 (例如 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). 您可以使用像 "User-Agent Switcher and Manager" ChromeFirefox 這樣的擴展輕鬆完成此操作.
  1. 打開 bing.com/chat
  2. 如果您看到聊天功能,就接著下面的步驟...
  3. 安裝 ChromeFirefox 的 cookie editor 擴展
  4. 轉到 bing.com
  5. 打開擴展程式
  6. 單擊右下角的「匯出」,然後按「匯出為 JSON」(這會將您的 cookie 保存到剪貼簿)
  7. 將您剪貼簿上的 cookie 粘貼到檔 cookies.json

在代碼中:

cookies = json.loads(open("./path/to/cookies.json", encoding="utf-8").read())
bot = await Chatbot.create(cookies=cookies)

從命令行運行

 $ python3 -m 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
        Enter twice to send message or set --enter-once to send one line message

usage: EdgeGPT.py [-h] [--enter-once] [--no-stream] [--rich] [--proxy PROXY] [--style {creative,balanced,precise}]

options:
  -h, --help            show this help message and exit
  --enter-once
  --no-stream
  --rich
  --proxy PROXY         Proxy URL (e.g. socks5://127.0.0.1:1080)
  --style {creative,balanced,precise}

在 Python 運行

1. 使用 Chatbot 類和 asyncio 類以進行更精細的控制

使用 async 獲得最佳體驗,例如:

import asyncio
from EdgeGPT import Chatbot, ConversationStyle

async def main():
    bot = await Chatbot.create()
    print(await bot.ask(prompt="Hello world", conversation_style=ConversationStyle.creative))
    await bot.close()

if __name__ == "__main__":
    asyncio.run(main())

2) QueryCookie 助手類

創建一個簡單的必應聊天 AI 查詢(預設情況下使用“精確”對話樣式),這樣可以僅查看主要文本輸出,而不是整個 API 回應:

from EdgeGPT import Query, Cookie

q = Query("你是誰?用python代码給出回答")
print(q)

或者更改要使用的對話風格或 Cookie 檔:

q = Query(
  "你是誰?用python代码給出回答",
  style="creative",  # 或者平衡模式 'balanced'
  cookies="./bing_cookies_alternative.json"
)

使用以下屬性快速提取文字輸出、代碼片段、來源/參考清單或建議的後續問題:

q.output
q.code
q.suggestions
q.sources       # 用於完整的 JSON 輸出
q.sources_dict  # 用於標題和 URL 的字典

抓取原始 prompt 與您指定的對話風格:

q.prompt
q.style
repr(q)

通過 import Query 獲取進行的先前查詢:

Query.index  # 一个查詢物件的串列;是動態更新的
Query.request_count  # 使用每個 cookie 檔發出的請求的計數

最後,Cookie 類支援多個 cookie 檔,因此,如果您使用命名約定 bing_cookies_*.json 創建其他 cookie 檔,則如果您的請求數已超出每日配額(當前設置為 200),您的查詢將自動嘗試使用下一個檔(按字母順序)。

以下是您可以獲得的主要屬性:

Cookie.current_file_index
Cookie.dirpath
Cookie.search_pattern  # 默認情況下 `bing_cookies_*.json`
Cookie.files()  # 匹配 .search_pattern 的檔案串列
Cookie.current_filepath
Cookie.current_data
Cookie.import_next()
Cookie.image_token
Cookie.ignore_files

使用 Docker 運行

假設在當前工作目錄中有一個檔 cookie.json

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

可以像這樣添加任意參數

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 -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

在 Python 運行

1) ImageQuery 助手類

根據一個簡單的提示產生圖像並下載到目前工作目錄:

from EdgeGPT import ImageQuery

q=ImageQuery("Meerkats at a garden party in Devon")

在此工作階段中修改所有後續圖像的下載目錄:

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

2) 使用 ImageGen 類和 asyncio 類以進行更精細的控制

from 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="來自瀏覽器的身份驗證 cookie", type=str)
    parser.add_argument("--cookie-file", help="包含身份驗證 cookie 的檔", type=str)
    parser.add_argument(
        "--prompt",
        help="用于產生圖像的 prompt",
        type=str,
        required=True,
    )
    parser.add_argument(
        "--output-dir",
        help="輸出目錄",
        type=str,
        default="./output",
    )
    parser.add_argument(
        "--quiet", help="禁用管道消息", action="store_true"
    )
    parser.add_argument(
        "--asyncio", help="使用 asyncio 運行 ImageGen", 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("找不到身份驗證 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))

Star 歷史

Star History Chart

貢獻者

這個專案的存在要歸功於所有做出貢獻的人。