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

ops/2024/11/20 5:27:06/

文章目录

  • 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: 
GLM4_74">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_152">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.ppmy.cn/ops/135157.html

相关文章

go的接口详解

接口的定义和格式 接口(interface)是一种类型&#xff0c;用来定义行为(方法)。这句话有两个重点&#xff0c;类型和定义行为。 首先解释定义行为&#xff1a; 接口即一组方法定义的集合&#xff0c;定义了对象的一组行为&#xff0c;就是定义了一些函数&#xff0c;由具体的…

SpringBoot开发——整合AJ-Captcha实现安全高效的滑动验证码

文章目录 一、什么是AJ-Captcha二、项目配置1、Maven依赖配置2、滑动验证码的基本原理3、 后端实现3.1 生成滑动验证码图片代码解释3.2 校验滑块位置代码解释4、前端部分代码解释5、Redis 缓存滑动验证码信息5.1 Redis配置5.2使用Redis缓存验证码数据5.3 校验时从Redis获取总结…

在阿里云快速启动Appsmith搭建前端页面

什么是Appsmith Appsmith是一个开源的低代码开发平台&#xff0c;它使得开发者能够快速地构建内部工具、业务管理系统、CRM系统等。Appsmith通过提供一系列预建的UI组件&#xff08;如表格、图表、表单等&#xff09;&#xff0c;以及对数据库、API调用的直接支持&#xff0c;…

机器学习2

三、特征工程 接机器学习1 4、特征降维 4.2、主成分分析PCA 从原始特征空间中找到一个新的坐标系统&#xff0c;使得数据在新坐标轴上的投影能够最大程度地保留数据的方差&#xff0c;同时减少数据的维度。 保留信息/丢失信息信息保留的比例 from sklearn.decomposition imp…

【python】使用 DrissionPage 库进行网页自动化操作和数据提取

使用 DrissionPage 库进行网页自动化操作和数据提取 简介 随着自动化测试、数据抓取和网页交互应用的日益增多&#xff0c;Python 作为一种功能强大且易于学习的编程语言&#xff0c;成为了开发人员的首选工具。在众多的自动化库中&#xff0c;DrissionPage 作为一个新兴的库…

PyTorch:如何使用TensorBoard优化和监控深度学习模型

如何使用TensorBoard优化和监控深度学习模型 为了提供一个更加详细和完整的指南关于如何使用 TensorBoard 进行深度学习模型的监控与优化&#xff0c;我们将从TensorBoard的基础知识开始&#xff0c;一步步探讨如何设置和利用其各项功能。 1. TensorBoard简介与基本架构 Ten…

docker-hub 无法访问,使用windows魔法拉取docker images再上传到linux docker环境中

云机的服务器是可以docker拉取镜像的&#xff0c;但是本地的虚拟机、物理服务器等网络环境不好的情况&#xff0c;是无法访问docker-hub的&#xff0c;即使更换了docker镜像源国内源也无法使用。 本文章使用 在魔法网络环境下的windows&#xff0c;下载docker images后&#xf…

638. 大礼包

638. 大礼包 题目链接&#xff1a;638. 大礼包 代码如下&#xff1a; class Solution { public:int shoppingOffers(vector<int>& price, vector<vector<int>>& special, vector<int>& needs) {//过滤不需要计算的大礼包&#xff0c;只…