【已更新完毕】2025泰迪杯数据挖掘竞赛C题数学建模思路代码文章教学:竞赛智能客服机器人构建

news2025/4/21 15:50:52

完整内容请看文末最后的推广群

基于大模型的竞赛智能客服机器人构建
摘要
随着国内学科和技能竞赛的增多,参赛者对竞赛相关信息的需求不断上升,但传统人工客服存在效率低、成本高、服务不稳定和用户体验差的问题。因此,设计一款智能客服机器人,利用人工智能技术为赛事提供实时、高效、精准的信息查询服务,成为了迫切的需求。该机器人需具备回答基础信息查询、进行统计分析查询以及处理开放性问题的能力,同时支持竞赛数据的实时更新,确保信息的时效性和准确性。
为了解决问题一,我们采用了自动化的文本提取和自然语言处理方法,首先通过PyPDF2提取PDF文件中的文本,然后利用OpenAI API解析文本,同时基于正则表达式提取出赛事的关键信息,如赛项名称、赛道、发布时间等,并将其保存为结构化的CSV文件。在处理过程中,我们面临了PDF格式不一致和信息提取的挑战,通过优化模型提示和文本清洗,确保了提取结果的准确性和一致性。
问题二的模型通过利用PDF文本提取、自然语言处理技术和Chromadb向量数据库构建了一个智能客服机器人,能够高效地从竞赛文档中提取并存储关键信息,进而实现用户查询的实时回答。该模型在处理标准化查询时表现出色,能够自动化提取竞赛信息并生成准确的回答。
问题三的模型是在问题二的基础上进行扩展,主要任务是处理新增和变更的竞赛PDF文档。该模型通过提取新增和更新的PDF文件中的文本信息,进行清洗、分块和嵌入生成后,将其更新到现有的知识库中,确保知识库包含最新的竞赛数据,使得智能客服系统能够实时响应用户查询并提供最新的竞赛信息。
最后通过前端搭建和后端接口调用, 构建竞赛智能客服机器人, 通过知识库构建、查询处理、响应生成以及系统的部署完成机器人的构建。

关键词:PyPDF2;OpenAI API;大模型;自然语言处理;PDF文本提取;向量数据库;嵌入表示(embedding); Chromadb数据库; 智能客服机器人

目录
基于大模型的竞赛智能客服机器人构建 1
摘要 1
一、 问题重述 3
1.1 问题背景 3
1.2 要解决的问题 3
二、 问题分析 5
2.1 任务一的分析 5
2.2 任务二、三的分析 6
三、 问题假设 8
四、 模型原理 9
4.1 关键词识别 9
4.2 中文文本分析 11
五、 模型建立与求解 11
5.1问题一建模与求解 11
5.2问题二、三建模与求解 18
5.3智能客服机器人系统构建 22
六、 模型评价与推广 26
6.1模型的评价 26
6.1.1模型缺点 26
6.1.2模型缺点 26
6.2 模型推广 27
七、 参考文献 29
附录【自行黏贴】 30

在这里插入图片描述

二、 问题分析
2.1任务一的分析
问题一要求我们从提供的18个竞赛规程PDF文档中提取出关键信息,并将其结构化保存为CSV格式。竞赛规程文档包含了赛事的详细信息,如赛事名称、赛道、发布时间、报名时间、主办单位和官网链接等,我们需要准确提取这些信息,并处理不同文档格式和内容的差异。为了解决这个问题,我们采用了自动化的数据提取方法,结合PDF文本提取和OpenAI的自然语言处理能力。
首先,我们利用PyPDF2库提取PDF文档中的文本。PDF文件的文本结构常常存在格式化问题,因此需要通过清洗和格式化来保证文本的连续性和可读性。接着,使用OpenAI API解析文本,提取出我们需要的信息。在这一过程中,我们构造了详细的提示(Prompt),确保模型能够理解并提取出赛事的关键信息,包括赛项名称、赛道、发布时间、报名时间、主办单位和官网链接等。OpenAI模型通过自然语言处理的强大能力,从文本中抽取出结构化的数据,并将其转化为JSON格式。
在处理过程中,我们面临了一些挑战,例如PDF文件中有时包含扫描图像或特殊字符,这些情况会影响文本的提取质量。此外,不同文档可能采用不同的表述方式,导致字段提取的准确性有所不同。为了应对这些问题,我们在模型提示中规定了详细的规则,并通过推测填补无法明确提取的信息(例如使用文档中出现的时间或组织单位的上下文信息)。在输出结果时,如果某些字段无法准确提取,我们会将其标记为空或进行补充说明,确保输出的格式一致。
最终,所有提取的信息被批量处理并保存为CSV格式,以便后续分析和使用。每个PDF文件的处理结果都包含文件名、赛项名称、赛道、发布时间、报名时间、主办单位和官网等字段。通过这种方法,我们能够高效、自动化地完成大量文档的数据提取工作,并确保结果的准确性和结构一致性。

