从客服场景谈:大模型如何接入业务系统

简介: 本文探讨了大模型在AI客服中的应用。大模型虽具有强大的知识生成能力,但在处理具体业务如订单咨询、物流跟踪等问题时,需结合数据库查询、API调用等手段。文章提出用Function Call连接大模型与业务系统,允许大模型调用函数获取私域知识。通过具体示例展示了如何设计系统提示词、实现多轮对话、定义Function Call函数,并利用RAG技术检索文档内容。最后,展示了该方案在订单查询和产品咨询中的实际效果。

一、前言

过去一年,大模型在各种场合频频刷屏。在业界看来,它是类似于蒸汽机一样的划时代产物,将给每个人、每个企业、每个行业带来全面影响,甚至可能掀起新的一轮工业革命。但是如何将这台”蒸汽机“巧妙的整合到传统的纺纱机上,也是一个十分棘手的问题。本文将以AI客服为例,从开发者的视角探讨大模型的应用问题。

二、技术选型

首先,我们来了解下客服场景常见的一些问题

从上图可以看到,客服面对的大部分问题其实都无法仅依赖大模型本身的知识进行回答。例如订单咨询、物流跟踪等问题,需要查询系统数据库;产品描述、功能咨询等问题,需要从产品说明文档中寻找答案;而处理订单取消、换货服务等流程,得对接电商后端服务的接口。那么我们该如何处理这些问题呢?解决思路是:用自然语言连接用户,用Function Call连接大模型和业务。

Function Call允许大模型在面对私域知识型问题时,输出一个请求调用函数的消息,其中包含所需调用的函数名、以及调用函数时所携带的参数信息。这是一种将大模型与传统应用程序连接起来的新方式,简单来说任何软件能实现的功能都可以包装成一个函数供大模型使用,它所带来的想象空间无比巨大。函数不仅可以封装查询数据库、调用API等流程,甚至可以封装文档RAG流程(检索增强内容生成)。

Function Call使用流程如下所示:

更多资料请参考百炼帮助文档:

https://help.aliyun.com/zh/model-studio/developer-reference/use-qwen-by-calling-api?spm=a2c4g.11186623.0.0.7c101439MaV7kj#7cde05535euty

三、业务数据

为了更直观的描述AI客服的开发过程与运行原理,这里我们先准备业务系统的数据库和产品手册,供大模型解答客户私域知识型问题时使用。

1、数据库

(1)用户表

id

name

gender

user_111113

张三

user_111114

李四

user_111115

王五

(2)产品表

id

name

category

price

stock

document_id

product_111111

Huawei Pura 70 Ultra

手机

9999

20

huawei_pura_70_ultra

product_111112

Huawei Mate 60 Pro+

手机

8999

320

huawei_mate_60_pro

product_111113

Huawei MateBook X Pro

电脑

11199

32

matebook_x_pro

product_111114

Huawei Watch Ultimate Design

手表

21999

3

huawei_watch

(3)订单表

number

time

user_id

product_id

logistics_status

order_111111

2024-07-01 10:00:00

user_111113

product_111111

待发货

order_111112

2024-06-15 10:00:00

user_111113

product_111114

已签收

order_111113

2024-06-26 10:00:00

user_111113

product_111113

运输中,预计7月8日送达,今日快件离开【武汉转运中心】已发往【杭州转运中心】

2、产品文档

四、方案设计

1、项目架构

本项目作为大模型应用的端到端解决方案,采用python Flask框架编写了web后端服务,由阿里云百炼平台Dashscope sdk提供大模型接入能力,以及由开源社区LlamaIndex提供检索增强内容生成的能力。总体框架如下:

其中web前端、web服务、mysql数据库等模块开发属于传统IT强项,资料繁多,本文不做详细介绍。

2、大模型接入

(1)流式输出

用过大模型的同学一定对页面上对话“打字机式”效果非常熟悉:

这是由于大模型并不是一次性生成最终结果,而是逐步地生成中间结果,最终结果由中间结果拼接而成。流式输出可以实时地将中间结果返回,用户可以在模型进行输出的同时进行阅读,减少等待模型回复的时间。

这种一次请求多次返回的通信方式背后,其实是使用了SSE协议(Server Send Events)。SSE 是一种基于 HTTP 连接的服务器推送技术,客户端与服务器初始化好连接后,服务器可以随时向客户端发送内容更新。目前Python、Java、Javascript等主流语言对这种协议都有很好的支持。

(2)多轮对话

为了让AI客服拥有“记忆力”,也就是记住我们聊天上下文的能力,我们需要在问题前面插入对话的历史消息。从百炼的开发文档可以得知,传递给大模型的消息体一般为:

