跳转到主要内容

聊天插件实验,简化版。赋予您生活中所有模型的力量。

项目描述

ChatLab

聊天实验,简化版

💬🔬

ChatLab是一个Python包,使您能够轻松地实验OpenAI的聊天模型。它提供了一个简单的界面与模型进行聊天,并允许注册可以从聊天模型中调用的函数。

最好的是,它还在笔记本中交互式运行!

开始笔记本

简介

import chatlab
import random

def flip_a_coin():
    '''Returns heads or tails'''
    return random.choice(['heads', 'tails'])

chat = chatlab.Chat()
chat.register(flip_a_coin)

await chat("Please flip a coin for me")
 𝑓  运行 `flip_a_coin`

输入

{}

输出

"tails"
It landed on tails!

在笔记本中,文本将流到一个Markdown输出,函数输入和输出将以可折叠的显示方式呈现,就像ChatGPT插件一样。

待办:包括动作的GIF/mp4

安装

pip install chatlab

配置

您需要设置您的 OPENAI_API_KEY 环境变量。您可以在您的 OpenAI账户页面 找到您的API密钥。我建议在本地工作时将其设置在 .env 文件中。

在托管笔记本环境中,在您的秘密中设置它以保持安全。

Chat能为您做到什么?

💬

Chat 将功能提升到新层次的是通过 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):
    '''Current time, defaulting to UTC'''
    if tz is None:
        pass
    elif tz in all_timezones:
        tz = timezone(tz)
    else:
        return 'Invalid timezone'

    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()

# Register our function
chat.register(what_time, WhatTime)

之后,我们可以直接使用字符串调用 chat(这些字符串被转换为用户消息)或使用来自 chatlab 的简单消息生成器 usersystem

await chat("What time is it?")
 𝑓  运行了 what_time

输入

{}

输出

"11:19 AM"
The current time is 11:19 AM.

接口

chatlab 包导出

Chat

Chat 类是使用 OpenAI 模型进行聊天的主要方式。它将您的聊天历史保存在 Chat.messages 中。

Chat.submit

submit 是您将所有已构建的消息发送到 OpenAI 的方法。Markdown 输出将显示来自 assistant 的响应。

await chat.submit('What would a parent who says "I have to play zone defense" mean? ')
# Markdown response inline
chat.messages
[{'role': 'user',
  'content': 'What does a parent of three kids mean by "I have to play zone defense"?'},
 {'role': 'assistant',
  'content': 'When a parent of three kids says "I have to play zone defense," it means that they...

Chat.register

您可以使用 Chat.register 注册函数,使其对聊天模型可用。函数的文档字符串成为函数的说明,而模式是从传入的 pydantic.BaseModel 中派生的。

from pydantic import BaseModel

class WhatTime(BaseModel):
    tz: Optional[str] = None

def what_time(tz: Optional[str] = None):
    '''Current time, defaulting to UTC'''
    if tz is None:
        pass
    elif tz in all_timezones:
        tz = timezone(tz)
    else:
        return 'Invalid timezone'

    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("How are you?")
{ "role": "user", "content": "How are you?" }

narrate/system

system 消息,也称为 narrate,在 chatlab 中,允许您引导模型的方向。您可以使用这些来提供上下文,而不会被用户看到。一种常见的用法是将它作为对话的初始上下文。

from chatlab import narrate

narrate("You are a large bird")
{ "role": "system", "content": "You are a large bird" }

开发

此项目使用 poetry 进行依赖项管理。要开始,请克隆存储库并运行

poetry install -E dev -E test

我们使用 ruffmypy

贡献

欢迎拉取请求。对于重大更改,请先打开一个问题以讨论您想要更改的内容。

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

chatlab-2.1.1.tar.gz (32.2 kB 查看哈希)

上传时间:

构建分发

chatlab-2.1.1-py3-none-any.whl (29.6 kB 查看哈希)

上传时间: Python 3