底层技术大揭秘!AI智能导购如何重塑购物体验

简介: 双十一期间,淘宝内测AI助手“淘宝问问”,基于阿里通义大模型,旨在提升用户在淘宝上的商品搜索和推荐效率。该助手通过品牌推荐、兴趣商品推荐和关联问题三大板块,提供个性化购物体验。其背后采用多智能体架构,包括规划助理和商品导购助理,通过对话历史和用户输入,实现精准商品推荐。此外,文章还介绍了如何快速部署此解决方案,并探讨了其对现代购物体验的影响。

前言

在刚过去不久的双十一中,相信不少消费者都经历了购物狂欢带来的兴奋与挑战。随着电商行业的迅猛发展,线上购物已成为人们生活中不可或缺的一部分。然而,在海量的商品信息面前,如何快速找到心仪的产品、获得个性化的推荐,成为了众多消费者和商家共同关注的问题。

自今年9月14日以来,淘宝就开始内测AI助手“淘宝问问”,它接入阿里通义大模型,旨在帮助用户提升在淘宝上的商品推荐和搜索效率。

换做传统的购物方式,大多是进去“关键词搜索”➡“商品展示页”,当用户搜索较为复杂或模糊的需求的时候,搜索的结果常常不尽如意,购买效率往往较低,所以,为了提升用户在复杂需求场景下的使用效率,淘宝问问为商家和用户分别提供了提升种草内容生产效率的AI内容工具,以及提升商品搜索效率的AI导购工具。

image.png

比如说,我们可以直接提问:“有哪些小众耐磨女士运动鞋?”

淘宝问问提供的答案分为三个主要板块:

  1. 品牌推荐:展示一系列精选的品牌供用户选择;

  2. 兴趣商品推荐:呈现用户“可能感兴趣”的商品链接;

  3. 关联问题:提供一些与当前查询相关的周边问题,方便用户进一步探索。

其中,“兴趣商品推荐”推荐基于用户的日常搜索数据。例如,如果用户之前搜索过女士运动鞋品牌,这些品牌的相关商品将被优先推荐,确保个性化和相关性。

image.png

同时,如果我们有明确的需求,也可以采用逐轮对话的方式直接挑选出符合要求的商品:

0c44e5bd-d4b7-400b-b522-e8bf923c16a7.gif

那么如此好用且强大的功能是如何实现的呢?本文就将深入探讨阿里云提供的《主动式智能导购AI助手构建》解决方案,揭秘其背后的技术原理,分享部署实践中的心得体会,并讨论该技术对重塑现代购物体验的深远影响。希望通过对这一先进工具的解析,能够为更多开发者和技术爱好者带来启发,同时也为寻求优化用户体验的电商从业者提供有价值的参考。

主动式智能导购 AI 助手构建

技术解决方案地址:https://www.aliyun.com/solution/tech-solution/build-an-ai-shopping-assistant

方案架构

image.png

Multi-Agent架构主要以规划助理(Router Agent)作为核心,接收用户的购买意向或参数输入,并根据对话历史和用户输入选择合适的商品导购助理(如手机导购、冰箱导购、电视导购)进行回复。商品导购助理(Shopping Agent)会主动询问用户的商品参数偏好,收集完整参数后,系统通过百炼应用或SQL查询商品数据库进行智能商品检索,生成推荐的商品列表。用户与各助理的对话历史为每个助理的决策提供了参考依据,确保推荐更加精准和个性化。

【注释】

Multi-Agent架构:多智能体架构,它模拟了现实世界中代理(agent)之间的互动与合作。在这种架构中,系统由多个自主的、智能的代理组成,每个代理都能执行特定的任务,并且能够根据环境变化做出决策。代理之间通过消息传递或共享知识库进行沟通和协作,以完成复杂的任务或解决问题。本次涉及到的Agent有多个,分别是规划助理(Router Agent)和商品导购助理(Shopping Agent),而商品导购助理(Shopping Agent)又分为手机导购助理、电视导购助理、冰箱导购助理。

百炼平台:百炼平台是阿里云推出的一个大型预训练模型服务平台,它基于深度学习技术,旨在为开发者和企业提供强大的自然语言处理(NLP)和机器学习能力。对于文中提到的商品检索场景,百炼平台可以用于理解用户的查询意图,解析商品参数偏好,并且智能化地从海量的商品信息中检索出最符合用户需求的商品推荐结果。这不仅提升了搜索的效率,也增强了用户体验,使得导购过程更加个性化和精准。

