「ほーいいじゃないか
こういうのでいいんだよ
こういうので」(の絵をここに貼る)
AI担当じゃないんですけど
ABEJA Tech Blogの”LangChainを使わない”を読んで、首がちぎれるほど頷いてしまった人は少なくないんじゃないかと思うわけで。
業務としてはCosmos / PostgreSQL / MySQLを担当しているものの、この1年は「どうやってAzure OpenAIと絡めるか」みたいなことが多く、最初はチャット履歴をそれらのDBに格納する、格納したものを(例えば)Synapse LinkでCosmos DBからSynapseに渡して分析する、から始まり、最近はベクトル検索をAzureのどのサービスでやるか(過渡期にあるのでソリューション乱立中)、「RAGどうすんべ?」といった視点のお話が多いわけです。
となると、担当外のAIの話もそれなりに知っていないといけないこともあり、今年前半はStable Diffusionをいじりまくって挙げ句の果てにModel / Loraを作るとか、後半はAzure OpenAIを叩いて色々遊びながらキャッチアップする、みたいな1年でした。昨夜はsuno.aiに$10払って、「RAIDはバックアップじゃない高校校歌」でゲラゲラ笑ったりしてましたが。
当然LangChainも関係してくるんだけども、先のブログで書かれている通り明らかに過渡期なわけで、RAGどうすんべ?と同じく、「プロダクション環境で使えるのか、これ…」みたいになるんですよ。1年後ぐらいには、RAGはこれ、モデル切り替えはこれ、コスト制約かけるにはこれ、っていう鉄板構成が出来てると思う、出来てると良いなぁ…、1年で落ち着くのかこれ?
フォークさせていただく
という状況だったので、ブログからLangri-Laのレポに飛んで、git cloneして、envをexportして、Azure OpenAIで動かすところまでまっしぐら、で、冒頭の「ほーいいじゃないか」です。
「お、JSONで履歴とれるじゃん。でもそれだとAzure Blobにストアしてファイル読み込みはダルいな…、PostgreSQLにJSONBでストアしてnotify()でキックするとなるとEventHubが要るのか…、Cosmos for NoSQLでストアしてChangeFeedでFunctionsをトリガーしてAzure OpenAIをもう1回叩いてベクトル作ってMongo vCoreにストアしてRAGだな」という思考が走り(ここまで1秒)、フォークさせていただきCosmosにストアできるように弄り始めましたw
コード、これだけ。知る限りでは、最短でAzure OpenAIを叩いてCosmos DBにストアするコードな気が…。lintしなかったら5行ですよ、これ…。
from langrila import OpenAIChatModule
from langrila.memory.cosmos import CosmosConversationMemory
chat = OpenAIChatModule(
api_key_name="AZURE_API_KEY", # env variable name
model_name="gpt-3.5-turbo-16k-0613",
conversation_memory=CosmosConversationMemory(
endpoint_env_name = "COSMOS_ENDPOINT", # env variable names
key_env_name = "COSMOS_KEY",
db_env_name = "COSMOS_DB_NAME",
container_env_name = "COSMOS_CONTAINER_NAME",
),
api_type="azure",
api_version="2023-07-01-preview",
deployment_id_name="DEPLOY_ID", # env variable name
endpoint_name="ENDPOINT", # env variable name
)
message = "Do you know Rude who is the character in Final Fantasy 7."
response = chat(message)
手元のMacでテストしてるけど、お仕事的にはAzure FunctionsでHTTP Triggerでキックされるようにdecoratorを追加して使いそうな感じ。
はい、Cosmos DBにストアできましたね。
もちろんChat以外のモジュールもLangri-Laには実装されていて、FunctionCallingもこれだけ?!みたいな素敵な感じです。