AI大模型探索之路-实战篇:智能化IT领域搜索引擎之HuggingFace网站在线搜索

news2024/11/26 17:25:53

系列篇章💥

No.文章
1AI大模型探索之路-实战篇:智能化IT领域搜索引擎的构建与初步实践
2AI大模型探索之路-实战篇:智能化IT领域搜索引擎之GLM-4大模型技术的实践探索
3AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(初步实践)
4AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(函数封装)
5AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(流程优化)
6AI大模型探索之路-实战篇:智能化IT领域搜索引擎之github网站在线搜索
7AI大模型探索之路-实战篇:智能化IT领域搜索引擎之HuggingFace网站在线搜索

目录

  • 系列篇章💥
  • 一、前言
  • 二、总体概览
  • 三、HuggingFace API调用开发
    • 1、定义一个Huggingface 模型查询函数
    • 2、查询结果排序
    • 3、提取解析第二条的ID
  • 四、获取readme文档
    • 1、定义模型readme查询函数
    • 2、查询结果解析
    • 3、chatglm查询测试
  • 五、基于HuggingFace网站搜索代码封装
    • 1、huggingface关键词提取函数
    • 2、定义huggingface对话助手
    • 3、huggingface对话助手测试
  • 结语


一、前言

在前面篇章中,我们已成功实现了知乎与Github网站数据的智能搜索流程,并融入了代码开发之中。本章,我们将拓展边界,主要实现HuggingFace网站的在线智能搜索功能,致力于为用户提供更为全面且精准的搜索体验。

二、总体概览

本章的核心目标是通过编写高效代码,逐步实现对HuggingFace网站数据的智能化搜索,并无缝整合至我们的搜索引擎系统中,以提升整体的搜索质量与响应速度。
在这里插入图片描述

将Hugging face接入GPT模型中。得益于Hugging face完善的API体系,相比前两个智能搜索问答项目,将Hugging face接入GPT模型的过程会简单很多,甚至都不用谷歌搜索API即可完成。总的来说,将Hugging face接入GPT模型的流程是,首先,借助此前定义的convert_keyword_github函数提取用户提问的模型关键词,然后借助Hugging face的Search API完成模型搜索,和Github类似,在Hugging face中,同一个模型会有多种类型的变种,这里我们可以搜索得到一些较为受欢迎的模型进行模型功能的查询。而具体的查询过程也同样是查询不同模型的readme文档,而Hugging face上的readme文档同样也是可以通过API快速获取。

三、HuggingFace API调用开发

1、定义一个Huggingface 模型查询函数

def search_models(query):
    url = "https://huggingface.co/api/models"
    params = {"search": query}
    response = requests.get(url, params=params)
    return response.json()

search_results = search_models("chatglm")
len(search_results)

2、查询结果排序

## 我们根据模型的受欢迎程度(likes指标)对其进行降序排序,挑选较为受欢迎的模型进行问答:
sorted_results = sorted(search_results, key=lambda x: x['likes'], reverse=True)
sorted_results[:10]

输出:

