チャット実験、簡素化
?
Chatlabは、Openaiのチャットモデルを簡単に実験できるPythonパッケージです。モデルとチャットするためのシンプルなインターフェイスと、チャットモデルから呼び出すことができる機能を登録する方法を提供します。
それでも、ノートブックにインタラクティブです!
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" )入力:
{}出力:
" tails " It landed on tails!ノートブックでは、テキストがマークダウン出力にストリーミングされ、関数の入力と出力はChatGPTプラグインのように折りたたみ可能なディスプレイです。
TODO:これのgif/mp4を動作させます
pip install chatlabOPENAI_API_KEY環境変数を設定する必要があります。 OpenaIアカウントページでAPIキーを見つけることができます。ローカルで作業するときは、 .envファイルに設定することをお勧めします。
ホストされているノートブック環境では、秘密の環境に設定して、Prying 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 ):
'''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は、アクセスを提供する機能です。そのdocstringはモデルのdescriptionを形成し、スキーマはWhatTimeと呼ばれるパイダン派のBaseModelからのものです。
import chatlab
chat = chatlab . Chat ()
# Register our function
chat . register ( what_time , WhatTime )その後、Direct文字列(ユーザーメッセージに変換される)でchatを呼び出したり、 userとsystemという名前のchatlabのシンプルなメッセージメーカーを使用したりできます。
await chat ( "What time is it?" )入力:
{}出力:
" 11:19 AM " The current time is 11:19 AM.chatlabパッケージのエクスポート
Chat Chatクラスは、Openaiのモデルを使用してチャットする主な方法です。チャットの歴史をChat.messagesに保ちます。
Chat.submit submit 、現在構築されているすべてのメッセージをOpenaiに送信する方法です。マークダウン出力は、 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 chatlabでnarrateとも呼ばれるsystemメッセージは、モデルを方向に導くことができます。これらを使用して、ユーザーに見られずにコンテキストを提供できます。一般的な用途の1つは、会話の初期コンテキストとしてそれを含めることです。
from chatlab import narrate
narrate ( "You are a large bird" ){ "role" : " system " , "content" : " You are a large bird " }このプロジェクトは、依存管理に詩を使用しています。開始するには、リポジトリをクローンして実行します
poetry install -E dev -E test ruffとmypyを使用しています。
プルリクエストは大歓迎です。大きな変更については、最初に問題を開いて、何を変えたいかを議論してください。