Loading...
    • 開発者ガイド
    • API リファレンス
    • MCP
    • リソース
    • リリースノート
    Search...
    ⌘K
    リソース
    概要用語集システムプロンプト
    概要チケットルーティングカスタマーサポートエージェントコンテンツモデレーション法的要約
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    ユースケース

    カスタマーサポートエージェント

    このガイドでは、Claudeの高度な会話機能を活用して、リアルタイムで顧客の問い合わせに対応し、24時間365日のサポートを提供し、待ち時間を短縮し、正確な回答とポジティブなインタラクションで大量のサポートリクエストを処理する方法を説明します。

    Claudeで構築する前に

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

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

    他のLLMよりもClaudeを選択する際の考慮事項:

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

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

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

    以下は、自動車保険のカスタマーサポートのチャットインタラクション例です:

    • :サポートチャット体験を開始

    Was this page helpful?

    • Claudeで構築する前に
    • サポートチャットにClaudeを使用するかどうかを決定する
    • Claudeをカスタマーサービスエージェントとして実装する方法
    • 適切なClaudeモデルを選択する
    • Claudeをサポートワークフローに統合する
    顧客
    • Claude:顧客を温かく迎え、会話を開始
  1. 顧客:新しい電気自動車の保険について質問
    • Claude:電気自動車の補償に関する関連情報を提供
  2. 顧客:電気自動車保険の固有のニーズに関する質問
    • Claude:正確で有益な回答を提供し、ソースへのリンクを提供
  3. 顧客:保険や車に関係のないオフトピックの質問
    • Claude:関連のないトピックについては議論しないことを明確にし、ユーザーを自動車保険に戻す
  4. 顧客:保険の見積もりに興味を示す
    • Claude:適切な見積もりを決定するための一連の質問をし、回答に応じて適応
    • Claude:見積もり生成APIツールの使用リクエストと、ユーザーから収集した必要な情報を送信
    • Claude:APIツール使用からの応答情報を受け取り、情報を自然な応答に統合し、提供された見積もりをユーザーに提示
  5. 顧客:フォローアップの質問
    • Claude:必要に応じてフォローアップの質問に回答
    • Claude:保険プロセスの次のステップに顧客を案内し、会話を終了
  6. 自分のユースケースのために書く実際の例では、このインタラクションの実際の言葉を書き出すと便利かもしれません。そうすることで、Claudeに求める理想的なトーン、応答の長さ、詳細レベルの感覚も得られます。

    インタラクションを個別のタスクに分解する

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

    顧客は、ユーザーのリクエストに応じた可能な会話の分岐点のインタラクションフローチャートとしてこれを視覚化すると便利だと感じることがあります。

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

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

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

      • 電気自動車の補償に関する情報を提供
        これにはClaudeのコンテキストに必要な情報が含まれている必要があり、RAG統合が必要になる可能性があります。
      • 電気自動車保険の固有のニーズに関する質問に回答
      • 見積もりや保険の詳細に関するフォローアップの質問に回答
      • 適切な場合にソースへのリンクを提供
    3. 会話管理

      • トピック(自動車保険)に留まる
      • オフトピックの質問を関連する主題にリダイレクト
    4. 見積もり生成

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

    成功基準を確立する

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

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

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

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

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

    モデルの選択は、コスト、精度、応答時間のトレードオフに依存します。

    カスタマーサポートチャットには、Claude Opus 4.6がインテリジェンス、レイテンシー、コストのバランスに適しています。ただし、RAG、ツール使用、および/またはロングコンテキストプロンプトを含む複数のプロンプトを使用する会話フローの場合、Claude Haiku 4.5がレイテンシーの最適化により適している場合があります。

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

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

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

    IDENTITY = """You are Eva, a friendly and knowledgeable AI assistant for Acme Insurance 
    Company. Your role is to warmly welcome customers and provide information on 
    Acme's insurance offerings, which include car insurance and electric car 
    insurance. You can also help customers get quotes for their insurance needs."""
    すべての情報をシステムプロンプト内に配置して、指示をユーザーの会話から分離する方法に誘惑されるかもしれませんが、Claudeは実際にはプロンプトコンテンツの大部分を最初のUserターンに書いた方がうまく機能します(唯一の例外はロールプロンプティングです)。詳しくはシステムプロンプトでClaudeに役割を与えるをご覧ください。

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

    これらのすべてのピースをconfig.pyというファイルに配置します。

    STATIC_GREETINGS_AND_GENERAL = """
    <static_context>
    Acme Auto Insurance: Your Trusted Companion on the Road
    
    About:
    At Acme Insurance, we understand that your vehicle is more than just a mode of transportation—it's your ticket to life's adventures. 
    Since 1985, we've been crafting auto insurance policies that give drivers the confidence to explore, commute, and travel with peace of mind.
    Whether you're navigating city streets or embarking on cross-country road trips, Acme is there to protect you and your vehicle. 
    Our innovative auto insurance policies are designed to adapt to your unique needs, covering everything from fender benders to major collisions.
    With Acme's award-winning customer service and swift claim resolution, you can focus on the joy of driving while we handle the rest. 
    We're not just an insurance provider—we're your co-pilot in life's journeys.
    Choose Acme Auto Insurance and experience the assurance that comes with superior coverage and genuine care. Because at Acme, we don't just 
    insure your car—we fuel your adventures on the open road.
    
    Note: We also offer specialized coverage for electric vehicles, ensuring that drivers of all car types can benefit from our protection.
    
    Acme Insurance offers the following products:
    - Car insurance
    - Electric car insurance
    - Two-wheeler insurance
    
    Business hours: Monday-Friday, 9 AM - 5 PM EST
    Customer service number: 1-800-123-4567
    </static_context>
    """

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

    STATIC_CAR_INSURANCE="""
    <static_context>
    Car Insurance Coverage:
    Acme's car insurance policies typically cover:
    1. Liability coverage: Pays for bodily injury and property damage you cause to others.
    2. Collision coverage: Pays for damage to your car in an accident.
    3. Comprehensive coverage: Pays for damage to your car from non-collision incidents.
    4. Medical payments coverage: Pays for medical expenses after an accident.
    5. Uninsured/underinsured motorist coverage: Protects you if you're hit by a driver with insufficient insurance.
    
    Optional coverages include:
    - Rental car reimbursement
    - Roadside assistance
    - New car replacement
    </static_context>
    """
    
    STATIC_ELECTRIC_CAR_INSURANCE="""
    <static_context>
    Electric Car Insurance:
    Our specialized electric car insurance goes beyond traditional auto coverage, 
    offering tailored protection for your high-tech investment. In addition to standard coverages, we offer:
    - Safeguarding expensive battery systems
    - Covering home charging equipment
    - Adapting to the rapidly evolving world of electric vehicles
    
    Whether you're driving a Rivian, Nissan Leaf, Chevrolet Bolt, 
    or any other electric vehicle, our knowledgeable agents are ready to craft a policy 
    that gives you the confidence to enjoy every electron-powered mile.
    </static_context>
    """

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

    EXAMPLES="""
    Here are a few examples of how you can interact with customers:
    
    <example 1>
    H: Hi, do you offer commercial insurance for small businesses?
    
    A: Ah! Unfortunately, we don't offer commercial insurance at this time. 
    However, we do provide a range of personal insurance products including car insurance and electric car insurance. 
    Would you like to know more about these offerings?
    </example 1>
    
    <example 2>
    H: Hi, what are your business hours?
    
    A: Our business hours are Monday to Friday, 9 AM to 5 PM EST. 
    If you have any questions or need assistance, feel free to reach out during those times. 
    How else can I assist you today?
    </example 2>
    
    <example 3>
    H: I'm shopping for car insurance. What does Acme offer?
    
    A: Great choice! Acme's car insurance policies typically include:
    - Liability coverage: Protects you if you're at fault in an accident
    - Collision coverage: Pays for damage to your car in an accident
    - Comprehensive coverage: Covers non-collision incidents like theft or vandalism
    - Medical payments coverage: Pays for medical expenses after an accident
    - Uninsured/underinsured motorist coverage: Protects you from drivers with insufficient insurance
    
    We also offer optional coverages like rental car reimbursement, roadside assistance, and new car replacement. 
    Would you like more details on any of these coverages, or do you have specific questions about insuring your vehicle?
    </example 3>
    
    <example 4>
    H: I'd like to hear about your electric car insurance.
    
    A: Certainly! Our electric car insurance is specially designed to meet the unique needs of electric vehicle owners. 
    In addition to all the standard coverages we offer for regular cars, our electric car policies include:
    
    - Battery coverage: Protection against damage or degradation of your vehicle's expensive battery system
    - Tech package: Covers repairs or replacement of advanced electronics and onboard computer systems
    - Charging station coverage: Protects both home and portable charging equipment
    - Cybersecurity protection: Coverage against hacking or digital threats
    - Specialized roadside assistance: Includes flatbed towing to protect the vehicle's undercarriage
    
    We cover a wide range of electric vehicles, including popular models from Tesla, Rivian, Nissan, Chevrolet, and more. 
    Is there a specific electric vehicle you're looking to insure, or would you like more details on any of these coverages?
    </example 4>
    
    <example 5>
    H: I'd like to get a quote for my car insurance.
    
    A: Certainly! I'd be happy to help you get a quote for your car insurance. 
    To provide you with an accurate quote, I'll need to collect some information about your vehicle and the primary driver. 
    Let's start with the basics:
    
    1. What is the make and model of your vehicle?
    2. What year was it manufactured?
    3. Approximately how many miles have you driven?
    4. What is the age of the primary driver?
    
    Once you provide this information, I'll use our quoting tool to generate a personalized insurance quote for you.
    </example 5>
    """

    また、Claudeが顧客とどのようにインタラクションすべきかについての「すべきこと」と「すべきでないこと」を概説する重要な指示も含める必要があります。これはブランドガードレールやサポートポリシーから引用される場合があります。

    ADDITIONAL_GUARDRAILS = """Please adhere to the following guardrails:
    1. Only provide information about insurance types listed in our offerings.
    2. If asked about an insurance type we don't offer, politely state 
    that we don't provide that service.
    3. Do not speculate about future product offerings or company plans.
    4. Don't make promises or enter into agreements it's not authorized to make.
    You only provide information and guidance.
    5. Do not mention any competitor's products or services.
    """

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

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

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

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

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

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

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

    TOOLS = [{
      "name": "get_quote",
      "description": "Calculate the insurance quote based on user input. Returned value is per month premium.",
      "input_schema": {
        "type": "object",
        "properties": {
          "make": {"type": "string", "description": "The make of the vehicle."},
          "model": {"type": "string", "description": "The model of the vehicle."},
          "year": {"type": "integer", "description": "The year the vehicle was manufactured."},
          "mileage": {"type": "integer", "description": "The mileage on the vehicle."},
          "driver_age": {"type": "integer", "description": "The age of the primary driver."}
        },
        "required": ["make", "model", "year", "mileage", "driver_age"]
      }
    }]
    
    def get_quote(make, model, year, mileage, driver_age):
        """Returns the premium per month in USD"""
        # You can call an http endpoint or a database to get the quote.
        # Here, we simulate a delay of 1 seconds and return a fixed quote of 100.
        time.sleep(1)
        return 100

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

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

    chatbot.pyというファイルで、Anthropic SDKとのインタラクションをカプセル化するChatBotクラスのセットアップから始めます。

    このクラスには、generate_messageとprocess_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"An error occurred: {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"An error occurred: {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("An error occurred: Unexpected response type")
    
       def handle_tool_use(self, func_name, func_params):
           if func_name == "get_quote":
               premium = get_quote(**func_params)
               return f"Quote generated: ${premium:.2f} per month"
          
           raise Exception("An unexpected tool was used")

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

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

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

    import streamlit as st
    from chatbot import ChatBot
    from config import TASK_SPECIFIC_INSTRUCTIONS
    
    def main():
       st.title("Chat with Eva, Acme Insurance Company's Assistant🤖")
    
       if "messages" not in st.session_state:
           st.session_state.messages = [
               {'role': "user", "content": TASK_SPECIFIC_INSTRUCTIONS},
               {'role': "assistant", "content": "Understood"},
           ]
    
       chatbot = ChatBot(st.session_state)
    
       # Display user and assistant messages skipping the first two
       for message in st.session_state.messages[2:]:
           # ignore tool use blocks
           if isinstance(message["content"], str):
               with st.chat_message(message["role"]):
                   st.markdown(message["content"])
    
       if user_msg := st.chat_input("Type your message here..."):
           st.chat_message("user").markdown(user_msg)
    
           with st.chat_message("assistant"):
               with st.spinner("Eva is thinking..."):
                   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

    プロンプトを評価する

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

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

    パフォーマンスを改善する

    複雑なシナリオでは、標準的なプロンプトエンジニアリング手法やガードレール実装戦略を超えて、パフォーマンスを改善するための追加戦略を検討することが有用な場合があります。以下は一般的なシナリオです:

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

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

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

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

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

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

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

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

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

    • ハルシネーションの削減:ファクトチェックメカニズムと引用を実装して、提供された情報に基づいて応答を根拠付けます。
    • 情報のクロスチェック:エージェントの応答が会社のポリシーと既知の事実に一致していることを確認します。
    • 契約上のコミットメントの回避:エージェントが承認されていない約束や合意を行わないようにします。
    • ジェイルブレイクの軽減:無害性スクリーンや入力バリデーションなどの方法を使用して、ユーザーがモデルの脆弱性を悪用して不適切なコンテンツを生成することを防止します。
    • 競合他社への言及の回避:ブランドフォーカスを維持し、競合他社の製品やサービスに言及しないように、競合他社言及フィルターを実装します。
    • Claudeをキャラクターに留める:長く複雑なインタラクション中でも、Claudeがスタイルやコンテキストを変更しないようにします。
    • 個人識別情報(PII)の削除:明示的に必要かつ承認されていない限り、応答からPIIを除去します。

    ストリーミングで体感応答時間を短縮する

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

    ストリーミングの実装方法:

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

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

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

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

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

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

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

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

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

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

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

    Retrieval Augmented Generation(RAG)クックブック

    より多くのサンプルコードと詳細なガイダンスについては、RAGクックブックレシピをご覧ください。

    引用クックブック

    情報の正確性と説明可能性を確保する方法については、引用クックブックレシピをご覧ください。