[{'_id': '640f4f1409c94e1d9bca3ffc',
  'id': 'THUDM/chatglm-6b',
  'likes': 2773,
  'private': False,
  'downloads': 26319,
  'tags': ['transformers',
   'pytorch',
   'chatglm',
   'glm',
   'thudm',
   'custom_code',
   'zh',
   'en',
   'arxiv:2103.10360',
   'arxiv:2210.02414',
   'endpoints_compatible',
   'has_space',
   'region:us'],
  'library_name': 'transformers',
  'createdAt': '2023-03-13T16:28:04.000Z',
  'modelId': 'THUDM/chatglm-6b'},
 {'_id': '64971933a9c42bc6a848d3f4',
  'id': 'THUDM/chatglm2-6b',
  'likes': 1995,
  'private': False,
  'downloads': 100996,
  'tags': ['transformers',
   'pytorch',
   'chatglm',
   'glm',
   'thudm',
   'custom_code',
   'zh',
   'en',
   'arxiv:2103.10360',
   'arxiv:2210.02414',
   'arxiv:1911.02150',
   'endpoints_compatible',
   'has_space',
   'region:us'],
  'library_name': 'transformers',
  'createdAt': '2023-06-24T16:26:27.000Z',
  'modelId': 'THUDM/chatglm2-6b'},
 {'_id': '6538e659a608e1c3a212cb75',
  'id': 'THUDM/chatglm3-6b',
  'likes': 923,
  'private': False,
  'downloads': 260293,
  'tags': ['transformers',
   'pytorch',
   'safetensors',
   'chatglm',
   'glm',
   'thudm',
   'custom_code',
   'zh',
   'en',
   'arxiv:2103.10360',
   'arxiv:2210.02414',
   'endpoints_compatible',
   'has_space',
   'region:us'],
  'library_name': 'transformers',
  'createdAt': '2023-10-25T09:56:41.000Z',
  'modelId': 'THUDM/chatglm3-6b'},
 {'_id': '6416f9b4ad63d650515a81f9',
  'id': 'THUDM/chatglm-6b-int4',
  'likes': 406,
  'private': False,
  'downloads': 2182,
  'tags': ['transformers',
   'pytorch',
   'chatglm',
   'glm',
   'thudm',
   'custom_code',
   'zh',
   'en',
   'endpoints_compatible',
   'has_space',
   'region:us'],
  'library_name': 'transformers',
  'createdAt': '2023-03-19T12:01:56.000Z',
  'modelId': 'THUDM/chatglm-6b-int4'},
 {'_id': '64c670cb1d44fc06aff93c39',
  'id': 'THUDM/chatglm2-6b-32k',
  'likes': 295,
  'private': False,
  'downloads': 712,
  'tags': ['transformers',
   'pytorch',
   'chatglm',
   'glm',
   'thudm',
   'custom_code',
   'zh',
   'en',
   'arxiv:2103.10360',
   'arxiv:2210.02414',
   'arxiv:2306.15595',
   'arxiv:1911.02150',
   'endpoints_compatible',
   'has_space',
   'region:us'],
  'library_name': 'transformers',
  'createdAt': '2023-07-30T14:16:43.000Z',
  'modelId': 'THUDM/chatglm2-6b-32k'},
 {'_id': '64a8dfd4de2d860082cd2428',
  'id': 'fb700/chatglm-fitness-RLHF',
  'likes': 267,
  'private': False,
  'downloads': 0,
  'tags': ['peft',
   'pytorch',
   'chatglm',
   'chatglm-6b',
   'chatglm2-6b',
   'ft',
   'sft',
   'PPO',
   'RLHF',
   'RM',
   'Transformer',
   'custom_code',
   'zh',
   'en',
   'license:apache-2.0',
   'has_space',
   'region:us'],
  'library_name': 'peft',
  'createdAt': '2023-07-08T04:02:28.000Z',
  'modelId': 'fb700/chatglm-fitness-RLHF'},
 {'_id': '653a63fa32c97d06552cbbd8',
  'id': 'THUDM/chatglm3-6b-32k',
  'likes': 235,
  'private': False,
  'downloads': 10477,
  'tags': ['transformers',
   'pytorch',
   'chatglm',
   'glm',
   'thudm',
   'custom_code',
   'zh',
   'en',
   'arxiv:2103.10360',
   'arxiv:2210.02414',
   'endpoints_compatible',
   'has_space',
   'region:us'],
  'library_name': 'transformers',
  'createdAt': '2023-10-26T13:04:58.000Z',
  'modelId': 'THUDM/chatglm3-6b-32k'},
 {'_id': '6498371e07e994b4af4f8c41',
  'id': 'THUDM/chatglm2-6b-int4',
  'likes': 230,
  'private': False,
  'downloads': 3607,
  'tags': ['transformers',
   'pytorch',
   'chatglm',
   'glm',
   'thudm',
   'custom_code',
   'zh',
   'en',
   'arxiv:2103.10360',
   'arxiv:2210.02414',
   'arxiv:1911.02150',
   'endpoints_compatible',
   'has_space',
   'region:us'],
  'library_name': 'transformers',
  'createdAt': '2023-06-25T12:46:22.000Z',
  'modelId': 'THUDM/chatglm2-6b-int4'},
 {'_id': '653a32b3ff0158207aa9bd60',
  'id': 'THUDM/chatglm3-6b-base',
  'likes': 82,
  'private': False,
  'downloads': 7492,
  'tags': ['transformers',
   'pytorch',
   'chatglm',
   'glm',
   'thudm',
   'custom_code',
   'zh',
   'en',
   'arxiv:2103.10360',
   'arxiv:2210.02414',
   'endpoints_compatible',
   'has_space',
   'region:us'],
  'library_name': 'transformers',
  'createdAt': '2023-10-26T09:34:43.000Z',
  'modelId': 'THUDM/chatglm3-6b-base'},
 {'_id': '641857768b14a25b75826ad7',
  'id': 'THUDM/chatglm-6b-int4-qe',
  'likes': 80,
  'private': False,
  'downloads': 103,
  'tags': ['transformers',
   'pytorch',
   'chatglm',
   'feature-extraction',
   'glm',
   'thudm',
   'custom_code',
   'zh',
   'en',
   'has_space',
   'region:us'],
  'pipeline_tag': 'feature-extraction',
  'library_name': 'transformers',
  'createdAt': '2023-03-20T12:54:14.000Z',
  'modelId': 'THUDM/chatglm-6b-int4-qe'}]

