AIGC学习笔记(5)——AI大模型开发工程师

文章目录

  • AI大模型开发工程师
    • 004 垂直领域的智能在线搜索平台
      • 1 智能在线搜索平台需求分析
        • 大模型不够“聪明”
        • 增强大模型的方式
        • 需求分析
      • 2 智能在线搜索平台方案设计
        • 方案设计
        • 技术选型
          • 大模型版本
          • GLM-4大模型注册使用
          • Google Cloud平台注册
          • 创建可编程的搜索引擎
      • 3 智能在线搜索平台代码落地
        • 完成在线搜索思路分析
        • GLM4调用外部函数测试
        • 导入依赖
        • 大模型回答问题策略测试
        • Google搜索API开发
        • 知乎网站数据爬取
          • 数据格式定义
          • 爬虫之Cookie获取
          • 爬虫之user-agent
          • 爬虫之获取PATH
          • 网络爬虫代码编写
          • 爬取知乎网站代码逻辑封装
        • 自动搜索流程封装
        • 流程优化
          • 文件名优化
          • 构建判别模型
          • 搜索词优化
          • 外部函数流程优化
        • 支持github网站在线搜索
          • github token获取
          • github基础API测试
          • 完整流程封装
        • 完成HuggingFace网站搜索
          • HuggingFace API调用开发
          • 获取readme文档
          • HuggingFace网站搜索代码封装
      • 4 智能在线搜索平台项目总结
        • 项目总结
        • 未来展望

AI大模型开发工程师

004 垂直领域的智能在线搜索平台

1 智能在线搜索平台需求分析

大模型不够“聪明”

image.png

大模型数据截止时间
GPT-3.52021年9月
GPT-42021年9月
增强大模型的方式
  • 主要有两种:RAG 和 微调(难度比较大)

image.png

需求分析
  • 用户提问(Prompt)给大模型
    • 如果大模型知道,就直接根据大模型知识库给出回答
    • 如果大模型不知道,那就通过工具进行外部搜索,最终给出回答

image.png

  • 进行外部搜索,不太可能针对全网进行搜索,原因主要有:
    • 知识产权的问题
    • 爬虫解析的问题
  • 只需要针对 IT 程序员经常使用的网站进行在线搜索

image.png

2 智能在线搜索平台方案设计

方案设计

image.png

技术选型

image.png

大模型版本
~ % pip show zhipuai   
Name: zhipuai
Version: 2.1.5.20230904
Summary: A SDK library for accessing big model apis from ZhipuAI
Home-page: 
Author: Zhipu AI
Author-email: 
License: 
Location: /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages
Requires: cachetools, httpx, pydantic, pydantic-core, pyjwt
Required-by: ~ % pip show openai  
Name: openai
Version: 1.52.2
Summary: The official Python library for the openai API
Home-page: https://github.com/openai/openai-python
Author: 
Author-email: OpenAI <support@openai.com>
License: 
Location: /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages
Requires: anyio, distro, httpx, jiter, pydantic, sniffio, tqdm, typing-extensions
Required-by: 
GLM-4大模型注册使用
  • 地址:https://open.bigmodel.cn/
  • 完成注册并登录,极其简单,只需要绑定手机号和邮箱就行

image.png

  • 注册成功开始使用

image.png

  • 可以进行一下实名认证,解锁更多权益

image.png

image.png

  • 获取API Key,并保存到本地环境变量中 export ZHIPU_API_KEY=xxx

image.png

  • 现在没有赠送金额了,所以需要充值

image.png

  • 控制台可以体验功能,进行模型选择、模型微调、新建应用、知识库(相当于一个向量数据库或网盘)等

image.png

Google Cloud平台注册
  • 地址:https://console.cloud.google.com/
  • 新建项目:OnlineSearch

image.png

  • 选择项目OnlineSearch – APIs and Services

image.png

  • 选择 Library,搜索 “Google Search”,选择 “Custom Search API”

image.png

  • Enable 启用,生成凭证 Credentials API Key

