基于 OpenAI API 的 Chat 对象,支持多轮对话以及异步处理数据等。
pip install chattool --upgrade
通过环境变量设置密钥和代理,比如在 ~/.bashrc 或者 ~/.zshrc 中追加
export OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export OPENAI_API_BASE="https://api.example.com/v1"
export OPENAI_API_BASE_URL="https://api.example.com" # 可选
注:环境变量 OPENAI_API_BASE 优先于 OPENAI_API_BASE_URL,二者选其一即可。
示例1,多轮对话:
# 初次对话
chat = Chat("Hello!")
resp = chat.get_response()
# 继续对话
chat.user("How are you?")
next_resp = chat.get_response()
# 人为添加返回内容
chat.user("What's your name?")
chat.assistant("My name is GPT-3.5.")
# 保存对话内容
chat.save("chat.json", mode="w") # 默认为 "a"
# 打印对话历史
chat.print_log()
示例2,批量处理数据(串行),并使用缓存文件 chat.jsonl:
# 串行处理(按需保存)
msgs = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
results = []
for m in msgs:
chat = Chat()
chat.system("你是一个熟练的数字翻译家。")
resp = chat.user(f"请将该数字翻译为罗马数字:{m}").get_response()
results.append(resp.content)
chat.save("chat.jsonl", mode="a")
示例3,异步并发与流式输出:
import asyncio
from chattool import Chat
async def run():
# 并发问答
base = Chat().system("你是一个有用的助手")
tasks = [base.copy().user(f"请解释:主题 {i}").async_get_response() for i in range(2)]
responses = await asyncio.gather(*tasks)
for r in responses:
print(r.content)
# 流式输出
print("流式: ", end="")
async for chunk in Chat().user("写一首关于春天的短诗").async_get_response_stream():
if chunk.delta_content:
print(chunk.delta_content, end="", flush=True)
print()
asyncio.run(run())
使用 MIT 协议开源。
4.1.0,统一 Chat API(同步/异步/流式),默认环境变量配置,改进重试与调试工具2.x-3.x 阶段逐步完善异步处理与批量用法