ChatLab
聊天实验,简化版
💬🔬
ChatLab 是一个 Python 包,使您能够轻松尝试 OpenAI 的聊天模型。它提供了一个简单的接口,用于与模型聊天,并提供了一种从聊天模型中调用函数的方式。
最棒的是,它在笔记本中是互动的!
入门笔记本
简介
import chatlab
import random
def flip_a_coin():
'''返回正面或反面'''
return random.choice(['heads', 'tails'])
chat = chatlab.Chat()
chat.register(flip_a_coin)
await chat("请帮我投一次硬币")
𝑓 运行 `flip_a_coin`
输入:
{}
输出:
"tails"
它是反面!
在笔记本中,文本将以 Markdown 输出,并且函数输入和输出将以一种可折叠的方式显示,就像 ChatGPT 插件一样。
TODO: 在操作中包括 GIF/mp4
安装
pip install chatlab
配置
您需要设置 OPENAI_API_KEY
环境变量。您可以在您的 OpenAI 账户页面找到您的 API 密钥。我建议在本地工作时,将其设置在 .env
文件中。
在托管的笔记本环境中,将其设置在您的秘密中,以确保其免受窥探 LLM 的侵害。
Chat
能让 你 做什么?
💬
Chat
的精彩之处在于 聊天函数。您可以
- 定义一个函数
- 在您的
Chat
中注册该函数 - 观看聊天模型调用您的函数!
您可能从 ChatGPT 插件中回忆起这种行为。现在,您可以使用自己的自定义代码将其进一步扩展。
例如,让大型语言模型具有报时功能。
from datetime import datetime
from pytz import timezone, all_timezones, utc
from typing import Optional
from pydantic import BaseModel
def what_time(tz: Optional[str] = None):
'''当前时间,默认为 UTC'''
if tz is None:
pass
elif tz in all_timezones:
tz = timezone(tz)
else:
return '无效的时区'
return datetime.now(tz).strftime('%I:%M %p')
class WhatTime(BaseModel):
tz: Optional[str] = None
让我们分解一下。
what_time
是我们要提供访问的函数。它的文档字符串形成了模型的 description
,而架构来自名为 WhatTime
的 pydantic BaseModel
。
import chatlab
chat = chatlab.Chat()
# 注册我们的函数
chat.register(what_time, WhatTime)
之后,我们可以使用直接字符串(这些字符串将被转换为用户消息)或使用 chatlab
中名为 user
和 system
的简单消息生成器来调用 chat
。
await chat("现在几点了?")
𝑓 运行 `what_time`
输入:
{}
输出:
"11:19 AM"
当前时间是 11:19 AM。
接口
chatlab
包导出
Chat
Chat
类是使用 OpenAI 模型聊天的主要方式。它在 Chat.messages
中保留了您的聊天历史记录。
Chat.submit
submit
是将所有当前累积的消息发送给 OpenAI 的方法。Markdown 输出将显示来自 assistant
的响应。
await chat.submit('一个有三个孩子的家长说“我必须打区域防守”是什么意思?')
# Markdown 内联响应
chat.messages
[{'role': 'user',
'content': '一个有三个孩子的家长说“我必须打区域防守”是什么意思?'},
{'role': 'assistant',
'content': '当一个有三个孩子的家长说“我必须打区域防守”时,这意味着他们...
Chat.register
您可以使用 Chat.register
注册函数,以便将它们提供给聊天模型。函数的文档字符串成为该函数的描述,而架构则来自传入的 pydantic.BaseModel
。
from pydantic import BaseModel
class WhatTime(BaseModel):
tz: Optional[str] = None
def what_time(tz: Optional[str] = None):
'''当前时间,默认为 UTC'''
if tz is None:
pass
elif tz在所有时区:
tz = timezone(tz)
else:
return '无效的时区'
return datetime.now(tz).strftime('%I:%M %p')
chat.register(what_time, WhatTime)
Chat.messages
发送和接收到 OpenAI 的原始消息。如果您达到令牌限制,可以从列表中删除旧消息,以腾出更多空间。
chat.messages = chat.messages[-100:]
消息传递
human
/user
这些函数创建用户发送给聊天模型的消息。
from chatlab import human
human("你好吗?")
{ "role": "user", "content": "你好吗?" }
narrate
/system
system
消息,在 chatlab
中也称为 narrate
,允许您将模型引导到一个方向。您可以使用这些消息提供上下文,而不会被用户看到。一个常见的用途是将其作为对话的初始上下文。
from chatlab import narrate
narrate("你是一只大鸟")
{ "role": "system", "content": "你是一只大鸟" }
开发
该项目使用 poetry 进行依赖管理。要开始,请克隆仓库并运行
poetry install -E dev -E test
我们使用 ruff
和 mypy
。
贡献
欢迎提交拉取请求。对于重大更改,请首先打开一个问题来讨论您想要更改的内容。