Claudeを使った構築を始める前に

サポートチャットにClaudeを使用するかどうかを決定する

以下は、カスタマーサポートプロセスの一部を自動化するためにClaudeのようなLLMを採用すべき主な指標です:

他のLLMよりもClaudeを選ぶ際の考慮事項:

  • 自然で微妙なニュアンスのある会話を重視する:Claudeの洗練された言語理解により、他のLLMとのチャットよりも自然で、文脈を認識した、より人間らしい会話が可能になります。
  • 複雑でオープンエンドな問い合わせを頻繁に受ける:Claudeは定型的な回答を生成したり、ユーザーの発言の多くの順列をプログラミングしたりする必要なく、幅広いトピックや問い合わせを処理できます。
  • スケーラブルな多言語サポートが必要:Claudeの多言語機能により、各サポート言語ごとに別々のチャットボットや広範な翻訳プロセスを必要とせずに、200以上の言語で会話を行うことができます。

理想的なチャットインタラクションを定義する

理想的な顧客とのやり取りの概要を作成し、顧客がClaudeとどのように、いつ対話することを期待するかを定義します。この概要は、ソリューションの技術要件を決定するのに役立ちます。

以下は自動車保険のカスタマーサポートチャットの例です:

  • 顧客:サポートチャット体験を開始
    • Claude:顧客に温かく挨拶し、会話を始める
  • 顧客:新しい電気自動車の保険について質問
    • Claude:電気自動車の補償に関する関連情報を提供
  • 顧客:電気自動車保険の特有のニーズに関連する質問をする
    • Claude:正確で有益な回答を提供し、情報源へのリンクを提供
  • 顧客:保険や車に関係のない話題外の質問をする
    • Claude:関連のないトピックについては議論しないことを明確にし、ユーザーを自動車保険の話題に戻す
  • 顧客:保険の見積もりに興味を示す
    • Claude:適切な見積もりを決定するための一連の質問をし、回答に応じて対応
    • Claude:ユーザーから収集した必要な情報と共に見積もり生成APIツールを使用するリクエストを送信
    • Claude:APIツールの使用からの応答情報を受け取り、情報を自然な応答に統合し、ユーザーに提供された見積もりを提示
  • 顧客:フォローアップの質問をする
    • Claude:必要に応じてフォローアップの質問に答える
    • Claude:顧客を保険プロセスの次のステップに導き、会話を締めくくる
自分のユースケース用に実際の例を書く場合、この対話の実際の言葉を書き出すと、Claudeに持たせたい理想的なトーン、応答の長さ、詳細レベルの感覚をつかむのに役立つかもしれません。

インタラクションを独自のタスクに分解する

カスタマーサポートチャットは、質問応答から情報検索、リクエストに対するアクションまで、単一の顧客とのやり取りにまとめられた複数の異なるタスクの集合体です。構築を始める前に、理想的な顧客とのやり取りを、Claudeに実行させたいすべてのタスクに分解してください。これにより、すべてのタスクに対してClaudeをプロンプトし評価できるようになり、テストケースを作成する際に考慮する必要のあるインタラクションの範囲を把握できます。

顧客によっては、これをユーザーリクエストに応じた会話の変化点の可能性を示すインタラクションフローチャートとして視覚化すると役立つことがあります。

上記の保険インタラクションの例に関連する主要なタスクは次のとおりです:

  1. 挨拶と一般的なガイダンス

    • 顧客に温かく挨拶し、会話を始める
    • 会社とインタラクションに関する一般的な情報を提供する
  2. 製品情報

    • 電気自動車の補償に関する情報を提供する
      これには、Claudeがコンテキストに必要な情報を持っていることが必要であり、RAG統合が必要かもしれないことを意味します。
    • 電気自動車保険の特有のニーズに関連する質問に答える
    • 見積もりや保険の詳細についてのフォローアップ質問に答える
    • 適切な場合に情報源へのリンクを提供する
  3. 会話管理

    • トピックに集中する(自動車保険)
    • 話題外の質問を関連するテーマに戻す
  4. 見積もり生成

    • 見積もり適格性を判断するための適切な質問をする
    • 顧客の回答に基づいて質問を調整する
    • 収集した情報を見積もり生成APIに送信する
    • 提供された見積もりを顧客に提示する

