【Agent.04】AI时代的hello world:调用OpenAI接口,与大模型交互
欢迎阅读慕雪撰写的AI Agent专栏,本专栏目录如下
- 【AI】AI对26届计算机校招的影响
- 【Agent.01】AI Agent智能体开发专题引言
- 【Agent.02】市面上常见的大模型有哪些?
- 【Agent.03】带你学会写一个基础的Prompt
- 【Agent.04】AI时代的hello world:调用OpenAI接口,与大模型交互
本文介绍了如何使用python发送请求,调用OpenAI的API,与大模型交互,获取到大模型关于hello的响应。
1. 引言
如果说学习编程的第一个程序是hello world,那么学习AI Agent开发的第一个程序就是调用AI API。就像学车要先认识方向盘一样,调用API也是AI开发的必备技能。
本文将介绍如何使用Python的requests库调用硅基流动的OpenAI兼容API。这其实就是一个HTTP请求的事,我们发送请求给OpenAI格式API接口的服务端,服务端将请求处理成大模型能够接受的入参,再把大模型返回的结果,以OpenAI API的格式返回给我们。
本文使用Python的requests库,以硅基流动的API做示例,请求Qwen/Qwen3-8B模型。OpenAI的请求格式可以参考硅基流动的OpenAI API文档。
阅读本文之前,请确保你对HTTP协议、Python的基本语法和requests库的使用有一定了解。本站的Agent专题不包含Python教学部分。
2. 准备工作
2.1. 获取API密钥
首先需要注册硅基流动账号,地址:https://cloud.siliconflow.cn/
如果你愿意支持慕雪,可以使用慕雪的邀请链接注册硅基流动,万分感谢!
登录后,在控制台找到"API Keys"页面,创建新的API密钥。这个密钥就是你在硅基流动这个平台上的身份证,千万保管好,别泄露了。任何平台的API Key都必须保管好!
2.2. 安装依赖库
首先需要保证你的电脑上有Python的基本环境,安装Python参考本站博客:点我。建议至少安装Python 3.10.x版本,不要安装太老的版本。
我们需要使用Python的requests库发送HTTP请求,所以需要安装requests库:
1 | pip3 install requests |
requests这玩意非常常用,所以直接装在你python全局环境就OJBK了,刚开始学习的时候,没必要去折腾啥虚拟环境。
3. 开始调用!
3.1. 基础调用示例
下面是一个最最最基础的OpenAI请求,包含了一个system prompt和我们咨询的问题。
使用这个代码之前,你需要先替换代码最后的API_KEY
为你自己的硅基流动API Key。
1 | import requests |
运行结果如下,AI成功回答了我们的问题
1 | ❯ uv run basic/01.openai_hello_world.py |
3.2. 关键参数说明
接下来,对OpenAI API接口中的关键参数进行说明。
3.2.1. Header
首先是header里面的字段,Authorization是一个比较通用的鉴权字段,这里传入了我们的API KEY用来确认我们的用户身份,服务器才能提供响应。后续调用收费的模型,也会自动定位到你的硅基流动账户,进行扣费。
简单来说,Authorization就是一个身份标识,好比进门的钥匙。毕竟你不能不带钥匙就去开门,如果谁来都开门了,这个OpenAI的API接口岂不是能随便请求,那肯定会被干爆的!
1 | headers = { |
3.2.2. Body
随后,再来看看OpenAI的body字段里面有哪些内容
1 | data = { |
这个body里面包含的字段如下:
- model:选择使用的AI模型,硅基流动提供多种模型可选
- messages:对话历史,包含角色和内容
- stream:是否使用流式响应,False表示等待完整响应,True代表使用流失响应;
- max_tokens:限制响应的最大token数量,防止AI输出到一半就不干活了,或者输出太多"跑火车";
- temperature:控制回答的随机性,0到1之间的小数,值越高回答越有创意,或者说越高就越偏离你的原定目标。如果想让AI别那么发散,就把这个值稍微调小一点。一般建议默认使用
0.7
;
3.2.3. Messages列表
其中,最重要的参数,是messages列表,这个列表控制了我们的历史记录。我们每次对大模型的请求,都是无状态的,整个对话的输入输出,都是客户端在控制。
举个例子:
- 你请求了大模型A,咨询了问题1234。
- 你使用相同的历史记录去请求大模型B,大模型B依旧会有这些历史记录的“记忆”,继续回答你的问题5,同时也会知道前4个问题是啥。
所以,在编写一个多次对话的大模型请求的时候,我们作为客户端的代码需要主动维护这个历史消息的messages列表,保证已有对话的记忆不丢失。
messages列表中的每一个成员都是一个dict,包含两个字段:
- role:字符串类型。当前这条消息的身份,可选值为system、user、assistant、tool,分别对应系统消息(system prompt)、用户发送的问题、大模型的回答、以及工具调用的返回值(工具调用结果)。
- content:字符串或数组类型,当前这条消息的内容。建议不要使用数组类型,直接用字符串填写内容。
对应Json格式如下:
1 | { |
当出现多轮对话的时候,我们请求体里面的messages列表也要对应更新,这便是我们客户端维护的历史消息。
1 | [ |
role中比较特殊的是tool这个类型,代表的是工具调用的返回结果。这部分在后续function calling实操部分再展开讲讲,现在你只要知道role有这个类型就行了。
3.3. 进阶:流式响应
如果需要实时查看AI的输出过程(类似ChatGPT网页端上的样子),可以使用流式响应:
1 | import requests |
流式传输的执行效果如下
不过,一般也只有开发前后端AI项目的时候需要用到流式相应。如果是开发一个自动化的Agent,没必要使用流式响应,对性能和效果都没有啥提升,反而会把代码变得复杂
4. 总结
调用OpenAI API是AI开发的入门技能,就像学习编程的hello world。掌握了这个基础,后续可以:
- 尝试不同模型,比较效果差异
- 将AI集成到实际项目中
- 探索更多AI应用场景
最后提醒:AI只是工具,关键是怎么用。与其追求最新最强的模型,不如先掌握好基本用法。
另外,本文介绍的OpenAI API请求只是最基础的一个hello world,Agent开发中并不会使用这么原始的方式调用OpenAI的接口,而是会使用OpenAI官方提供的python sdk和包装好的Agent框架,这样能避免造轮子的尴尬。这些都是后续专栏中会逐步介绍的内容了。