-推荐关注-
1. OpenAI API 聊天程序示例
AI Agent,即人工智能代理,一般直接叫做智能体。在是一种能够感知环境、做出决策并采取行动的系统。这些系统能够执行被动的任务,也能够主动寻找解决问题的方法,适应环境的变化,并在没有人类直接干预的情况下做出决策。
基于大模型的AI Agent开发常用框架包括:LangChain、LlamaIndex、OpenAI API
近两年火到天边基于大语言模型的聊天工具ChatGPT(于2022年12月推出),其背后的开发团队是OpenAI。OpenAI是一个专注于人工智能研究的公司,他们不仅开发了ChatGPT,还创造了许多令人惊叹的AI工具,像是能生成图片的DALL·E。
ChatGPT和 DALL·E 都为模型提供了网页版的对话界面以及一系列内置功能,例如集成 Bing 搜索功能、代码执行功能、数据分析功能。对于普通用户来说,这样的入口方便且直接。
不过,网页可不是我们访问 GPT模型的唯一方式。开发者可以借助OpenAI API,在程序中通过 API与模型进行交互。
官网:https://openai.com/index/openai-api/
1. OpenAI API 聊天程序示例
1.1 首先要有一个API KEY
可以到OpenAI官网注册,https://openai.com/
如果网络原因连不上官网,可以找个代理服务如:OpenAI HK https://openai-hk.com/?i=47742
OpenAI HK见:
AI取经路,公众号:AI取经路10分钟解决国内不能访问OpenAI API的一个方案
1.2 安装openai依赖
pip install openai
1.3 代码:
from openai import OpenAI
# 当前参数是OpenAI的代理服务OpenAI HK的参数,如果使用官方接口,去掉参数即可
# 生成客户端对象
client = OpenAI(
api_key='hk-iwtbie1000cf1b4a91e427',
base_url='https://api.openai-hk.com/v1'
)
# 获取返回对象
response = client.chat.completions.create( # 聊天接口
model="gpt-4o-mini", # 模型名称
response_format={ # 返回的格式类型
"type": "json_object"
},
messages=[ # 组织完整的对话历史
{
"role": "system",
"content": "您是一个帮助用户了解鲜花信息的智能助手,并能够输出JSON格式的内容."
},{
"role": "user",
"content": "生日送什么花最好?"
},{
"role": "assistant",
"content": "玫瑰花是生日礼物的热门选择."
},{
"role": "user",
"content": "送货需要多长时间?"
},
]
)
# 打印完整的返回对象
print(response)
# 打印返回的文本
print(response.choices[0].message.content)
1.4 返回对象格式
# 完整的返回对象
ChatCompletion(
id='chatcmpl-Abczkrvv1B1pxjHVfspV3OJWeGpmu',
choices=[
Choice(
finish_reason='stop',
index=0,
logprobs=None,
message=ChatCompletionMessage(
content='{"送货时间":"一般情况下,鲜花的送货时间取决于所在地区和花店的服务政策。通常情况下,城市内当天送达是比较常见的服务,但在高峰期或节假日可能需要提前预定。如果是在偏远地区,送货时间可能会更长,一般需要1-3天。建议提前确认具体的送货时间与花店。"}', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None)
)
],
created=1733531396,
model='gpt-4o-mini-2024-07-18',
object='chat.completion',
service_tier=None,
system_fingerprint='fp_04751d0b65',
usage=CompletionUsage(
completion_tokens=88,
prompt_tokens=65,
total_tokens=153,
completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=0), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0)
)
)
# 返回的文本
{"送货时间":"一般情况下,鲜花的送货时间取决于所在地区和花店的服务政策。通常情况下,城市内当天送达是比较常见的服务,但在高峰期或节假日可能需要提前预定。如果是在偏远地区,送货时间可能会更长,一般需要1-3天。建议提前确认具体的送货时间与花店。"}
{"送货时间":"一般情况下,鲜花的送货时间取决于所在地区和花店的服务政策。通常情况下,城市内当天送达是比较常见的服务,但在高峰期或节假日可能需要提前预定。如果是在偏远地区,送货时间可能会更长,一般需要1-3天。建议提前确认具体的送货时间与花店。"}
1.5 Chat接口描述client.chat.completions.create
endpoint地址:post https://api.openai.com/v1/chat/completions
1.5.1 请求参数说明
model参数
model参数指定了大模型的具体型号。除了代码中的gpt-4o-mini 之外,OpenAI公司还有多种模型可供选择。需要注意的是,在使用 chat.completions方法时,只能选择表格中列出的聊天模型。如果选择其他类型的模型,那么需要调用相应的 API。
OpenAI常见模型列表,截止到20241206
gpt-4o-2024-08-06 | 知识截止到2023年10月 | ||
gpt-4o-mini-2024-07-18 | 知识截止到2023年10月 | ||
gpt-4-turbo-2024-04-09 | 知识截止到2023年12月 | ||
gpt-4o-mini 代替gpt-3.5-turbo ,因为它更便宜、功能更强大、多模态,且速度相同。gpt-3.5-turbo 在 API 中仍然可用 | 知识截止到2021年9月 | ||
参考:https://platform.openai.com/docs/models
messages参数
代码中的参数 messages 表示消息数组,也是与聊天模型交互的主要部分。每条消息包含一个角色(role)和一段内容(content)。这里的角色指定了消息的发送者或类型,通常有以下几种:
"system" : 代表系统级的指令或信息,通常用于设置聊天的背景或上下文。例如,
{"role":"system","content":"您是一个帮助用户了解鲜花信息的智能助手,并能够输出 JSON 格式的内容。"}
,这条消息设定了智能助手的角色和输出格式。"user" : 代表用户的输入。这是模拟用户与智能助手对话的部分。例如
{"role":"user","content":"生日送什么花最好?"}
表示用户询问什么样的花作为生日礼物最合适。"assistant" : 代表智能助手的回复,通常是模型根据上下文生成的回答。例如
{"role":"assistant","content":"玫瑰花是生日礼物的热门选择。"}
, 表示智能助手建议送玫瑰作为生日礼物。
在这个代码示例中,通过"system"、"user" 和 "assistant" 的一系列角色消息模拟了一个用户与智能助手关于鲜花信息的对话场景。用户提出问题,智能助手基于之前的系统指令(定义助手的角色和能力)和对话历史进行回答。借助这种方式,可以模拟出较为真实的聊天体验。
response_format参数
代码中的response_format={"type":"json_object"}
指定响应格式为JSON对象,这意味着模型的响应将以 JSON 格式返回,以方便解析和使用。
其他完整参数
见:https://platform.openai.com/docs/api-reference/chat/create
1.5.2 返回参数说明
id 参数
聊天完成的唯一标识符
finish_reason参数
模型停止生成标记的原因。stop
表示模型达到了:自然停止点或提供的停止序列,length
表示达到了请求中指定的最大标记数,content_filter
表示遇到内容过滤器标志而省略了内容,tool_calls
表示模型调用了工具,或function_call
(已弃用)表示果模型调用了函数
content参数
消息文本内容
model 参数
用于聊天的模型型号
其他完整参数
见:https://platform.openai.com/docs/api-reference/chat/object
2. OpenAI API 图片生成示例
大模型不仅能输出文本,而且拥有多模态的能力,OpenAI公司拥有 DALL·E可以生成图片。因为要展示图片,因此我们要安装Jupyter Notebook环境
Jupyter Notebook: 一个“笔记本”工具:就像普通笔记本用来写笔记一样,Jupyter Notebook 是一个数字笔记本,既可以写代码,也可以写文字,还能画图、做表格。它可以直接显示绘图结果(比如数据图表、统计图),适合用来做数据分析和机器学习。
这里使用他的目的是:在笔记本中(ipynb文件)运行代码,并直接显示出代码生成的图片
安装Jupyter Notebook依赖:pip install jupyter notebook
新建hello-openai.ipynb文件
# hello-openai.ipynb
from openai import OpenAI
client = OpenAI(
api_key='hk-iwtbie10b4a91e427',
base_url='https://api.openai-hk.com/v1'
)
# 请求DALL-E生成图片
response = client.images.generate( # 图片生成接口,见接口秒速
model="dall-e-3",
prompt="电商花语秘境的新春玫瑰宣传海报,配上文案",
size="1024x1024",
quality="standard",
n=1,
)
# 获取图片URL
image_url = response.data[0].url
# 读取图片
import requests
image = requests.get(image_url).content
# 在Notebook中显示图片
from IPython.display import Image
Image(image)
这里的 images.generate 方法调用 DALL·E3模型来创建一张图片。指令的目的是生成一张尺寸为 1024 像素 x1024 像素的电商花语秘境的新春玫瑰花宣传海报。之后从生成的响应中提取图片的 URL,这是图片存储位置的网络链接。然后,使用Python的requests库从URL获取图片内容,并利用IPython的lmage函数在Jupyter Notebook 中显示这张图片
在截图中可以看到,生成的图片效果还是非常不错的
Images接口描述 client.images.generate
endpoint地址:post https://api.openai.com/v1/images/generations
参数说明:
见:https://platform.openai.com/docs/api-reference/images/create
2. 从0到1开发AI Agent(智能体)(一)| 基于大模型的AI Agent技术框架
3.《大模型应用开发 动手做AI Agent》
--END--