2.2任务二、三的分析
问题二的目标是利用人工智能技术,结合提供的竞赛数据,设计并实现一个智能客服机器人,以便为用户提供实时、高效、精准的竞赛信息查询服务。为了完成这一任务,我们构建了一个基于自然语言处理和向量数据库的系统,来处理并回答竞赛相关问题。该系统的核心包括文本处理、知识库构建和信息检索三个主要部分。
模型的构建从PDF文档的处理开始,通过使用pdfminer.six库提取竞赛相关的文本信息。由于竞赛文档通常包含大量的竞赛规则、任务描述和赛事信息,因此必须对这些长文本进行预处理。我们采用了文本清洗技术,去除掉无用的字符、空格和HTML标签,以保证文本质量。之后,使用AutoTokenizer对文本进行分词,并将文本分割成若干个块,确保每个块的token数量不超过模型的处理限制。这一过程有效地处理了长文档中可能出现的token溢出问题,并保证了模型输入的有效性。
在完成PDF文档的文本提取和处理后,下一步是构建智能客服机器人的知识库。为了确保机器人能够高效地响应用户查询,我们使用了Chromadb数据库来存储处理后的竞赛信息。通过对每个文本块生成嵌入(embedding),使得每个块能够在向量空间中具有语义上的表示。我们使用了AsyncOpenAI生成嵌入表示,并通过Chromadb存储这些嵌入。知识库的构建是一个异步过程,通过批量处理PDF文档并将嵌入结果添加到数据库中,使得机器人能够从庞大的信息库中快速检索相关内容。
为了实现实时的竞赛信息查询,我们通过CompetitionAgent类实现了一个基于用户输入的查询响应机制。当用户输入问题时,系统会首先通过向量检索从知识库中找到相关上下文,并利用OpenAI的生成模型生成答案。这个过程是通过查询嵌入和生成嵌入的相似度来实现的。系统能够有效地提取与问题相关的竞赛信息,并通过基于上下文的生成模型提供详细回答。机器人不仅能够回答基础的竞赛查询,还能够处理一些统计分析类和开放性问题。
问题三的任务是在问题二的基础上,处理新增和变更的竞赛PDF文档,并将其更新到现有的智能客服机器人系统中。通过从新增或更新的PDF中提取竞赛信息、清洗文本并生成嵌入,系统能够将这些新的或更新的数据集成到知识库中。这样,智能客服系统能够保持最新的竞赛信息,并继续高效地回答用户查询。
模型的核心在于自动化处理新增和变更数据,通过将新的竞赛信息嵌入现有知识库来更新系统。用户查询时,系统可以通过嵌入检索到相关的竞赛数据,并利用生成模型给出准确的回答。这个过程确保了系统始终能够提供及时和准确的竞赛信息,避免了人工更新的繁琐。
该任务的关键挑战在于如何高效地处理和更新竞赛文档,以及确保系统能够无缝地集成新数据。通过简化的问题三模型,通过处理新增和变更的PDF数据,并将其更新到现有的大模型中,使得系统能够继续为用户提供实时的服务,提升了系统的灵活性和可扩展性。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

任务 1:竞赛数据整理
目标:从18个竞赛规程PDF文件中提取基本竞赛信息,并保存到 result_1.xlsx。

