AWS Lambda用のレイヤーをWindows上のDockerで作成

AWS Lambda用のレイヤーをWindows上のDockerで作成

Lambdaレイヤーを作成する目的と問題

  • 目的

AWS Lambda関数で標準でないPythonライブラリ(今回の場合はopenai、linebot-sdkなど)を使用するには、それらのライブラリを事前に用意する必要がある。

以下2つの方法があり、

  • Lambda関数にソースコードとともにアップロード
  • Lambdaレイヤーを作成してLambda関数に適応させる

Lambdaレイヤーを作成する方法だと、

  • 複数のLambda関数で共有することができる
  • ソースコードとライブラリを別に管理できる

というメリットがある。
したがってLambdaレイヤーを作成する。

  • 問題

AWS Lambdaは、Amazon Linux上で実行されるため、使用するライブラリや依存関係はAmazon Linux環境に合わせる必要がある。
具体的に言うとWindows上でpythonライブラリを用意してアップロードしても謎のエラーが発生することがあるので避けた方が良い。

Dockerを使用して仮想環境上にAmazon Linuxを再現することでこの問題を解決する。

具体例をもとにその方法を記す。

VibratoをPythonで実験、Ginzaと速度比較

VibratoをPythonで実験、Ginzaと速度比較

VibratoをWindows・Pythonで動かす

高速な形態素解析器Vibrato。
MeCabと同じ解析結果でMeCabの2倍速いらしい。

Windows・Pythonで使用している例が見つからなかったので実験。
簡単に動いた。

加えて速度比較。
MeCabより速いことは明らかなので、普段よく使うGinzaと比較。

結果、
超速い。

Function Callingで遊戯王APIを呼び出す 3(Assistants APIを使用)

Function Callingで遊戯王APIを呼び出す 3(Assistants APIを使用)

OpenAI APIを活用した遊戯王APIからの情報取得システムをAssistants APIに組み込む

前回作成したFunction Callingから遊戯王APIにアクセスするシステムを改良。
11月6日に出たばかりのAssistants APIを使用する。

これにより、システム内部の逐次処理をある程度GPT任せにできるはず。

ついでに関数呼び出しもParallel function callingによる複数呼び出しに対応した。

OpenAI APIのAssistants APIを試す

OpenAI APIのAssistants APIを試す

Assistants APIによるアシスタント構築 Python

11月6日のアップデートでOpenAI APIにAssistants APIという機能が追加された。
Pythonで簡単に試せそうなので実験。

ベータ版らしいが良い感じに動く。

Function CallingのParallel function callingを試す

Function CallingのParallel function callingを試す

OpenAI APIのParallel function callingによる複数関数呼び出し

OpenAI APIにはFunction Callingという機能があって会話内容に応じて関数を使ってくれる。
それが11月6日のアップデートでパワーアップした。

  • 今まで 事前に与えた複数の関数の中から1つを選んでくれる
  • 現在  事前に与えた複数の関数の中から複数を選んでくれる

これは非常にありがたい。
今までがんばって実装しようとしていたことが簡単にできる。

実際に試して確認する。

「Parallel function calling」という単語はOpenAIの公式ドキュメントに載ってる公式用語のはずだが全然見かけない。

Function Callingで遊戯王APIを呼び出す 2(rapidfuzzによる名寄せ機能追加)

Function Callingで遊戯王APIを呼び出す 2(rapidfuzzによる名寄せ機能追加)

OpenAI APIを活用した遊戯王APIからの情報取得システムがパワーアップ

前回作成したFunction Callingから遊戯王APIにアクセスするシステムは英語のカード名にしか対応しない問題があった。

そこで、

  1. 日本語への対応
  2. あいまい入力への対応

を行った。

rapidfuzzを用いた遊戯王カードの名寄せ

rapidfuzzを用いた遊戯王カードの名寄せ

あいまいな遊戯王カード名を正式名称と紐づけたい

たとえば何らかのシステムに「青眼の白龍」のつもりで「青目の白龍」と入力したとする。
(「眼」と「目」が間違っている。)

このときに、


そんな名前のカードは存在しません

ではなく、


あなたが入力したのは青眼の白龍ですか?

こういった需要を満たす技術は「名寄せ」と呼ばれていて、
そこでは文字列間の類似度、あるいは距離を計算する手法がよく用いられる。
有名なアルゴリズムとして、

  • レーベンシュタイン距離
  • ジャロ距離
  • ジャロ・ウィンクラー距離

などいくつか挙げられるが、その辺のアルゴリズムを大体網羅して、かつ高速で使用方法も簡単な最強ライブラリが存在する。

今回はその最強ライブラリrapidfuzzを使って遊戯王カード名の名寄せを行う。

Function Callingで遊戯王APIを呼び出す

Function Callingで遊戯王APIを呼び出す

OpenAI APIのFunction Callingを使って遊戯王APIからカード情報を取得する

OpenAI APIにはFunction Callingという機能があって会話内容に応じて関数を使ってくれるらしい。
公式サンプルの天気予報APIでは気乗りしないので遊戯王APIを使って実験する。

OpenAIのChat APIにブログのタグを自動で付けてもらう

OpenAIのChat APIにブログのタグを自動で付けてもらう

GPT4の力でブログのタグ付けを自動化

このブログは1つの記事に1つのカテゴリーと1~4個のタグを付けている。
この記事の場合は、

カテゴリー:

  • software

タグ:

  • ChatGPT
  • Open AI
  • Python
  • GPT4

タグ付けは雑であり自分でも把握できていない。
大体過去の似た記事からタグをコピーして使いまわしている。

カテゴリーに関しては過去の100以上のブログ記事のすべてが「software」。
漫画の記事も羊毛フェルトの記事も全て「software」。

ここで、言語処理に強いOpenAIのAPIを使うことでブログのタグ付けカテゴリー付けを自動化できるのではないかと考えた。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×