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

文章目录

  • AI大模型开发工程师
    • 003 GPT大模型API实战
      • 1 Completion API和Chat Completion API
        • 学习OpenAI API的意义
        • Completion API和Chat Completion API
        • 代码实践
      • 2 Chat Completion API详细参数
        • messages可以包含多条信息
        • messages角色设定
        • message之Few-shot效果演示
        • message之Zero-shot-CoT效果演示
        • message之实现简易知识库
        • 借助本地知识库实现简易版多轮对话机器人
      • 3 Function Calling 函数调用
        • Function Calling 运行流程
        • Function Calling详细流程剖析
        • Function Calling函数封装
          • 定义自动输出function参数的函数
          • 封装调用2轮response的函数
      • 4 ChatGPT Plugin实践

AI大模型开发工程师

003 GPT大模型API实战

1 Completion API和Chat Completion API

学习OpenAI API的意义
  • OpenAI定义了大模型标准
  • OpenAI API的功能最全
Completion API和Chat Completion API
  • Chat模型核心功能是对话能力,Completion模型本质是文本补齐模型,核心功能为根据提示(Prompt)进行提示语句的补全(即继续进行后续文本创作)
  • 从模型发展顺序上来看,Chat模型是Completion模型的升级版模型
  • Chat模型的核心优势:理解人类意图的能力。理解人类意图带来的更低的交互门槛,同样也会为开发者带来巨大的便利。据OpenAI官网数据,自gpt-3.5 API发布以来,约97%的开发者更偏向于使用Chat模型API进行开发。
代码实践
  • 大模型交互方式1(最常用)
completion = client.chat.completions.create(
  model="gpt-4o-mini",
  messages=[
    {
   "role": "user", "content": "你好!请介绍一下你自己"}
  ]
)
print(completion)
## 获取执行结果
completion.choices[0].message.content
  • 大模型交互方式2(给用户实时展示内容的时候需要)
# 流式打印,创建一个名为stream的streaming请求,该请求将生成模型响应的流,而不是单个响应。
stream = client.chat.completions.create(
    # 指定要使用的模型名称(在这种情况下为"gpt-3.5-turbo")。
    model="gpt-4o-mini",
    # 提供输入消息列表,每个消息都包含一个"role"
    # user: 用户
    # assistant: 助手(大模型)
    messages=[{
   "role": "user", "content": "你好!请介绍一下你自己"}],
    # 设置stream为True,使其生成一个响应流,而不是单个响应。
    stream=True,
)
# 通过在stream上迭代来处理每个响应块。
for chunk in stream:
    # 检查返回的块中是否有有效的内容(即,内容不为None)。
    if chunk.choices[0].delta.content is not None:
        # 如果有有效内容,那么打印出这个内容。使用end=""来确保接下来打印的内容会跟在当前内容的后面,而不是另起一行。
        print(chunk.choices[0].delta.content, end="")
  • 大模型交互方式3(对于执行结果进行处理的时候方便)
## gpt-4-turbo-preview or gpt-3.5-turbo-0125模型支持
## 指定返回来的结果的格式:JSON
response = client.chat.completions.create(
  model="gpt-4o-mini",
  # response_format={ "type": "json_object" },
  messages=[
    {
   "role": "user", "content": "中国的首都是?"}
  ]
)
print(response.choices[0].message.content)

2 Chat Completion API详细参数

  • https://platform.openai.com/docs/api-reference/chat/create?lang=python

