第一期 简介

一:AI简介

(一)什么是AI

人脑有处理复杂问题的能力,至今也无法完全解释这种能力的原理是什么,于是把这种现象/能力称为智能;反过来说,当完全了解原理的情况下,我们不会认为智能

(二)AI发展阶段

第一阶段(算数智能):本质是巨能算,大数复杂计算,比人能算。随着时间发展,计算机普及,原理大家也都清楚,不再认为这个为智能;AlphaGo就是进行计算,智能计算能力、算法比人厉害

第二阶段(感知智能):深度学习重回舞台,语言识别、人脸识别等技术大规模出现,模拟人的感官(眼/耳...)接收信号进行处理,核心特点是输入输出有确定性和唯一性;最开始人们认为这个叫智能(不清楚原理),但是随着发展普及,人们不再认为语音唤醒/人脸识别是一种智能,而是一种日常化的东西

第三阶段(认知智能):能进行推理,决策,比如无人驾驶,复杂对话系统;结果还没研究明白,GhatGpt就来了

第四阶段(通用智能):原来的感知/认知智能是用于解决单一任务,ChatGpt展现了通用智能的雏形,感觉什么都可以干(绝大多数);

二:ChatGpt简介

(一)如何使用ChatGpt

1.如何使用教程,包括注册账号等等 (谷歌邮箱、接码平台《如果后面选择wildCard信用卡会提供手机号》)

2.openai的api使用,现在变了,需要绑定国外信用卡,否则一直429限额

参考:知乎B站,直接看B站吧,但是最后走到老狗的博客,分为fomecard和wildCard(会给一个虚拟手机号和外部环境,贵)

 

(二)ChatGpt能做什么,一起补充下

写代码(Comate)、写邮件、数据分析(比如对excel分析、图片转视频;原理调用了python实现逻辑处理返回结果)、聊天(豆包).....

三:通用AI,如何利用解决业务问题

(一)案例使用

可以看到chatGpt解决业务,尤其是文本分析上,还是特别厉害的(后续提示工程、langchain会展示更多)

其他业务比如舆情分析,过去的处理要为评论分多类标签(NLP),标签多了,模型复杂度增加性能不一定好,chatGpt来做文本分类问题方便、准确(通过合适的prompt提示词);质检,和业务强绑定的,数据量少,逻辑复杂文本分析问题;代码生成、运维查错、业务逻辑代码生成...

(二)从AI视角,如何定义遇到的业务问题(学会去描述问题、拆解问题)

在AI时代,用好AI的主要环节就是如何去看待业务问题:拆解/看待业务问题->描述清楚业务问题->调用大模型帮助解决问题

1.看待业务(从机器学习角度),从以下3个角度

2.描述业务问题,从业务问题分类来看(绝大多数业务问题可以归为下面至少一类)《后面训练会有点用》

  • 分类问题:输出有限集(离散),注意:输出的标签是预选定义好的

  • 聚类问题: 和分类类似,区别在于分类输出的标签是预选定义的,而聚类没有办法提前规定标签,是由数据本身决定

  • 回归问题:是一个连续问题,输出是一个数,用误差评判好坏

  • 决策问题:本质是无法以单一的一步输出来判断对错,而是在一系列动作之后,以最终结果来评判收益大小;比如下棋、自动驾驶;还有chatGpt训练过程,最终和人回复的阶段要对齐alignment也是决策问题(如果合理的输出一段文字《一个字一个字输出》,使得达到最终的目的《通顺、价值观、结果》),如果只考虑通顺,可以看作分类🤔

  • 其他复杂问题从下面两个视角看待:

其中内容生成前面说了,在不考虑最终目的的情况下,下一个生成的词是哪一个,实际就是从词库(中文5000词)选一个出来

信息抽取作为分类问题:分类问题有一个相对复杂的分支叫结构化分类,传统信息抽取就是对每个字打上标签,然后提前需要的信息。打标签就是一个分类问题

反正都看成文本生成问题呗,上面两个可以看作(信息抽取通过文本生成获取信息)

 3.chatGpt能解决哪些问题?分类聚类回归决策

  • 分类问题可以

  • 聚类问题可以(可以做,但是不推荐,不是最高效、最实惠)

  •  回归问题不可以?(做了推导,还是错,因为我们要的是一个回归的结果预测值,他给出了不同情况的不同值《虽然有道理》),可以通过给提示让他把这个问题当作回归问题解决,写一段代码,或者写简单神经网络进行回归都可以,直接让他处理是不可以的。

但是实际上现在的chatgpt已经可以理解问题是否是回归问题,然后通过代码得到对应的回归值了

 

  • 决策问题:分情况(不适合博弈,擅长长任务规划《可以根据这个能力将任务让他自己进行一步步拆解、规划、运行,后面langchain讲》)

