大模型开发初接触

chatgpt与openai

在这里插入图片描述
最直观感受:
在网页中打开 https://chat.openai.com/,就是浏览器上显示最左边的图标;
在网页中打开 https://platform.openai.com/,就是浏览器上显示最右边的图片;
在网页中打开 https://openai.com/pricing,浏览器显示重点绿色的图标,是openai各个模型的收费标准;

现在注册openai的账号只需要邮箱,不需要国外手机号,但是申请api key还是需要国外手机号接收验证码才能获取;新注册用户会有5美金的免费额度,好像是3个月有效期;

chatgpt产品形态

聊天模型,免费版本基于gpt-3.5,在大模型外层包了审核机制和用户界面的应用,开通plus版本,可以使用gpt-4,还可以使用gpts,类似可以让用户自己定制自己的会话主题等,也是将openai的一系列接口做了定制,包了用户界面,供没有开发经验的用户快速个性化的使用 可以自己定制的chatgpt;
在这里插入图片描述
gpts的详细解释以及与 assitant api的区别可参考:
https://www.datalearner.com/blog/1051701996595465
在这里插入图片描述

openai产品形态

openai playground

playground,类似上面的gpts,只是gpts是定制的,需要开通plus,这个playground应该是通过调用模型api接口(自动调用,不需要申请api key),按token来扣费的;
在这里插入图片描述
playground界面:有system,user,assistant三个角色;
system:你想让他做为什么角色来跟用户对话,在这里定义;
user:用户输入信息;
assistant:针对用户输入返回的信息,你也可以定义一些返回信息,他会拿去做接下来回复的参考,当然也可以修改返回信息;
可以保存,可以view code来看相应的代码;
在这里插入图片描述

右侧model,temperature(0返回固定),maximum length等参数在代码中都有对应;

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {
      "role": "user",
      "content": ""
    },
    {
      "role": "assistant"
    }
  ],
  temperature=1,
  max_tokens=256,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0
)

playground中也可以选择chat,assistants,complete;
在这里插入图片描述

playground和api key的收费可以在usage中进行查看:在这里插入图片描述

openai api key

openai官网api的详细介绍: https://platform.openai.com/docs/api-reference/introduction

openai包的github地址:https://github.com/openai/openai-python

通过python使用openai,通过pip直接安装就可以,安装好导入,openai中模型接口的调用是通过key来进行收费,在系统环境变量中配置好OPENAI_API_KEY,以免暴露;

import os
from openai import OpenAI

client = OpenAI(
    # This is the default and can be omitted
    api_key=os.environ.get("OPENAI_API_KEY")
)
models = client.models.list()
model_list = [[model.id,model.owned_by] for model in models.data] #查看当前可用的openai的models
'''
output:
[['dall-e-3', 'system'],
 ['gpt-3.5-turbo-0613', 'openai'],
 ['dall-e-2', 'system'],
 ['gpt-3.5-turbo-instruct-0914', 'system'],
 ['whisper-1', 'openai-internal'],
 ['tts-1-hd-1106', 'system'],
 ['tts-1-hd', 'system'],
 ['babbage-002', 'system'],
 ['text-embedding-3-small', 'system'],
 ['gpt-3.5-turbo-instruct', 'system'],
 ['gpt-3.5-turbo-0125', 'system'],
 ['gpt-3.5-turbo', 'openai'],
 ['davinci-002', 'system'],
 ['gpt-3.5-turbo-0301', 'openai'],
 ['gpt-3.5-turbo-16k', 'openai-internal'],
 ['tts-1', 'openai-internal'],
 ['tts-1-1106', 'system'],
 ['text-embedding-ada-002', 'openai-internal'],
 ['gpt-3.5-turbo-1106', 'system'],
 ['gpt-3.5-turbo-16k-0613', 'openai'],
 ['text-embedding-3-large', 'system']]
'''

由于按照tokens计费,所以openai提供了tiktoken包,可以用来计算输入的token数,官方cookbook参考:https://cookbook.openai.com/examples/how_to_count_tokens_with_tiktoken#5-comparing-encodings;

