AI大模型探索之路-应用篇17:GLM大模型-大数据自助查询平台架构实践

这篇具有很好参考价值的文章主要介绍了AI大模型探索之路-应用篇17:GLM大模型-大数据自助查询平台架构实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

在众多大型企业中,数据资产庞大无比,因此它们纷纷构建了多种大数据平台。然而,关键在于如何高效地利用这些数据,例如,将数据有效地提供给产品经理或数据分析师以供他们进行设计和分析。在传统工作流程中,由于这些角色通常不是技术专家,他们往往无法直接使用和操控SQL,导致必须依赖技术人员来编写SQL查询并返回结果,然后才能由产品经理、数据分析师或其他相关人员进一步处理。

然而,随着强大的大模型]的出现,我们对自然语言的理解能力得到了极大的提升,同时通过支持的插件式扩展(允许自主调用相关外部方法或API),为我们解决这一难题提供了全新的思路。这些大模型不仅能够理解复杂的自然语言查询,还能够与现有的数据处理工具无缝集成,从而使得非技术用户也能够直接参与到数据分析的过程中,无需通过技术人员作为中介,极大地提高了工作效率和决策的速度。

一、技术架构设计

用户输入说明要查询的信息,LLM基于本地知识库生成SQL,调用不同的Funcation Call,每个一个Funcation call中都封装一个不同的数据服务的调用;比如Mysql、Hive、Spark、Flink。

AI大模型探索之路-应用篇17:GLM大模型-大数据自助查询平台架构实践,AIGC-AI大模型探索之路,AIGC,人工智能,自然语言处理,AI编程,python,语言模型

二、本地知识库准备

大模型擅长将输出转化为不同格式,比如从一种语言翻译成另一种语言,帮助拼写、语法纠正以及编写正则表达式;整个平台有两个基础支持的部分,第一部分就是数据字典,我们先将所有需要查询的数据库、表、字段信息结构化整理成数据字典,作为本地知识库。
AI大模型探索之路-应用篇17:GLM大模型-大数据自助查询平台架构实践,AIGC-AI大模型探索之路,AIGC,人工智能,自然语言处理,AI编程,python,语言模型

三、SQLServer服务

平台中两个核心支撑中另外一个就是数据服务的开发,基于不同的数据库类型,开发不同的数据服务,用于支撑LLM的数据查询;包括但不限于:MySQL数据服务,Hive数据服务、Spark数据服务、Flink数据服务等;
AI大模型探索之路-应用篇17:GLM大模型-大数据自助查询平台架构实践,AIGC-AI大模型探索之路,AIGC,人工智能,自然语言处理,AI编程,python,语言模型

1. 数据库准备

步骤1:安装MySQL数据库

sudo apt-get update
sudo apt-get install mysql-server

步骤2:启动MySQL数据库

sudo service mysql start
sudo systemctl start mysqld

步骤3:登录MySQL数据库

mysql -u root -p 

步骤4:创建数据库用户glm

CREATE USER 'glm'@'localhost' IDENTIFIED BY 'glm';

步骤5:给数据库用户赋权限

GRANT ALL PRIVILEGES ON *.* TO 'glm'@'localhost';
FLUSH PRIVILEGES;

步骤6:创建数据库

CREATE DATABASE glm;
USE glm;

2. 数据准备