3、提取解析第二条的ID

sorted_results[2]['id']

输出:
‘THUDM/chatglm3-6b’

四、获取readme文档

1、定义模型readme查询函数

## 接下来即可根据模型ID,调用对应Hugging face API来查询各模型的说明文档。具体实现过程如下
def get_model_readme(model_id):
    url = f"https://huggingface.co/{model_id}/resolve/main/README.md"
    response = requests.get(url)
    return response.text

2、查询结果解析

model_readme = get_model_readme(sorted_results[1]['id'])
model_readme

在这里插入图片描述

3、chatglm查询测试

def get_model_readme(model_id):
    url = f"https://huggingface.co/{model_id}/resolve/main/README.md"
    response = requests.get(url)
    return response.text

调用测试

model_readme = get_model_readme("THUDM/chatglm-6b-int4")
print(model_readme)

输出
在这里插入图片描述

五、基于HuggingFace网站搜索代码封装

1、huggingface关键词提取函数

def convert_keyword_huggingface(q):
    """
    将用户输入的问题转化为适合在huggingface上进行搜索的关键词
    """
    response = client.chat.completions.create(
            model="glm-4",
            messages=[
                 {"role": "system", "content": "你专门负责将用户的问题转化为huggingface上的搜索关键词,只返回一个你认为最合适的搜索关键词即可"},
                 {"role": "user", "content": "请问DeepSpeed是什么?"},
                 {"role": "assistant", "content": "DeepSpeed"},
                 {"role": "user", "content": q}
            ]
        )
    q = response.choices[0].message.content
    return q

2、定义huggingface对话助手

def chat_with_huggingface(q):

    # 调用转化函数,将用户的问题转化为模型关键词
    query = convert_keyword_huggingface(q)
    
    search_results = search_models(query)

    sorted_results = sorted(search_results, key=lambda x: x['likes'], reverse=True)[:5]
    
    print('现有5个与“%s”相关的模型如下:' % query)
    for dic in sorted_results:
        print(dic['id'])


    #model_id = input('请输入想查询的模型ID:')
    model_id = 1

    model_readme = get_model_readme(model_id)

    messages=[
        {"role": "system", "content": model_readme},
        {"role": "user", "content": q}
        ]
    response = client.chat.completions.create(
                model="glm-4",
                messages=messages,) 
    print("智能搜索平台回答如下:")
    print(response.choices[0].message.content)

3、huggingface对话助手测试

chat_with_huggingface("介绍一下ChatGLM3")

输出:

现有5个与“ChatGLM3-6B”相关的模型如下: THUDM/chatglm3-6b THUDM/chatglm3-6b-32k
THUDM/chatglm3-6b-base THUDM/chatglm3-6b-128k
shibing624/chatglm3-6b-csc-chinese-lora 智能搜索平台回答如下: ChatGLM3
是由智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。它是 ChatGLM
系列中的最新模型,继承了前两代模型在对话流畅性和部署门槛低等方面的优点,并引入了一些新的特性和改进。