messages = [
    {"role": "system",    "content": "人设"},
    {"role": "user",      "content": "问题a"},
    {"role": "assistant", "content": "回答a"},
    {"role": "user",      "content": '问题b'},
]

但是在使用了Function Call能力后,消息体中也必须含有相关函数调用信息,例如:

messages = [
    {"role": "system",    "content": "人设"},
    {"role": "user",      "content": "问题"},
    {"role": "assistant", "content": "", "tool_calls": [{"function": {"name": "function_name", "arguments": "function_args"}, "id": "", "type": "function"}]},
    {"role": "tool",      "content": "函数调用结果", "name": "function_name"},
    {"role": "assistant", "content": "回答"},
]

若历史消息中漏掉了tool_calls内容将使大模型忽略掉函数返回结果,这点在历史消息缓存模块开发时十分重要,切记!

(3)系统提示词

系统提示词(System Prompt)是引导大模型行为和输出的重要信息,它将直接影响应用程序实际的使用效果,写好提示词是使用大模型很重要的一步。百炼平台提供在线Prompt优化工具,可以将简单的提示词优化得更加专业。

考虑到大模型检索数据库时,可能遇到参数不全的情况,除了让它主动咨询客户外,我们还可以在系统提示词中预置一些关键信息。例如当前咨询客户的姓名、性别、id以及当前时间等,这些信息对于查询用户数据都非常有用

prompt_template = ("任务指令:作为线上百货商城的专业客服,为用户{}(用户ID:{},性别:{})提供全方位咨询服务,当前时间为{}。在利用内置工具函数处理查询请求时,如信息不足,请主动引导用户提供详细信息。"
                   "回答策略:"
                   "1. **主动信息索取**:在需要调用如订单查询等工具功能时,若必要参数(如订单号)缺失,采用友好且明确的语言主动询问:“尊敬的张三,为了快速查询您的信息,请提供一下订单号好吗?”"
                   "2. **精准解答**:基于用户提出的问题,严格参照公司政策与操作流程,结合最新文档内容给予精确解答,避免无关扩展,确保用户问题得到有效解决。"
                   "3. **透明化操作**:在处理用户请求过程中,如需使用特定工具函数,简要告知用户将采取的步骤,增加服务透明度,例如:“我将通过我们的订单查询系统来获取您的订单详情,请稍候。”"
                   "4. **确认与跟进**:解答完毕后,确认用户是否满意解答,并主动询问是否有其他可以帮助的地方,如:“张三先生/女士,您的问题已解答完毕,请问还有其他方面需要我的协助吗?”"
                   "注意事项:"
                   "- 维持专业且亲切的交流风格,确保每一次互动都能提升用户满意度。"
                   "- 对于所有工具函数调用,务必确保在获取足够且准确的参数后再执行,避免因信息不全导致处理错误。 "
                   "- 记录重要咨询细节,以便后续跟踪服务或内部评估使用。")

(4)Function Call

Function Call为大模型的应用开辟了新的路径,使其不仅仅停留于语言理解和生成,还能充分发挥其智能化和自动化的潜力。我们在使用前,需要了解的一个原理是:大模型面对问题时是否需要调用函数是自身思考的结果,因此如何定义函数使大模型能在合适的时机使用显得尤为重要。一方面要对函数的描述信息尽可能的概要详细,包括函数功能、输入参数、参数格式、输出内容的描述;另一方面注意要设计各个函数之间的联动关系,往往一个复杂问题可能调用多个函数,而一个函数的输出信息可能是另一个函数的入参。例如在查订单信息时,我们可以直接通过订单号查询,但是当客户不记得订单号时,我们也可先根据用户id和时间段粗略的查出这段时间所有订单号,再查出订单信息。

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_orders",
            "description": "当你想通过用户id查询一段时间内的订单时非常有用,返回结果包括订单号和商品名称",
            "parameters": {
                "type": "object",
                "properties": {
                    "user_id": {
                        "type": "string",
                        "description": "用户id"
                    },
                    "start_time": {
                        "type": "string",
                        "description": "开始时间,格式为%Y-%m-%d %H:%M:%S"
                    },
                    "end_time": {
                        "type": "string",
                        "description": "结束时间,格式为%Y-%m-%d %H:%M:%S"
                    }
                },
                "required": ["user_id", "start_time", "end_time"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_order",
            "description": "当你想通过订单号查询订单信息时非常有用,返回结果包含物流信息、下单时间以及商品id、名称、类型、价格、文档id等信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "number": {
                        "type": "string",
                        "description": "订单号"
                    }
                },
                "required": ["number"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_product",
            "description": "当你想通过商品名称查询商品信息时非常有用,返回结果包括商品id、商品名称、商品类型、商品价格、商品库存、商品文档id",
            "parameters": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "商品名称"
                    }
                },
                "required": ["name"]
            }
        }
    },
]
def get_orders(user_id: str, start_time: datetime, end_time: datetime) -> str:
    pass