import tiktoken
embedding_encoding = "cl100k_base"
encoding = tiktoken.get_encoding(embedding_encoding)
x="你是王后,你是女生"
encoding.encode(x)
'''
output:
[57668, 21043, 29207, 233, 34547, 3922, 57668, 21043, 58850, 21990]
'''
for i in [57668, 21043, 29207, 233, 34547, 3922, 57668, 21043, 58850, 21990]:
    print(i,encoding.decode([i]))
'''
output:
57668 你
21043 是
29207 �
233 �
34547 后
3922 ,
57668 你
21043 是
58850 女
21990 生
'''

其中 embedding_encoding与相应模型对应:
在这里插入图片描述

openai model api

Completions API

data = client.completions.create(
  model="gpt-3.5-turbo-instruct",
  prompt="讲个笑话",
  max_tokens=1000,
  temperature=0
)

Embedding API

embedding_model = "text-embedding-ada-002"
res = client.embeddings.create(input="abc", model=embedding_model)
print(res.data[0].embedding)

Chat Completions API

简单对话:

messages=[
    {
        "role": "user", 
        "content": "Hello!"
    }
]
data = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages = messages
)
new_message = data.choices[0].message
print(new_message)
'''
output:
ChatCompletionMessage(content='Hello! How can I assist you today?', role='assistant', function_call=None, tool_calls=None)
'''

可以通过追加消息设置多角色,实现类似playground的功能;

messages=[
    {"role": "system", "content": "你是一个乐于助人的体育界专家。"},
    {"role": "user", "content": "2008年奥运会是在哪里举行的?"},
]

data = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=messages
)
message = data.choices[0].message.content
print(message)
'''
output:
2008年奥运会是在中国的北京市举行的。有什么其他的问题我可以回答吗?
'''
messages.append({"role": "assistant", "content": message})
messages.append({"role": "user", "content": "1.金牌最多的是哪个国家?2.奖牌最多的是哪个国家?"})
data = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=messages
)
print(data.choices[0].message.content)
'''
output:
1. 2008年奥运会中,金牌最多的国家是中国。中国取得了51枚金牌。
2. 奖牌最多的国家同样是中国。中国在2008年奥运会中获得了100枚奖牌,其中包括51枚金牌、21枚银牌和28枚铜牌。有没有其他的问题呢?
'''

但是同样的问题直接问是这样的问答:

data = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[{'role': 'user', 'content': '1.金牌最多的是哪个国家?2.奖牌最多的是哪个国家?'}]
)
print(data.choices[0].message.content)
'''
1. 目前,美国是金牌最多的国家。根据2021年东京奥运会数据,美国的金牌总数为1137枚。
2. 目前,美国是奖牌最多的国家。根据2021年东京奥运会数据,美国的奖牌总数为2820枚。
'''

langchain

多角色,实现类似playground的功能:

from langchain.chat_models import ChatOpenAI
chat_model = ChatOpenAI(model_name="gpt-3.5-turbo")

from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)
chat_model = ChatOpenAI(model_name="gpt-3.5-turbo")
messages = [
    SystemMessage(
        content="You are a helpful assistant that translates English to Chinese."
    ),
    HumanMessage(
        content="I love programming."
    ),
]
chat_model(messages)
'''
output:
AIMessage(content='我喜欢编程。')
'''

messages = [SystemMessage(content="You are a helpful assistant."),
 HumanMessage(content="Who won the world series in 2020?"),
 AIMessage(content="The Los Angeles Dodgers won the World Series in 2020."), 
 HumanMessage(content="Where was it played?")]

chat_model(messages)
'''
output:
AIMessage(content='The 2020 World Series was played at Globe Life Field in Arlington, Texas.')
'''

langchain其他的功能后续更新,由于官方更新较快,最新信息以官方文档为准:
https://python.langchain.com/docs/get_started/introduction
https://api.python.langchain.com/en/latest/langchain_api_reference.html#

gradio

交互界面可使用gradio来开发,类似界面如下:
在这里插入图片描述
官方文档:https://www.gradio.app/docs/interface

flask

通过requests接口提供服务,可以使用flask来开发

后续

以上是基础概念的理解以及大概技术的梳理,至于大模型的应用中 用到的RAG,chain of thoughts的实现,以及在推荐系统中如何应用大模型的论文的实现以及落地应用(https://zhuanlan.zhihu.com/p/658252702),继续探索中。。。

  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值