以下是对 ChatGLM3 的一些关键介绍:

  1. 更强大的基础模型:ChatGLM3 的基础模型是 ChatGLM3-6B-Base,它使用了更多样化的训练数据、更充分的训练步数和更合理的训练策略。根据官方发布的信息,该模型在多个评测数据集上展现出了优异的性能,尤其在10B以下的基础模型中具有顶尖的性能。

  2. 提升的性能:通过多阶段增强预训练方法、丰富的训练数据和优化后的训练方案,ChatGLM3 相比前一代模型在性能上有了显著提升。在44个中英文公开数据集上的测试表明,ChatGLM3
    在国内同尺寸模型中排名第一,尤其在数学、推理、代码和知识等方面表现突出。

  3. 完整的功能支持:ChatGLM3 采用了全新设计的 Prompt 格式,除了支持多轮对话外,还原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent
    任务等复杂场景。

  4. 全面的开源序列:除了对话模型 ChatGLM3-6B,还包括基础模型 ChatGLM3-6B-Base 和长文本对话模型 ChatGLM3-6B-32K。这些模型的权重对学术研究完全开放,并在填写相应的问卷后允许免费商业使用。

  5. 性能和功能层面的升级:ChatGLM3-6B 在10B范围内的模型中性能最强,其推理能力甚至可以与 GPT-3.5 相媲美。此外,它还更新了多模态功能、代码解释器功能、联网功能以及 Agent 优化功能,这些核心功能的更新使其更加接近 GPT-4。

总体来说,ChatGLM3 作为一个开源的对话模型,不仅为学术研究提供了强大的工具,也为商业应用带来了更多的可能性。

结语

随着本章的圆满完成,我们不仅成功实现了HuggingFace网站数据的智能搜索功能,还将其无缝整合到了我们的搜索引擎系统之中。这一里程碑式的进步,标志着我们在智能化IT领域搜索引擎的发展道路上又迈出了坚实的一步。后面如有必要,我们将继续探索更多数据源,不断优化搜索算法,为用户提供更为丰富、精准且高效的搜索服务,推动智能化IT领域的持续发展与创新。

在这里插入图片描述

🎯🔖更多专栏系列文章:AIGC-AI大模型探索之路

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:建立有技术交流群,可以扫码👇 加入社群,500本各类编程书籍、AI教程、AI工具等你领取!
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

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

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

相关文章

【乐吾乐2D可视化组态编辑器】导航

支持点击图元,切换画面或跳转链接。 乐吾乐2D可视化组态编辑器地址:https://2d.le5le.com/ 切换画面 1. 添加事件 2. 设置事件行为 事件行为"发送消息",消息名选择"导航"。 3. 配置消息参数 消息参数,…

LeetCode 48.旋转图像