解题思路:
PDF 解析:
使用 pdfplumber 或 PyMuPDF 提取 PDF 文本内容。
处理文本分段问题,确保数据完整提取。

信息提取:
采用 正则表达式 识别并提取竞赛名称、赛道、发布时间、报名时间、组织单位和官网信息。
采用 NLP 技术,如 spaCy 或 NLTK 进行信息分类和结构化。

数据整理与存储:
将提取的数据存储为 Pandas DataFrame,并按表格要求格式化。
最终导出为 result_1.xlsx。

    # ---- 提取赛道名称 ----

    # 方案1:匹配"专项赛"关键词

    track_match = re.search(r'(.+?专项赛)', text)

    # 方案2:匹配标题行

    if not track_match:

        track_match = re.search(r'参\s*赛\s*手\s*册\s*\n(.+?)\n', text)

    if track_match:

        info["赛道"] = track_match.group(1).replace("参 赛 手 册", "").strip()

    # ---- 提取发布时间 ----

    date_match = re.search(r'(\d{4}\s*年\s*\d{1,2}\s*月)(?!.*\d{4}\s*年)', text)

    if date_match:

        info["发布时间"] = date_match.group(1).replace(" ", "")

    # ---- 提取报名时间 ----

    reg_date_match = re.search(r'报名时间[::]\s*(\d{4}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日\s*[-至]\s*\d{1,2}\s*月\s*\d{1,2}\s*日)', text)

    if reg_date_match:

        info["报名时间"] = reg_date_match.group(1).replace(" ", "")

    # ---- 提取官网 ----

    website_match = re.search(r'(https?://[^\s\)\]\'"]+)', text)

    if website_match:

        info["官网"] = website_match.group(1).split(',')[0].strip()

任务 2:智能客服机器人构建
目标:基于竞赛规程文档,搭建智能客服机器人,能够回答用户问题。

解题思路:
知识库构建:
解析所有竞赛文件,建立竞赛信息知识库(使用 SQLite 或 Pinecone 向量数据库)。
为数据索引,以便高效查询。

问答系统设计:
关键词匹配:基于 BM25 或 TF-IDF 找出与用户问题最相关的竞赛信息。
自然语言理解(NLU):使用 BERT 或 GPT 进行语义匹配,提高准确率。

问题分类:
基本查询:直接匹配数据库信息(如竞赛报名时间)。
数据统计分析:使用 SQL 或 Pandas 进行统计(如“人工智能相关竞赛有多少?”)。

开放性问题:利用 LLM(如 ChatGPT)生成回答。
机器人回答问题并存储:

================== 第四步:主流程 ==================

def main():

# 1. 创建知识库

knowledge_df = create_knowledge_base()

knowledge_df.to_excel("knowledge_base.xlsx", index=False)

print("已创建知识库文件: knowledge_base.xlsx")

# 2. 创建测试问题

questions_df = create_test_questions()

questions_df.to_excel("test_questions.xlsx", index=False)

print("已创建测试问题文件: test_questions.xlsx")

# 3. 初始化机器人

bot = CompetitionChatbot(knowledge_df)

# 4. 处理问题并保存结果

results = []

for _, row in questions_df.iterrows():

    result = bot.answer_question(row['问题'])

    results.append({

        "问题编号": f"C{row['问题序号']:04d}",

        "问题": result["问题"],

        "关键点": result["关键点"],

        "回答": result["回答"]

    })

result_df = pd.DataFrame(results)

result_df.to_excel("chatbot_answers.xlsx", index=False)

print("已生成回答文件: chatbot_answers.xlsx")

# 5. 打印示例问答

print("\n示例问答:")

print(result_df[['问题编号', '问题', '回答']].to_markdown(index=False))

任务 3:知识库更新与管理
目标:设计机制,使客服机器人能够实时更新竞赛数据。

解题思路:

新增赛事文件的处理:
解析 19_.pdf、20_.pdf、21_***.pdf,提取新增竞赛信息并更新知识库。

变更信息的处理:
解析 07_***.pdf(变更文件)。
对比数据库中的旧数据,识别变更项并更新知识库。

