0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Stripe / JP_StripesAdvent Calendar 2024

Day 25

Google ColabでStripeのAgent ToolkitとLangChainを組み合わせたAIエージェントを実行しよう

Posted at

この記事では、生成AIとStripeの新しいエージェント向けSDKを活用したAIエージェントの開発・テストをGoogle Colaboratory (Google Colab)で簡単に行う方法を紹介します。生成AIエージェントの作り方やLangChain系ツールの動かし方、そして決済や請求管理に関する業務の自動化に興味がある方はぜひご覧ください。

スクリーンショット 2024-11-15 9.13.52.png

Google Colabで生成AIエージェントを簡単に実装・テストする

Google Colabは、ブラウザ上でPythonコードを記述・実行できるウェブサービスです。Googleドライブにコードなどを保存し、Jupyterノートブックを利用してコマンドの実行やコードの記述・実行などをブラウザ上から行うことができます。このツールを利用することで、LangChainなどをの生成AI向けフレームワークやPythonスクリプトを簡単に評価・調査できます。

スクリーンショット 2024-12-13 10.58.14.png

そしてStripeでは、生成AIエージェントを利用して決済処理や請求管理等を自動化するために利用できるAgent Toolkit SDKの開発者プレビュー版を2024年にリリースしました。このSDKを利用して、生成AIを利用したPayment Linksの作成や請求書・顧客情報の作成処理などが簡単に実装できます。

ここでは、このAgent Toolkit SDKを簡単に試す方法として、Google Colabを利用し、LangChainと組み合わせで実行する方法を紹介します。

Google ColabでLangChainを利用したエージェントを作る方法

Google Colabを利用して、実際にAIエージェントを構築してみましょう。まずはGoogle Colabにて新しいノートブックを作成します。

スクリーンショット 2024-12-13 11.03.10.png

Jupyterノートを利用したエディタが開きます。ここでPythonアプリケーションコードやコマンドを実行し、エージェントアプリを実装してきます。

スクリーンショット 2024-12-13 11.04.03.png

Step1: SDKのセットアップを行う

まずは利用するライブラリのインストールを行いましょう。LangChainはライブラリ本体と、利用する生成AIサービスのライブラリが必要です。例えばOpenAIのAPIを利用する場合は、次のコマンドを実行します。Anthropic ( Claude )やAmazon Bedrockなどのサービスを利用したい場合は、LangChainのドキュメントから対応するプロバイダーのパッケージ名を確認しましょう。

!pip install langchain langchain-community langchain-openai

続いてStripeのAgent Toolkit SDKを利用するため、こちらもインストールを行います。1度にインストールしても良いのですが、どの用途で使うライブラリであるかを区別するため、便宜上ここでは2つのインストールコマンドに分割しています。

!pip install stripe-agent-toolkit  stripe

ライブラリのインストールが完了したら、次は生成AIサービスとStripeのAPIを利用する準備を始めましょう。

Step2: Colabでシークレットキーの設定を行う

今回作るエージェントアプリでは、2つのAPIキーが必要です。OpenAIを利用する場合、次の2つをColabのシークレットとして登録しましょう。

シークレットに登録する際、ノートブックからのアクセスをオンにしてください。

スクリーンショット 2024-11-29 17.58.42.png

APIキーの設定が終われば、いよいよエージェントコードの実装をPythonにて行います。

Step3: LangChainを使ったエージェントを実装する

ここからはPythonでLangChainのコードを実装します。LangChainでエージェントを実装・実行するには、langchain.agentsにあるAgentExecutorを利用します。ここにcreate_structured_chat_agent関数で登録した生成AIモデル(今回はChatOpenAI)とプロンプト、そしてAgent Toolkit SDKで作成したToolsの3つを設定します。生成AIのモデルには、userdata.get関数を利用してシークレットへ保存したAPIキーを渡すようにしましょう。

from google.colab import userdata
from langchain_community.chat_models import ChatOpenAI
from langchain.agents import AgentExecutor, create_structured_chat_agent

tools = // @TODO このあと実装する
prompt = // @TODO このあと実装する

model = ChatOpenAI(openai_api_key=userdata.get("OPENAI_API_KEY"))
agent = create_structured_chat_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)

エージェントを利用することを指示するプロンプトを設定する必要があります。LangChainではプロンプトをLangChain Hubからインポートして、プロンプト作成や保守管理を効率化できます。hwchase17/structured-chat-agentとして公開されているプロンプトを利用しましょう。

from google.colab import userdata
+from langchain import hub
from langchain_community.chat_models import ChatOpenAI
from langchain.agents import AgentExecutor, create_structured_chat_agent

tools = // @TODO このあと実装する
-prompt = // @TODO このあと実装する
+prompt = hub.pull("hwchase17/structured-chat-agent")

model = ChatOpenAI(openai_api_key=userdata.get("OPENAI_API_KEY"))
agent = create_structured_chat_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)

最後にStripeAgentToolkitを使ってLangChain向けのエージェントをセットアップします。secret_keyでStripeのシークレットAPIキーを設定しますので、userdata.getを使ってColabに登録したデータを利用しましょう。configurationの値は、利用するエージェントが実行できるStripe APIリソースとオペレーションの種類を設定します。今回の例では商品・料金そして支払いリンクの3つの作成が許可されています。

from google.colab import userdata
from langchain import hub
from langchain_community.chat_models import ChatOpenAI
from langchain.agents import AgentExecutor, create_structured_chat_agent
+from stripe_agent_toolkit.langchain.toolkit import StripeAgentToolkit