博弈:

长任务规划:

补充:一些比较复杂的prompt,用中文的话理解不太好,最好用英文方便理解

(三)如果遇到GhatGpt解决不了的问题怎么办

自己训练模型(后面课程)

(四)ChatGpt如何生成结果

根据上文,猜测下一个词的概率(循环,把这个词加入上文,猜测下一个词),比如:我今天很?;可以看出当上文非常完整(prompt调优效果足够好),那么预测下一个词的概率就会比较收敛,循环下去,越来越精准

实例:调用openai的模型,看看对话生成过程如何产出结果 (openai官方文档)补充:密钥只会展示一次,如果忘了就重新建立吧

import openai
import os
import time

from dotenv import load_dotenv,find_dotenv

_ = load_dotenv(find_dotenv()) #find_dotenv() 函数会查找.env 文件,优先在当前目录查找,不存在则查找父级目录;如果找到.env 文件,load_dotenv() 函数将加载其中的变量并设置为环境变量

openai.api_key = os.getenv("OPENAI_API_KEY")

prompt = "你好,"
response = openai.completions.create(
    model="gpt-3.5-turbo-instruct", #这是一款新的指令语言模型,效率可以与聊天优化的 GPT-3.5 Turbo 模型相媲美。
    prompt=prompt,
    temperature=0.4,    # 0.4 表示生成的文本的随机性,数值越大,生成的文本越随机,数值越小,生成的文本越确定。
    max_tokens=40,     # 40 表示生成的文本的最大长度,单位是字符。
    stream=True,       # 设置为 True 表示返回一个生成器,每次生成一个文本片段。
)

for chunk in response:
    print(chunk.choices[0].text, end="")    # 打印生成的文本片段
    time.sleep(0.1)
View Code

其中gpt-3.5-turbo-instruct指令模型属于大语言模型的一种,会在使用一大量数据进行预训练之后,再通过人类反馈(RLHF《Reinforcement Learning fromHuman Feedback》)做进一步完善。在此过程中,会由人类负责评估模型根据用户提示词生成的输出,对结果做改进以达成目标效果,再将更新后的素材用于进一步训练。

(五)ChatGpt原理

1.简易版原理

2.简略结构,transform(NLP),3.5是96层

四:OpenAI API简单使用

(一)环境安装

1.安装python

2.安装openai库即可

pip3 install openai

(二)openai API使用

1.查看可调用的模型

import openai
import os
import time

from dotenv import load_dotenv,find_dotenv

_ = load_dotenv(find_dotenv()) #find_dotenv() 函数会查找.env 文件,优先在当前目录查找,不存在则查找父级目录;如果找到.env 文件,load_dotenv() 函数将加载其中的变量并设置为环境变量

openai.api_key = os.getenv("OPENAI_API_KEY")

models = openai.models.list()
for model in models.data:
    print(model.id)
View Code

woc,有4可以用了,是因为付费了吧🤔高玩

2.调用模型,看看prompt怎么写

可以认为message数组里面每一个元素是多轮对话里面的一轮,这几轮里面实现角色区分,三种角色:system(系统)、assistant(chatgpt机器人)、user(用户);第一轮比较重要,一般用于任务描述,告诉机器人扮演什么角色,有什么背景....;后面的assistant和user顺序可以调
import openai
import os

from dotenv import load_dotenv,find_dotenv

_ = load_dotenv(find_dotenv()) #find_dotenv() 函数会查找.env 文件,优先在当前目录查找,不存在则查找父级目录;如果找到.env 文件,load_dotenv() 函数将加载其中的变量并设置为环境变量

openai.api_key = os.getenv("OPENAI_API_KEY")

    
messages = [    #可以认为数组里面每一个元素是多轮对话里面的一轮,这几轮里面实现角色区分,三种角色:system(系统)、assistant(chatgpt机器人)、user(用户)
    {
        "role": "system",   #一般用于任务描述,告诉机器人扮演什么角色,有什么背景....(放在第一轮,比较敏感)
        "content": "你是AI助手呆瓜"
    },
    {
        "role": "assistant",
        "content": "有什么可以帮您的吗?"
    },
    {
        "role": "user",
        "content": "你叫什么名字"
    }
]

# 调用gpt-3.5-turbo模型
chat_completion = openai.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=messages
)

# 输出结果
print(chat_completion.choices[0].message.content)
View Code

本文一共用到了两个模型gpt-3.5-turbo和gpt-3.5-turbo-instruct

