调用蓝耘API打造AI 智能客服系统实践教程

article/2025/6/28 23:54:28

声明:文章是实验教程,不是广告

1.前言

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

2.智能客服系统展示

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

下面是智能客服系统运行后的界面,这个智能客服是支持知识库的上传的。
在这里插入图片描述
实际对话界面如下

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

3.蓝耘元生代平台简介

下面为大家做一个简要介绍。
在这里插入图片描述

什么是MaaS平台?

模型即服务(MaaS)平台面向企业开发者、创业者及非技术背景用户,提供开箱即用的热门AI模型服务,支持零代码体验、API快速集成与灵活计费,降低AI应用开发门槛,加速业务创新。允许用户通过API接口或其他方式访问和使用预先训练好的机器学习模型,无需自己从头开始训练模型,使得即使没有深厚机器学习背景的用户也能享受到高水平的AI技术支持。

在这里插入图片描述

蓝耘 Maas 平台提供了多种大模型供选择,如 DeepSeek - R1、DeepSeek - V3、QwQ - 32B 等。
在这里插入图片描述
免费赠送超千万token
在这里插入图片描述

4.API调用

4.大模型API介绍

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

5.API 调用流程

5.1确定调用方式​

蓝耘 Maas 平台为开发者提供了清晰且便捷的 API 调用方式。用 Python 语言常用的requests库(这个库没安装需要手动安装)来构造请求。我们要根据所选大模型 API 的要求,确定请求的 URL 地址。
平台URL地址:

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

requests库安装命令:

pip install requests

5.2构造请求参数​

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

  • API KEY获取,进入Maas平台,创建API KEY,复制即可
    官方链接:https://cloud.lanyun.net//#/registerPage?promoterCode=0131

在这里插入图片描述

  • 模型相关参数:指定要调用的具体模型名称,在请求参数中明确设置模型参数。

这次智能客服并不需要向用户展示深度思考的思维链,我选择的模型是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 requestsurl = "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环境,当然别的环境也可以测试
在这里插入图片描述

6.知识库

6.1介绍

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

6.1.1核心特点

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

6.1.2知识库与数据库的区别

下面简单从四个方面,区分一下知识库和数据库
在这里插入图片描述

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

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

6.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 Documentimport PyPDF2PDF_SUPPORT = True
except ImportError:PDF_SUPPORT = Falseprint("警告:缺少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 Falsereturn Trueexcept Exception as e:messagebox.showerror("加载错误", f"无法解析文件 {filename}: {str(e)}")return False

这里我演示下实际操作效果,点击我们的智能客服“上传文件”按钮,就能打开文件目录,选择需要的格式上传就OK了。
在这里插入图片描述
这里,我以手机产品介绍为例作为智能客服的知识库上传,上面这个模块是展示我们上传了的文档的列表,下面显示文档具体的内容,最下面是系统操作提示。
在这里插入图片描述

7.智能客服

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

7.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 ""

7.2开场白设置

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

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

7.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)

7.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)

在这里插入图片描述

7.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))

实际运行效果与对话效果
在这里插入图片描述
AI智能客服系统v1.0界面拥有着三大亮点:

  • 布局合理:界面分区明确,左侧知识库管理区域(页面大小占比30%)便于上传文件、查看知识条目及知识内容详情,右侧聊天区域(页面大小占比70%)专注对话交互,系统信息展示(右下方)和操作互不干扰,用户能快速定位所需功能,使用便捷。
  • 功能直观:“上传文件”、“清空知识库”按钮功能清晰,用户可管理和快速查看知识库内容;聊天窗口消息按时间和角色排列,方便用户回顾对话过程,理解交互逻辑。
  • 专业实用:智能客服能基于知识库为用户推荐手机产品,给出详细产品信息,具备专业知识储备和应用能力,切实满足用户咨询需求。

7.4完整代码

完整的代码给大家做参考,直接用也可以。

