快递 100 用工作流打造公众号智能客服

说明:
作者:黑桃丁🐕
快递100目前日均查询量达4亿次,在快递100公众号中,每天有数千名用户通过公众号进行提问和查询,在对接基于腾讯混元打造的智能体后,实现了从小助手到智能专家的智能跃迁。


痛点场景

在没有接入智能体前,作为聚焦快递聚合服务场景的公众号,快递100常会遇到几大问题:
用户无法用自然语言进行查询
当用户想要获取特定信息时,他们往往希望能够通过语音或者自然语言来进行查询,但在此之前,不止是快递100公众号,所有公众号都不支持这类便捷的查询方式。
多轮对话中的 “健忘症”
当用户询问一个包裹的状态时,需要在几轮对话中不断补充信息。然而由于公众号没有引入有效的长期和短期记忆机制,可能会忘记之前聊过的内容,甚至有时还会混淆用户的问题。
信息展示 不够直观
即便用户能够提出具体的疑问,比如想知道包裹是从哪个地方发出的,但在没有AI智能体的情况下,公众号只能机械地提供标准格式的物流详情,而不能有针对性地提炼出用户关心的关键信息。

效果演示

快递 100通过腾讯元器搭建智能体,接入公众号后,用户可以通过自然语言交互,轻松实现一句话查询快递状态、询问快递费用、获取智能的时效与价格对比,以及查询特定物品是否可以邮寄。
这些功能为用户带来了极大的便利。自从2024年8月1日快递100公众号智能体正式上线以来,已累计活跃用户数达到近10万人,总共产生了二十万次对话

智能体功能规划

创建思路

为了更好地服务用户,快递100这样的快递聚合平台,到底该创建一个怎样的智能体呢?🤔
1.寄快递 📦
这个功能听起来很酷,但其实挺复杂的。用户需要提供收寄件人的手机号、地址、物品信息、快递公司,还要处理交易和售后环节。现阶段用智能体实现的话,交互太繁琐,开发成本也很高。最重要的是,用户可能会担心自己的隐私数据安全问题,反而不如传统的表单提交效果好。所以,这个功能先pass。❌
2.查快递 🔍
这个必须有!用户只要甩个快递单号过来,智能体就能迅速查出物流详情。这可是高频使用的功能,智能体在这方面可是高手,能快速提取信息,总结数据。用户再也不用从一大段文本或者截图里费劲巴拉地找单号了,一句话的事儿!✅
3.快递运费预估 💰
这个也得安排上!用户只要提供出发地、目的地和包裹重量,智能体就能帮他们查到各家快递的预估运费,还能比价推荐!✅
4.违禁品判别 🚨
这个功能也很有必要。喷雾能不能寄?香烟能不能寄?这些对于普通用户来说可能是个谜,但智能体就能当个贴心小助手,帮他们判别哪些能寄哪些不能寄。✅
5.快递行业知识科普 📚
这个可以有!毕竟隔行如隔山,不是快递行业的小伙伴们可能连最基本的快递知识都不清楚。智能体就能化身知识小百科,解答疑惑,比如体积重是啥玩意。✅
总结下来,快递100智能体规划了四大功能:查快递、快递运费预估、违禁品判别、快递行业知识科普。这样一来,无论是日常查询还是知识科普,都能轻松搞定!

功能架构图



搭建过程

咱们已经敲定了快递100智能体的基本功能,现在得聊聊这些功能是如何在腾讯元器上实现和部署的。

Step 0:深入了解腾讯元器的功能

在开始智能体开发之前,我们需要全面了解腾讯元器件所提供的功能,以便更有效地进行开发和优化。以下是腾讯元器件的四大核心模块:
智能体:包含模型选择,提示词详细设定,开场白,建议引导问题,以及插件、工作流、知识库的配置。
插件(外部API):有官方插件,也可以支持用户自定义插件用于业务服务给智能体提供接口数据。
工作流:一种"流程图"式的低代码编辑工具,可以任意编排插件、知识库、大模型节点的工作顺序和调用传参,从而精确控制智能体中部分任务的运行逻辑。
知识库:支持doc、docx、txt、PDF四种格式,并且支持直接使用公众号素材文章。

Step 1:智能体设置