def get_order(number: str) -> str:
    pass
def get_product(name: str) -> str:
    pass

(5)RAG

RAG的核心思想是通过检索外部知识库中的相关文档段落,并将其纳入大模型的输入中,从而提高生成结果的可靠性和准确性。从工程化角度讲,RAG包含了文档解析、文档切片、构建知识库索引、文档检索、文档召回、内容生成等一系列流程,使用百炼平台可以极大的简化开发者在这些专业领域的开发工作。

首先我们需要将之前准备的产品文档全部上传至百炼数据中心

然后根据产品名称创建不同的知识索引,并在各个产品的知识索引中添加相关的文档,这样我们就完成了文档解析、文档切片以及构建知识库索引。

那么接下来我们该如何根据问题检索知识库呢?百炼结合LlamaIndex开源框架可以帮助我们解决这个问题。

import os
from llama_index.core import Settings
from llama_index.indices.managed.dashscope import DashScopeCloudIndex
from llama_index.llms.dashscope import DashScope
from llama_index.embeddings.dashscope import DashScopeEmbedding
class Rag:
    _instance = None
    @classmethod
    def get_instance(cls):
        if cls._instance is None:
            cls._instance = cls()
        return cls._instance
    def __init__(self):
        llm = DashScope(model_name="qwen-max")
        embed_model = DashScopeEmbedding(model_name="text-embedding-v2", text_type="query")
        Settings.llm = llm
        Settings.embed_model = embed_model
    def query(self, index_name: str, question: str) -> str:
        index = DashScopeCloudIndex(name=index_name)
        query_engine = index.as_query_engine()
        answer = query_engine.query(question)
        return str(answer)

最后我们还要解决RAG与Function Call结合使用的问题,需要将RAG包装为一个函数供大模型使用。

tools = [
    {
        "type": "function",
        "function": {
            "name": "retrieving_documents",
            "description": "当你想通过商品文档id查询商品参数或功能使用说明时非常有用,返回结果为问题查询得到的答案",
            "parameters": {
                "type": "object",
                "properties": {
                    "document_id": {
                        "type": "string",
                        "description": "文档id,该值只能通过其他function查询得到"
                    },
                    "question": {
                        "type": "string",
                        "description": "问题描述,比如:该产品电池容量多大?"
                    }
                },
                "required": ["document_id", "question"]
            }
        }
    }
]
def retrieving_documents(document_id: str, question: str) -> str:
    return Rag.get_instance().query(index_name=document_id, question=question)

五、效果展示

1、订单及物流咨询

2、售前产品咨询

六、工程代码

https://github.com/dashscope/dash-cookbook/tree/develop/examples/EndToEndSolutions/CustomerServiceRobot



