调用蓝耘API打造AI 智能客服系统实践教程_ai系统调用api
声明:文章是实验教程,不是广告
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 Document import PyPDF2 PDF_SUPPORT = Trueexcept 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了。
这里,我以手机产品介绍为例作为智能客服的知识库上传,上面这个模块是展示我们上传了的文档的列表,下面显示文档具体的内容,最下面是系统操作提示。
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 tkfrom tkinter import scrolledtext, messagebox, filedialog, ttkimport requestsimport threadingimport jsonimport osfrom datetime import datetime# 新增库:用于处理Word和PDF文件try: from docx import Document import PyPDF2 PDF_SUPPORT = Trueexcept 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 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 \"\"class ChatApp: def __init__(self, root): self.root = root self.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(\"\", lambda e: self.send_message()) self.knowledge_list.bind(\"<>\", 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: return self.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 ) # 启动线程调用API threading.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