咱们已经对腾讯元器的功能有了大概的了解,现在可以动手创建和设置我们的快递100智能体啦!点击"创建智能体"按钮,咱们就来到了智能体设置的主页面。这里有几个关键点需要搞定:
模型设置:这里可以直接使用默认设置。如果需要,可以调整"回复随机性"和"回复最大长度"两个选项。例如,如果需要创作创意类的回复,可以调高"回复随机性";而对于我们这个智能体,我们希望回复尽可能精确,因此将"回复随机性"设置为0。
名称、简介、头像:根据智能体的特点进行设置。
详细设定:这是设置智能体的人设与回复逻辑的部分。智能体会根据大语言模型对人物设定和回复逻辑的理解,来响应用户问题。因此,人设与回复逻辑编写得越清晰明确,智能体的回复也会越符合预期。可以使用以下基本公式:角色 + 技能 + 约束 + 例子 + 输出格式。
内容
说明
示例
角色
描述智能体所扮演的角色或职责、回复风格。
您是一位快递领域的专家,精通快递查询、快递价格查询、违禁品判别等相关事务。为用户提供全面、细致、清晰的信息。
技能
描述智能体的功能和工作流程,约定智能体在不同的场景下如何回答用户问题。
### 技能1:寄件违禁品判别-用户输入物品信息时,根据[寄件违禁品判定]判别是否是违禁品。
约束与限制
如果您想限制回复范围,请直接告诉智能体什么应该回答、什么不应该回答。
## 限制- 严格遵循角色设定,只回答与快递相关问题,对于超出此范围的问题,应礼貌地说明无法提供帮助
指定回复格式
你也可以为智能体提供回复格式的示例。智能体会模仿提供的回复格式回复用户。
查询成功后,以口语化方式总结物流信息(包括揽收时间、地点及目的地),不超过120字。回复示例:=====您的<快递公司>包裹<快递单号>正在路上,<时间:如XX小时前>从<离开地>发往<目的地>。====

快递100智能体详细设定

角色
您是一位快递领域的专家,精通快递查询、快递价格查询、违禁品判别等相关事务。为用户提供全面、细致、清晰的信息。
技能
技能 1:快递单号识别与快递查询
快速判断用户输入中任何疑似单号的数字字母组合,将其视为快递单号。
若未提供单号,先热情问候,再礼貌请求用户提供
通过[快递物流查询]即刻查询物流信息。
技能 2:快递运费预估查询
提供根据寄件始发地城市和收件目的地城市、以及包裹的重量,查询各大快递公司的预估价格的功能
当用户提供寄件和收件地址时,精确提取始发地城市和目的地城市信息,严禁擅自虚构地址。
若始发地城市或目的地城市缺失,主动向用户询问地址信息。
当始发地和目的地均获取到时,调用[快递运费与时效查询]工具查询。
技能 3:违禁品判别
用户输入物品信息时,根据[寄件违禁品判定]判别是否是违禁品。
技能 4:回答寄快递相关问题
当用户提出快递相关疑问时,迅速从“快递知识库”中检索答案。
确保回复内容连贯,避免从知识库中摘取片段。
对检索到的信息进行整理,以清晰、易懂的方式呈现给用户。
使用标准的Markdown格式回复,包含可能的原因和解决办法,分层次与要点展示,并适当使用emoji表情符号增加互动性。
技能 5:处理无法解答的问题
要是遇到无法解答的问题,引导用户联系人工客服。
限制
严格遵循角色设定,只回答与快递相关问题,对于超出此范围的问题,应礼貌地说明无法提供帮助
所输出的内容必须按照给定的格式进行组织,不能偏离框架要求。
开场白和引导问题:引导问题的设置非常重要,可以引导用户直接体验到当前智能体能解决的问题。
用户问题建议:根据智能体的需求决定是否开启。如果需要,可以启用这一功能,帮助用户更好地提出问题。
展示智能体回复参考消息:在调试过程中最好打开,发布时可以关闭。
知识库:腾讯元器的知识库使用还不够稳定,不能自定义调用,完全依赖大模型的判别,时常会在不应该使用知识库的场景下调用。因此,如果智能体功能较为复杂,建议使用工作流的方式调用知识库,而不是直接在智能体设置中设置。
工作流:在创建工作流后添加进来即可。

Step 2:打造插件,连接智能体与业务数据🔌

在这一步,我们要做的是搭建智能体与业务服务之间的桥梁------也就是插件。对于快递100智能体来说,最关键的就是那些能够查询快递信息和运费的接口啦!
📝 YAML格式配置:
听起来可能有点技术范儿,但别担心!如果你对YAML格式不太熟悉,有个超简单的方法:直接把接口文档扔给腾讯元器,它就能帮你自动生成配置。这样,你就不必为那些复杂的格式头疼了。
🛠️ 插件的创建与使用:
一旦插件创建成功,你就可以在智能体的设置里直接添加它,或者在工作流中灵活运用。对于快递100智能体,插件是在工作流中使用。
这样一来,智能体就能调用快递服务的数据,为用户提供实时的快递查询和运费估算服务了。

Step 3:工作流创建

咱们已经把智能体的基础设置和插件搞定了,现在来聊聊如何创建工作流,这是快递100智能体的核心部分!

点击"创建工作流",设置工作流的名称和描述,说清楚这个工作流是干嘛的,在什么场景下使用。
🔍 工作流里的执行节点:
进入工作流后,你会看到几个关键的执行节点:开始节点、大模型、知识库、插件、分支、代码、结束节点。不是所有节点都得用上,但掌握它们的用法和技巧,能让你的工作流和智能体更加优质。下面我用快递100智能体中的快递查询工作流来详细讲讲每个节点的用法。
📊 工作流整体视图