快速部署

回到解决方案,点击立即部署,跳转至操作文档界面

image.png

访问已有的函数计算应用模板,进入如下界面:

image.png

进入到百炼平台中,点击个人头像,获取自己的API-Key

image.png

选择 直接部署 ,填入自己的API-Key,其它表单项保持默认,单击页面左下角的创建并部署默认环境,等待项目部署完成即可(预计耗时 1 分钟)

image.png

开始部署后会跳转至如下界面:

image.png

当看到部署完成,点击访问域名:

image.png

此时,网站一键部署完成:

image.png

这里我们也可以借助官方文档学习一下,看看官方编写的Agent prompt设定是什么样的

ROUTER_AGENT_INSTRUCTION = """你是一个问题分类器
请根结合用户的提问和上下文判断用户是希望了解的商品具体类型。

注意,你的输出结果只能是下面列表中的某一个,不能包含任何其他信息:
- 手机(用户在当前输入中提到要买手机,或正在进行手机参数的收集)
- 电视机(用户在当前输入中提到要买电视机,或正在进行电视参数的收集)
- 冰箱(用户在当前输入中提到要买冰箱,或正在进行冰箱参数的收集)
- 其他(比如用户要买非上述三个产品、用户要买不止一个产品等情况)

输出示例:
手机
"""
router_agent = Assistants.create(
    model="qwen-plus",
    name='引导员,路由器',
    description='你是一个商城的引导员,负责将用户问题路由到不同的导购员。',
    instructions=ROUTER_AGENT_INSTRUCTION
)

上述是规划助理的设定prompt,我们可以清晰的看到,该设定明确规划助理的任务是作为问题分类器,根据用户的提问和上下文来确定用户感兴趣的商品类型,并且严格规定输出只能是从预定义列表中选择一个类别,即手机、电视机或冰箱,以及一个兜底的“其他”选项,用于处理不在上述三个主要类别内的查询。这种严格的输出限制确保了输出的一致性和简洁性,便于后续处理逻辑直接使用这些信息,同时通过提供具体的判断标准提高了分类的准确性。

但是,在实际的业务中,这种设定在面对复杂或模糊的用户请求时也会缺乏灵活性,尤其是在用户有多个购物意向或需要更深入理解上下文的情况下,可能会导致分类不准确或过于泛化的问题,所以此处并不能直接投入到生产环境中去使用。

在识别意图之后,会再分理至不同的Agent进行处理,通过预先定义的映射表agent_map,系统能够依据用户的问题类型选择最合适的导购员来提供服务。如果用户的查询被分类为“手机”、“电视机”或“冰箱”,系统将会把请求转交给专门负责该类商品的导购员代理,由它们来生成详细的回复内容。

agent_map = {
   
    "意图分类": router_agent.id,
    "手机": mobilephone_guide_agent.id,
    "冰箱": fridge_guide_agent.id,
    "电视机": tv_guide_agent.id
}

def chat(input_prompt, thread_id):
    # 首先根据用户问题及 thread 中存储的历史对话识别用户意图
    router_agent_response = get_agent_response(agent_name="意图分类", input_prompt=input_prompt, thread_id=thread_id)
    classification_result = parse_streaming_response(router_agent_response)

    response_json = {
   
        "content": "",
    }
    # 如果分类识别为其他时,引导用户调整提问方式
    if classification_result == "其他":
        return_json["content"] = "不好意思,我没有理解您的问题,能换个表述方式么?"
        return_json['current_agent'] = classification_result
        return_json['thread_id'] = thread_id
        yield f"{json.dumps(return_json)}\n\n"
    # 如果分类是手机、电视机或冰箱时,让对应的 Agent 进行回复
    else:
          agent_response = get_agent_response(agent_name=classification_result, input_prompt=input_prompt, thread_id=thread_id)
        for chunk in agent_response:
            response_json["content"] = chunk
            response_json['current_agent'] = classification_result
            response_json['thread_id'] = thread_id
            yield f"{json.dumps(response_json)}\n\n"

