環境
- Python 3.10.12
- semantic-kernel 0.3.1.dev0
Google Colabに!pip install semantic-kernel
でインストールしています。
実装
Semantic Kernelでは、Kernelの初期化時のlog
引数にPython標準ライブラリのLoggerインスタンスを渡すことで、ログを出力できます。
import logging
import semantic_kernel
OPENAI_API_KEY = "XXXXXXXXXXXXXXXX"
OPENAI_ORG = "XXXXXXXXXXXXXXXX"
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
kernel = semantic_kernel.Kernel(log=logger)
kernel.add_chat_service("c35", OpenAIChatCompletion("gpt-3.5-turbo", OPENAI_API_KEY, OPENAI_ORG))
Semantic Functionを定義したり実行する時に、次のようなログが出力されるようになります。
kansai_function = kernel.create_semantic_function("「{{$input}}」を関西弁にすると、", max_tokens=200, temperature=0)
出力
DEBUG:root:Extracting blocks from template: 「{{$input}}」を関西弁にすると、
実行時には、テンプレートに変数が埋め込まれた状態のpromptを確認したりできます。
output = kansai_function("本当に使っていないのですか、いけません。")
出力
DEBUG:__main__:Rendering string template: 「{{$input}}」を関西弁にすると、
DEBUG:__main__:Extracting blocks from template: 「{{$input}}」を関西弁にすると、
DEBUG:__main__:Rendering list of 3 blocks
DEBUG:__main__:Rendered prompt: 「本当に使っていないのですか、いけません。」を関西弁にすると、
なお上記の実行結果は次のようになります。
print(output)
出力
「ホンマに使ってへんのか、アカンで。」
loggerを指定しなかった場合
loggerを明示的に指定しなかった場合デフォルトではNullLogger
という何もしないloggerがセットされるため、何も出力されません。
openaiライブラリの出力なども含めて確認する
openai
という名前のロガーのレベルを変更することで、実際にOpenAI等のAPIへ飛ばしているリクエストを合わせて確認できます。またrootロガーのレベルを変更することで、他のログ出力もまとめて変更できます。
import logging
# logging.getLogger().setLevel(logging.DEBUG) # rootロガーの設定
logging.getLogger('openai').setLevel(logging.DEBUG) # openaiログ設定
output = kansai_function("本当に使っていないのですか、いけません。")
出力
DEBUG:openai:message='Request to OpenAI API' method=post path=https://api.openai.com/v1/chat/completions
DEBUG:openai:api_version=None data='{"model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "\\u300c\\u672c\\u5f53\\u306b\\u4f7f\\u3063\\u3066\\u3044\\u306a\\u3044\\u306e\\u3067\\u3059\\u304b\\u3001\\u3044\\u3051\\u307e\\u305b\\u3093\\u3002\\u300d\\u3092\\u95a2\\u897f\\u5f01\\u306b\\u3059\\u308b\\u3068\\u3001"}], "temperature": 0, "top_p": 1.0, "presence_penalty": 0.0, "frequency_penalty": 0.0, "max_tokens": 200, "n": 1, "stream": false}' message='Post details'
(省略)
厳密にはSemantic Kernelと関係は無い話ですが、必要に応じて上記を合わせて設定することで確認がしやすくなると思います。