基于 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" # 可选
或者在代码中设置:
import chattool
chattool.api_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
chattool.api_base = "https://api.example.com/v1"
注:环境变量 OPENAI_API_BASE
优先于 OPENAI_API_BASE_URL
,二者选其一即可。
示例1,多轮对话:
# 初次对话
chat = Chat("Hello, GPT-3.5!")
resp = chat.getresponse()
# 继续对话
chat.user("How are you?")
next_resp = chat.getresponse()
# 人为添加返回内容
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
:
# 编写处理函数
def data2chat(msg):
chat = Chat()
chat.system("你是一个熟练的数字翻译家。")
chat.user(f"请将该数字翻译为罗马数字:{msg}")
# 注意,在函数内获取返回
chat.getresponse()
return chat
checkpoint = "chat.jsonl" # 缓存文件的名称
msgs = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
# 处理数据,如果 checkpoint 存在,则从上次中断处继续
continue_chats = process_chats(msgs, data2chat, checkpoint)
示例3,批量处理数据(异步并行),用不同语言打印 hello,并使用两个协程:
from chattool import async_chat_completion, load_chats, Chat
langs = ["python", "java", "Julia", "C++"]
def data2chat(msg):
chat = Chat()
chat.user("请用语言 %s 打印 hello world" % msg)
# 注意,这里不需要 getresponse 而交给异步处理
return chat
async_chat_completion(langs, chkpoint="async_chat.jsonl", nproc=2, data2chat=data2chat)
chats = load_chats("async_chat.jsonl")
在 Jupyter Notebook 中运行,因其特殊机制,需使用 await
关键字和 wait=True
参数:
await async_chat_completion(langs, chkpoint="async_chat.jsonl", nproc=2, data2chat=data2chat, wait=True)
定义函数:
def add(a: int, b: int) -> int:
"""
This function adds two numbers.
Parameters:
a (int): The first number.
b (int): The second number.
Returns:
int: The sum of the two numbers.
"""
return a + b
def mult(a:int, b:int) -> int:
"""This function multiplies two numbers.
It is a useful calculator!
Args:
a (int): The first number.
b (int): The second number.
Returns:
int: The product of the two numbers.
"""
return a * b
添加函数到 Chat
对象:
from chattool import Chat
chat = Chat("find the value of (23723 * 1322312 ) + 12312")
chat.settools([add, mult])
自动执行工具,根据返回信息判断是否结束,maxturns
默认为 3:
chat.autoresponse(display=True, tool_type='tool_choice', maxturns=3)
使用通用函数 python
from chattool.functioncall import python
chat = Chat("find the value of (23723 * 1322312 ) + 12312")
chat.settools([python])
chat.autoresponse(display=True, tool_type='tool_choice', maxturns=3)
注意,执行模型生成的任意代码有潜在风险。
使用 MIT 协议开源。
- 当前版本
3.2.1
,简化异步处理和串行处理的接口,更新子模块名称,避免冲突 - 版本
2.3.0
,支持调用外部工具,异步处理数据,以及模型微调功能 - 版本
2.0.0
开始,更名为chattool
- 版本
1.0.0
开始,支持异步处理数据 - 版本
0.6.0
开始,支持 function call 功能 - 版本
0.5.0
开始,支持使用process_chats
处理数据,借助msg2chat
函数以及checkpoint
文件 - 版本
0.4.0
开始,工具维护转至 CubeNLP 组织账号 - 版本
0.3.0
开始不依赖模块openai.py
,而是直接使用requests
发送请求- 支持对每个
Chat
使用不同 API 密钥 - 支持使用代理链接
- 支持对每个
- 版本
0.2.0
改用Chat
类型作为中心交互对象