見出し画像

SnowflakeでLangChain使ってみた

分析屋の中田(ナカタ)です。
Snowflakeで話題のLangChainを使ってみました。


LangChainとは

大規模言語モデル(LLM)によるアプリ開発を効率的に行うためのライブラリです。
PythonとTypeScriptに対応しています。

どのように効率的かというと
多様なモデル(ChatGPT、Gemini、Llama、Claude・・・)を使用できる点や
Retrieval(外部データを検索して回答生成)の機能のため、さまざまなデータソースに対応している点などがあります。
CSVやPDFだけでなくNotionやFigmaなどのサービスにも対応しているようです。

今回やること

SQLワークシートにて、LangChainを使用したUDFを作成します。
今回はChatGPTのgpt-4を呼び出してみます。

環境

Snowflakeのエディション:エンタープライズ版
クラウド:AWS(東京リージョン)

事前準備

以下の記事で作成したネットワークポリシーなどをそのまま引き継いで使用しています。

上記の記事の手順を実行できた後の環境が前提になっています。

①UDFの定義

SQLワークシートで以下の関数を定義します。
データベース名、スキーマ名は省略しています。

CREATE OR REPLACE FUNCTION gpt_test(query varchar)
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = 3.8
HANDLER = 'sample_func'
EXTERNAL_ACCESS_INTEGRATIONS = (external_access_int)
SECRETS = ('openai_key' = sf_openapi_key )
PACKAGES = ('openai==0.27.4','langchain==0.0.298')
AS
$$
import _snowflake
from langchain.llms import OpenAI
def sample_func(question):
    sec_object = _snowflake.get_username_password('openai_key')
    
    llm = OpenAI(model_name='gpt-4',
                 temperature=0.9,
                 openai_api_key=sec_object.password)
    return llm(prompt=question)
$$;

これで使用準備が完了です。

②解説

後は使うだけなのですが、細かい設定部分をまとめます。

RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = 3.8
HANDLER = 'sample_func'
EXTERNAL_ACCESS_INTEGRATIONS = (external_access_int)
SECRETS = ('openai_key' = sf_openapi_key )
PACKAGES = ('openai==0.27.4','langchain==0.0.298')

上から順に一言で要約していくと

  • 戻り値は文字列型

  • 使用言語はPython

  • Pythonのバージョンは3.8

  • ハンドラー(絶対使われる関数)の名前はsample_func

  • 外部アクセス統合の指定(事前に作成済み)

  • シークレットの指定(事前に作成済み。APIキーのハードコーディングを避けるため)

  • 使用するライブラリとバージョン指定

さらに関数部分についても見ていきます。

import _snowflake
from langchain.llms import OpenAI
def sample_func(question):
    sec_object = _snowflake.get_username_password('openai_key')
    
    llm = OpenAI(model_name='gpt-4',
                 temperature=0.9,
                 openai_api_key=sec_object.password)
    return llm(prompt=question)

_snowflakeでOpenAIのAPIキーを呼び出し、ハードコーディングを避けています。
動かすだけならこの部分はなくすことはできます。

モデルはgpt-4を選択してみました。
gpt-3.5-turboを指定することも可能です。

temperatureについては、0~1の範囲で指定することができ
0に近いほど予測性重視、1に近いほど多様性重視の回答になります。

社内Chatbotのような回答精度を求められる場合は0
人間と対話しているような多様なコミュニケーションを求められる場合は1
のように調整できます。

③使ってみる

以下のようにSELECT文で使ってみました。

SELECT gpt_test('元気ですか');

temperatureを0.9に設定したので、実行ごとに回答内容が少し変わっています。

最後に

今回はシンプルに動くものをお試ししただけですが
話題のLangChainがSnowflake上で実装できることを確認できたのが嬉しいです!



ここまでお読みいただき、ありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです!

これまでの記事はこちら!

株式会社分析屋について

弊社が作成を行いました分析レポートを、鎌倉市観光協会様HPに掲載いただきました。

ホームページはこちら。

noteでの会社紹介記事はこちら。

【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!

【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。

【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。

【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。

【SES】
SESサービスも行っております。