自动更新机制:
定期监测新文件,通过 Cron Job 或 定时任务 触发更新程序。
重新运行问答系统,使用最新数据生成 result_3.xlsx。

def update_from_pdf(self, pdf_path, update_type="新增"):

    """

    从PDF文件更新知识库

    :param pdf_path: PDF文件路径

    :param update_type: 更新类型("新增"或"变更")

    """

    try:

        # 从PDF提取信息(复用问题一的代码)

        new_info = self._extract_info_from_pdf(pdf_path)

        if update_type == "新增":

            self.knowledge_base = pd.concat([self.knowledge_base, new_info], ignore_index=True)

            note = f"新增竞赛: {new_info['赛项名称'].iloc[0]} {new_info['赛道'].iloc[0]}"

        else:

            # 查找并更新现有记录

            mask = (self.knowledge_base['赛项名称'] == new_info['赛项名称'].iloc[0]) & \

                   (self.knowledge_base['赛道'] == new_info['赛道'].iloc[0])

            idx = self.knowledge_base[mask].index

            if len(idx) > 0:

                self.knowledge_base.loc[idx[0]] = new_info.iloc[0]

                note = f"更新竞赛: {new_info['赛项名称'].iloc[0]} {new_info['赛道'].iloc[0]}"

            else:

                self.knowledge_base = pd.concat([self.knowledge_base, new_info], ignore_index=True)

                note = f"未找到匹配竞赛,已新增: {new_info['赛项名称'].iloc[0]} {new_info['赛道'].iloc[0]}"

        # 保存新版本

        new_hash = self._calculate_dataframe_hash(self.knowledge_base)

        self._save_version(version_note=note, data_hash=new_hash)

        return True, note

    except Exception as e:

        return False, f"更新失败: {str(e)}"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ACI EP Learning Whitepaper 3. Disabling IP Data-plane Learning 功能

目录 1. 使用场景 1.1 未disable IP data-plane learning时 1.2 disable IP data-plane learning后 2. 一代Leaf注意事项 3. L2 未知单播注意事项 1. 使用场景 Windows网卡的动态负载均衡绑定模式等。或多个设备共享相同VIP并通过ARP/GARP/ND来宣告VIP切换时,这些外部设…

C++入门七式——模板初阶

目录 函数模板 函数模板概念 函数模板格式 函数模板的原理 函数模板的实例化 模板参数的匹配原则 类模板 类模板的定义格式 类模板的显式实例化 当面对下面的代码时,大家会不会有一种无力的感觉?明明这些代码差不多,只是因为类型不…

【教程】检查RDMA网卡状态和测试带宽 | 附测试脚本

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 检查硬件和驱动状态 测试RDMA通信 报错修复 对于交换机的配置,可以看这篇: 【教程】详解配置多台主机通过交换机实现互…

(二)Trae 配置C++ 编译