+stripe_agent_toolkit = StripeAgentToolkit(
+    secret_key=userdata.get("STRIPE_SECRET_KEY"),
+    configuration={
+        "actions": {
+            "payment_links": {
+                "create": True,
+            },
+            "products": {
+                "create": True,
+            },
+            "prices": {
+                "create": True,
+            }
+        }
+    },
+)
+tools = stripe_agent_toolkit.get_tools()
-tools = // @TODO このあと実装する

prompt = hub.pull("hwchase17/structured-chat-agent")
model = ChatOpenAI(openai_api_key=userdata.get("OPENAI_API_KEY"))
agent = create_structured_chat_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)

ここまででエージェントの準備ができました。最後にエージェントへ依頼するテキストをagent_executor.invoke関数で設定します。どのStripe APIを利用するかやAPIパラメータの設定はAgent Toolkit SDKが処理しますので、金額や商品名などの情報だけを文章に含めましょう。

agent_executor.invoke({
  "input": "1枚1000円のライブチケットを注文するリンクを作ってください。"
})

ここまでの実装が完了したら、スクリプトを実行しましょう。実行に成功すると、次のような出力が表示されます。

{'input': '1枚1000円のライブチケットを注文するリンクを作ってください。',
 'output': 'こちらが1枚1000円のライブチケットを注文するリンクです: https://buy.stripe.com/test_xxxx'}

リンクにアクセスすると、プロンプトに基づいて作成されたPayment Linksの決済ページが表示されます。

スクリーンショット 2024-12-13 11.35.22.png

このようにして、生成AIとLangChainを利用したAIエージェントでStripeのAPIを操作することができます。

全てのコードはこちら

今回実装したコードの全文はこちらです。

from google.colab import userdata
from langchain import hub
from langchain_community.chat_models import ChatOpenAI
from langchain.agents import AgentExecutor, create_structured_chat_agent
from stripe_agent_toolkit.langchain.toolkit import StripeAgentToolkit

stripe_agent_toolkit = StripeAgentToolkit(
    secret_key=userdata.get("STRIPE_SECRET_KEY"),
    configuration={
        "actions": {
            "payment_links": {
                "create": True,
            },
            "products": {
                "create": True,
            },
            "prices": {
                "create": True,
            }
        }
    },
)
tools = stripe_agent_toolkit.get_tools()

prompt = hub.pull("hwchase17/structured-chat-agent")
model = ChatOpenAI(openai_api_key=userdata.get("OPENAI_API_KEY"))
agent = create_structured_chat_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)

エラーが発生した場合は、プロンプトの情報不足も疑おう

Agent Toolkit SDKでは、Payment Linksの作成以外にも請求書の発行や確定などの操作もサポートしています。

stripe_agent_toolkit = StripeAgentToolkit(
    secret_key=userdata.get("STRIPE_SECRET_KEY"),
    configuration={
        "actions": {
            "products": {
                "create": True,
            },
            "prices": {
                "create": True,
            },
            "invoices": {
                "create": True,
                "update": True,
            },
            "invoiceItems": {
                "create": True,
                "update": True,
            },
            "customers": {
                "create": True,
            }
        }
    },
)
prompt = hub.pull("hwchase17/structured-chat-agent")

tools = stripe_agent_toolkit.get_tools()
agent = create_structured_chat_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)

agent_executor.invoke({
  "input": "メールアドレスがtest@example.comの顧客へ請求書を発行します。請求書を発行した後、単価1000円のライブチケットを商品として登録してください。最後に請求書のinvoice_itemへライブチケットを2個追加してください。"
})

ただし場合によっては、次のような実行エラーが発生することもあります。もちろんPythonコードの実装内容が問題ないかを確認する必要がありますが、時にはプロンプトに渡された情報が不足しているケースも存在します。

 warnings.warn(
---------------------------------------------------------------------------
InvalidRequestError                       Traceback (most recent call last)
<ipython-input-3-8f39873d2282> in <cell line: 40>()
    38 agent_executor = AgentExecutor(agent=agent, tools=tools)
    39 
---> 40 agent_executor.invoke({
    41   "input": "1枚1000円ライブチケットを2枚注文する請求書を発行してください。"
    42 })

16 frames
/usr/local/lib/python3.10/dist-packages/stripe/_api_requestor.py in handle_error_response(self, rbody, rcode, resp, rheaders, api_mode)
   334             )
   335 
--> 336         raise err
   337 
   338     def specific_v2_api_error(self, rbody, rcode, resp, rheaders, error_data):

InvalidRequestError: Request req_TkAxqEyUG5nI3K: Missing email. In order to create invoices that are sent to the customer, the customer must have a valid email.

このケースでは、コード自体にエラーはありませんでした。しかし請求書を作成する指示を行うプロンプトの中に、対象となる顧客のメールアドレスが漏れています。そのため、Stripe APIを利用して請求書を発行するタスクが失敗し、それによってエラーが発生しているという状況です。

Stripe APIがエラーを返したことによる実行エラーについては、ログに出力されたreq_から始まるリクエストIDを利用して調査を行います。Stripeダッシュボードのワークベンチ機能を利用し、対象のAPIリクエストログを調べましょう。ここで不足している情報などを調査して、プロンプトや会話フローを調整しましょう。

スクリーンショット 2024-12-13 11.42.59.png

開発者プレビューのAgent SDKにご参加ください

Agent Toolkit SDKは記事作成時点(2024/12)では開発者プレビューです。サポートしているAPIも限定的ですので、ぜひColabやLangChainなどを利用してお試しください。「このAPI・ユースケースで利用したい」や「APIパラメータの追加サポートが必要」などのフィードバックをGitHub Issueへお寄せ頂くことで、このSDKをより便利に使いやすくしていくことができます。

生成AI・AIエージェントの開発に挑戦するためのパーツの1つとして、そしてRevOpsや収益財務・請求管理の自動化を目指すための新しいSDKとして、Stripeをぜひお試しください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?