提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3
更新内容
OpenAI 6月13号发布了一个重大更新。可以访问官网获取详细介绍。这次更新了几方面的内容:
1、API调用的价格降低了
- 嵌入模型(Embeddings)的成本降低了 75%,现在价格是1K tokens 0.0001 美元
- 输入token的成本降低 25%,现在价格是1K tokens 0.0015, 输出 1K tokens 0.002
2、加入新模型
- 3.5模型
模型名 | 说明 |
---|---|
gpt-3.5-turbo-16k | 16,384 tokens |
gpt-3.5-turbo-16k-0613 | 16,384 tokens |
gpt-3.5-turbo | 4,096 tokens |
gpt-3.5-turbo-0613 | 4,096 tokens |
- 4.0模型
模型名 | 说明 |
---|---|
gpt-4 | 8,192 tokens |
gpt-4-0613 | 8,192 tokens |
gpt-4-32k | 32,768 tokens |
gpt-4-32k-0613 | 32,768 tokens |
- gpt-3.5-turbo-16k和gpt-3.5-turbo-16k-0613 上下文是原来的4倍,味着该模型现在可以在单个请求中支持约 20 页文本。
- gpt-4-32k-0613和gpt-4-0613
3、新增了一个功能 “Function calling”(函数调用)
- 本文主要讲解Function calling如何使用
一、Function calling是什么?为什么使用Function calling?
- Function calling是什么
Function calling是可以让我们用自己的函数当作调用chatgpt的参数,在函数中我们可以做任何事情,例如获取网络上的数据,查询自己的数据库等。
- 为什么使用Function calling
比如当我们问chatgpt:上海今天得天气怎么样?他得回答是:很抱歉,作为一个语言模型,我无法提供实时的天气信息…为什么这样呢,因为chatgpt没有实时地网络数据,而有了Function calling我们可以在函数中调用查询天气的接口返回给chatgpt,chatgpt按照我们的需求把数据转为自然语言。如果还不理解通过下面的示例相信你就明白了。当然这只是一个最基础最简单的应用场景,实际会有更多更复杂的应用场景
。
如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3
二、如何使用Function calling
我们通过一个简单的示例来讲解如何使用Function calling:
功能:我自己有一个数据库其中有学生表,记录每个学生的成绩,我现在需要和chatgpt交流 问他其中某个学生的成绩怎么样。
question="你觉得小白的成绩怎么样?"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-0613",
messages=[{"role": "user", "content": question}],
functions=[
{
"name": "get_scrore",
"description": "通过学生的姓名,查询学生的成绩",
"parameters": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "学生的姓名",
},
},
"required": ["name"],
},
}
],
function_call="auto",
)
message = response["choices"][0]["message"]
name = eval(message['function_call']['arguments']).get("name")
print(name)
chatgpt api基础可以看我前几篇文章的介绍,这里只讲新增的functions参数。
functions其实就是对函数的说明或者说是描述,其实没有实际的功能。只是用来描述我的函数名
是什么 函数参数是什么 函数作用是什么,事例中只有一个函数,实际应用可能有几十上百个函
数,清楚的描述可以让chatgpt更好的识别我们调用的功能或者需要的数据从而返回给我们需要的
数据。
参数名 | 说明 |
---|---|
name | 函数名 |
description | 函数描述 |
parameters | 函数参数以及参数的名称描述 |
required | 哪些参数是必须的 |
message 的内容如下
{
"content": null,
"function_call": {
"arguments": "{\n\"name\": \"\u5c0f\u767d\"\n}",
"name": "get_scrore"
},
"role": "assistant"
}
name=小白
通过上面的代码我们得到了问题中需要查询的学生的姓名和调用的方法
下面就可以去调用GPT接口获取我们需要的内容了。
这里是模拟读取数据库中的学生表
def get_score(name):
# 用一个字典存储姓名和成绩对应关系
scores = {"小明": 90, "小红": 80, "小白": 59}
score = {
"name": name,
"score": scores[name],
}
return json.dumps(score)
if message.get("function_call"):
function_name = message["function_call"]["name"]
function_response = get_score(name)
print(function_response)
# Step 4, send model the info on the function call and function response
second_response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-0613",
messages=[
{"role": "user", "content": question},
message,
{
"role": "function",
"name": function_name,
"content": function_response,
},
],
)
print(second_response['choices'][0]['message']['content'])
return second_response
返回的内容是:根据我获取的数据,小白的成绩是59分。到此这个事例就完成了。如果你想让返
回结果有一个分级,比如60以下是差 可以通过修改get_score实现,比如加入
"grade_levels" : {
"成绩好": [90, 100],
"成绩一般": [60, 89],
"成绩差": [0, 59]
}
这样返回的结果是:根据小白的成绩,他的得分为59分。根据成绩水平划分,小白的成绩属于成
绩差的范围。
至此我们要的效果就实现了
总结
结合上面的示例你应该对Function calling的用法和用途有所了解了,如果还是不明白可以私信,或者联系我
如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3