成功基準を確立する

サポートチームと協力して、明確な成功基準を定義し、測定可能なベンチマークと目標を持つ詳細な評価を作成します。

以下は、定義されたタスクをClaudeがどれだけうまく実行するかを評価するために使用できる基準とベンチマークです:

以下は、サポートにClaudeを採用することのビジネスへの影響を評価するために使用できる基準とベンチマークです:

Claudeをカスタマーサービスエージェントとして実装する方法

適切なClaudeモデルを選択する

モデルの選択は、コスト、精度、応答時間のトレードオフによって異なります。

カスタマーサポートチャットには、claude-opus-4-20250514が知性、レイテンシー、コストのバランスを取るのに適しています。ただし、RAG、ツール使用、および/または長いコンテキストプロンプトを含む複数のプロンプトを持つ会話フローがある場合は、レイテンシーを最適化するためにclaude-3-haiku-20240307がより適している場合があります。

強力なプロンプトを構築する

カスタマーサポートにClaudeを使用するには、Claudeが適切に応答するのに十分な指示とコンテキストを持ちながら、幅広い顧客の問い合わせに対応するのに十分な柔軟性を持つ必要があります。

システムプロンプトから始めて、強力なプロンプトの要素を書いていきましょう:

IDENTITY = """あなたはEvaで、Acme保険会社のフレンドリーで知識豊富なAIアシスタントです。
あなたの役割は、顧客を温かく迎え、自動車保険と電気自動車保険を含むAcmeの保険商品に関する
情報を提供することです。また、顧客の保険ニーズに関する見積もりを取得するのを手伝うこともできます。"""
ユーザーとの会話から指示を分離する方法として、すべての情報をシステムプロンプト内に入れたくなるかもしれませんが、Claudeは実際には最初のUserターン内に書かれたプロンプトコンテンツの大部分で最もよく機能します(役割プロンプトのみが例外です)。詳細はシステムプロンプトでClaudeに役割を与えるをご覧ください。

複雑なプロンプトはサブセクションに分解し、一度に一部分ずつ書くのが最善です。各タスクについて、タスクをうまく実行するためにClaudeが必要とするプロンプトの部分を定義するステップバイステップのプロセスに従うとより成功する可能性があります。この自動車保険カスタマーサポートの例では、「挨拶と一般的なガイダンス」タスクから始めて、全体的なプロンプトのすべての部分を部分的に書いていきます。これにより、プロンプトの個々の部分をより迅速に調整できるため、プロンプトのデバッグも容易になります。

これらのすべての部分をconfig.pyというファイルに入れましょう。

STATIC_GREETINGS_AND_GENERAL = """
<static_context>
Acme自動車保険:道路上の信頼できる仲間

概要:
Acme保険では、あなたの車が単なる移動手段以上のもの—それはあなたの人生の冒険へのチケットであることを理解しています。
1985年以来、私たちはドライバーに自信を持って探索し、通勤し、安心して旅行するための自動車保険ポリシーを作成してきました。
都市の通りを走行するか、国を横断するロードトリップに出かけるかにかかわらず、Acmeはあなたとあなたの車両を守るためにそこにいます。
私たちの革新的な自動車保険ポリシーは、あなたのユニークなニーズに適応するように設計されており、小さな接触事故から大きな衝突まですべてをカバーします。
Acmeの受賞歴のあるカスタマーサービスと迅速な請求解決により、私たちが残りを処理している間、あなたは運転の喜びに集中できます。
私たちは単なる保険プロバイダーではありません—私たちは人生の旅のあなたの副操縦士です。
Acme自動車保険を選び、優れたカバレッジと真のケアがもたらす安心を体験してください。Acmeでは、私たちはあなたの車を保険するだけでなく、
オープンロードでのあなたの冒険に燃料を供給します。

注:私たちはまた、すべてのタイプの車のドライバーが私たちの保護の恩恵を受けられるように、電気自動車専用のカバレッジも提供しています。

Acme保険は以下の商品を提供しています:
- 自動車保険
- 電気自動車保険
- 二輪車保険

営業時間:月曜日〜金曜日、午前9時〜午後5時(東部標準時)
カスタマーサービス番号:1-800-123-4567
</static_context>
"""

