前言
回顾上篇文章写到如何实现最简单的OpenAI对话请求示例:
使用 Python接入 OpenAI API,实现简单的对话生成,介绍其中相应参数含义
1 | ini复制代码from openai import OpenAI |
最后返回了一个对象,其实在model=”gpt-3.5-turbo”,增加一行response_format={ “type”: “json_object” }, 将返回值设置为json格式就会输出如下内容
1 | json复制代码{ |
这样返回的内容格式可以更容易给开发者处理。
对话角色
在上面的例子中messages有几个角色分别为:system,user,assistant,对应的解释为:
- system:用于设置 AI 的行为、背景等,比如设定其为人工智能专家等。
- assistant:通常是模型的回复,可用于提供上下文。
- user:模型的使用者,也即聊天内容的发起者,同时可用于提供上下文。
为了让API记住对话的上下文,就要每次在对话的时候都要 携带历史对话的assistant,user的记录,给个示例就明白:
1 | ini复制代码from openai import OpenAI |
这就记住了上次的对话,当然携带的内容过多占用的token就会越多,目前ChatGPT3.5最大上下文应该是16K,16k对应16000个token,测试了一下复制了很多assistant和user的对话历史在代码中,token在超过16k的时候报错情况如下:
1 | css复制代码openai.BadRequestError: Error code: 400 - {'error': {'message': "This model's maximum context length is 16385 tokens. However, your messages resulted in 17184 tokens. Please reduce the length of the messages.", 'type': 'invalid_request_error', 'param': 'messages', 'code': 'context_length_exceeded'}} |
所以在开发多轮对话API的时候要考虑token的占用预估的问题。OpenAI的文档有对token计算的说明,我们以后再研究。
函数调用
函数调用(Function Call)是 OpenAI API 的一项强大功能,它允许开发者向模型提供自定义函数,从而扩展模型的功能并使其能够处理更复杂的任务。借助函数调用,开发者可以:
- 引入外部数据: 模型可以访问并处理来自外部 API 或数据库的数据,例如天气预报、股票行情等。
- 实现复杂逻辑: 模型可以执行更复杂的逻辑操作,例如计算、排序、过滤等。
- 增强交互性: 模型可以与用户进行更具交互性的对话,例如根据用户输入提供个性化建议或完成特定任务。
今天就引入外部数据做一个BTC价格查询的函数调用,详细注释在代码里面:
1 | ini复制代码from openai import OpenAI |
从原理上面来梳理,就是声明函数,给对话增加额外参数提示可以自动调用函数,识别到有函数调用,就本地调用函数再组装进行第二次对话获得最终结果,第一次接触还是比较难以理解的,顺利弄完了很有成就感,注意以上代码需要有相对应的网络环境。
最后
今天算是真的搞懂了大模型的本地函数调用,找了好多资料都没有我这样的研究过程示例,学到了很开心,今天就介绍到这里,ChatGPT的API基础的都介绍完毕了,后面可能会来解密一下OpenAI API中的详细参数和Token计算,敬请期待~
如果觉得内容不错,欢迎点个赞,你的支持是我更新的动力。
本文转载自: 掘金