Trae配置c编译 零 CMake 编译C0.1 下载安装0.2 安装设置0.3 三种编译方式(见 下文 一 二 三)0.4 调试 (见 下文四) 一 使用MSVC方式编译1.1 安装编译环境1.2安装插件1.3 设置文件 二 使用GCC方式2.1 安装编译环境2.1.1下载:[MinGw](https://gcc-mcf.lhmouse.com/)2.1.2安装:(以…

日本公司如何实现B2B商城订货系统的自动化和个性化?

在日本构建具备前后台日文本地化、业务员代客下单、一客一价、智能拆单发货的B2B电商系统,需结合日本商业习惯与技术实现。以下是关键模块的落地方案: 一、系统架构设计 1. 前端本地化 语言与UI适配 采用全日语界面,包含敬语体系&#xff08…

用魔法打败魔法——获取软件安装路径

用魔法打败魔法——获取软件安装路径 🌟嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 目录 背景普通方法用魔法一句话 1.首先新建‘PC自动化应…

【排队论】Probabilistic Forecasts of Bike-Sharing Systems for Journey Planning

Probabilistic Forecasts of Bike-Sharing Systems forJourney Planning abstract 我们研究了对共享单车系统(BSS)车站未来自行车可用性进行预测的问题。这是相关的,以便提出建议,保证用户能够进行旅行的概率足够高。为此&#x…

高精度算法(加、减、乘、除、阶乘和)​

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 唯有主动付出,才有丰富的果…

实战设计模式之备忘录模式

概述 与解释器模式、迭代器模式一样,备忘录模式也是一种行为设计模式。备忘录模式允许我们保存一个对象的状态,并在稍后恢复到这个状态。该模式非常适合于需要回滚、撤销或历史记录等功能的应用场景。通过使用备忘录模式,开发者可以轻松添加诸…

吉尔吉斯斯坦工商会代表团赴齐河德瑞新能源汽车考察

德州齐河,2025年4月15日电 时中美贸易突变之际,乘国家一带一路之风。 展中国新能源之宏图,塑国贸体系之新方向。 今日上午,吉尔吉斯斯坦共和国工商会代表团一行三人受邀抵达济南,开启对德瑞新能源科技有限公司&…

无人机在农业中的应用与挑战!

一、无人机在农业中的作用 1. 提升作业效率与降低成本 无人机在喷洒农药、播种、施肥、吊运等环节显著提升效率。例如,湖北秭归县使用大疆T100无人机吊运脐橙,单次85公斤的运输任务仅需2分钟,而人工需1小时,综合成本降低250元…

QT网络拓扑图绘制实验

前言 在网络通讯中,我qt常用的是TCP或者UDP协议,就比方说TCP吧,一台服务器有时可能会和多台客户端相连接,我之前都是处理单链接情况,最近研究图结构的时候,突然就想到了这个问题。那么如何解决这个问题呢&…

支持中文对齐的命令行表格打印python库——tableprint

文章目录 快速入门 还在为表格中含有中文,命令行打印无法对齐而苦恼吗? 还在为冗长的数据添加代码而抓狂吗? tableprint来了!!!,它完美的解决了上述两个问题,快来试试吧!…

从《周游记3》演绎歌剧版《菊花台》,周杰伦婚礼曲目意大利文版惊喜亮相

今天(4月19日)22:00,由魔胴西西里咖啡冠名的户外实境互动综艺《周游记3》第四期即将播出。本期节目中,“J式之旅”发起人周杰伦和林暐恒、杜国璋、陈冠霖、陈冠廷,将继续意大利之旅,从那不勒斯的百年老店到…

生物化学笔记:医学免疫学原理23 免疫检查点分子与肿瘤免疫治疗(PD-1抑制剂黑色素瘤)

免疫检查点分子与肿瘤免疫治疗 免疫检查点分子与肿瘤免疫治疗-2

CasualLanguage Model和Seq2Seq模型的区别

**问题1:**Causal Language Modeling 和 Conditional Generation 、Sequence Classification 的区别是什么? 因果语言模型(Causal Language Model): 预测给定文本序列中的下一个字符,一般用于文本生成、补全句子等,模型…

verilog float mult

module pipe_float_mul(input wire clk ,// 时钟信号input wire en ,// 使能信号input wire rst_n ,// 复位信号input wire round_cfg ,// 决…

微信小程序调用yolo目标检测模型

目录 后端 前端微信小程序 完整代码 后端 利用Flask,调用目标检测模型,后端代码如下。 # flask_yolo.py from flask import Flask, request, jsonify from ultralytics import YOLO from PIL import Imageapp Flask(__name__) model_path best.p…

Flink框架十大应用场景

Flink框架适合应用的场景 1. 流式数据处理 Flink框架最常用的应用场景是流式数据处理。流式数据处理是指对实时数据进行处理,以便及时地做出决策。例如,一个电商网站需要对用户的行为进行实时分析,以便根据用户的兴趣和行为推荐商品。Flink框架可以帮助电商网站实时地处理数…

【android telecom 框架分析 01】【基本介绍 2】【BluetoothPhoneService为何没有源码实现】

1. 背景 我们会在很多资料上看到 BluetoothPhoneService 类,但是我们在实际 aosp 中确找不到具体的实现, 这是为何? 这是一个很好的问题!虽然在车载蓝牙电话场景中我们经常提到类似 BluetoothPhoneService 的概念,但…