次に、自動車保険と電気自動車保険の情報についても同様に行います。

STATIC_CAR_INSURANCE="""
<static_context>
自動車保険のカバレッジ:
Acmeの自動車保険ポリシーは通常以下をカバーします:
1. 賠償責任補償:他者に与えた身体傷害と物的損害を支払います。
2. 衝突補償:事故であなたの車の損害を支払います。
3. 包括的補償:衝突以外の事故からあなたの車の損害を支払います。
4. 医療費支払い補償:事故後の医療費を支払います。
5. 無保険/不十分な保険のドライバー補償:保険が不十分なドライバーにぶつけられた場合にあなたを保護します。

オプションのカバレッジには以下が含まれます:
- レンタカー費用補償
- ロードサイドアシスタンス
- 新車交換
</static_context>
"""

STATIC_ELECTRIC_CAR_INSURANCE="""
<static_context>
電気自動車保険:
私たちの専門的な電気自動車保険は従来の自動車保険を超え、
あなたのハイテク投資のためのカスタマイズされた保護を提供します。標準的なカバレッジに加えて、私たちは以下を提供します:
- 高価なバッテリーシステムの保護
- 家庭用充電設備のカバー
- 急速に進化する電気自動車の世界への適応

あなたがRivian、Nissan Leaf、Chevrolet Bolt、
または他の電気自動車を運転しているかどうかにかかわらず、私たちの知識豊富なエージェントは
あなたが電子駆動のすべてのマイルを自信を持って楽しむことができるポリシーを作成する準備ができています。
</static_context>
"""

静的コンテンツができたので、Claudeの応答を導くための4〜5つのサンプル「良い」インタラクションを追加しましょう。これ​​らの例は理想的な顧客とのやり取りを代表するものであり、ガードレール、ツールコールなどを含めることができます。

