调用大模型API打造AI 智能客服系统实践教程

2025-11-17 11:00:52
文章摘要
调用大模型API打造AI 智能客服系统实践教程

1.前言

在用户与人工客服的沟通中,等待时间长、需求难满足等问题频发,企业面临用户流失风险,用户渴望快速精准的答案,企业需要“开源节流”、“降本增效”。对此,利用 AI 大模型打造智能客服成为主流解决方案。本次调用大模型 API,实操构建一个具备知识库的 AI 智能客服系统,有效化解沟通难题。

2.智能客服系统展示

不同以往,这次我选择把智能客服系统页面展示放前头。先让大家伙直观看到系统界面和操作流程,一秒 get 系统全貌,再讲干货内容。要是我先讲一堆理论,大家伙怕是早不耐烦了吧。把页面展示放前面,也是为我后续介绍API调用、知识库、实际开发操作这些干货内容时做铺垫,帮助大家理解理论和代码。


下面是智能客服系统运行后的界面,这个智能客服是支持知识库的上传的。

实际对话界面如下

隔了一段时间再与智能客服进行对话,可以看见智能客服系统能保留我们的历史对话记录,并正常给我们推荐符合要求的手机商品,响应快速。

3.API调用

3.1.大模型API介绍

大模型API是大模型对外提供服务的接口。通过API,开发者不需要了解大模型复杂的内部结构和运行机制,就能将大模型强大的功能集成到自己的应用、系统中。同时我们也可以调用大模型的API对模型进行微调、推理训练等。

3.2.API 调用流程

3.2.1确定调用方式​

用 Python 语言常用的requests库(这个库没安装需要手动安装)来构造请求。我们要根据所选大模型 API 的要求,确定请求的 URL 地址。

平台URL地址:

https://maas-api.lanyun.net/v1/chat/completions

requests库安装命令:

pip install requests

3.2.2构造请求参数​

请求参数是 API 调用的关键部分,它决定了我们向大模型传递的信息以及期望得到的响应形式 。​

  1. API KEY获取,进入Maas平台,创建API KEY,复制即可
  2. 链接:https://cloud.lanyun.net//#/registerPage?promoterCode=0131
  3. 模型相关参数:指定要调用的具体模型名称,在请求参数中明确设置模型参数。

这次智能客服并不需要向用户展示深度思考的思维链,我选择的模型是deepseek -V3模型,这个模型自然语言处理能力不错,最重要是的是响应十分快速,符合智能客服的需要。

“model”: “/maas/deepseek-ai/DeepSeek-V3”

设置生成文本的最大长度(max_tokens),设置为 200,意味着大模型生成的回答不超过 200 个 token。

控制生成文本的随机性(temperature),取值范围在 0 - 1 之间,这里设置为 0.7,生成的文本会相对更具多样性。

API配置核心代码:

 # API配置
        self.api_config = {
            "url": "https://maas-api.lanyun.net/v1/chat/completions",
            "api_key": "请替换为实际API密钥",  # 请替换为实际API密钥
            "model": "/maas/deepseek-ai/DeepSeek-V3"
        }

这里我给一段测试代码,大家可以试试自己的API调用是否成功

import requests

url = "https://maas-api.lanyun.net/v1/chat/completions"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer 这里改成自己的API密钥"
}
data = {
    "model": "/maas/deepseek-ai/DeepSeek-V3",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "Hello!"
        }
    ]
}

response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
    result = response.json()
    print(result)
else:
    print(f"请求失败,状态码: {response.status_code}")

调用成功模型是会给我们返回结果的,我利用的是利用Jupyter Notebook环境,当然别的环境也可以测试

4.知识库

4.1介绍

知识库(Knowledge Base) 是一个系统地存储、管理和组织知识的结构化集合,旨在高效地检索、共享和利用知识。它不仅包含事实、数据和信息,还涵盖规则、经验、理论等经过提炼的知识,通常用于辅助决策、问题解决或信息检索。

4.1.1核心特点

  1. 结构化存储:知识通过分类、标签、层级结构或关联关系进行组织,便于快速检索和管理。
  2. 知识多样性:包含多种类型的知识
  3. 可扩展性:支持持续更新和扩展,通过人工录入、自动抓取或机器学习等方式补充新知识。
  4. 应用导向:设计目标明确,服务于特定领域或场景,解决实际问题。

4.1.2知识库与数据库的区别

下面简单从四个方面,区分一下知识库和数据库

4.2知识库在智能客服中的用途