import tkinter as tk
from tkinter import scrolledtext, messagebox, filedialog, ttk
import requests
import threading
import json
import os
from datetime import datetime# 新增库:用于处理Word和PDF文件
try:from docx import Documentimport PyPDF2PDF_SUPPORT = True
except ImportError:PDF_SUPPORT = Falseprint("警告:缺少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 Falsereturn Trueexcept Exception as e:messagebox.showerror("加载错误", f"无法解析文件 {filename}: {str(e)}")return Falsedef 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 ""class ChatApp:def __init__(self, root):self.root = rootself.setup_window()self.knowledge_mgr = KnowledgeBaseManager()self.setup_ui()self.setup_bindings()# API配置self.api_config = {"url": "https://maas-api.lanyun.net/v1/chat/completions","api_key": "请替换为实际API密钥",  # 请替换为实际API密钥"model": "/maas/deepseek-ai/DeepSeek-V3"}# 聊天历史self.conversation = [{"role": "system", "content": self.get_system_prompt()},{"role": "assistant", "content": "您好!我是您的手机智能助手,很高兴为您服务!关于手机购买、使用教程、故障排查等问题,都可以告诉我,我会尽力为您解答~"}]# 自动显示开场白self.display_message("客服", "您好!我是您的手机智能助手,很高兴为您服务!关于手机购买、使用教程、故障排查等问题,都可以告诉我,我会尽力为您解答~")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)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)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))def setup_bindings(self):self.user_input.bind("<Return>", lambda e: self.send_message())self.knowledge_list.bind("<<ListboxSelect>>", self.show_knowledge_detail)def upload_knowledge(self):filetypes = [("所有支持的文件", "*.txt *.json *.docx *.pdf"),("Word文档", "*.docx"),("PDF文档", "*.pdf"),("JSON文件", "*.json"),("文本文件", "*.txt"),("所有文件", "*.*")]filepath = filedialog.askopenfilename(filetypes=filetypes)if filepath:if self.knowledge_mgr.load_from_file(filepath):self.update_knowledge_list()self.status_var.set(f"已加载知识库: {os.path.basename(filepath)}")else:self.status_var.set("知识库加载失败")def clear_knowledge(self):self.knowledge_mgr.knowledge_base = []self.update_knowledge_list()self.knowledge_detail.delete(1.0, tk.END)self.status_var.set("知识库已清空")def update_knowledge_list(self):self.knowledge_list.delete(0, tk.END)for idx, item in enumerate(self.knowledge_mgr.knowledge_base[:200]):content = item.get('content', '').strip()  # 使用get方法避免键错误self.knowledge_list.insert(tk.END, f"{idx+1}. {content[:50]}...")def show_knowledge_detail(self, event):selection = self.knowledge_list.curselection()if selection:try:item = self.knowledge_mgr.knowledge_base[selection[0]]self.knowledge_detail.delete(1.0, tk.END)if isinstance(item, dict):self.knowledge_detail.insert(tk.END, f"来源: {item.get('source', '未知')}\n\n"f"内容:\n{item.get('content', '')}")else:self.knowledge_detail.insert(tk.END, str(item))except IndexError:messagebox.showerror("索引错误", "知识库条目已被删除")def get_system_prompt(self):knowledge_context = self.knowledge_mgr.get_context("")return f"""你是专业客服助手,请根据以下知识库内容回答问题:{knowledge_context}回答要求:1. 优先使用知识库内容2. 保持专业礼貌3. 不知道的内容明确说明4. 回答简明扼要"""def send_message(self):user_input = self.user_input.get().strip()if not user_input:returnself.user_input.delete(0, tk.END)self.display_message("用户", user_input)# 添加到对话历史self.conversation.append({"role": "user", "content": user_input})# 获取知识库上下文并更新系统提示knowledge_context = self.knowledge_mgr.get_context(user_input)self.conversation[0]['content'] = self.get_system_prompt().replace("{knowledge_context}", knowledge_context)# 启动线程调用APIthreading.Thread(target=self.call_ai_api, daemon=True).start()def call_ai_api(self):try:# 构建请求头headers = {"Content-Type": "application/json","Authorization": f"Bearer {self.api_config['api_key']}"}# 构建请求体(确保messages为列表)data = {"model": self.api_config["model"],"messages": self.conversation.copy()  # 使用copy避免修改原列表}# 打印调试信息print("=== 发起API请求 ===")print("URL:", self.api_config["url"])print("请求头:", headers)print("请求体:", json.dumps(data, indent=2))# 发送请求response = requests.post(self.api_config["url"],headers=headers,json=data,timeout=15)# 处理响应if response.status_code == 200:result = response.json()print("API响应:", result)# 提取回复内容(根据实际API响应格式调整)ai_answer = result.get("choices", [{}])[0].get("message", {}).get("content", "")if ai_answer:self.display_message("客服", ai_answer)# 更新对话历史self.conversation.append({"role": "assistant", "content": ai_answer})self.status_var.set("回答已生成")else:self.status_var.set("API返回空内容")messagebox.showerror("API响应错误", "接收到的回复内容为空")else:error_msg = f"API错误:状态码{response.status_code},详情:{response.text}"messagebox.showerror("API调用失败", error_msg)print("=== API请求失败 ===")print(error_msg)self.status_var.set("API调用失败")except Exception as e:error_msg = f"系统异常:{str(e)}"messagebox.showerror("系统错误", error_msg)print("=== 系统错误 ===")print(error_msg)self.status_var.set("系统异常")def display_message(self, role, content):timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")self.chat_display.configure(state='normal')self.chat_display.insert(tk.END, f"[{timestamp}] {role}: {content}\n", "tag")self.chat_display.configure(state='disabled')self.chat_display.see(tk.END)if __name__ == "__main__":root = tk.Tk()app = ChatApp(root)root.mainloop()

另外值得一提的是平台可以看到调用API的数量和token用量,实时监控并更新,方便我们查看。
在这里插入图片描述

8.总结

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

蓝耘平台注册链接奉上
https://cloud.lanyun.net//#/registerPage?promoterCode=0131


http://www.hkcw.cn/article/AEvqZmgkVh.shtml

相关文章

VM图像处理之图像二值化

什么是灰度&#xff1f; 灰度&#xff08;Grayscale&#xff09;是指将彩色图像转换为仅包含亮度信息&#xff08;黑白过渡&#xff09;的单通道图像的过程或结果。灰度图像中每个像素的数值代表该点的明暗程度&#xff0c;而不包含颜色信息。 亮度代替颜色&#xff1a; 灰度…

通信革新与网络安全探索与创新:开启未来之门

在科技飞速发展的当下&#xff0c;各领域的前沿探索正不断刷新着人类的认知与能力边界。脑机接口领域取得重大突破&#xff0c;上海阶梯医疗科技有限公司成功完成国内首例侵入式脑机接口系统前瞻性临床试验&#xff0c;受试者通过植入大脑的设备实现用意念玩游戏&#xff0c;为…

sigmastar实现SD卡升级

参考文章:http://wx.comake.online/doc/DD22dk2f3zx-SSD21X-SSD22X/customer/development/software/Px/zh/sys/P3/usb%20&%20sd%20update.html#21-sd 1、构建SD卡升级包 在project下make image完成后使用make_sd_upgrade_sigmastar.sh脚本打包SD卡升级包。 ./make_sd_up…

hook组件-useEffect、useRef

hook组件-useEffect、useRef useEffect 用法及执行机制 WillMount -> render -> DidMount ShouldUpdate -> WillUpdate -> render -> DidUpdate WillUnmount(只有这个安全) WillReceiveProps useEffect(callback) 默认所有依赖都更新useEffect(callback, [])&am…

Spring 5 响应式编程:构建高性能全栈应用的关键

本文已收录在Github&#xff0c;关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01; &#x1f680; 魔都架构师 | 全网30W技术追随者&#x1f527; 大厂分布式系统/数据中台实战专家&#x1f3c6; 主导交易系统百万级流量调优 & 车联网平台架构&a…

用“红烧鱼”类比说明卷积神经网络CNN的概念

我们用一个生活中的例子——「厨房做红烧鱼」 的场景&#xff0c;来类比卷积神经网络中多层卷积核的工作过程。你会发现&#xff0c;卷积层就像厨房里分工明确的厨师团队&#xff0c;逐步处理食材&#xff0c;最终完成一道复杂的菜品。 &#x1f41f; 生活案例&#xff1a;厨房…

如何捍卫德国利益 默茨访美很“烧脑”

根据德国政府日前的声明,德国总理默茨将于当地时间5日访美,与美国总统特朗普举行首次单独会晤。△路透社报道截图德美关系一直是西方世界中最为重要的双边关系之一。然而,自美国总统特朗普提出“美国优先”理念以来,这对跨大西洋盟友间的裂痕不断加深。此前,白宫椭圆形办公…

Google机器学习实践指南(TensorFlow六大优化器)

&#x1f525; Google机器学习实践指南&#xff08;TensorFlow六大优化器&#xff09; Google机器学习实战(12)-20分钟掌握TensorFlow优化器 一、优化器核心作用 ▲ 训练本质&#xff1a; 迭代求解使损失函数最小化的模型参数&#xff0c;关键要素&#xff1a; 特征工程&…

第15讲、Odoo 18 中 自动任务(ir.cron) 的实现原理与应用

目录 引言ir.cron 实现原理运行机制应用场景使用案例 案例一&#xff1a;定期发送邮件通知案例二&#xff1a;自动清理过期数据案例三&#xff1a;订单状态自动更新案例四&#xff1a;系统健康检查 最佳实践与注意事项总结 引言 在企业级应用中&#xff0c;自动化是提高效率…

消费信心回升5.3%!亚马逊泳装搜索量暴涨120%的启示

近期&#xff0c;美国经济呈现出令人鼓舞的复苏迹象。根据密歇根大学发布的最新消费者信心指数&#xff08;Consumer Sentiment Index&#xff09;&#xff0c;2024年5月&#xff0c;该指数环比增长5.3%&#xff0c;达到69.1&#xff0c;创下自2023年中以来的最高水平。与此同时…

绿发会回应涉哈佛女孩蒋雨融争议 特权质疑风波

绿发会回应涉哈佛女孩蒋雨融争议 特权质疑风波!2025年5月29日,哈佛大学毕业典礼上,中国籍学生蒋雨融作为毕业生代表发表演讲。她穿着中国传统服饰,通过讲述翻译洗衣机中文标识的趣事,呼吁多元与包容,并间接批评了特朗普政府的“禁招令”。这场本应充满励志色彩的演讲却因…

高效使用Map的“新”方法

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一个为了让更多人看见许舒雅的宝贝的小白先生 &#x1f921;个人主页&#xff1a;&#x1f517; 许舒雅的宝贝 &#x1f43c;座右铭&#xff1a;深夜两点半的夜灯依旧闪烁&#xff0c;凌晨四点的闹钟不止你一个。 &…

35.x64汇编写法(二)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;34.x64汇编写法&#xff08;一&#xff09; 上一个内容写了&#xff0c;汇编调…

多地公共自行车退场 设备老旧促变革

多地公共自行车退场 设备老旧促变革!近期,多地宣布公共自行车项目停止运营。安徽省马鞍山市和县住房和城乡建设局发布公告称,该县公共自行车将于5月28日终止运营,有需要的市民在2025年6月28日前办理骑行卡押金退款业务。和县公共自行车系统于2016年2月正式运营,县城主城区…

Python----目标检测(训练YOLOV8网络)

一、数据集标注 在已经采集的数据中&#xff0c;使用labelImg进行数据集标注&#xff0c;标注后的txt与原始 图像文件同名且在同一个文件夹&#xff08;data&#xff09;即可。 二、制作数据集 在data目录的同目录下&#xff0c;新建dataset目录&#xff0c;以存放制作好的YOLO…

一周学会Pandas2之Python数据处理与分析-Pandas2时间序列数据分析

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Pandas 提供了强大的时间序列处理功能&#xff0c;是金融分析、物联网数据处理、业务指标监控等领域的核心工具。下面…

房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块

房屋租赁系统 JavaVue.jsSpringBoot&#xff0c;包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块 百度云盘链接&#xff1a;https://pan.baidu.com/s/16YRGBPsfbd4_HxXhO0jM5Q 密码&#xff1a;smk4 摘 要 房屋是人类生活栖息的重要…

【PowerQuery专栏】Record.Combine 函数实现记录连接

Record.Combine 函数功能是将多个不同的记录进行合并&#xff0c;函数目前包含如下参数&#xff1a; 参数1为合并记录&#xff0c;数据类型为列表类型&#xff0c;值为需要进行合并操作的记录 函数的结果为记录类型&#xff0c;图为函数参数。 Record.Combine(record as lis…

C++标准模板库

C标准库参考&#xff1a; C 标准库-CSDN博客 标准模板库STL C 标准库 和 STL 的关系 1. 严格来说&#xff0c;STL ≠ C 标准库 STL&#xff08;Standard Template Library&#xff09; 是 C 标准库的一个子集&#xff0c;主要提供泛型编程相关的组件&#xff08;如容器、迭代器…

Grafana对接Prometheus数据源

实验环境 在上一章的基础上完成 一、Grafana介绍 Grafana是一个独立的开源项目&#xff0c;它可以对接很多项目&#xff0c;实现各种功能的扩展 使用grafana对接Prometheus可以更好的展示Prometheus的metrics&#xff08;指标&#xff09; 二、Grafana安装 1、安装Grafana…