EXAMPLES="""
以下は、顧客とやり取りする方法のいくつかの例です:

<example 1>
H: こんにちは、中小企業向けの商業保険を提供していますか?

A: あ!残念ながら、現時点では商業保険は提供していません。
ただし、自動車保険や電気自動車保険など、個人向け保険商品を幅広く提供しています。
これらの商品についてもっと知りたいですか?
</example 1>

<example 2>
H: こんにちは、営業時間を教えてください。

A: 営業時間は月曜日から金曜日の午前9時から午後5時(東部標準時)です。
ご質問やサポートが必要な場合は、その時間内にお気軽にお問い合わせください。
他に何かお手伝いできることはありますか?
</example 2>

<example 3>
H: 自動車保険を探しています。Acmeは何を提供していますか?

A: 素晴らしい選択です!Acmeの自動車保険ポリシーには通常以下が含まれます:
- 賠償責任補償:事故の原因があなたにある場合に保護します
- 衝突補償:事故であなたの車の損害を支払います
- 包括的補償:盗難や破壊行為など衝突以外の事故をカバーします
- 医療費支払い補償:事故後の医療費を支払います
- 無保険/不十分な保険のドライバー補償:保険が不十分なドライバーからあなたを保護します

また、レンタカー費用補償、ロードサイドアシスタンス、新車交換などのオプションのカバレッジも提供しています。
これらのカバレッジについてさらに詳細を知りたいですか、またはあなたの車の保険について特定の質問がありますか?
</example 3>

<example 4>
H: 電気自動車保険について聞きたいです。

A: もちろんです!私たちの電気自動車保険は電気自動車所有者の独自のニーズを満たすために特別に設計されています。
通常の車に提供するすべての標準的なカバレッジに加えて、私たちの電気自動車ポリシーには以下が含まれます:

- バッテリーカバレッジ:車両の高価なバッテリーシステムの損傷または劣化に対する保護
- テクノロジーパッケージ:高度な電子機器および搭載コンピュータシステムの修理または交換をカバー
- 充電ステーションカバレッジ:家庭用および携帯用充電機器の両方を保護
- サイバーセキュリティ保護:ハッキングやデジタル脅威に対するカバレッジ
- 専門的なロードサイドアシスタンス:車両の下部を保護するためのフラットベッド牽引を含む

Tesla、Rivian、Nissan、Chevroletなどの人気モデルを含む幅広い電気自動車をカバーしています。
保険をかけたい特定の電気自動車がありますか、またはこれらのカバレッジについてさらに詳細を知りたいですか?
</example 4>

<example 5>
H: 自動車保険の見積もりが欲しいです。

A: もちろんです!自動車保険の見積もりを取得するお手伝いをさせていただきます。
正確な見積もりを提供するために、あなたの車両と主要ドライバーに関するいくつかの情報を収集する必要があります。
基本的なことから始めましょう:

1. あなたの車両のメーカーとモデルは何ですか?
2. 製造年は何年ですか?
3. 走行距離はおよそどれくらいですか?
4. 主要ドライバーの年齢は何歳ですか?

この情報を提供していただければ、私たちの見積もりツールを使用してパーソナライズされた保険見積もりを生成します。
</example 5>
"""

また、顧客とのやり取り方法に関する重要な指示を概説した「すべきこと」と「すべきでないこと」を含める必要があります。 これはブランドのガードレールやサポートポリシーから導き出されるかもしれません。

ADDITIONAL_GUARDRAILS = """以下のガードレールを遵守してください:
1. 私たちの提供リストにある保険タイプについてのみ情報を提供してください。
2. 提供していない保険タイプについて質問された場合は、丁寧にそのサービスを
提供していないことを述べてください。
3. 将来の製品提供や会社の計画について推測しないでください。
4. 許可されていない約束や合意を結ばないでください。
あなたは情報とガイダンスのみを提供します。
5. 競合他社の製品やサービスについて言及しないでください。
"""

では、これらのセクションをすべて1つの文字列に結合して、プロンプトとして使用しましょう。

TASK_SPECIFIC_INSTRUCTIONS = ' '.join([
   STATIC_GREETINGS_AND_GENERAL,
   STATIC_CAR_INSURANCE,
   STATIC_ELECTRIC_CAR_INSURANCE,
   EXAMPLES,
   ADDITIONAL_GUARDRAILS,
])

ツール使用で動的でエージェント的な機能を追加する

Claudeはクライアント側のツール使用機能を使用して、アクションを実行し情報を動的に取得することができます。プロンプトが利用すべき外部ツールやAPIをリストアップすることから始めましょう。

この例では、見積もりを計算するためのツールから始めます。

念のため、このツールは実際の計算を実行するのではなく、指定された引数でツールを使用すべきであることをアプリケーションに通知するだけです。

保険見積もり計算機の例:

TOOLS = [{
  "name": "get_quote",
  "description": "ユーザー入力に基づいて保険見積もりを計算します。返される値は月額保険料です。",
  "input_schema": {
    "type": "object",
    "properties": {
      "make": {"type": "string", "description": "車両のメーカー。"},
      "model": {"type": "string", "description": "車両のモデル。"},
      "year": {"type": "integer", "description": "車両が製造された年。"},
      "mileage": {"type": "integer", "description": "車両の走行距離。"},
      "driver_age": {"type": "integer", "description": "主要ドライバーの年齢。"}
    },
    "required": ["make", "model", "year", "mileage", "driver_age"]
  }
}]