知识库是智能客服系统的核心,存储产品介绍、使用指南等业务相关知识,经整理分类后,可被系统快速检索匹配用户问题。它能让智能客服快速提供准确答案、保证回答一致、提升响应速度,支持多轮对话与个性化服务,还能辅助人工客服,且可随业务发展更新知识。

4.3知识库文件上传格式

为上传的文件设置可上传的格式,python进行文件操作比较中常见的格式有json、txt格式

考虑现实生活中知识库需要的格式非常常用的是word文件和pdf文件。若想要我们的知识库支持.docx和.pdf格式文件上传我们需要导入python的第三方库 python-docx 、PyPDF2,这个库没安装的需要我们手动安装。

打开终端输入安装命令

pip install python-docx PyPDF2

这里显示我已经安装过python-docx库了,只需要安装PyPDF2库就行

这样我们的知识库就可以支持多种格式上传了。知识库上传文件的函数代码逻辑:

# 新增库:用于处理Word和PDF文件
try:
    from docx import Document
    import PyPDF2
    PDF_SUPPORT = True
except ImportError:
    PDF_SUPPORT = False
    print("警告:缺少PyPDF2或python-docx库,无法支持PDF和DOCX格式")

class KnowledgeBaseManager:
    def __init__(self):
        self.knowledge_base = []
        self.vector_index = None  # 预留向量索引接口

    def load_from_file(self, filepath):
        """从文件加载知识库,支持多种格式"""
        try:
            filename = os.path.basename(filepath)
            
            if filepath.endswith('.json'):
                with open(filepath, 'r', encoding='utf-8') as f:
                    data = json.load(f)
                    self.knowledge_base.extend(data if isinstance(data, list) else [data])
                    
            elif filepath.endswith('.txt'):
                with open(filepath, 'r', encoding='utf-8') as f:
                    self.knowledge_base.extend([
                        {"content": line.strip(), "source": filename}
                        for line in f if line.strip()
                    ])
                    
            elif filepath.endswith('.docx'):
                # 处理Word文档
                doc = Document(filepath)
                content = "\n".join([para.text for para in doc.paragraphs])
                self.knowledge_base.append({"content": content, "source": filename})
                
            elif filepath.endswith('.pdf') and PDF_SUPPORT:
                # 处理PDF文档
                with open(filepath, 'rb') as f:
                    reader = PyPDF2.PdfReader(f)
                    content = ""
                    for page_num in range(len(reader.pages)):
                        content += reader.pages[page_num].extract_text() + "\n"
                    self.knowledge_base.append({"content": content, "source": filename})
                    
            else:
                messagebox.showerror("格式错误", f"不支持的文件格式: {filename}")
                return False
                
            return True
            
        except Exception as e:
            messagebox.showerror("加载错误", f"无法解析文件 {filename}: {str(e)}")
            return False

这里我演示下实际操作效果,点击我们的智能客服“上传文件”按钮,就能打开文件目录,选择需要的格式上传就OK了。

这里,我以手机产品介绍为例作为智能客服的知识库上传,上面这个模块是展示我们上传了的文档的列表,下面显示文档具体的内容,最下面是系统操作提示。

5.智能客服

带知识库的智能客服是融合知识库与智能交互的服务系统。它以结构化知识库为核心,存储产品说明、操作指南等海量专业信息,通过自然语言处理技术理解用户问题,快速匹配知识库内容生成标准化回答。

5.1获取知识库内容

通过遍历知识库中前max_items条内容,将每条内容按格式[知识序号] 内容拼接成字符串返回,实现根据查询获取相关知识库内容。

def get_context(self, query, max_items=5):
        """获取与查询相关的知识库内容"""
        return "\n".join(
            f"[知识{i+1}] {item['content']}"
            for i, item in enumerate(self.knowledge_base[:max_items])
        ) if self.knowledge_base else ""

5.2开场白设置

设置的开场白prompt,符合企业风格。

# 聊天历史
        self.conversation = [
            {"role": "system", "content": self.get_system_prompt()},
            {"role": "assistant", "content": "您好!我是您的手机智能助手,很高兴为您服务!关于手机购买、使用教程、故障排查等问题,都可以告诉我,我会尽力为您解答~"}
        ]
        
        # 自动显示开场白
        self.display_message("客服", "您好!我是您的手机智能助手,很高兴为您服务!关于手机购买、使用教程、故障排查等问题,都可以告诉我,我会尽力为您解答~")

