python3 -m pip install EdgeGPT --upgrade
- python 3.8+
- 一個可以訪問必應聊天的微軟帳戶 https://bing.com/chat (可選)
- 需要在 New Bing 支持的國家或地區(中國大陸需使用VPN)
- Selenium (對於需要自動配置cookie的情況)
不用,不需要了。微軟已向所有人提供聊天功能,因此这一步可以跳過了。
- 安裝最新版本的 Microsoft Edge
- 打開 bing.com/chat
- 如果您看到聊天功能,就接著下面的步驟...
- 安裝 Chrome 或 Firefox 的 cookie editor 擴展
- 轉到 bing.com
- 打開擴展程式
- 單擊右下角的「匯出」,然後按「匯出為 JSON」(這會將您的 cookie 保存到剪貼簿)
- 將您剪貼簿上的 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}
使用 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())
創建一個簡單的必應聊天 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
假設在當前工作目錄中有一個檔 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
根據一個簡單的提示產生圖像並下載到目前工作目錄:
from EdgeGPT import ImageQuery
q=ImageQuery("Meerkats at a garden party in Devon")
在此工作階段中修改所有後續圖像的下載目錄:
Query.image_dirpath = Path("./to_another_folder")
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))
這個專案的存在要歸功於所有做出貢獻的人。