def get_quote(make, model, year, mileage, driver_age):
    """月額保険料をUSDで返します"""
    # HTTPエンドポイントやデータベースを呼び出して見積もりを取得できます。
    # ここでは、1秒の遅延をシミュレートし、固定の見積もり100を返します。
    time.sleep(1)
    return 100

プロンプトをデプロイする

テスト本番環境にプロンプトをデプロイし、評価を実行せずにプロンプトがどれだけうまく機能するかを知るのは難しいので、プロンプト、Anthropic SDK、およびユーザーインターフェイス用のstreamlitを使用して小さなアプリケーションを構築しましょう。

chatbot.pyというファイルで、Anthropic SDKとのやり取りをカプセル化するChatBotクラスの設定から始めます。

このクラスには、generate_messageprocess_user_inputという2つの主要なメソッドが必要です。

from anthropic import Anthropic
from config import IDENTITY, TOOLS, MODEL, get_quote
from dotenv import load_dotenv

load_dotenv()

class ChatBot:
   def __init__(self, session_state):
       self.anthropic = Anthropic()
       self.session_state = session_state

   def generate_message(
       self,
       messages,
       max_tokens,
   ):
       try:
           response = self.anthropic.messages.create(
               model=MODEL,
               system=IDENTITY,
               max_tokens=max_tokens,
               messages=messages,
               tools=TOOLS,
           )
           return response
       except Exception as e:
           return {"error": str(e)}

   def process_user_input(self, user_input):
       self.session_state.messages.append({"role": "user", "content": user_input})

       response_message = self.generate_message(
           messages=self.session_state.messages,
           max_tokens=2048,
       )

       if "error" in response_message:
           return f"エラーが発生しました: {response_message['error']}"

       if response_message.content[-1].type == "tool_use":
           tool_use = response_message.content[-1]
           func_name = tool_use.name
           func_params = tool_use.input
           tool_use_id = tool_use.id

           result = self.handle_tool_use(func_name, func_params)
           self.session_state.messages.append(
               {"role": "assistant", "content": response_message.content}
           )
           self.session_state.messages.append({
               "role": "user",
               "content": [{
                   "type": "tool_result",
                   "tool_use_id": tool_use_id,
                   "content": f"{result}",
               }],
           })

           follow_up_response = self.generate_message(
               messages=self.session_state.messages,
               max_tokens=2048,
           )

           if "error" in follow_up_response:
               return f"エラーが発生しました: {follow_up_response['error']}"

           response_text = follow_up_response.content[0].text
           self.session_state.messages.append(
               {"role": "assistant", "content": response_text}
           )
           return response_text
      
       elif response_message.content[0].type == "text":
           response_text = response_message.content[0].text
           self.session_state.messages.append(
               {"role": "assistant", "content": response_text}
           )
           return response_text
      
       else:
           raise Exception("エラーが発生しました: 予期しないレスポンスタイプ")

   def handle_tool_use(self, func_name, func_params):
       if func_name == "get_quote":
           premium = get_quote(**func_params)
           return f"見積もり生成: 月額${premium:.2f}"
      
       raise Exception("予期しないツールが使用されました")

ユーザーインターフェイスを構築する

メインメソッドを使用してこのコードをStreamlitでテストデプロイします。このmain()関数はStreamlitベースのチャットインターフェイスを設定します。

これをapp.pyというファイルで行います。

import streamlit as st
from chatbot import ChatBot
from config import TASK_SPECIFIC_INSTRUCTIONS