5.3窗口布局设计

这里简单说明,系统窗口界面分成两个区域,一个区域用来上传智能客服需要的知识库,另一区域做AI客服与用户对话区域。

def setup_window(self):
        self.root.title("AI智能客服系统 v1.0")
        self.root.geometry("1000x700")
        self.root.minsize(800, 600)
        self.style = ttk.Style()
        self.style.configure('TButton', padding=5)
        self.style.configure('TFrame', background='#f0f0f0')

    def setup_ui(self):
        # 主布局框架
        main_frame = ttk.Frame(self.root)
        main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

        # 知识库面板 (左侧30%)
        knowledge_frame = ttk.LabelFrame(main_frame, text="知识库管理", width=300)
        knowledge_frame.pack(side=tk.LEFT, fill=tk.Y, padx=(0, 10))
        knowledge_frame.pack_propagate(False)

        self.setup_knowledge_ui(knowledge_frame)

        # 聊天面板 (右侧70%)
        chat_frame = ttk.Frame(main_frame)
        chat_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)

        self.setup_chat_ui(chat_frame)

5.3.1知识库区域

支持用户上传文件,并展示已上传文件的列表,点击文件可浏览文件具体内容。

def setup_knowledge_ui(self, parent):
        # 上传按钮区域
        upload_frame = ttk.Frame(parent)
        upload_frame.pack(fill=tk.X, pady=5)

        ttk.Button(upload_frame, text="上传文件", command=self.upload_knowledge).pack(side=tk.LEFT)
        ttk.Button(upload_frame, text="清空知识库", command=self.clear_knowledge).pack(side=tk.RIGHT)

        # 知识库列表
        list_frame = ttk.Frame(parent)
        list_frame.pack(fill=tk.BOTH, expand=True)

        self.knowledge_list = tk.Listbox(
            list_frame, 
            selectmode=tk.SINGLE,
            font=('Microsoft YaHei', 10)
        )
        self.knowledge_list.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

        scrollbar = ttk.Scrollbar(list_frame, orient=tk.VERTICAL)
        scrollbar.config(command=self.knowledge_list.yview)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        self.knowledge_list.config(yscrollcommand=scrollbar.set)

        # 知识详情
        detail_frame = ttk.LabelFrame(parent, text="知识详情")
        detail_frame.pack(fill=tk.BOTH, pady=(5, 0))

        self.knowledge_detail = scrolledtext.ScrolledText(
            detail_frame,
            wrap=tk.WORD,
            font=('Microsoft YaHei', 10),
            height=8
        )
        self.knowledge_detail.pack(fill=tk.BOTH, expand=True)

5.3.2聊天区域

用户可与客服直接用自然语言对话,页面会显示当前聊天的实时时间,(这是这个智能客服的一个小亮点),最下方还会显示系统的操作。

 def setup_chat_ui(self, parent):
        # 聊天显示区域
        self.chat_display = scrolledtext.ScrolledText(
            parent,
            wrap=tk.WORD,
            state='disabled',
            font=('Microsoft YaHei', 12),
            padx=10,
            pady=10
        )
        self.chat_display.pack(fill=tk.BOTH, expand=True)

        # 输入区域
        input_frame = ttk.Frame(parent)
        input_frame.pack(fill=tk.X, pady=(5, 0))

        self.user_input = ttk.Entry(
            input_frame,
            font=('Microsoft YaHei', 12)
        )
        self.user_input.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=(0, 5))

        send_btn = ttk.Button(
            input_frame,
            text="发送",
            command=self.send_message,
            style='TButton'
        )
        send_btn.pack(side=tk.RIGHT)

        # 状态栏
        self.status_var = tk.StringVar()
        self.status_var.set("就绪")
        ttk.Label(
            parent,
            textvariable=self.status_var,
            relief=tk.SUNKEN,
            anchor=tk.W
        ).pack(fill=tk.X, pady=(5, 0))

实际运行效果与对话效果


6.总结

调用大模型API,在智能客服服务场景中,我们实现了带知识库的智能客服系统,智能客服借助统一知识库保障回答一致性、支持动态更新适配业务迭代,精准匹配用户问题,实现长时间高效服务,AI智能客服还能通过多轮对话解决复杂问题,适用于电商、金融等领域,助力企业降本增效的同时还提升用户满意度,构建智能化服务体系。


声明:该内容由作者自行发布,观点内容仅供参考,不代表平台立场;如有侵权,请联系平台删除。
标签:
技术栈
技术方向