image.png

  • model:必选参数,大模型的名称
  • messages:必选参数,提示词;(里面可以指定角色)
  • max_tokens:可选参数,代表返回结果的token数量;
  • temperature:可选参数,取值范围为0-2,默认值为1。参数代表采样温度,数值越小,则模型会倾向于选择概率较高的词汇,生成的文本会更加保守;而当temperature值较高时,模型会更多地选择概率较低的词汇,生成的文本会更加多样;
  • top_p:可选参数,取值范围为0-1,默认值为1,和temperature作用类似,用于控制输出文本的随机性,数值越趋近与1,输出文本随机性越强,越趋近于0文本随机性越弱;通常来说若要调节文本随机性,top_p和temperature两个参数选择一个进行调整即可;这里更推荐使用temperature参数进行文本随机性调整;
  • n:可选参数,默认值为1,表示一个提示返回几个Completion;
  • stream:可选参数,默认值为False,表示回复响应的方式,当为False时,模型会等待返回结果全部生成后一次性返回全部结果,而为True时,则会逐个字进行返回;
  • logprobs:可选参数,默认为null,该参数用于指定模型返回前N个概率最高的token及其对数概率。例如,如果logprobs设为10,那么对于生成的每个token,API会返回模型预测的前10个token及其对数概率;
  • stop:可选参数,默认为null,该参数接受一个或多个字符串,用于指定生成文本的停止信号。当模型生成的文本遇到这些字符串中的任何一个时,会立即停止生成。这可以用来控制模型的输出长度或格式;
  • presence_penalty:可选参数,默认为0,取值范围为[-2, 2],该参数用于调整模型生成新内容(例如新的概念或主题)的倾向性。较高的值会使模型更倾向于生成新内容,而较低的值则会使模型更倾向于坚持已有的内容,当返回结果篇幅较大并且存在前后主题重复时,可以提高该参数的取值;
  • frequency_penalty:可选参数,默认为0,取值范围为[-2, 2],该参数用于调整模型重复自身的倾向性。较高的值会使模型更倾向于避免重复,而较低的值则会使模型更可能重复自身;当返回结果篇幅较大并且存在前后语言重复时,可以提高该参数的取值;
  • logit_bias:该参数接受一个字典,用于调整特定token的概率。字典的键是token的ID,值是应用于该token的对数概率的偏置;在GPT中我们可以使用tokenizer tool查看文本Token的标记。一般不建议修改;
  • tools:可以调用的函数;
  • tool_choice:调用函数的策略;
  • 废弃的参数 functions:可以调用的函数;
  • 废弃的参数 function_call:调用函数的策略。
messages可以包含多条信息
  • messages可以包含多条信息,但模型只会对于最后一条用户信息进行回答

image.png

messages角色设定
  • role:assistant消息和user消息是一一对应的,system:全局角色设置


http://www.niftyadmin.cn/n/5739845.html

相关文章

【Java多线程】:理解线程创建、特性及后台进程

📃个人主页:island1314 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 一、背景 -- 进程与线程🚀 🔥 多线程是提升程序性能非常…

Chromium Mojo(IPC)进程通信演示 c++(1)

网上搜索关于mojo教程 多数都是理论 加上翻译谷歌mojo文档的,但是如何自定义两个进程使用mojo通信呢?看下面的完整例子介绍:(本人也是参考谷歌代码例子改编而成) 本文演示了client.exe和service.exe 通过mojo::Incomin…

UE5相机系统初探(一)

UE5相机系统初探(一) 和Unity类似,UE的相机也是由名为Camera的component控制的。那么,在UE中要如何实现一个跟随玩家的第三人称相机呢?假设我们已经有了一个表示玩家的类ACF_Character,首先第一步就是要先在…

导师双选系统开发:Spring Boot技术详解

第一章 绪论 1.1 选题背景 如今的信息时代,对信息的共享性,信息的流通性有着较高要求,尽管身边每时每刻都在产生大量信息,这些信息也都会在短时间内得到处理,并迅速传播。因为很多时候,管理层决策需要大量信…

死锁(Dead Lock)

目录 一. 死锁出现的场景 1. 一个线程, 一个锁对象 2. 两个线程, 两个锁对象 3. N个线程, M个锁对象 二. 造成死锁的必要条件 1. 锁是互斥的 2. 锁是不可被抢占的 3.请求和保持 4. 循环等待 三. 死锁的解决方案 1. 预防死锁 2. 死锁产生后的解决 一. 死锁出现的场景…

Java环境下配置环境(jar包)并连接mysql数据库

目录 jar包下载 配置 简单连接数据库 一、注册驱动(jdk6以后会自动注册) 二、连接对应的数据库 以前学习数据库就只是操作数据库,根本不知道该怎么和软件交互,将存储的数据读到软件中去,最近学习了Java连接数据库…

江协科技STM32学习- P36 SPI通信外设

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

LabVIEW适合开发的软件

LabVIEW作为一种图形化编程环境,主要用于测试、测量和控制系统的开发。以下是LabVIEW在不同应用场景中的适用性和优势。 一、测试与测量系统 LabVIEW在测试与测量系统中的应用广泛,是工程测试领域的主流工具之一。利用其强大的数据采集与处理功能&…