其实也可以看出,每个特定商品类型的Agent都经过了优化,可以较好地理解和回应与之相关的具体问题和需求。如果分类结果是“其他”,则意味着用户的查询不符合预设的商品类别,这时系统会提示用户调整提问方式,以获得更准确的帮助。整个过程确保了用户的问题能够被快速且精准地路由到最适合的处理节点,从而提高了服务效率和用户体验。

应用于生产环境

上述其实也提到,demo确实无法直接适用于生产环境,不过好在官方文档中给出了适配生产环境的方式

首先第一点,适配生产环境必须要修改对应的知识库内容

这里又不得不提到我们的百炼平台了,关于这一块的操作步骤可以参考百炼官方文档

解决方案这里写的确实太简洁了,大家参考上面的百炼官方文档即可

image.png

第二点,也是最关键的,就是修改源码中的prompt

这一块确实也没办法直接给出,并且需要反复调试才可以达到最优,这里周周推荐一个取巧的方式,就是将官方的prompt丢给千问,让千问模仿给出符合自己需求的

比如手机导购助理的Agent prompt设定如下:

MOBILEPHONE_GUIDE_AGENT_INSTRUCTION = """你是负责给顾客推荐手机的智能导购员。

你需要按照下文中【手机的参数列表】中的顺序来主动询问用户需要什么参数的手机,一次只能问一个参数,不要对一个参数进行重复提问。
如果用户告诉了你这个参数值,你要继续询问剩余的参数。
如果用户询问这个参数的概念,你要用你的专业知识为他解答,并继续向他询问需要哪个参数。
如果用户有提到不需要继续购买商品,请输出:感谢光临,期待下次为您服务。

【手机的参数列表】
1.使用场景:【游戏、拍照、看电影】
2.屏幕尺寸:【6.4英寸、6.6英寸、6.8英寸、7.9英寸折叠屏】
3.RAM空间+存储空间:【8GB+128GB、8GB+256GB、12GB+128GB、12GB+256GB】

如果【参数列表】中的参数都已收集完毕,你要问他:“请问您是否确定购买?”,并同时将顾客选择的参数信息输出,如:用于拍照|8GB+128GB|6.6英寸。问他是否确定需要这个参数的手机。如果顾客决定不购买,要问他需要调整哪些参数。

如果顾客确定这个参数符合要求,你要按照以下格式输出:
【使用场景:拍照,屏幕尺寸:6.8英寸,存储空间:128GB,RAM空间:8GB】。请你只输出这个格式的内容,不要输出其它信息。"""

mobilephone_guide_agent = Assistants.create(
    model="qwen-max",
    name='手机导购',
    description='你是一个手机导购,你需要询问顾客想要什么参数的手机。',
    instructions=MOBILEPHONE_GUIDE_AGENT_INSTRUCTION
)

我们想写一个在线问诊的Agent prompt设定,可以如此提问:

已知手机导购助理prompt如下:XXX

请你模仿帮我构建一个适用于在线问诊的Agent prompt设定

通义给出的回复如下:

ONLINE_DIAGNOSIS_AGENT_INSTRUCTION = """你是负责提供在线健康咨询服务的智能医疗助手。

你的任务是根据【问诊参数列表】中的顺序,逐步询问用户有关其症状、病史等信息,每次只问一个问题,并确保不重复提问。如果用户提供了相关信息,继续询问下一个参数。如果用户对某个术语或概念有疑问,请用通俗易懂的语言解释,并继续询问其他参数。如果用户表示不再需要服务或感觉不适,请输出:“感谢您的信任,祝您早日康复,如有需要随时联系我们。”

【问诊参数列表】
1. 主要症状:请描述您当前最困扰的症状(如头痛、咳嗽、发热等)。
2. 症状持续时间:这些症状已经持续多久了?
3. 既往病史:您是否有任何慢性疾病或其他健康问题?(如高血压、糖尿病等)
4. 当前用药情况:您目前正在服用哪些药物?
5. 过敏史:您是否对某些食物、药物或物质过敏?
6. 其他相关信息:您还有其他想要告知医生的信息吗?

当所有【问诊参数列表】中的信息都收集完毕后,你需要告诉用户:“我们已经收集到了您的基本信息,接下来会根据您提供的信息进行初步分析。”然后向用户提出:“请问您是否希望我们为您预约一位专业医生进行详细咨询?”同时将用户提供的信息总结并展示给用户确认。

如果用户同意进一步咨询,则按照以下格式输出:
【主要症状:头痛,症状持续时间:三天,既往病史:,当前用药情况:,过敏史:青霉素】

如果你无法提供具体的医疗建议或诊断,一定要提醒用户及时就医,并强调你所提供的只是基于现有信息的初步建议,不能代替专业医生的面对面诊疗。确保始终以用户的健康和安全为优先考虑。

请注意,在整个沟通过程中保持耐心和同情心,尊重用户的隐私和感受。"""

