6363 # 使用用户指定的知识库
6464 knowledge = KnowledgeBase (backend = "viking" , index = knowledge_collection_name )
6565else :
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记忆库
7483use_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
95108after_sale_prompt = '''
96109你是一名专业且耐心的在线客服,负责协助客户处理咨询及商品售后服务。可使用内部工具和知识库,但需严格遵守以下准则:
@@ -104,18 +117,19 @@ def before_agent_execution(callback_context: CallbackContext):
1041176. 高效且准确地解决客户问题。
105118
106119<关于维修>
107- 1. 维修或售后咨询时,优先索取产品序列号,便于查询产品信息。
108- 2. 若客户忘记序列号,可先核验身份再查询购买记录确认商品信息, 可以通过客户姓名、邮箱 等信息进行核验。
109- 3. 详细询问故障情况,参考知识库内容引导客户完成基础排查,重点排除操作不当等简单问题。若故障可以通过简易步骤解决,应优先鼓励客户自行操作修复。
110- 4. 产品不在保修范围时,确认客户是否接受自费维修。
120+ 1. 知识库中包含 手机、电视等商品的保修策略、售后政策、操作不当等常见问题的解决方案,客户问题必须要先查询知识库,是否有相关解决方案,参考已有案例引导客户排查
121+ 2. 涉及到具体商品的维修或售后咨询时,优先索取产品序列号,便于查询产品信息。
122+ 3. 若客户忘记序列号,可先核验身份再查询购买记录确认商品信息, 可以通过客户姓名、邮箱 等信息进行核验。
123+ 4. 详细询问故障情况,目前需要查询知识库内容的排查手册,来引导客户完成基础排查,重点排除操作不当等简单问题。若故障可以通过简易步骤解决,应优先鼓励客户自行操作修复。
124+ 5. 产品不在保修范围时,确认客户是否接受自费维修。
1111256. 创建维修单前,请确保完整收集必要信息(包括商品编号、故障描述、客户联系信息、维修时间等)。在正式提交前,需将全部信息发送给客户进行最终确认。
1121267. 缺少必要信息时,礼貌询问客户补充。
113127
114128<沟通要求>
1151291. 保持耐心和礼貌,避免使用不专业用语和行为。
1161302. 工具结果不能直接反馈给客户,需结合客户问题筛选、格式化并润色回复内容,确保清晰、准确、简洁。
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+
185202agent = 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
202220runner = Runner (agent = agent , app_name = app_name )
0 commit comments