Package: async-poe-client
User Guide中文说明Latest Version: 0.3.6
This is a guide on how to use theasync-poe-Clientlibrary. Before getting started, make sure you have installed this
library.pip install async-poe-clientTable of ContentsUser GuideTable of ContentsQA:Step 1: Import the library and create a Poe_Client objectStep 2: Using Poe_Client1. Get subscription information for an account2. Create a bot3. Modify the settings of a bot4. Delete a bot5. Chat with a bot6.Stop chat answer generating7. Reset the conversation memory of a bot (without deleting chat history)8. Get available bots9. Batch delete available bots10. Get bot data or settings information11. Delete chat windows with a bot(1) Delete a specific chat window with a bot(2) Delete a specified number of chat windows with a bot12. Get bots created by others (from the "Explore" section on poe.com)13. Get bot chat list14. Get bot chat history (messages)QA:Question: What is url_botname? -> When using a specific bot in Poe, the bot's name in the
URL ("https://poe.com/ChatGPT" where 'ChatGPT' is the url_botname) is referred to as url_botname. The relationship
between url_botname and other names can be understood as follows:For built-in system bots, the bot's name you see on the Poe website will always be equal to url_botname (but not
equal to handle).For self-created bots, url_botname = handle. If a display_name is set, the name you see on the website will be
the display_name. Otherwise, it will be the url_botname (handle). However, there are some special cases where the
handle does not follow the above pattern, such as when using get_available_bots, where all bot handles are always
equal to url_botname.Question: What is chat_code? ->
A bot can have multiple chat windows, and chat_code is the unique identifier for each chat window. The method to
retrieve it is similar to url_botname. For example, in "https://poe.com/chat/1234567890", the chat_code is 1234567890.Question: How to obtain p_b and formkey? ->Obtaining p_b: Open poe.com, use F12 to open the debugging tools, and navigate to the Application tab. In the
cookies, there will be a value for p_b.Obtaining formkey: Open poe.com, use F12 to open the debugging tools, and navigate to the Network tab. After
having a conversation with a bot, you can see the gql_POST network request, where the request headers contain a
separate formkey key-value pair.Step 1: Import the library and create a Poe_Client objectNow the formkey must be filled in to use the library. Currently, no solution has been found for the "document is not
defined" error.If you do not pass the formkey, you need to install Node.js to use the formkey generation feature. Here is the
download link:node.jsBefore using any functionality of thePoe_Clientlibrary, you need to import the library and create aPoe_Clientobject. You need to pass thep_b tokenandformkeyto the constructor ofPoe_Client, and then call thecreatemethod to initialize it. Here is an example:fromasync_poe_clientimportPoe_Client# If the creation process takes a long time, you can try setting preload to Falsepoe_client=awaitPoe_Client("your p_b token","your form key").create()# You can also set a proxypoe_client=awaitPoe_Client("your p_b token","your form key",proxy="socks5://127.0.0.1:7890").create()In the above code,"your p_b token"and"your form key"should be replaced with your actual p_b token and formkey.Step 2: Using Poe_ClientOnce you have createdPoe_Client, you can perform various operations with it.1. Get subscription information for an accountYou can directly access the attribute value.print(poe_client.subscription)It returns a dictionary containing the subscription information.2. Create a botFunction:create_bot()Parameters:handle: str- The name of the new bot. It must be a string and must be unique throughout poe.com. It cannot have the
same name as another bot.prompt: str = ""- The preset personality of the new bot. It is an optional string parameter and defaults to an
empty string.display_name: Optional[str] =None`` - The display name of the new bot. It is an optional string parameter and
defaults toNone. If not passed, the handle will be displayed.base_model: str = "chinchilla"- The model used by the new bot. It is an optional string parameter. The options
are: "chinchilla" (ChatGPT) or "a2" (Claude). If subscribed, you can use "beaver" (ChatGPT4) or "a2_2" (
Claude-2-100k).description: str = ""- The description of the new bot. It is an optional string parameter and defaults to an empty
string.intro_message: str = ""- The introduction message of the new bot. It is an optional string parameter. If it is an
empty string, the bot will have no introduction message.prompt_public: bool = True- Whether the preset personality should be publicly visible. It is an optional boolean
parameter and defaults to True.profile_picture_url: Optional[str] =None`` - The URL of the profile picture for the bot. It is an optional string
parameter and defaults toNone. The library does not support uploading custom images.linkification: bool = False- Whether the bot should convert certain text in responses into clickable links. It is
an optional boolean parameter and defaults to False.markdown_rendering: bool = True- Whether the bot's responses should enable markdown rendering. It is an optional
boolean parameter and defaults to True.suggested_replies: bool = True- Whether the bot should suggest possible replies after each response. It is an
optional boolean parameter and defaults to False.private: bool = False- Whether the bot should be private. It is an optional boolean parameter and defaults to
False.temperature: Optional[float] =None`` - The temperature of the new bot. It is an optional float parameter and
defaults toNone.If you want the new bot to use your own API (you can find the official Poe API integration
tutorialhere), use the following parameters:api_bot = False- Whether the bot is your own API bot.api_key =None`` - The API key for the new bot.api_url =None`` - The API URL for the new bot.Return value:NoneThe simplest usage is as follows, where you only need to pass the handle and prompt to create a bot:awaitpoe_client.create_bot(handle="testbotcx1",prompt="a ai assistant",p)3. Modify the settings of a botFunction:edit_bot()Parameters:Note thaturl_botnameis the original name of the bot, and the other parameters are the values to be modified. If a
parameter is not passed, its value will remain unchanged.url_botname: str- Theurl_botnameof the bot to be modified, must be a string.handle: Optional[str]- The name of the bot, must be a string and must be unique across the entire poe.com. It
cannot be the same as any other bot.prompt: Optional[str] = ""- The preset personality of the bot, optional string, defaults to an empty string.display_name: Optional[str] =None`` - The display name of the bot, optional string, defaults toNone. If not
passed, the handle will be displayed.base_model: Optional[str] = "chinchilla"- The model used by the bot, optional string. Options include: "
chinchilla" (ChatGPT) or "a2" (Claude). If subscribed, you can use "beaver" (ChatGPT4) or "a2_2" (Claude-2-100k).description: Optional[str] = ""- The description of the bot, optional string, defaults to an empty string.intro_message: Optional[str] = ""- The introduction message of the bot, optional string. If it is an empty string,
the bot will have no introduction message.prompt_public: Optional[bool] = True- Whether the preset personality should be publicly visible, optional boolean,
defaults to True.profile_picture_url: Optional[str] =None`` - The URL of the profile picture of the bot, optional string, defaults
toNone. With this library, it is not possible to upload custom images.linkification: Optional[bool] = False- Whether the bot should convert certain text in the response into clickable
links, optional boolean, defaults to False.markdown_rendering: Optional[bool] = True- Whether the bot's response should enable markdown rendering, optional
boolean, defaults to True.suggested_replies: Optional[bool] = False- Whether the bot should suggest possible replies after each response,
optional boolean, defaults to False.private: Optional[bool] = False- Whether the bot should be private, optional boolean, defaults to False.temperature: Optional[float] =None`` - The temperature of the bot, optional float, defaults toNone.If you want the new bot to use your own API (you can get the official Poe API integration
tutorialhere), use the following parameters:api_bot = False- Whether the bot is your own API bot.api_key =None`` - The API key for the new bot.api_url =None`` - The API URL for the new bot.awaitpoe_client.edit_bot(url_botname="test27gs",handle="test27gs2",prompt="a computer programmer")4. Delete a botNote: This operation is irreversible!Function:delete_bot()Parameters:url_botname: str- The URL name of the bot.Returns:Noneawaitpoe_client.delete_bot(url_botname="test27gs2")5. Chat with a bot(1). Function that returns pure text format:Function: ask_stream()
Parameters:url_botname: str- The URL name of the bot.chat_code: Optional[str]- The unique identifier for a specific chat window of the bot.question: str- The content of the inquiry.suggest_able: Optional[bool]- Whether to display suggested replies (requires bot support for suggested replies to
be output).with_chatb_reak: Optional[bool]- Whether to clear the bot's memory after the conversation (i.e., maintain a single
dialogue).Return value: AsyncGenerator of str# The get_available_bots() function can be found in item 8 with usage instructions.# If chat_code is not provided, a new chat window will be automatically created, and its chat_code can be obtained from the poe_client's property.asyncformessageinpoe_client.ask_stream(url_botname='ChatGPT',question="introduce async and await"):print(message,end="")# The bot_code_dict attribute can be accessed to get a dictionary with url_botname as the key and List[chat_code] as the value. The order is from newest to oldest, and the first one is the chat_code that was just automatically created.chat_code=poe_client.bot_code_dict['ChatGPT'][0]# Continue the conversation using the chat_code obtained earlierasyncformessageinpoe_client.ask_stream(url_botname='ChatGPT',chat_code=chat_code,question="introduce async and await"):print(message,end="")# If suggested replies are used and you want a list of suggested replies, they can be extracted from the bots attribute, which records the last suggested reply of a bot in a specific chat.print(poe_client.bots['ChatGPT']['chats'][chat_code]['Suggestion'])(2). Function that returns corresponding information format:Function: ask_stream_raw()
Parameters:url_botname: str- The URL name of the bot.chat_code: Optional[str]- The unique identifier for a specific chat window of the bot.question: str- The content of the inquiry.suggest_able: Optional[bool]- Whether to display suggested replies (requires bot support for suggested replies to
be output).with_chatb_reak: Optional[bool]- Whether to clear the bot's memory after the conversation (i.e., maintain a single
dialogue).Return value: AsyncGenerator of Text, SuggestRely, ChatCodeUpdate, ChatTiTleUpdatefromasync_poe_clientimportText,SuggestRely,ChatTiTleUpdate,ChatCodeUpdatesuggest_replys=[]chat_title=Noneasyncfordatainpoe_client.ask_stream_raw(url_botname="ChatGPT",question="介绍一下微软",suggest_able=True):# You can use the content attribute to get the specific content of the corresponding type, or use str() directly.ifisinstance(data,Text):"""Text response"""print(str(data),end="")elifisinstance(data,SuggestRely):"""Suggested reply"""suggest_replys.append(str(data))iflen(suggest_replys)==1:print("\nSuggest Replys:\n")print(f"{len(suggest_replys)}:{data}")elifisinstance(data,ChatTiTleUpdate):"""Chat window title update"""chat_title=dataelifisinstance(data,ChatCodeUpdate):"""New chat_code"""print("\nNew ChatCode: "+str(data))ifchat_title:print(f"\nNew Chat Title:{chat_title}")6.Stop chat answer generatingFunction:stop_chat()
Parameters:chat_code:str- The unique identifier of the conversation to be stoped.Returns:Noneawaitpoe_client.stop_chat(chatcode)7. Reset the conversation memory of a bot (without deleting chat history)Function:send_chat_break()Parameters:url_botname: str- The URL name of the bot whose memory is to be cleared.chat_code: str- The unique identifier of the conversation to be cleared.Returns:Noneawaitpoe_client.send_chat_break(url_botname="Assistant",chat_code="chat_code")8. Get available botsNote that the order of retrieval is based on the order in the left sidebar of poe.com, from top to bottom.Function:get_available_bots()Parameters:count: Optional[str] = 25- The number of bots to retrieve.get_all: Optional[bool] = False- Whether to retrieve all available bots.Returns:List[dict]- A list containing dictionaries of bot information. Thehandleof both system bots and
user-created bots will always be the same as theurl_botname.# By default, when creating the client, the information of all bots is automatically loaded and stored in the `bots` attribute. The process of creating and deleting bots (excluding automatically added sent and received messages in chat windows) will also be reflected in the `bots` attribute of the client.poe_client=awaitPoe_Client("your p_b token","formkey").create()print(poe_client.bots)# You can also actively retrieve available botsbots=awaitpoe_client.get_available_bots(get_all=True)print(bots)9. Batch delete available botsNote that the deletion order is based on the order in the left sidebar of poe.com, and if a system bot is encountered,
it will be skipped. However, it is counted in the quantity.Note: This operation is irreversible!Function:delete_available_bots()Parameters:count: Optional[int] = 2- The number of bots to delete (Note that this does not include system bots, so the actual
number of deletions may be different).del_all: Optional[bool] = False- Whether to delete all available bots (Note that deleting all bots may take a long
time depending on the number of bots you have).Returns:Noneawaitpoe_client.delete_available_bots(count=2)awaitpoe_client.delete_available_bots(del_all=True)10. Get bot data or settings informationFunction:get_bot()Parameters:url_botname: str- The URL name of the bot.Returns:
A dictionary containing some chat messages and partial information of the bot.data=awaitpoe_client.get_botdata(url_botname="578feb1716fe43f")print(data)Function:get_bot_setting()Parameters:url_botname: str- The URL name of the bot.Returns:A dictionary containing all information of the bot, such as prompt and persona, which are the parameters used when
creating or editing the bot.info=awaitpoe_client.get_bot_info(url_botname="578feb1716fe43f")print(info)11. Delete chat windows with a botNote: This operation is irreversible!(1) Delete a specific chat window with a botFunction:delete_chat_by_chat_code()Parameters:chat_code: str- The chat code of the conversation window to delete.Returns:Noneawaitpoe_client.delete_chat_by_chat_code(chat_code="chat_code")(2) Delete a specified number of chat windows with a botFunction:delete_chat_by_count()url_botname: strcount: int- The number of chat windows to delete (from top to bottom).del_all: bool- Whether to delete all chat windows.Returns:None# Delete 20 chat windowsawaitpoe_client.delete_chat_by_count(url_botname="ChatGPT",count=20)# Delete all chat windowsawaitpoe_client.delete_chat_by_count(url_botname="ChatGPT",del_all=True)12. Get bots created by others (from the "Explore" section on poe.com)Note that the retrieval order is from top to bottom, based on the order on poe.com.Function:explore_bots()Parameters:count: Optional[str] = 25- The number of bots to retrieve.get_all: Optional[bool] = False- Whether to retrieve all available bots.Returns:List[dict]- A list containing dictionaries of bot information. Thehandleof both system bots and
user-created bots will always be the same as theurl_botname.bots=awaitpoe_client.explore_bots(count=100)print(bots)bots=awaitpoe_client.explore_bots(explore_all=True)print(bots)13. Get bot chat listFunction:get_chat_list()Parameters:url_botname: str- The URL name of the bot.count: int = 25- The count of messages to getget_all: bool = False- Whether to get all the chats
Returns:
A list of dictionary containing some or all chats of the bot.history=awaitpoe_client.get_chat_list("ChatGPT",get_all=True)print(history)14. Get bot chat history (messages)Function:get_chat_history()Parameters:url_botname: str- The URL name of the bot.chat_code: str- The chat to getcount: int = 25- The count of messages to getget_all: bool = False- Whether to get all the chat messages
Returns:
A list of dictionary containing some chat messages of the chat.history=awaitpoe_client.get_chat_history("ChatGPT","chat_code",get_all=True)print(history)