online_diagnosis_agent = Assistants.create(
    model="qwen-max",
    name='在线医疗助手',
    description='你是一个在线医疗助手,负责询问患者有关症状、病史等信息,为用户提供初步健康咨询。',
    instructions=ONLINE_DIAGNOSIS_AGENT_INSTRUCTION
)

当然,这个还可以进一步细化【问诊参数列表】,给出prompt如下:

请根据医生就诊的实际过程来优化【问诊参数列表】

最终优化后的Agent prompt设定如下:

ONLINE_DIAGNOSIS_AGENT_INSTRUCTION = """你是负责提供在线健康咨询服务的智能医疗助手。

你的任务是根据【问诊参数列表】中的顺序,逐步询问用户有关其症状、病史等信息,每次只问一个问题,并确保不重复提问。如果用户提供了相关信息,继续询问下一个参数。如果用户对某个术语或概念有疑问,请用通俗易懂的语言解释,并继续询问其他参数。如果用户表示不再需要服务或感觉不适,请输出:“感谢您的信任,祝您早日康复,如有需要随时联系我们。”

【问诊参数列表】
1. **基本信息**- 您的年龄、性别和职业是什么?
2. **主要症状**- 请描述您当前最困扰的症状(如头痛、咳嗽、发热等),并说明这些症状首次出现的时间。
3. **症状特点**- 这些症状是否有特定的时间模式?例如,是否在早晨更为严重,或者是在某些活动后加剧?
4. **伴随症状**- 是否还有其他伴随症状?比如恶心、呕吐、呼吸困难等。
5. **既往病史**- 您是否有任何慢性疾病或其他健康问题?(如高血压、糖尿病等)
6. **家族病史**- 您的直系亲属中是否有人患有类似症状或相关疾病?
7. **用药情况**- 您目前正在服用哪些药物?包括处方药、非处方药、草药或补充剂。
8. **过敏史**- 您是否对某些食物、药物或物质过敏?
9. **生活方式与环境因素**- 您的生活方式如何?例如,饮食习惯、运动频率、吸烟饮酒情况等。
   - 您的工作或生活环境是否存在可能影响健康的因素?
10. **近期变化**- 最近几周内,您的生活或工作环境中是否发生了重大变化?
11. **其他相关信息**- 您还有其他想要告知医生的信息吗?

当所有【问诊参数列表】中的信息都收集完毕后,你需要告诉用户:“我们已经收集到了您的基本信息,接下来会根据您提供的信息进行初步分析。”然后向用户提出:“请问您是否希望我们为您预约一位专业医生进行详细咨询?”同时将用户提供的信息总结并展示给用户确认。

如果用户同意进一步咨询,则按照以下格式输出:
【基本信息:年龄30,性别男,职业程序员,主要症状:头痛,症状首次出现时间:三天前,症状特点:早晨较重,伴随症状:,既往病史:,家族病史:,用药情况:,过敏史:青霉素,生活方式:久坐办公室,近期变化:最近加班较多】

如果你无法提供具体的医疗建议或诊断,一定要提醒用户及时就医,并强调你所提供的只是基于现有信息的初步建议,不能代替专业医生的面对面诊疗。确保始终以用户的健康和安全为优先考虑。

请注意,在整个沟通过程中保持耐心和同情心,尊重用户的隐私和感受。"""

online_diagnosis_agent = Assistants.create(
    model="qwen-max",
    name='在线医疗助手',
    description='你是一个在线医疗助手,负责询问患者有关症状、病史等信息,为用户提供初步健康咨询。',
    instructions=ONLINE_DIAGNOSIS_AGENT_INSTRUCTION
)

在测试完成后,可以开始进行第三步,将智能导购集成到已有的网站中,这里可以直接参考10分钟在网站上增加一个AI助手

