以下是一些关键指标,表明您应该使用像 Claude 这样的 LLM 来自动化客户支持流程的部分环节:
选择 Claude 而非其他 LLM 的一些考虑因素:
概述理想的客户交互,以定义您期望客户如何以及何时与 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."""User 轮次中时效果最好(唯一的例外是角色提示)。请在使用系统提示为 Claude 赋予角色中了解更多信息。最好将复杂的提示分解为子部分,一次编写一个部分。对于每个任务,您可能会发现按照逐步流程来定义 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>
"""现在我们有了静态内容,让我们添加至少 4-5 个"良好"交互示例来指导 Claude 的回复。这些示例应代表您理想的客户交互,可以包括护栏、工具调用等。
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.
"""现在让我们将所有这些部分组合成一个字符串作为我们的提示使用。
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": "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 类,该类将封装与 Anthropic SDK 的交互。
该类应有两个主要方法: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 方法测试部署此代码。这个 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提示通常需要测试和优化才能达到生产就绪状态。要确定解决方案的就绪程度,请使用结合定量和定性方法的系统化流程来评估聊天机器人的性能。基于您定义的成功标准创建强大的实证评估将使您能够优化提示。
在复杂场景中,除了标准的提示工程技术和护栏实施策略之外,考虑额外的策略来提升性能可能会有所帮助。以下是一些常见场景:
在处理大量静态和动态上下文时,将所有信息包含在提示中可能导致高成本、较慢的响应时间以及达到上下文窗口限制。在这种情况下,实施检索增强生成(RAG)技术可以显著提高性能和效率。
通过使用像 Voyage 这样的嵌入模型将信息转换为向量表示,您可以创建一个更具可扩展性和响应性的系统。这种方法允许根据当前查询动态检索相关信息,而不是在每个提示中包含所有可能的上下文。
为支持用例实施 RAG RAG 配方已被证明可以在具有大量上下文需求的系统中提高准确性、减少响应时间并降低 API 成本。
在处理需要实时信息的查询(如账户余额或保单详情)时,基于嵌入的 RAG 方法是不够的。相反,您可以利用工具使用来显著增强聊天机器人提供准确、实时响应的能力。例如,您可以使用工具使用来查找客户信息、检索订单详情以及代表客户取消订单。
这种方法在我们的工具使用:客户服务智能体配方中有详细说明,允许您将实时数据无缝集成到 Claude 的响应中,并提供更个性化和高效的客户体验。
在部署聊天机器人时,特别是在客户服务场景中,防止与滥用、超范围查询和不当响应相关的风险至关重要。虽然 Claude 本身对此类场景具有弹性,但以下是加强聊天机器人护栏的额外步骤:
在处理可能较长的响应时,实施流式传输可以显著提高用户参与度和满意度。在这种情况下,用户逐步接收答案,而不是等待整个响应生成完毕。
以下是实施流式传输的方法:
在某些情况下,流式传输使得使用具有更高基础延迟的更高级模型成为可能,因为渐进式显示减轻了较长处理时间的影响。
随着聊天机器人复杂性的增长,您的应用程序架构可以相应演进。在向架构添加更多层之前,请考虑以下不太详尽的选项:
如果您的聊天机器人处理极其多样化的任务,您可能需要考虑添加一个单独的意图分类器来路由初始客户查询。对于现有应用程序,这将涉及创建一个决策树,通过分类器路由客户查询,然后路由到专门的对话(具有自己的工具集和系统提示)。请注意,此方法需要对 Claude 进行额外调用,可能会增加延迟。
虽然我们的示例侧重于在 Streamlit 环境中可调用的 Python 函数,但部署 Claude 用于实时支持聊天机器人需要一个 API 服务。
以下是您可以采取的方法:
创建 API 包装器:围绕您的分类函数开发一个简单的 API 包装器。例如,您可以使用 Flask API 或 Fast API 将代码包装成 HTTP 服务。您的 HTTP 服务可以接受用户输入并完整返回助手响应。因此,您的服务可以具有以下特征:
构建 Web 界面:实现一个用户友好的 Web UI,用于与 Claude 驱动的智能体进行交互。
Was this page helpful?