image.png

  • 保存 API Key,可以在本地设置环境变量 export GOOGLE_SEARCH_API_KEY = xxxx

image.png

创建可编程的搜索引擎
  • 地址:https://programmablesearchengine.google.com/

image.png

  • 添加搜索引擎

image.png

  • 创建

image.png

  • 保存 cse_id,设置环境变量 export CSE_ID=xxx

image.png

image.png

3 智能在线搜索平台代码落地

完成在线搜索思路分析

image.png

GLM4调用外部函数测试
  • GLM4的 function calling 工具代码封装
  • 代码和ChatGPT的几乎一模一样
import os
import openai
from openai import OpenAI
import shutilimport numpy as np
import pandas as pdimport json
import io
import inspect
import requests
import re
import random
import string## 初始化客户端
api_key = os.getenv("ZHIPU_API_KEY")from zhipuai import ZhipuAI
client = ZhipuAI(api_key=api_key)def sunwukong_function(data):"""孙悟空算法函数,该函数定义了数据集计算过程:param data: 必要参数,表示带入计算的数据表,用字符串进行表示:return:sunwukong_function函数计算后的结果,返回结果为表示为JSON格式的Dataframe类型对象"""data = io.StringIO(data)df_new = pd.read_csv(data, sep='\s+', index_col=0)res = df_new * 10return json.dumps(res.to_string())def auto_functions(functions_list):"""Chat模型的functions参数编写函数:param functions_list: 包含一个或者多个函数对象的列表;:return:满足Chat模型functions参数要求的functions对象"""def functions_generate(functions_list):# 创建空列表,用于保存每个函数的描述字典functions = []# 对每个外部函数进行循环for function in functions_list:# 读取函数对象的函数说明function_description = inspect.getdoc(function)# 读取函数的函数名字符串function_name = function.__name__system_prompt = '以下是某的函数说明:%s,输出结果必须是一个JSON格式的字典,只输出这个字典即可,前后不需要任何前后修饰或说明的语句' % function_descriptionuser_prompt = '根据这个函数的函数说明,请帮我创建一个JSON格式的字典,这个字典有如下5点要求:\1.字典总共有三个键值对;\2.第一个键值对的Key是字符串name,value是该函数的名字:%s,也是字符串;\3.第二个键值对的Key是字符串description,value是该函数的函数的功能说明,也是字符串;\4.第三个键值对的Key是字符串parameters,value是一个JSON Schema对象,用于说明该函数的参数输入规范。\5.输出结果必须是一个JSON格式的字典,只输出这个字典即可,前后不需要任何前后修饰或说明的语句' % function_nameresponse = client.chat.completions.create(model="glm-4",messages=[{"role": "system", "content": system_prompt},{"role": "user", "content": user_prompt}])json_str=response.choices[0].message.content.replace("```json","").replace("```","")json_function_description=json.loads(json_str)json_str={"type": "function","function":json_function_description}functions.append(json_str)return functions## 最大可以尝试4次max_attempts = 4attempts = 0while attempts < max_attempts:try:functions = functions_generate(functions_list)break  # 如果代码成功执行,跳出循环except Exception as e:attempts += 1  # 增加尝试次数print("发生错误:", e)if attempts == max_attempts:print("已达到最大尝试次数,程序终止。")raise  # 重新引发最后一个异常else:print("正在重新运行...")return functionsdef run_conversation(messages, functions_list=None, model="glm-4"):"""能够自动执行外部函数调用的对话模型:param messages: 必要参数,字典类型,输入到Chat模型的messages参数对象:param functions_list: 可选参数,默认为None,可以设置为包含全部外部函数的列表对象:param model: Chat模型,可选参数,默认模型为glm-4:return:Chat模型输出结果"""# 如果没有外部函数库,则执行普通的对话任务if functions_list == None:response = client.chat.completions.create(model=model,messages=messages,)response_message = response.choices[0].messagefinal_response = response_message.content# 若存在外部函数库,则需要灵活选取外部函数并进行回答else:# 创建functions对象tools = auto_functions(functions_list)# 创建外部函数库字典available_functions = {func.__name__: func for func in functions_list}# 第一次调用大模型response = client.chat.completions.create(model=model,messages=messages,tools=tools,tool_choice="auto", )response_message = response.choices[0].messagetool_calls = response_message.tool_callsif tool_calls:#messages.append(response.choices[0].message)messages.append(response.choices[0].message.model_dump())for tool_call in tool_calls:function_name = tool_call.function.namefunction_to_call = available_functions[function_name]function_args = json.loads(tool_call.function.arguments)## 真正执行外部函数的就是这儿的代码function_response = function_to_call(**function_args)messages.append({"role": "tool","content": function_response,"tool_call_id": tool_call.id,}) ##

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

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

