Skip to content

Commit 945f1dc

Browse files
committed
feat(customer_support): add a knowledge initialization check and save long-term memory after agent execution. The method of storing long-term memory is for demo purposes only
1 parent 067106a commit 945f1dc

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

02-use-cases/customer_support/agent.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,21 @@
6363
# 使用用户指定的知识库
6464
knowledge = KnowledgeBase(backend="viking", index=knowledge_collection_name)
6565
else:
66+
knowledge = KnowledgeBase(backend="viking", app_name=app_name)
67+
68+
should_init_knowledge = False
69+
try:
70+
test_knowledge = knowledge.search("商品退换策略", top_k=1)
71+
should_init_knowledge = not(len(test_knowledge) >= 0 and test_knowledge[0].content != "" and str(test_knowledge[0].content).__contains__("商品退换策略"))
72+
except Exception as e:
73+
should_init_knowledge = True
74+
75+
if should_init_knowledge:
6676
tos_bucket_name = os.getenv("DATABASE_TOS_BUCKET")
6777
if not tos_bucket_name:
6878
raise ValueError("DATABASE_TOS_BUCKET environment variable is not set")
69-
knowledge = KnowledgeBase(backend="viking", app_name=app_name)
7079
knowledge.add_from_directory(str(Path(__file__).resolve().parent) + "/pre_build/knowledge",
71-
tos_bucket_name=tos_bucket_name)
80+
tos_bucket_name=tos_bucket_name)
7281

7382
# 3. 配置长期记忆: 如果配置了Mem0,就使用Mem0,否则使用Viking,都不配置,默认创建一个Viking记忆库
7483
use_mem0 = os.getenv("DATABASE_MEM0_BASE_URL") and os.getenv("DATABASE_MEM0_API_KEY")
@@ -91,6 +100,10 @@ def before_agent_execution(callback_context: CallbackContext):
91100
# user_id = callback_context._invocation_context.user_id
92101
callback_context.state["user:customer_id"] = default_user_id
93102

103+
# 这里仅做记忆保存的演示,实际根据需求选择会话保存到长期记忆中
104+
async def after_agent_execution(callback_context: CallbackContext):
105+
session = callback_context._invocation_context.session
106+
await long_term_memory.add_session_to_memory(session)
94107

95108
after_sale_prompt = '''
96109
你是一名专业且耐心的在线客服,负责协助客户处理咨询及商品售后服务。可使用内部工具和知识库,但需严格遵守以下准则:
@@ -104,18 +117,19 @@ def before_agent_execution(callback_context: CallbackContext):
104117
6. 高效且准确地解决客户问题。
105118
106119
<关于维修>
107-
1. 维修或售后咨询时,优先索取产品序列号,便于查询产品信息。
108-
2. 若客户忘记序列号,可先核验身份再查询购买记录确认商品信息, 可以通过客户姓名、邮箱 等信息进行核验。
109-
3. 详细询问故障情况,参考知识库内容引导客户完成基础排查,重点排除操作不当等简单问题。若故障可以通过简易步骤解决,应优先鼓励客户自行操作修复。
110-
4. 产品不在保修范围时,确认客户是否接受自费维修。
120+
1. 知识库中包含 手机、电视等商品的保修策略、售后政策、操作不当等常见问题的解决方案,客户问题必须要先查询知识库,是否有相关解决方案,参考已有案例引导客户排查
121+
2. 涉及到具体商品的维修或售后咨询时,优先索取产品序列号,便于查询产品信息。
122+
3. 若客户忘记序列号,可先核验身份再查询购买记录确认商品信息, 可以通过客户姓名、邮箱 等信息进行核验。
123+
4. 详细询问故障情况,目前需要查询知识库内容的排查手册,来引导客户完成基础排查,重点排除操作不当等简单问题。若故障可以通过简易步骤解决,应优先鼓励客户自行操作修复。
124+
5. 产品不在保修范围时,确认客户是否接受自费维修。
111125
6. 创建维修单前,请确保完整收集必要信息(包括商品编号、故障描述、客户联系信息、维修时间等)。在正式提交前,需将全部信息发送给客户进行最终确认。
112126
7. 缺少必要信息时,礼貌询问客户补充。
113127
114128
<沟通要求>
115129
1. 保持耐心和礼貌,避免使用不专业用语和行为。
116130
2. 工具结果不能直接反馈给客户,需结合客户问题筛选、格式化并润色回复内容,确保清晰、准确、简洁。
117131
118-
请根据上述要求,准确、简明且专业地回答客户问题,并积极协助解决售后问题。
132+
请根据上述要求,准确、简明且专业地回答客户问题,并积极协助解决售后问题。 同时,全程你被禁止使用知识库以外未经过认证的解决方案, 所有解决方案必须要先从知识库查询解决方案。
119133
120134
当前登录客户为: {user:customer_id} 。
121135
''' + "当前时间为:" + datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@@ -135,6 +149,7 @@ def before_agent_execution(callback_context: CallbackContext):
135149
long_term_memory=long_term_memory,
136150
tools=crm_tool,
137151
before_agent_callback=before_agent_execution,
152+
after_agent_callback=after_agent_execution,
138153
run_processor=AuthRequestProcessor(),
139154
)
140155

@@ -178,10 +193,12 @@ def before_agent_execution(callback_context: CallbackContext):
178193
long_term_memory=long_term_memory,
179194
tools=[get_customer_info, get_customer_purchases],
180195
before_agent_callback=before_agent_execution,
196+
after_agent_callback=after_agent_execution,
181197
instruction=shopping_guide_prompt,
182198
run_processor=AuthRequestProcessor(),
183199
)
184200

201+
185202
agent = Agent(
186203
name="customer_support_agent",
187204
model_name=model_name,
@@ -197,6 +214,7 @@ def before_agent_execution(callback_context: CallbackContext):
197214
''',
198215
sub_agents=[after_sale_agent, shopping_guide_agent],
199216
long_term_memory=long_term_memory,
217+
after_agent_callback=after_agent_execution,
200218
)
201219

202220
runner = Runner(agent=agent, app_name=app_name)

0 commit comments

Comments
 (0)