CREATE TABLE user_info (
customerID VARCHAR(255),
gender VARCHAR(255),
SeniorCitizen INT,
Partner VARCHAR(255),
Dependents VARCHAR(255)
);
INSERT INTO user_info (customerID, gender, SeniorCitizen, Partner, Dependents)
VALUES
('1', 'Female', 0, 'Yes', 'No'),
('2', 'Male', 1, 'No', 'Yes'),
('3', 'Male', 0, 'No', 'No'),
('4', 'Female', 1, 'Yes', 'Yes'),
('5', 'Male', 0, 'No', 'No'),
('6', 'Female', 0, 'Yes', 'Yes'),
('7', 'Male', 1, 'Yes', 'No'),
('8', 'Female', 0, 'No', 'No'),
('9', 'Male', 1, 'Yes', 'Yes'),
('10', 'Female', 0, 'No', 'No'),
('11', 'Male', 0, 'Yes', 'Yes'),
('12', 'Female', 1, 'No', 'No'),
('13', 'Male', 0, 'No', 'Yes'),
('14', 'Female', 0, 'Yes', 'No'),
('15', 'Male', 1, 'Yes', 'Yes'),
('16', 'Female', 0, 'No', 'No'),
('17', 'Male', 0, 'No', 'Yes'),
('18', 'Female', 1, 'Yes', 'No'),
('19', 'Male', 0, 'No', 'No'),
('20', 'Female', 1, 'No', 'Yes');

3. SQL服务封装

安装依赖:! pip install pymysql
封装SQL执行函数(将传入的SQL代码传输至MySQL环境中进行运行,并最终返回SQL代码运行结果)。

import pymysql
import json
def sql_inter(sql_query):
    """
    用于执行一段SQL代码,并最终获取SQL代码执行结果,\
    核心功能是将输入的SQL代码传输至MySQL环境中进行运行,\
    并最终返回SQL代码运行结果。需要注意的是,本函数是借助pymysql来连接MySQL数据库。
    :param sql_query: 字符串形式的SQL查询语句,用于执行对MySQL中telco_db数据库中各张表进行查询,并获得各表中的各类相关信息
    :return:sql_query在MySQL中的运行结果。
    """
    
    connection = pymysql.connect(
            host="localhost",  # 数据库地址
            user='glm',  # 数据库用户名
            passwd="glm",  # 数据库密码
            db=glm',  # 数据库名
            charset='utf8'  # 字符集选择utf8
        )
    
    try:
        with connection.cursor() as cursor:
            # SQL查询语句
            sql = sql_query
            cursor.execute(sql)

            # 获取查询结果
            results = cursor.fetchall()

    finally:
        connection.close()
    
    
    return json.dumps(results)
#函数测试
sql_inter("select count(*) from user_info")
'[[20]]'

四、核心代码落地

接收前端用户的输入信息,LLM基于本地知识库,生成SQL;自主判断(根据提示和描述信息的相关性)通过Funcation Call调用不同数据服务;返回结果给到前端用户;

1.模型加载

从huggingface拉取分词器模型和基础大模型,进行加载运行到本地服务器

##测试模型
from transformers import AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b",
trust_remote_code=True)

#model = AutoModel.from_pretrained("THUDM/chatglm3-6b",trust_remote_code=True).quantize(8).cuda()
model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True,device='cuda')

model = model.eval()

2.本地知识库读取

将数据库、表、字段等数据字典信息,整理成一个Markdown文件

# 打开并读取Markdown文件
with open('user_info.md', 'r', encoding='utf-8') as f:
    data_dictionary = f.read()

## 定义一个简单的数据库测试服务
sql_inter(sql_query='SELECT COUNT(*) FROM user_info;')

3.function call函数封装

sql_inter_function_info = [
    {
    'name': 'sql_inter',
    'description': '用于执行一段SQL代码,并最终获取SQL代码执行结果,核心功能是将输入的SQL代码传输至MySQL环境中进行运行,并最终返回SQL代码运行结果。',
    'parameters': {
        'type': 'object',
        'properties': {
            'sql_query': {
                'type': 'string',
                'description': '字符串形式的SQL代码,可以在MySQL中运行,并获取运行结果'
            }
        },
        'required': ['sql_query']
    }
}
]

4.工具函数封装

