이 프로젝트는 보관되었습니다. 개인적인 사정으로 인해 이 저장소를 관리할 시간이 부족합니다.
Bing 새 버전의 채팅 기능 리버스 엔지니어링
영어 - 简体中文 - 繁體中文 - Español - 日本語
python3 -m pip install EdgeGPT --upgrade
!!! 더 이상 필요하지 않을 수도 있습니다 !!!
일부 지역에서는 Microsoft가 모든 사람이 채팅 기능을 사용할 수 있도록 하였으므로 이 단계를 건너뛰어도 됩니다. 로그인하지 않고 채팅을 시작하여 브라우저(Edge를 반영하도록 설정된 사용자 에이전트 사용)를 사용하여 이를 확인할 수 있습니다.
또한 귀하의 IP 주소에 따라 달라질 수 있는 것으로 나타났습니다. 예를 들어, 데이터 센터 범위(vServer, 루트 서버, VPN, 일반 프록시 등)에 속하는 것으로 알려진 IP에서 채팅 기능에 액세스하려고 하면 다음을 수행할 수 있는 동안 로그인해야 할 수 있습니다 . 집 IP 주소에서 기능에 제대로 액세스할 수 있습니다.
다음 오류가 발생하면 쿠키를 제공 하여 작동하는지 확인할 수 있습니다.
Exception: Authentication failed. You have not been accepted into the beta.
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
). Chrome 및 Firefox용 "User-Agent Switcher and Manager"와 같은 확장 기능을 사용하면 이 작업을 쉽게 수행할 수 있습니다.bing_cookies_*.json
파일에 붙여넣습니다.bing_cookies_*.json
따라야 합니다. cookies = json . loads ( open ( "./path/to/cookies.json" , encoding = "utf-8" ). read ()) # might omit cookies option
bot = await Chatbot . create ( cookies = cookies )
$ 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)
(중국/미국/영국/노르웨이에서는 로케일 지원이 강화되었습니다.)
Chatbot
클래스 및 asyncio
최상의 경험을 위해 Async를 사용하세요. 예를 들면 다음과 같습니다.
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 ())
Query
및 Cookie
도우미 클래스간단한 Bing Chat AI 쿼리(기본적으로 '정확한' 대화 스타일 사용)를 만들고 전체 API 응답이 아닌 기본 텍스트 출력만 확인하세요.
쿠키를 특정 형식( bing_cookies_*.json
으로 저장해야 합니다.
from EdgeGPT . EdgeUtils import Query , Cookie
q = Query ( "What are you? Give your answer as Python code" )
print ( q )
쿠키 파일을 저장하는 기본 디렉터리는 HOME/bing_cookies
이지만 다음을 사용하여 변경할 수 있습니다.
Cookie . dir_path = Path ( r"..." )
또는 사용할 대화 스타일이나 쿠키 파일을 변경하세요.
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.
다음 속성을 사용하여 응답에서 텍스트 출력, 코드 조각, 소스/참조 목록 또는 제안된 후속 질문을 빠르게 추출합니다.
q . output # Also: print(q)
q . sources
q . sources_dict
q . suggestions
q . code
q . code_blocks
q . code_block_formatsgiven )
지정한 원래 프롬프트와 대화 스타일을 가져옵니다.
q . prompt
q . ignore_cookies
q . style
q . simplify_response
q . locale
repr ( q )
Query
가져온 이후 만들어진 이전 쿼리에 액세스합니다.
Query . index # A list of Query objects; updated dynamically
Query . image_dir_path
마지막으로 Cookie
클래스는 여러 쿠키 파일을 지원하므로 bing_cookies_*.json
명명 규칙을 사용하여 추가 쿠키 파일을 생성하는 경우 일일 요청 할당량을 초과한 경우 쿼리는 자동으로 다음 파일(알파벳순)을 사용하려고 시도합니다( 현재는 200으로 설정되어 있습니다).
액세스할 수 있는 주요 속성은 다음과 같습니다.
Cookie . current_file_index
Cookie . current_file_path
Cookie . current_data
Cookie . dir_path
Cookie . search_pattern
Cookie . files
Cookie . image_token
Cookie . import_next
Cookie . rotate_cookies
Cookie . ignore_files
Cookie . supplied_files
Cookie . request_count
이는 현재 작업 디렉터리에 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.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
ImageQuery
도우미 클래스간단한 프롬프트를 기반으로 이미지를 생성하고 현재 작업 디렉터리에 다운로드합니다.
from EdgeGPT . EdgeUtils import ImageQuery
q = ImageQuery ( "Meerkats at a garden party in Devon" )
이 세션에서 향후 모든 이미지에 대한 다운로드 디렉터리를 변경합니다.
Query.image_dirpath = Path("./to_another_folder")
ImageGen
클래스 및 asyncio
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 ))
이 프로젝트는 기여하는 모든 사람들 덕분에 존재합니다.