def main():
   st.title("Acme保険会社のアシスタントEvaとチャット🤖")

   if "messages" not in st.session_state:
       st.session_state.messages = [
           {'role': "user", "content": TASK_SPECIFIC_INSTRUCTIONS},
           {'role': "assistant", "content": "理解しました"},
       ]

   chatbot = ChatBot(st.session_state)

   # 最初の2つをスキップしてユーザーとアシスタントのメッセージを表示
   for message in st.session_state.messages[2:]:
       # ツール使用ブロックを無視
       if isinstance(message["content"], str):
           with st.chat_message(message["role"]):
               st.markdown(message["content"])

   if user_msg := st.chat_input("ここにメッセージを入力してください..."):
       st.chat_message("user").markdown(user_msg)

       with st.chat_message("assistant"):
           with st.spinner("Evaは考え中..."):
               response_placeholder = st.empty()
               full_response = chatbot.process_user_input(user_msg)
               response_placeholder.markdown(full_response)

if __name__ == "__main__":
   main()

以下のコマンドでプログラムを実行します:

streamlit run app.py

プロンプトを評価する

プロンプトは本番環境で使用できるようにするためには、テストと最適化が必要なことがよくあります。ソリューションの準備状況を判断するために、定量的および定性的方法を組み合わせた体系的なプロセスを使用してチャットボットのパフォーマンスを評価します。定義した成功基準に基づいて強力な実証的評価を作成することで、プロンプトを最適化できます。

Anthropic Consoleには現在、さまざまなシナリオでプロンプトをテストできる評価ツールが搭載されています。

パフォーマンスを向上させる

複雑なシナリオでは、標準的なプロンプトエンジニアリング技術ガードレール実装戦略を超えて、パフォーマンスを向上させるための追加戦略を検討すると役立つ場合があります。以下はよくあるシナリオです:

RAGで長いコンテキストのレイテンシーを削減する

大量の静的および動的コンテキストを扱う場合、すべての情報をプロンプトに含めると、高いコスト、応答時間の遅延、コンテキストウィンドウの制限に達する可能性があります。このシナリオでは、検索拡張生成(RAG)技術を実装することで、パフォーマンスと効率を大幅に向上させることができます。

Voyageのような埋め込みモデルを使用して情報をベクトル表現に変換することで、よりスケーラブルで応答性の高いシステムを作成できます。このアプローチにより、すべての可能なコンテキストをすべてのプロンプトに含めるのではなく、現在のクエリに基づいて関連情報を動的に取得できます。

サポートユースケース用のRAGの実装RAGレシピは、広範なコンテキスト要件を持つシステムにおいて、精度の向上、応答時間の短縮、APIコストの削減をもたらすことが示されています。

ツール使用でリアルタイムデータを統合する

口座残高やポリシーの詳細などのリアルタイム情報を必要とするクエリを扱う場合、埋め込みベースのRAGアプローチでは不十分です。代わりに、ツール使用を活用して、チャットボットが正確でリアルタイムの応答を提供する能力を大幅に強化できます。例えば、ツール使用を使用して顧客情報を検索したり、注文の詳細を取得したり、顧客に代わって注文をキャンセルしたりできます。

ツール使用:カスタマーサービスエージェントレシピで概説されているこのアプローチにより、Claudeの応答にライブデータをシームレスに統合し、よりパーソナライズされた効率的な顧客体験を提供できます。

入力と出力のガードレールを強化する