def run_conv_glm(query,tokenizer, history, model,functions_list=None, functions=None, return_function_call=True):
    """
    能够自动执行外部函数调用的Chat对话模型
    :param messages: 必要参数,输入到Chat模型的messages参数对象
    :param functions_list: 可选参数,默认为None,可以设置为包含全部外部函数的列表对象
    :param model: Chat模型,可选参数,默认模型为chatglm3-6b
    :return:Chat模型输出结果
    """

    # 如果没有外部函数库,则执行普通的对话任务
    if functions_list == None:
        response, history = model.chat(tokenizer, query, history=history)
        final_response = response
        
    # 若存在外部函数库,则需要灵活选取外部函数并进行回答
    else:
        # 创建调用外部函数的system_message
        system_info = {
            "role": "system",
            "content": "Answer the following questions as best as you can. You have access to the following tools:",
            "tools": functions,
        }
        # 创建外部函数库字典
        available_functions = {func.__name__: func for func in functions_list}
        history=[system_info]

        ## 第一次调用,目的是获取函数信息    
        response,history = model.chat(tokenizer, query, history=history)
        print(response)
        # 需要调用外部函数
        function_call = response
        # 获取函数名
        function_name = function_call["name"]
        # 获取函数对象
        fuction_to_call = available_functions[function_name]
        # 获取函数参数
        function_args = function_call['parameters']
        # 将函数参数输入到函数中,获取函数计算结果
        function_response = fuction_to_call(**function_args)
        # print("答案")
        # print(function_response)

        # ## 第二次调用,带入进去函数
        # history=[]
        # history.append(
        #         {
        #             "role": "observation",
        #             "name": function_name,
        #             "content":function_response,
        #         }
        # ) 
        # print(history)
        # query= "请帮我到查询一下有多少电信用户,并给出答案"
        # response, history = model.chat(tokenizer, query, history=history)
        final_response=function_response
    
    return final_response,history

5. 调用查询测试

query = data_dictionary + ",请帮我到查询一下有多少电信用户,并给出答案?"
history=[]
functions_list = [sql_inter]
functions=sql_inter_function_info
response,history = run_conv_glm(query=query,functions=functions,model=model,functions_list=functions_list,history=history,tokenizer=tokenizer)

第一次:执行输出如下:结果很正确😀)

{'name': 'sql_inter', 'parameters': {'sql_query': 'SELECT COUNT(*) FROM user_info'}}

打印:print(response) 输出结果正确: [[20]]
第二次:执行输出如下:结果也没啥问题😀)

{'name': 'sql_inter', 'parameters': {'sql_query': 'SELECT COUNT(*) FROM user_info WHERE gender IN("Male", "Female")'}}

第三次:执行输出如下:条件中出现了未知字段 is_senior ,很明显翻车了😂)

{'name': 'sql_inter', 'parameters': {'sql_query': 'SELECT COUNT(*) FROM user_info WHERE is_senior = 0;'}}

第四次:执行输出如下:不知道怎么查询了,彻底蒙圈了🤣)

您好,我可以帮您查询这个问题。请问您需要使用哪种编程语言进行查询?

第五次:执行输出如下:还是回答错误😂)

{'name': 'sql_inter', 'parameters': {'sql_query': 'SELECT COUNT(*) FROM user_info WHERE gender = "Male"'}}

第五次:执行输出如下:又回答对了😀)

{'name': 'sql_inter', 'parameters': {'sql_query': 'SELECT COUNT(*) FROM user_info'}}

五、结束思考

1)大模型的问世,为我们带来了前所未有的便捷性。众多传统应用正从全新的角度,借助大模型的力量进行着颠覆性的重构。然而,大模型的稳定性尚存变数,这一点在功能设计时必须予以充分考虑。
2)对于本平台的本地知识库,如果采纳微调的策略来丰富和优化大模型,将显得更为合理。鉴于知识库涵盖的内容广泛,数据字典信息繁多,这种微调方式有助于提升大模型的理解力和应用效果。

👉上一篇: AI大模型探索之路-应用篇16:GLM大模型-ChatGLM3 API开发实践
🔖更多专栏系列文章:AIGC-AI大模型探索之路

文章若有瑕疵,恳请不吝赐教;若有所触动或助益,还望各位老铁多多关注并给予支持。文章来源地址https://www.toymoban.com/news/detail-855386.html