开始节点:定义工作流启动时需要的入参。大模型会在用户输入的内容中提取这些入参,并在调用工作流的时候传进来。描述字段要写清楚,比如快递单号字段描述就写"快递单号"。用户本轮输入的完整内容和历史对话记录默认已经有了,不需要额外设置。
代码节点:代码节点在工作流中是一个非常灵活且强大的工具,务必学会使用。即使你不熟悉Python,也没有关系,因为大模型可以帮你生成代码。代码块可以用于处理字符串、重构数据对象以及执行一些简单的逻辑操作。以物流数据格式化的这个代码节点为例:

输出参数一定要运行代码才可以同步,你可以先写一些简单的代码先测试把节点更新,再优化代码部分。
插件节点:这里我使用的是自定义的插件,官方也提供了一些好用的插件,看自己需要选择,使用方法都是一样的。这里有两个选项"引用"和"输入","引用"是引用上游节点的输出参数允许跨节点获取,"输入"是设置固定参数也就是默认值。

分支节点:这个就相对来说比较简单,就是根据特定条件的一个判断,可以理解为"如果满足XX条件执行A,否则执行B"。
大模型节点:负责对插件返回的数据进行深加工润色,让回复内容更加精准和流畅。你可以把它想象成一个文案高手,能把枯燥的数据转换成用户容易理解的语言。
系统提示词:在这里,我们可以根据节点的功能来设定一个合适的人设。比如,这个节点是用来分析快递物流信息的,那我们就给它一个"快递物流数据分析师"的人设。
本轮指令:这里只需要设置本轮需要的入参,比如当前的快递单号和用户输入的内容。我们用双大括号{{}}来标记这些参数,比如{{data}}。当执行时,这个标记就会被实际的数据替换掉。
灵活设置:你可以直接在系统提示词里设置入参,也可以通过本轮指令来设置。两种方式都可以,就看你怎么用着顺手了。

中间消息:每个节点都可以设置中间消息,主要用于在工作流执行时间较长时向用户发送进展消息,避免用户长时间等待而看不到任何进展,从而提升用户体验。然而,这个功能不支持流式输出,因此在使用大模型节点时,用户体验可能不是特别好。根据实际需求灵活使用。
结束节点:根据前置步骤生成的最终答案,输出智能体的回复内容。你可以通过输出变量直接引用前置节点的返回数据。这里很多小伙伴可能会搞不清流式输出和非流式输出的区别:
流式输出:以连续的"流"的形式进行处理和输出,不需要等待所有数据都准备好后再一起输出。这意味着在使用大模型节点时,可以一边处理数据一边给用户输出内容。这里要注意,如果选了流式输出大模型节点要直接连接到结束节点才有效果,比如中间又加了一个代码节点的话,这样也是不生效的
非流式输出:将整个数据集一次性处理完毕后输出。这意味着需要等待大模型处理完所有数据准备就绪后才开始输出给用户。如果处理的数据较多,响应时间较长时,考虑使用流式输出会是更优的选择。

知识库:在我们构建的查快递工作流中,我们并没有用到知识库,但在违禁品判别这样的工作流中,知识库就发挥了大作用。调试知识库可能需要一些耐心和技巧
召回不成功怎么办?:如果知识库的召回效果不理想,你可以尝试降低最小匹配度的阈值,这样系统就更有可能找到相关的信息。
优化知识库内容:召回成功后,你可能需要对知识库的排版和内容进行调整和优化,确保信息的准确性和可读性。这个过程可能需要反复测试和调整,直到达到你设定的匹配度标准。
直接输出与润色:如果你在结束节点选择不经过智能体总结,那么召回的内容可能需要大模型的进一步润色。这就像是给生硬的数据穿上一件合适的外衣,让它变得更加友好和易于理解。

试运行
到了这个环节,我们的工作流已经搭建得差不多了,是时候给它来个试运行,看看效果如何。

试运行成功后,就可以把工作流发布出去,可以让智能体进行引用!

Step 4:把工作流添加到智能体中

发布完工作流,下一步就是把它添加到智能体中,并进行调试。
到智能体设置页面,记得打开"展示智能体回复的参考消息"的开关,这样你就能清楚地看到智能体的回复逻辑和效果。


Step 5:发布智能体

经过以上几个步骤,我们的智能体就搭建完成了。接下来,按照以下步骤发布智能体:
发布智能体:在智能体设置页面,点击"发布"按钮,提交智能体进行审核。
等待审核:审核成功后,智能体将在"智能体模块"中显示为已上线状态。
选择体验方式:点击"使用方式",可以选择不同的渠道体验智能体,如web、微信小程序等。

通过这些步骤,你的智能体就可以正式投入使用了!

如果你想将智能体发布到微信公众号使用,请参考指引:发布到微信公众号(订阅号、服务号)