1.可以认为gpt-3.5-turbo是专门为聊天优化而设计的大模型;gpt-3.5-turbo-instruct(体量小)是指令模型,注重理解人类意图并进行完善,能够更好地理解并响应人类的查询预期,减少错误并缓解有害内容的传播。参考文章1文章2

2.可以看到两个模型的调用方式不同,分别是openai.chat.completions和 openai.completions,目前认知是对话调用chat.completions,补全调用completions参考文章

Completion模型核心功能是根据提示(prompt)进⾏提示语句的补全(即继续进行后续⽂本创作),它本质上是文本补全模型,所以调用openai.completions。

而Chat模型升级的核心功能是对话, 它基于大量高质量对话文本进行微调,能够更好的理解用户对话意图,所以它能更顺利的完成与用户的对话,调用openai.chat.completions

3.Chat模型能够比较好的理解对话意图,跟接近于人类对话的常规方式,而Completions模型则是根据概率进行对话补全。Chat模型的核心优势也就体现出来了: 它能更好的理解人类意图。与大语⾔模型(LLMs)交互最低⻔槛的形式就是对话,如果模型能够非常好的理解人类对话意图,才会更有利于模型的发展和社会价值的认同。参考文章

最后,阅读这篇文章,不需要完全看懂,权当预习

个人觉得阅读这篇文章,不要过分在意Chat模型和Completions模型的异同。不然里面部分东西会比较混乱

作业:参考上面文章实现本地知识库构建,使用本文的最新的方法

1.传递本地知识

直接询问他,看起来不太会:

传递本地知识后:

import openai
import os

from dotenv import load_dotenv,find_dotenv

_ = load_dotenv(find_dotenv()) #find_dotenv() 函数会查找.env 文件,优先在当前目录查找,不存在则查找父级目录;如果找到.env 文件,load_dotenv() 函数将加载其中的变量并设置为环境变量

openai.api_key = os.getenv("OPENAI_API_KEY")

with open("./Chat Completion Models.txt","r",encoding="utf-8") as fp:
    chatCompletions_model = fp.read()

messages = [    
    {
        "role": "system",
        "content": chatCompletions_model
    },
    {
        "role": "user",
        "content": "你知道chat.completions.create函数的使用方法吗?"
    }
]

# 调用gpt-3.5-turbo模型
chat_completion = openai.chat.completions.create(
    model="gpt-3.5-turbo-16k-0613",
    messages=messages
)

# 输出结果
print(chat_completion.choices[0].message.content)
View Code

2.让大模型根据本地知识库,创建多轮对话函数

import openai
import os

from dotenv import load_dotenv,find_dotenv

_ = load_dotenv(find_dotenv()) #find_dotenv() 函数会查找.env 文件,优先在当前目录查找,不存在则查找父级目录;如果找到.env 文件,load_dotenv() 函数将加载其中的变量并设置为环境变量

openai.api_key = os.getenv("OPENAI_API_KEY")

with open("./Chat Completion Models.txt","r",encoding="utf-8") as fp:
    chatCompletions_model = fp.read()

messages = [    
    {
        "role": "system",
        "content": chatCompletions_model
    },
    {
        "role": "user",
        "content": "请基于chat.completions.create函数帮忙实现一个可以进行多轮对话的函数"
    }
]

# 调用gpt-3.5-turbo模型
chat_completion = openai.chat.completions.create(
    model="gpt-3.5-turbo-16k-0613",
    messages=messages
)

# 输出结果
print(chat_completion.choices[0].message.content)
View Code

有一些需要修正的:

1.chat_model传参上

2.而且prompt也要改成中文,统一修正

3.并加入本地知识库

4.由于本地知识库错误(落后),导致return message["content"]出错,应该是message.content;还有就是to_dict收到了原文影响

3.测试对轮对话函数

import openai

with open("./Chat Completion Models.txt","r",encoding="utf-8") as fp:
    chatCompletions_model = fp.read()

def chat_model(messages):
    response = openai.chat.completions.create(
        model="gpt-3.5-turbo-16k-0613",
        messages=messages
    )
    message = response.choices[0].message.content
    messages.append({"role": "assistant", "content": message})
    return message



# 定义初始消息
messages = [
    {"role": "system", "content": chatCompletions_model},
    {"role": "user", "content": "你好!"},
    {"role": "assistant", "content": "你好!我是你的智能助手,有什么我可以帮助你的,都可以向我提问。"}
]

# 多轮对话
while True:
    user_input = input("User: ")
    if user_input == "exit":
        break
    messages.append({"role": "user", "content": user_input})
    assistant_response = chat_model(messages)
    print("Assistant:", assistant_response)
View Code

posted @ 2024-05-23 16:38  山上有风景  阅读(121)  评论(0编辑  收藏  举报