到了这里,关于AI大模型探索之路-应用篇17:GLM大模型-大数据自助查询平台架构实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI大模型探索之路-基础篇2:掌握Chat Completions API的基础与应用

    OpenAI 大模型提供了一些强大的 API,方便用户与 OpenAI 的大语言模型进行交互。除了上篇中讲到的Embeddings中需要用到的embeddings接口,其核心接口主要是Completions 和Chat Completions接口。 自动文本补全、用于生成各类文本任务的模型,可以根据给定的提示(prompt)自动生成和补全文本

    2024年04月12日
    浏览(30)
  • AI大模型探索之路-训练篇5:大语言模型预训练数据准备-词元化

    AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概览 在自然语言处理领域,大语言模型预训练数据准备是一个重

    2024年04月28日
    浏览(35)
  • AI大模型探索之路-训练篇3:大语言模型全景解读

    大规模语言模型(Large Language Models,LLM),也称大语言模型或大型语言模型,是一种由包含数百亿以上参数的深度神经网络构建的语言模型,通常使用自监督学习方法通过大量无标注文本进行训练。 语言模型旨在对于人类语言的内在规律进行建模,从而准确预测词序列中未来

    2024年04月26日
    浏览(36)
  • AI大模型探索之路-认知篇3:大语言模型微调基础认知

    在人工智能的广阔研究领域内,大型预训练语言模型(Large Language Models, LLMs)已经成为推动技术革新的关键因素。这些模型通过在大规模数据集上的预训练过程获得了强大的语言理解和生成能力,使其能够在多种自然语言处理任务中表现出色。然而,由于预训练过程所产生的

    2024年04月24日
    浏览(37)
  • AI大模型探索之路-训练篇2:大语言模型预训练基础认知

    在人工智能的宏伟蓝图中,大语言模型(LLM)的预训练是构筑智慧之塔的基石。预训练过程通过调整庞大参数空间以吸纳数据中蕴含的知识,为模型赋予从语言理解到文本生成等多样化能力。本文将深入探讨预训练过程中的技术细节、所面临的挑战、通信机制、并行化策略以

    2024年04月25日
    浏览(32)
  • AI大模型探索之路-提升篇2:一文掌握AI大模型的核心-注意力机制

    目录 前言 一、注意力机制简介 二、注意力机制的工作原理 三、注意力机制的变体 1、自注意力(Self-Attention) 2、双向注意力(Bidirectional Attention) 3、多头注意力(Multi-Head Attention) ​4、无限注意力机制(Infini-attention) 四、注意力机制在自然语言理解中的应用 五、未来展

    2024年04月15日
    浏览(33)
  • AI大模型探索之路-实战篇1:基于OpenAI智能翻译助手实战落地

    在全球化的浪潮中,语言翻译需求日益增长。市场上涌现出各式各样的翻译工具和平台,然而,免费的解决方案往往局限于简短文本的翻译。面对长篇文档,用户通常不得不转向付费服务。鉴于大型预训练语言模型(LLMs)在自然语言翻译上的显著优势,利用这些模型打造一款

    2024年04月26日
    浏览(31)
  • 探索AI大模型在语音识别与语音合成领域的应用

    语音识别和语音合成是人工智能领域的两个重要技术,它们在现代社会中发挥着越来越重要的作用。随着AI大模型的不断发展,这两个领域的技术进步也越来越快。在本文中,我们将探讨AI大模型在语音识别与语音合成领域的应用,并深入了解其核心算法原理、最佳实践、实际

    2024年04月16日
    浏览(36)
  • 内容更新版:AI大模型智能大气科学探索之:ChatGPT在大气科学领域建模、数据分析、可视化与资源评估中的高效应用及论文写作

    深度探讨人工智能在大气科学中的应用,特别是如何结合最新AI模型与Python技术处理和分析气候数据。课程介绍包括GPT-4等先进AI工具,旨在大家掌握这些工具的功能及应用范围。内容覆盖使用GPT处理数据、生成论文摘要、文献综述、技术方法分析等实战案例,使学员能够将

    2024年04月10日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包