1.做题要求: 2.从此题我们可以看出规律为第几行要变为倒数第几列,所以我们最好先把二维数组存入一维数组中,然后先从最后一列遍历,把一维数组里的元素,依次等于遍历的元素即可: void rotate(int** matrix, int matrixSize, int*…

1984-2022年全球河流和湖泊表面积 (Surface Area of Rivers and Lakes,SARL)数据集

简介 Nyberg 等人(2024 年)开发的 "河流和湖泊表面积(SARL)"数据集对 38 年间(1984-2022 年)河流和湖泊的水面面积变化进行了全面分析。这个分辨率为 30 米的全球数据集为了解地表水的动态提供了…

一文读懂 Transformer 神经网络模型

今天我们来聊一下人工智能(AI)生态领域相关的技术 - Transformer 神经网络模型 。 自从最新的大型语言模型(LLaM)的发布,例如 OpenAI 的 GPT 系列、开源模型 Bloom 以及谷歌发布的 LaMDA 等,Transformer 模…

java线程安全 ,死锁以及线程状态的介绍与使用

线程安全 1.什么时候发生:当多个线程访问同一个资源时,导致了数据有问题1.线程安全问题–>线程不安全的代码 public class MyTicket implements Runnable{//定义100张票int ticket 100;Overridepublic void run() {while(true){if (ticket>0){System.out.println(Thre…

【PL理论】(31) 类型系统:静态分析 (Static Analysis) | 静态类型系统 | 什么是类型?

💭 写在前面:本章我们将进入类型系统的讲解,回顾一下之前我们整理的 F- 语言,然后介绍一下静态分析和静态类型系统。讨论程序员该如何处理一些 bug,有没有完美的静态分析器。 目录 0x00 回顾:F- 语言 0x…

Part 4.4 树形动态规划

树形动态规划,即在树上进行的动态规划。 因为树的递归性质,树形动态规划一般都是递归求解的。 没有上司的舞会 题目描述 某大学有 n n n 个职员,编号为 1 … n 1\ldots n 1…n。 他们之间有从属关系,也就是说他们的关系就像…

Sectigo OV通配符SSL证书多少钱?

在网络安全领域,SSL数字证书起着至关重要的作用,尤其是在保护网站和用户信息方面。而Sectigo OV通配符证书是一种常用的数字证书之一,它能够为同一域名下的多个子域名提供保护,还能够通过企业验证来增强安全性。那么,对…

对input输入框的正则限制

一、0-100的整数 正则&#xff1a; const inputRules ref([{required: false,trigger: "blur",validator: (rule, value, callback) > {const reg /^[0-9]$/; // 只允许整数if ((0 < value && value < 100 && reg.test(value)) ||valu…

如何打开azw/azw3文件?两个步骤解决

要打开AZW或AZW3格式的电子书&#xff0c;遵循以下步骤&#xff0c;无论你是Windows、Mac用户&#xff0c;还是使用移动设备&#xff0c;都可以轻松阅读这些亚马逊Kindle专用格式的电子书&#xff1a; 第一步&#xff1a;安装NeatReader&#xff1a; 访问NeatReader的官方网站或…

MySQl基础入门⑯【操作视图】完结

上一边文章内容 表准备 CREATE TABLE Students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),email VARCHAR(255),major VARCHAR(100),score int,phone_number VARCHAR(20),entry_year INT,salary DECIMAL(10, 2) );数据准备 INSERT INTO Students (id, name, ema…

谷歌可穿戴设备与生成式AI模型PH-LLM:打造个性化健康监测与指导的新纪元

随着移动和可穿戴设备的普及&#xff0c;它们为个人健康监测提供了前所未有的机会&#xff0c;通过收集步数、心率变异性、睡眠持续时间等连续、精细和纵向数据&#xff0c;帮助用户实时跟踪自己的健康状况。这些数据不仅可以用于简单的监测&#xff0c;还可以结合生成式人工智…

什么是模型轻量化?如何自动进行模型轻量化?

轻量化是已经是3D可视化业界人所共知的一个概念&#xff0c;虽然至今没有任何严谨的学术或者理论定义&#xff0c;但是这个概念已经几乎成为了行业的标准。它的大意是说&#xff0c;一个适用用于浏览器端渲染的模型数据&#xff0c;包括几何数据和行业数据&#xff0c;必然可以…

数据库、中台、报表平台之间的关系

我最近在接触报表平台和中台&#xff0c;发现他们跟我平常用的数据库不是一个东西。然后&#xff0c;我开始了摸索他们的过程&#xff0c;终于&#xff0c;我在理清他们的关系以后&#xff0c;简单写一个入门级的区分。 数据库&#xff1a; 定义&#xff1a; 数据库是被长期存…

MySQL 下载及安装教程

MySQL是一款开源的关系数据库管理系统&#xff0c;被广泛应用于各种应用程序和网站的数据管理中。以下是下载和安装MySQL的详细步骤。 1. 访问MySQL官方网站 首先&#xff0c;打开你的浏览器&#xff0c;访问MySQL官方网站&#xff1a; MySQL官方网站: https://www.mysql.com …

同三维T80004EHU 高清HDMI/USB编码器

1路HDMI或1路USB输入&#xff0c;带1路3.5音频输入&#xff0c;高清1080P60 来百度APP畅享高清图片 产品简介&#xff1a; 同三维T80004EHU 高清 HDMI/USB编码器是一款1路HDMI或1路USB高清编码器&#xff0c;。可将 HDMI 或USB视频源编码压缩成网络流&#xff0c;通过有线网络…

springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列

背景 实际项目中遇到针对不同类型的消息&#xff0c;发送消息到不同的队列&#xff0c;而且队列可能还不存在&#xff0c;需要动态创建&#xff0c;于是写了如下代码&#xff0c;实践发现没啥问题&#xff0c;这里分享下。 环境 springboot 3.2 JDK 17 rabbitMQ模型介绍 图片…

银河麒麟系统升级openssh至9.7p1

银河麒麟系统升级openssh至9.7p1 升级过程建议参照链接 https://blog.csdn.net/zt19820204/article/details/137877652 当前环境 开始安装 # 1.查看当前服务器的openssh版本 ssh -V# 2.openssh下载地址 https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/# 3.升级opens…

想停,不可能!

转融通出借数量突然暴增&#xff0c;逼得证监会火速出来辟谣&#xff0c;这是坊间这几天传得&#xff08;最&#xff09;火的事。 事情呢&#xff0c;一句话概括就是光6月12号那一天&#xff0c;就新增了1.7亿股&#xff0c;吓得大家都说是转融通疯狂报复来了&#xff01;但官家…