相关文章

【C++滑动窗口】1234. 替换子串得到平衡字符串|1877

本文涉及的基础知识点 C算法&#xff1a;滑动窗口及双指针总结 LeetCode1234. 替换子串得到平衡字符串 有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符&#xff0c;且长度为 n 的字符串。 假如在该字符串中&#xff0c;这四个字符都恰好出现 n/4 次&#xff0c;那么它就…

源码分享-Springboot+Vue大学生社团活动平台附源码,sql文件,配套论文

源码获取: 复制链接到浏览器打开即可领取 夸克网盘领取链接&#xff1a;https://pan.quark.cn/s/187d2ca0e3ec 百度网盘领取链接&#xff1a;https://pan.baidu.com/s/1apbO6k1cEqFXV-USf0I2IA?pwdccaj 提取码: ccaj 1.1课题背景及意义 随着现代网络技术发展&#xff0…

南山前海13元一份的猪脚饭

​今天没有带饭&#xff0c;中午打算去中国国有资本资本风投大厦的工地餐点吃个打工餐。 ​快到工地餐点就看到不少工友已经开始津津有味吃饭了哈。其实树下也有很多小鸟在觅食&#xff0c;可能是找一些剩饭吃的样子&#xff0c;大部分是麻雀为主。​ ​肚子有些饿&#xff0c;…

C++builder中的人工智能(29):如何在Windows项目中导入FANN库

这篇文章旨在使用由Steffen Nissen开发的FANN库实现人工神经网络。FANN库支持20多种编程语言&#xff0c;包括Delphi和C Builder。您可以在FANN的官方网站上找到完整信息和文档&#xff0c;并下载FANN的源文件。 步骤&#xff1a; 下载FANN库&#xff1a; 从Nissen的官方网站下…

Java开发人员学习ArkTs笔记(二)-函数与类

大家好&#xff0c;我是一名热爱Java开发的开发人员。目前&#xff0c;我正在学习ARKTS&#xff08;Advanced Java Knowledge and Technology Stack&#xff09;&#xff0c;并将不断输出我的学习笔记。我将在这里分享我学习ARKTS的过程和心得&#xff0c;希望能够为其他开发人…

maven环境搭建

maven基本知识 https://blog.csdn.net/qq_41187116/article/details/125955085?spm1001.2014.3001.5502 maven环境搭建 maven软件下载 不要去官网下&#xff0c;慢~ 直接相信清华大学吧&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.9/bin…

jmeter常用配置元件介绍总结之线程组

系列文章目录 安装jmeter jmeter常用配置元件介绍总结之线程组 1.线程组(用户)1.1线程组1.1.setUp线程组和tearDown线程组1.2.Open Model Thread Group(开放模型线程组)1.3.bzm - Arrivals Thread Group(到达线程组)1.4.jpgc - Ultimate Thread Group(终极线程组)1.5.jpgc - St…

八 Bean的生命周期

八、Bean的生命周期 8.1 什么是Bean的生命周期 Spring其实就是一个管理Bean对象的工厂。它负责对象的创建&#xff0c;对象的销毁等。 所谓的生命周期就是&#xff1a;对象从创建开始到最终销毁的整个过程。 什么时候创建Bean对象&#xff1f; 创建Bean对象的前后会调用什…