其实最终效果就和这个类似:

image.png

也可以参看我以前的文章:详解基于百炼平台及函数计算快速上线网页AI助手

总结

这篇体验下来,说实话,与之前【10分钟在网站上增加一个AI助手】的逻辑基本一致,只是由单Agent变成了多Agent,虽然听起来只是数量多了点,但是实际上是代表了框架和服务能力的一次质的飞跃

在单Agent模式下,所有的用户请求都被同一个通用的AI助手处理,这可能导致对于复杂或多意图的问题响应不够精确或者需要更多的时间来理解上下文。而多Agent架构允许根据用户的输入和需求动态地选择最合适的专家级Agent来进行对话管理,从而确保了更专业、更快速的服务响应。例如,在电商场景中,当用户询问关于手机的信息时,系统会自动将请求转交给专门负责手机导购的Agent;如果用户随后转向咨询电视机,则另一个专精于电视产品的Agent会接手继续服务。

整个解决方案确实也非常优秀,基本没有槽点,具有很高的指导性和可操作性!好评!

相关文章
|
7天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
23天前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
27天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
18天前
|
并行计算 前端开发 物联网
全网首发!真·从0到1!万字长文带你入门Qwen2.5-Coder——介绍、体验、本地部署及简单微调
2024年11月12日,阿里云通义大模型团队正式开源通义千问代码模型全系列,包括6款Qwen2.5-Coder模型,每个规模包含Base和Instruct两个版本。其中32B尺寸的旗舰代码模型在多项基准评测中取得开源最佳成绩,成为全球最强开源代码模型,多项关键能力超越GPT-4o。Qwen2.5-Coder具备强大、多样和实用等优点,通过持续训练,结合源代码、文本代码混合数据及合成数据,显著提升了代码生成、推理和修复等核心任务的性能。此外,该模型还支持多种编程语言,并在人类偏好对齐方面表现出色。本文为周周的奇妙编程原创,阿里云社区首发,未经同意不得转载。
11735 12
|
12天前
|
人工智能 自然语言处理 前端开发
100个降噪蓝牙耳机免费领,用通义灵码从 0 开始打造一个完整APP
打开手机,录制下你完成的代码效果,发布到你的社交媒体,前 100 个@玺哥超Carry、@通义灵码的粉丝,可以免费获得一个降噪蓝牙耳机。
5398 14
|
19天前
|
人工智能 自然语言处理 前端开发
用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。本教程完全免费,而且为大家准备了 100 个降噪蓝牙耳机,送给前 100 个完成的粉丝。获奖的方式非常简单,只要你跟着教程完成第一课的内容就能获得。
9611 15
|
1月前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
17天前
|
人工智能 自然语言处理 前端开发
什么?!通义千问也可以在线开发应用了?!
阿里巴巴推出的通义千问,是一个超大规模语言模型,旨在高效处理信息和生成创意内容。它不仅能在创意文案、办公助理、学习助手等领域提供丰富交互体验,还支持定制化解决方案。近日,通义千问推出代码模式,基于Qwen2.5-Coder模型,用户即使不懂编程也能用自然语言生成应用,如个人简历、2048小游戏等。该模式通过预置模板和灵活的自定义选项,极大简化了应用开发过程,助力用户快速实现创意。
|
5天前
|
机器学习/深度学习 人工智能 安全
通义千问开源的QwQ模型,一个会思考的AI,百炼邀您第一时间体验
Qwen团队推出新成员QwQ-32B-Preview,专注于增强AI推理能力。通过深入探索和试验,该模型在数学和编程领域展现了卓越的理解力,但仍在学习和完善中。目前,QwQ-32B-Preview已上线阿里云百炼平台,提供免费体验。
|
13天前
|
人工智能 C++ iOS开发
ollama + qwen2.5-coder + VS Code + Continue 实现本地AI 辅助写代码
本文介绍在Apple M4 MacOS环境下搭建Ollama和qwen2.5-coder模型的过程。首先通过官网或Brew安装Ollama,然后下载qwen2.5-coder模型,可通过终端命令`ollama run qwen2.5-coder`启动模型进行测试。最后,在VS Code中安装Continue插件,并配置qwen2.5-coder模型用于代码开发辅助。
917 5