目录
打赏
0
6
6
0
6
分享
相关文章
利用通义大模型构建个性化推荐系统——从数据预处理到实时API部署
本文详细介绍了基于通义大模型构建个性化推荐系统的全流程,涵盖数据预处理、模型微调、实时部署及效果优化。通过采用Qwen-72B结合LoRA技术,实现电商场景下CTR提升58%,GMV增长12.7%。文章分析了特征工程、多任务学习和性能调优的关键步骤,并探讨内存优化与蒸馏实践。最后总结了大模型在推荐系统中的适用场景与局限性,提出未来向MoE架构和因果推断方向演进的建议。
122 10
比亚迪座舱接入通义大模型,未来将联合打造更多AI智能座舱场景
比亚迪与阿里云深度合作,将通义大模型应用于智能座舱和营销服务。通过通义万相,腾势推出“AI壁纸”功能;借助通义星尘,实现“心理伴聊”等情感陪伴场景。阿里云Mobile-Agent智能体落地比亚迪座舱,支持复杂语音操作,如查询淘宝物流、订火车票等。该方案基于全视觉解决技术,具有强泛化能力,未来双方将持续拓展更多AI应用。
场景入选|TsingtaoAI基于DeepSeek的具身智能实训入选河北省垂直大模型应用场景名单
河北省网络社会组织联合会正式公布《垂直大模型应用场景征集结果名单》,TsingtaoAI自主研发的“基于DeepSeek的具身智能高校实训解决方案——从DeepSeek+机器人到通用具身智能”成功入选河北省15个标杆应用场景。这一成果标志着TsingtaoAI在具身智能与大模型融合领域的技术创新与落地能力获得政府及行业权威认可,同时也为人工智能技术与实体产业深度融合提供了可复制的示范案例。
92 0
自媒体创作场景实践|通义千问3 + MCP=一切皆有可能
本文介绍了通过MCP(Model Context Protocol)结合通义千问大模型实现跨平台、跨服务的自动化任务处理方案。使用Qwen3-235B-A22B模型,配合ComfyUI生成图像,并通过小红书等社交媒体发布内容,展示了如何打破AI云服务的数据孤岛。具体实践包括接入FileSystem、ComfyUI和第三方媒体Server,完成从本地文件读取到生成图像再到发布的全流程。 方案优势在于高可扩展性和易用性,但也存在大模型智能化不足、MCP Server开发难度较大及安全风险等问题。未来需进一步提升模型能力、丰富应用场景并解决安全挑战,推动MCP在更多领域落地。
669 27
自媒体创作场景实践|通义千问3 + MCP=一切皆有可能
创新场景丨大模型时代,重塑智能终端新体验
大模型为智能终端带来的变革是全方位的,但挑战也同样显而易见。云侧部署的大模型加端侧应用的大模型是综合平衡性能、成本、功耗、隐私、速度之下的最佳选择。
基于通义大模型的智能客服系统构建实战:从模型微调到API部署
本文详细解析了基于通义大模型的智能客服系统构建全流程,涵盖数据准备、模型微调、性能优化及API部署等关键环节。通过实战案例与代码演示,展示了如何针对客服场景优化训练数据、高效微调大模型、解决部署中的延迟与并发问题,以及构建完整的API服务与监控体系。文章还探讨了性能优化进阶技术,如模型量化压缩和缓存策略,并提供了安全与合规实践建议。最终总结显示,微调后模型意图识别准确率提升14.3%,QPS从12.3提升至86.7,延迟降低74%。
200 14
优化通义大模型推理性能:企业级场景下的延迟与成本削减策略
本文基于金融、电商、医疗等领域的实战经验,深入探讨通义千问等大模型的推理优化技术栈。从计算图优化、批处理策略、量化压缩到系统架构四个维度展开,结合Python代码示例与压力测试数据,提供企业级解决方案。针对延迟敏感、高吞吐及成本敏感场景,分析性能瓶颈并提出算子融合、动态批处理、混合精度量化等方法,同时设计分布式推理架构与冷启动优化策略。通过案例展示,如电商大促场景优化,实现峰值QPS提升6.5倍、P99延迟降低53%、月度成本下降62%。文章还提供优化实施路线图,助力企业分阶段落地技术方案。
微医控股与阿里云达成战略合作,双方将携手基于通义千问大模型联合打造医疗全场景智能体,共同构建医疗垂类大模型
2025年6月17日,微医控股与阿里云达成战略合作,共建医疗AI基座及医疗全场景智能体。双方将基于通义千问大模型打造医疗垂类大模型,升级微医“5+1”智能体,并在诊断、用药、健康管理等环节深化应用。微医将结合阿里云技术优势推进IDC上云,助力AI+医疗基础设施建设,共同制定行业标准并推广城市级AI数字健共体。目前,微医AI服务已连接全国1.2万家医院和30万名医生,健康管理会员超100万。
2025年国内主流智能客服系统:技术架构与能力深度解析
本文分析了2025年国内智能客服市场的技术格局与系统能力,从核心技术栈(NLP、知识图谱、语音技术等)到市场梯队划分,深入探讨了第一梯队的综合型平台和第二梯队的场景化服务。以合力亿捷为例,剖析其端到端AI技术栈、大模型融合、全渠道融合及运营优化能力,并对比国际顶尖通用AI在语义理解、多模态交互和自主学习方面的启示。最后为企业提供选择智能客服系统的五大考量因素,强调技术与业务场景的深度融合,助力企业实现更高效、智能的客户服务体验。
285 2
通义灵码进阶指南:解锁智能编程的深度技巧与高阶场景实战
本文深入探讨了通义灵码从基础代码补全到全流程研发加速器的升级路径,揭秘企业级深度集成方案。内容涵盖核心能力再认知(如智能维度拆解与硬件级优化)、精准控制技术(如结构化指令模板与上下文锁定)、企业级应用(私有知识库构建与研发流水线增强)以及高阶场景实战(架构可视化重构与多模态交互)。同时提供避坑指南、效能度量体系,并展望研发智能体的未来影响,助你实现编码效率300%提升。
190 39
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问