Loading...
    • 構築
    • 管理
    • モデルと価格
    • クライアントSDK
    • APIリファレンス
    Search...
    ⌘K
    最初のステップ
    Claudeの紹介クイックスタート
    Claudeで構築
    機能概要Messages APIの使用Claude APIスキル停止理由の処理
    モデル機能
    拡張思考適応的思考努力タスク予算(ベータ版)高速モード(ベータ版:研究プレビュー)構造化出力引用ストリーミングメッセージバッチ処理検索結果ストリーミング拒否多言語サポート埋め込み
    ツール
    概要ツール使用の仕組みウェブ検索ツールウェブ取得ツールコード実行ツールアドバイザーツールメモリツールBashツールコンピュータ使用ツールテキストエディタツール
    ツールインフラストラクチャ
    ツールリファレンスツール検索プログラマティックツール呼び出し細粒度ツールストリーミング
    コンテキスト管理
    コンテキストウィンドウ圧縮コンテキスト編集プロンプトキャッシングトークンカウント
    ファイルの操作
    Files APIPDFサポート画像とビジョン
    スキル
    概要クイックスタートベストプラクティスエンタープライズ向けスキルAPI内のスキル
    MCP
    リモートMCPサーバーMCPコネクタ
    プロンプトエンジニアリング
    概要プロンプティングのベストプラクティスConsoleプロンプティングツール
    テストと評価
    成功を定義して評価を構築ConsoleでEvaluation Toolを使用レイテンシの削減
    ガードレールの強化
    幻覚の削減出力の一貫性向上ジェイルブレイク対策プロンプトリークの削減
    リソース
    用語集
    概要チケットルーティングカスタマーサポートエージェントコンテンツモデレーション法務要約
    リリースノート
    Claude Platform
    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
    • 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
    • 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時間体制のサポートを提供し、待機時間を短縮し、正確な回答と肯定的なインタラクションで高いサポート量を管理する方法について説明します。

    Was this page helpful?

    • Claudeで構築する前に
    • カスタマーサポートチャットにClaudeを使用するかどうかを決定する
    • Claudeをカスタマーサービスエージェントとして実装する方法
    • 適切なClaudeモデルを選択する
    • サポートワークフローにClaudeを統合する

    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. 会話管理

      • トピック内にとどまる(自動車保険)

    成功基準を確立する

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

    Claudeが定義されたタスクをどの程度成功裏に実行するかを評価するために使用できる基準とベンチマークは以下の通りです:

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

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

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

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

    カスタマーサポートチャットの場合、Claude Opus 4.7は知能、レイテンシ、コストのバランスを取るのに適しています。ただし、複数のプロンプト、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が顧客とどのようにインタラクションすべきかについてのDo'sとDon'tsを概説する重要な指示を含めたいでしょう。 これはブランドガードレールまたはサポートポリシーから引き出されるかもしれません。

    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.
    """

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

    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というファイルで、ChatBotクラスの設定を開始します。このクラスはAnthropicSDKとのインタラクションをカプセル化します。

    クラスには2つの主なメソッドがあります:generate_messageとprocess_user_input。

    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")

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

    このコードを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 Consoleには、様々なシナリオの下でプロンプトをテストできる評価ツールが含まれています。

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

    複雑なシナリオでは、標準的なプロンプトエンジニアリング技術とガードレール実装戦略を超えたパフォーマンス改善のための追加戦略を検討することが有用かもしれません。一般的なシナリオは以下の通りです:

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

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

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

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

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

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

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

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

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

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

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

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

    ストリーミングを実装する方法は以下の通りです:

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

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

    チャットボットをスケーリングする

    チャットボットの複雑さが増すにつれて、アプリケーションアーキテクチャは一致するように進化できます。アーキテクチャにさらなるレイヤーを追加する前に、以下の詳細でない選択肢を検討してください:

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

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

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

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

    これにアプローチする方法は以下の通りです:

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

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

    検索拡張生成(RAG)クックブック

    RAGクックブックレシピにアクセスして、より多くのコード例と詳細なガイダンスを取得します。

  1. オフトピックの質問を関連するサブジェクトに戻す
  2. 見積もり生成

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

    引用クックブックレシピを探索して、情報の正確性と説明可能性を確保する方法を学びます。