AIGC即ai生成内容AI包含机器学习机器学习包含监督学习每个训练数据点包含输入特征和期望的输出值/无监督学习算法的任务是自主发现数据里的模式或规律如聚类--拿一堆新闻文章让模型根据主题或内容的特征自动把相似文章进行组织/强化学习让模型采取行动获得结果反馈从反馈里学习来最大化奖励或最小化损失而深度学习使用的是神经网络它属于机器学习范畴神经网络可以用于监督学习/无监督学习/强化学习生成式AI和LLM都是深度学习的一种应用LLM可以根据输入提示以及前面生成过的词通过概率计算逐步生成下一个词或tokentransformer由两个核心部分组成编码器Encoder和解码器Decoder首先将输入的文本拆分成各个tokentoken是大模型的最小文本处理单元 每个token会被用一个整数数字表示 就是token ID调用大模型对话接口时总消耗 Token 输入 TokenPrompt包含图片和文件等涉及的token 输出 TokenAI 回答模型会选择概率最高的token作为下一个输出输出内容是否符合事实 模型不知所以才有模型的幻觉编码器用来理解和表示输入序列解码器用来生成输出序列模型见过的文本越多生成文本能力越来越好模型微调就是对已有模型做进一步的训练改变模型内部参数让模型更加适应特定任务如要训练出一个擅长对话的AI助手 就需要给基座模型看很多的对话数据微调相比无监督的预训练成本低很多不需要从海量文本进行学习了是监督学习所以这一过程也叫做监督微调还可以让模型进行强化学习增强模型的能力需要训练个奖励模型学习预测回答的评分奖励模型训练好后就可以用在强化学习上了 此时奖励模型的参数不再更新 它的任务就是对模型生成的内容进行打分不断迭代后 模型回答质量就会不断提升需要安装一个Jupyter Notebook它是一个基于网页的交互式计算环境交互模式就是说可以直接看到执行输出的结果可以用来编写代码、运行代码、查看输出和分享输出的文档课程分为教学篇和项目开发篇教学篇用jupyter notebook它可以按单元格运行代码有时候不想从头运行到尾如想更改发送到大模型的其中一个提示先前的代码不需要重复运行等待模型API的回复消耗时间且ai模型的api不是免费的是按量计费windows下载cmd输入命令pip install notebook,安装后输入命令jupyter notebook 如果发现浏览器自动打开其窗口就说明安装成功了关闭它只关闭浏览器不够还需要关闭后台服务器 就在cmd窗口中按ctrlc即可先运行jupyter notebook再找到对应的文件打开客户端调用大模型API然后接手返回结果——第三方执行大模型的运行 而不是本地不同的模型比如OpenAI公司的GPT、百度的文心等对应的python库不同调用代码也会有区别课程以GPT来讲解行业领先的模型但在调用AI大模型相关功能之前 需要获取api密钥 它让服务提供方能识别和验证客户端请求确认请求来自哪个账号等无api密钥就无法通过代码使用ai模型创建openai的api密钥去官网platform.openai.com/api-keys就会显示账号下的所有密钥密钥不能泄露否则这个密钥消耗的所有token都由自己的帐号来买单然后就能在发送api请求时传递密钥而写在代码中不建议是明文任何看到代码的人都知道了所以更佳的做法是把密钥设为电脑的环境变量让代码自动通过环境变量获取密钥的值安全性高很多 无风险做法windows系统的话在此电脑图标上点击右键--属性--高级系统设置--选择“高级”标签--环境变量--新建--变量名必须设为OPENAI_API_KEY而变量值就是api密钥值--确认 保存设置要使用GPT模型的AI聊天功能可以用OpenAI官方的Python库他已经把相关API封装好了不需要自行构建HTTP请求可以直接调用相关函数或方法所以首先安装OpenAI官方的Python库打开cmd输入pip install openai然后就可以from openai import OpenAIclientOpenAI()# clientOpenAI(api_key...)responseclient.chat.completions.create(modelgpt-3.5-turbo,messages[{role:system, content:你是一个乐于助人的AI聊天助手“},{role:user, content:你是谁“},{role:assistant, content:我是ChatGPT由OpenAI开发的一款大型语言模型。“},{role:user, content:四大文明古国有哪些“}])print(response.choices[0].message.content)绝大多数模型的API计费是基于token数量的token就是大模型理解文本的一个基本单位在我们给GPT模型发送API请求后 仔细查看返回的响应会发现里面是有包含token数信息的如completion_tokens105,promt_tokens20,total_tokens125分别是ai回应包含多少token、用户的提示包含多少token总token数量也可以用OpenAI的tiktoken库它是官方的分词器不需要调用API消耗token 就能让我们知道文本里面包含的token数量 从而估算成本下载cmd输入 pip install tiktoken然后import tiktokenencodingtiktoken.encoding_for_model(gpt-3.5-turbo)encoding.encode(黄河之水天上来)len(encoding.encode(黄河之水天上来))#要计算费用只需要token数*token单价 即可当然不太严谨因为传给模型的不只是给AI的提示文本而是消息列表里面还包含角色role之类的信息但只想大致了解token数的话用此方法即可用API那么AI回复的token数上限可以控制而且AI回复不可能无穷无尽的回复由于ai模型的context window上下文窗口是有限的上下文窗口的上限是某个token的数量一旦用户提示和ai回复加起来的总token超过上下文窗口文本就被截断了而ai只能看到和处理窗口内的文本gpt-3.5-turbo模型的窗口长度是4096tokensgpt-3.5-turbo-16k模型则是16385tokens随着技术的发展token会更便宜且窗口会持续扩大通过API可以控制很多在网页端无法调整的参数如长度、创造性、频率惩罚等从而实现一定程度上的定制化这节讲解GPT模型的参数大多数模型的常用参数类似 只是参数名上有细微差别比较常用的参数如1max_tokensresponseclient.chat.completions.create(modelgpt-3.5-turbo,messages[{role:user,content:四大文明古国有哪些“}]max_tokens300 #控制ai回答所消耗token的最大数而提示我们能控制所以就相当于可以让我们控制每次请求的成本上限GPT模型不会根据这个参数来调整回复的篇幅而是会直接达到tokens数时进行截断GPT可能只回复半截儿可以在提示中配合“回复在500字以内”之类的提示)2temperature它控制ai回答的随机性或者说是创造性其值在0-2之间不指定的时候默认值为1值越低说明回答的随机性越低/创造性越低 就越具有确定性也就是说当temperature为0时发现每次ai回复的都差不多而这个值很高时 可能会收到一些出乎意料的回答但值也不能设置太高 否则ai就放飞自我了 甚至不按照人类语言规则行事 开始创造外星文了也就是temperature参数改变的是各个token的概率分布温度低的时候概率分布的峰会很高概率较高的此的选择权重大大增加概率低的更易被忽略所以模型的输出此时更具确定性而温度高时概率分布更加平坦概率低的词被选择机会变高了所以此时模型输出更具随机性和创造性。所以默认为1ai生成的文本此时可以平衡随机性和可预测性3top_p也能控制回答的随机性和创造性其值在0-1之间他不改变词的概率分布而是关注截取概率分布的一个子集此子集包含排名在前的最可能的词并且子集的累积概率刚好大于或等于top_p的值如果top p的值为1就覆盖了整个词汇表不会做任何概率截断那所有词都会纳入待选。由于temperature和top_p都能控制回答的随机性和创造性官方的建议是不要同时修改这两个参数只调整其中一个即可。GPT的常用参数1frequency_penalty表示频率惩罚即多大程度上惩罚重复内容。它的值是在-2到2之间默认为零。正数值就表示会基于已生成文本里词的频率对出现过的词进行惩罚从而降低该词后续的出现概率。这会导致AI倾向于避免使用已经出现过的词从而增加文本的多样性。如果frequency_penalty的值是0说明不对重复词采取任何惩罚那模型就会按照原始概率分布对下一个生成词进行选择。当然当这个参数为正数时可以让AI生成更加丰富多变的文本但有时值设的太高也不合适。比如让AI生成一个购物清单包含至少20个物品每个物品之间用逗号进行分隔可以看到AI生成的回复里前几个还在用中文逗号后面开始切换成英文逗号。在后面开始用空格加英文逗号最后开始用空格加中文逗号。之所以AI开始折腾逗号就是因为当某种逗号在前文出现过多时它的生成概率就被惩罚机制降低了。因此AI在遵循风格要求的同时开始生成其他没咋出现过的逗号。responseclient.chat.completions.create(modelxxx,messages[{role:user,content:生成一个购物清单包含至少20个物品每个物品之间用逗号进行分隔}],max_tokens300,frequency_penalty2)print(response.choices[0].message.content)但由于这种现象的出现一般frequency_penalty会被设置为0到1之间不会搞得特别大。2presents_penalty和上一个参数比较像它的值也在-2和2之间默认为0而且也是用于控制生成内容的重复性。但是他们之间的不同之处在于当值为正数时frequency_penalty会看词在前面已出现的频率出现的越频繁它再次被选中的概率就降低的越多。而presence_penalty只看词是否出现出现了就降低频率但并不管具体出现了多少次。换句话说frequency_penalty影响的是生成文本里词重复出现的频率而presence_penalty影响的是生成内容里是否包含更多的新词。所以这两个参数可以结合起来使用。如果你想要生成内容里重复的词少可以提高presence penalty。如果你想减少高频次重复出现的次数可以提高frequency_penalty。这里再介绍一个非常有用的工具就是openai官方的API游乐场。你可以填写给AI的消息并且改变任意参数的值。比如切换模型调整temperature/max_tokens/top_p/frequency_penalty/presence penalty之类的参数。点击submit按钮后AI的回复也会出现在这个页面。因此这个页面可以让你不用写任何代码快速实现API不同参数的效果。但要注意的是因为这个网页本质上就是给API提供了可视化界面你在上面的一切活动也是会消耗账号API的token的。这个游乐场最实用的功能就是它的view code。点右上角的view code按钮你当前的一切设置都会反映到自动生成的调用API的代码上可以直接复制下来粘贴到代码编辑器。