特にカスタマーサービスシナリオでチャットボットをデプロイする場合、誤用、範囲外のクエリ、不適切な応答に関連するリスクを防止することが重要です。Claudeは本質的にそのようなシナリオに対して回復力がありますが、チャットボットのガードレールを強化するための追加のステップは次のとおりです:

  • 幻覚を減らす:事実確認メカニズムと引用を実装して、提供された情報に基づいた応答を確保します。
  • 情報のクロスチェック:エージェントの応答が会社のポリシーや既知の事実と一致していることを確認します。
  • 契約上のコミットメントを避ける:エージェントが許可されていない約束をしたり、合意を結んだりしないようにします。
  • ジェイルブレイクを軽減する:無害性スクリーンや入力検証などの方法を使用して、ユーザーがモデルの脆弱性を悪用して不適切なコンテンツを生成しようとするのを防ぎます。
  • 競合他社への言及を避ける:ブランドの焦点を維持し、競合他社の製品やサービスに言及しないように、競合他社への言及フィルターを実装します。
  • Claudeをキャラクターに保つ:長く複雑なやり取りの間でも、Claudeがコンテキストのスタイルを変更しないようにします。
  • 個人を特定できる情報(PII)を削除する:明示的に必要で許可されていない限り、応答から個人を特定できる情報を削除します。

ストリーミングで認識される応答時間を短縮する

潜在的に長い応答を扱う場合、ストリーミングを実装することでユーザーのエンゲージメントと満足度を大幅に向上させることができます。このシナリオでは、ユーザーは応答全体が生成されるのを待つのではなく、徐々に回答を受け取ります。

ストリーミングを実装する方法は次のとおりです:

  1. ストリーミング応答をサポートするためにAnthropic Streaming APIを使用します。
  2. フロントエンドがテキストの入力チャンクを処理するように設定します。
  3. 各チャンクが到着したときに表示し、リアルタイムのタイピングをシミュレートします。
  4. ユーザーがナビゲートして戻ってきた場合に表示できるように、完全な応答を保存するメカニズムを実装します。

場合によっては、ストリーミングにより、進行的な表示がより長い処理時間の影響を軽減するため、ベースレイテンシーが高い高度なモデルの使用が可能になります。

チャットボットをスケールする

チャットボットの複雑さが増すにつれて、アプリケーションアーキテクチャもそれに合わせて進化できます。アーキテクチャにさらなる層を追加する前に、以下のより網羅的でないオプションを検討してください:

  • プロンプトを最大限に活用し、プロンプトエンジニアリングを通じて最適化していることを確認してください。最も効果的なプロンプトを書くためにプロンプトエンジニアリングガイドを使用してください。
  • プロンプトに追加のツールプロンプトチェーンを含むことができる)を追加し、必要な機能を達成できるかどうかを確認してください。

チャットボットが非常に多様なタスクを処理する場合は、初期の顧客クエリをルーティングするための別の意図分類器の追加を検討することができます。既存のアプリケーションでは、これには顧客クエリを分類器を通じてルーティングし、その後専門的な会話(独自のツールとシステムプロンプトのセットを持つ)に送る決定木を作成することが含まれます。この方法では、レイテンシーを増加させる可能性のあるClaudeへの追加呼び出しが必要であることに注意してください。

Claudeをサポートワークフローに統合する

私たちの例はStreamlit環境内で呼び出し可能なPython関数に焦点を当てていますが、リアルタイムサポートチャットボット用にClaudeをデプロイするにはAPIサービスが必要です。

以下はアプローチ方法です:

  1. APIラッパーを作成する:分類関数の周りに簡単なAPIラッパーを開発します。例えば、FlaskAPIやFast APIを使用してコードをHTTPサービスにラップできます。HTTPサービスはユーザー入力を受け入れ、アシスタントの応答を完全に返すことができます。したがって、サービスは以下の特性を持つことができます:

    • サーバー送信イベント(SSE):SSEはサーバーからクライアントへのリアルタイムストリーミング応答を可能にします。これはLLMを使用する際にスムーズでインタラクティブな体験を提供するために重要です。
    • キャッシング:キャッシングを実装することで、応答時間を大幅に改善し、不要なAPI呼び出しを減らすことができます。
    • コンテキスト保持:ユーザーがナビゲートして戻ってきたときのコンテキストの維持は、会話の継続性にとって重要です。
  2. Webインターフェイスを構築する:Claude搭載エージェントとやり取りするためのユーザーフレンドリーなWeb UIを実装します。