【入门篇】桃园结义【算法赛】——多语言版

题目跳转 python import os import sys# 请在此输入您的代码 print(3)C #include <stdio.h> #include <stdlib.h>int main(int argc, char *argv[]) {printf("%d",3);return 0; }C #include <iostream> using namespace std; int main() {// …

速看!!!24下软考系统分析师综合知识真题回忆,考点已更新

2024下半年软考考试已经结束了&#xff0c;为大家整理了网友回忆版的系统分析师真题及答案&#xff0c;总共30道题左右。 下半年考试的宝子们可以对答案预估分数&#xff01;准备明年考的宝子可以提前把握考试知识点和出题方向&#xff0c;说不定会遇到相同考点的题目&#xff…

HarmonyOS NEXT:模块化项目 ——修改应用图标+启动页等

涉及官方文档 应用配置文件应用/组件级配置图标资源规范 涉及到app.json5配置文件和module.json5配置文件 1、 icon和label的校验。 IDE从5.0.3.800版本开始&#xff0c;不再对module.json5中的icon和label做强制校验&#xff0c;因此module.json5与app.json5只需要选择其一…

dolphinscheduler

dolphinscheduler 官网地址&#xff1a; https://dolphinscheduler.apache.org/zh-cn/docs/3.2.1/about/hardware 1. 概念&#xff1a;dolphinscheduler是一个功能强大的开源调度系统&#xff0c;专为管理和调度大规模数据处理任务设计。 2. 特点&#xff1a; 分布式架构、支持…

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型多变量回归预测

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型多变量回归预测 目录 Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 吐血售&#xff01;聚划算&#xff01;Transforme…

【C++】C++11特性(上)

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C 个人主页&#xff1a;Celias blog~ 目录 一、列表初始化 二、std::initializer_list 三、右值引用和移…

Maven 构建项目

Maven 是一个项目管理和构建工具&#xff0c;主要用于 Java 项目。它简化了项目的构建、依赖管理、报告生成、发布等一系列工作。 构建自动化&#xff1a;Maven 提供了一套标准化的构建生命周期&#xff0c;包括编译、测试、打包、部署等步骤&#xff0c;通过简单的命令就可以执…

在jquery里,使用$.each()函数循环数组,对象,dom的用法

介绍 $.each() 能遍历一维数组&#xff0c;多维数组&#xff0c;JSON对象&#xff0c;dom2元素。在开发中可以很高效的处理各种数据结构。前提&#xff0c;需要导入jquery 使用 遍历JSON对象 var objDemo {name: linda,age:12, desc: a girl};$.each(objDemo,function(i,va…

UniApp 应用、页面与组件的生命周期详解

UniApp 应用、页面与组件的生命周期详解 在uni-app中包含了 应用生命周期、页面生命周期、和组件生命周期&#xff08; Vue.js的&#xff09;函数。 应用生命周期 应用生命周期仅可在App.vue中监听&#xff0c;在其它页面监听无效。 <script>export default {onLaunc…

进程的创建/终止/等待/替换

目录 一、进程创建 &#xff08;一&#xff09;fork函数的概念 &#xff08;二&#xff09;fork函数示例 二、进程终止 &#xff08;一&#xff09;退出码的概念 &#xff08;二&#xff09;退出码的含义 &#xff08;三&#xff09;相关函数和指令 三、进程等待 &…

【c++丨STL】list的使用

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 list简介 一、list的默认成员函数 构造函数(constructor) 析构函数 赋值重载 二、list的迭代器接口 迭代器的功能分类 三、list的容量…

CANoe导入CAN DataBase(DBC文件)

Canoe是一款用于汽车网络仿真和开发的工具&#xff0c;它支持导入DBC文件&#xff08;CAN Database文件&#xff09;以定义和配置CAN网络中的消息、信号和节点。 将DBC文件拷贝至我们的工程目录的DBC文件夹内&#xff0c;随后在Simulation Setup中右击DataBase&#xff0c;进…