用 Poe-API-wrapper 连接 DALLE、ChatGPT,批量完成AI绘图或文字创作
我是Poe的忠实用户,之前写过已是ChatGPT会员,为何还充值Poe,我的深度使用分享来介绍Poe,虽然事实上,我每个月的Poe使用额度都有剩余。
Poe提供了API接口,可以整合到我们自己的程序中。这让我思考如何有效利用API接口。我也阅读了官方的API文档,并最终在GitHub上发现了一个非常实用的工具——poe-api-wrapper。
这个工具共享的是你在Poe的使用额度,不会额外收费。
https://developer.poe.com/
https://github.com/snowby666/poe-api-wrapper
它是Poe.com 的一个 Python API 接口库,采用 Httpx 技术。使用它,你可以通过 API 接口免费连接到 ChatGPT、DALLE、Claude、Mistral、Gemini 等多种服务。
建议按以下操作,先运行示例了解下这个库的功能。
两种方式可以获得token,我用的是后者。
运行示例后的效果
连续生成图片
在Poe和GPT平台中,DALLE的图像生成速率都存在一定的限制。目前,这两个平台默认都只生成一张图片。参考了poe-api-wrapper仓库,我编写了一个Python代码,能够连续生成多张图片。
from poe_api_wrapper import PoeApi
import requests
import os
# 初始化 PoeApi 客户端
token = "yourtoken"
client = PoeApi(token)
# 从文件中读取提示列表
with open("draw-input.txt", "r") as file:
prompts = file.readlines()
# 去掉每行末尾的换行符,并过滤掉空行
prompts = [prompt.strip() for prompt in prompts if prompt.strip()]
# 定义保存图片的文件夹路径
save_folder = "/Users/yourpath"
# 确保保存图片的文件夹存在
if not os.path.exists(save_folder):
os.makedirs(save_folder)
# 初始化chatCode
chatCode = None
# 循环遍历提示列表,并发送给 DALL-E 3
for prompt in prompts:
print(f"正在请求: {prompt}")
for _ in range(4): # 重复生成4次图片
for chunk in client.send_message("DALL-E-3", prompt, chatCode=chatCode, timeout=60):
# 如果是新的对话,保存chatCode
if not chatCode and 'chatCode' in chunk:
chatCode = chunk['chatCode']
print(f"新对话创建 | chatCode: {chatCode}")
# 检查chunk中是否包含图片URL
if 'response' in chunk and chunk['response'].startswith('!['):
image_url = chunk['response'].split('(')[1].split(')')[0]
print(f"生成的图片 URL: {image_url}")
# 获取图片的内容
response = requests.get(image_url)
if response.status_code == 200:
# 从URL中提取图片文件名
filename = os.path.basename(image_url.split('?')[0])
# 定义图片保存路径
file_path = os.path.join(save_folder, filename)
# 保存图片
with open(file_path, 'wb') as file:
file.write(response.content)
print(f"图片已保存到: {file_path}")
else:
print(f"下载图片失败: {response.status_code}")
没多久,我就用DALLE3生成了200多张的图片。
生成的部分图片
注:上图的提示词参考了歸藏和Umesh(推特博主)。
连续生成对话
Poe里的机器人特别多,除了官方的,我们还可以用第三方建立的,只要设置好机器人的名字就行。
红色方框内就是机器人bot的名字
连续对话代码
from poe_api_wrapper import PoeApi
import datetime
# 初始化 PoeApi 客户端
token = "yourtoken"
client = PoeApi(token)
bot = "Claude-2-100k"
# 从文件中读取消息列表
with open("chat-input.txt", "r") as file:
messages = [line.strip() for line in file if line.strip()] # 过滤掉空行
# 初始化 chatCode
chat_code = None
# 创建文件用于保存结果
now = datetime.datetime.now()
timestamp = now.strftime("%Y%m%d%H%M%S")
result_file = open(f"/Users/yourpath/result_{timestamp}.md", "w")
# 循环发送消息
for message in messages:
if chat_code:
response_gen = client.send_message(bot, message, chatCode=chat_code)
else:
response_gen = client.send_message(bot, message)
for chunk in response_gen:
if 'chatCode' in chunk and not chat_code:
chat_code = chunk['chatCode']
# 写入去除了前导空格的回应
result_file.write(chunk["response"].lstrip()) # 使用 lstrip() 移除左侧空格
result_file.flush()
# 在每个结果后增加一个额外的空行
result_file.write("\n\n")
# 关闭结果文件
result_file.close()
应用场景:写教程
使用GPT生成的大纲作为chat-input的输入内容,执行程序后,就可以创建一个大约30kb的文件。
我的理解是,我们在学习时往往只关注关键点。我们通常会带着具体问题去深入一个主题。如果我们将一系列相关问题直接提给大型语言模型,得到的答案可能会比较泛泛。因此,针对性地逐个提问更为合适。这样做的好处是,每当模型回答了一个问题,它就在思考的过程中积累了经验,从而能够在之后的回答中表现得更加精准和深入。
应用场景-写小说
我向GPT请求了一份小说大纲和20个小说标题。将这些标题输入到chat-input.txt文件后,我运行了程序。结果是,ChatGPT-16k机器人为我创作了超过30,000字的小说。我选择ChatGPT-16k的原因是其处理速度较快,而GPT-4的速度相对较慢。另外,Poe平台提供的ChatGPT-16k使用额度也比较充足。
生成的小说质量一般,需要优化提示词。
应用场景-批量写作
应用场景-批量检索
众所周知,Perplexity.ai使用起来非常方便,但它一次只能生成一个答案。现在,利用我编写的代码,只需将bot设置为"Web-Search",并把我想查询的问题批量输入到chat-txt文件中,运行程序后,它能在几分钟内完成所有搜索(Web-Search默认使用的是gpt-3.5-turbo,处理速度极快)。这种批量检索方式非常适合写作,因为我可以一次性提出所有问题,程序会整合搜索结果,并提供相关索引,极大地提高了写作效率。
在Poe平台上,使用第三方机器人非常简便。例如,我可以先利用特定的机器人来批量产生AI绘图的提示词。然后,把这些提示词输入到draw-input文件中,接着就可以批量生成相应的图片了。
poe-api-wrapper推出的机器人群聊也很有意思。
我尝试了一下,设置了几个机器人模型,其中一个我特意配置成了“Web-Search”机器人,这样在对话中就能包含搜索结果。
我有个有趣的尝试:同时与三个不同的模型进行圆桌会议。这听起来挺有趣的,对吧?这样的对话结果既会在终端上显示,同时也会在Poe的网页界面上呈现。
总结:
了解更多内容,请看这里:
LM Studio-简化安装和使用开源大模型 | OpenAI API 文字转语音本地运行程序分享
实测在Mac上使用Ollama与AI对话的过程 - 模型选择、安装、集成使用记,从Mixtral8x7b到Yi-34B-Chat