文章目录
- 1. 前置准备
- 2. 代码学习 - APIKEY 使用
- 3. 代码学习 - OpenAPI 库基本使用
- 4. 代码学习 - OpenAPI 流式输出
- 5. 代码学习 - OpenAPI 附带历史消息
前置介绍:避免老年人跟不上时代,也是时候开始学习 agent 相关的知识,还是经典的黑马程序员教程开始学习。
1. 前置准备
首先是登录阿里云百炼平台,然后注册一个 API Key:阿里云百炼。
接下来到模型广场随便选一个模型进入。
2. 代码学习 - APIKEY 使用
上面就是我们要学习的代码,由于博主本人完全不会 python,所以只能边写边豆包查问题。
打开 pycharm,将代码复制进去,然后在命令行输入下面的命令安装 openapi 库,指定版本,不知道为啥我不指定版本一直报错,必须要我指定版本,可能是 pip 版本不对吧。
pipinstallopenai==1.66.0-ihttps://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com将 openapi 下载到当前项目的.venv中,终于不用手动配置下载地址了。
importos from openaiimportOpenAI client=OpenAI(api_key="xxx",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",)messages=[{"role":"user","content":"你是谁"}]completion=client.chat.completions.create(model="qwen3.6-max-preview",# 您可以按需更换为其它深度思考模型 messages=messages,extra_body={"enable_thinking":True},stream=True)is_answering=False # 是否进入回复阶段print("\n"+"="*20+"思考过程"+"="*20)forchunk in completion:ifnot chunk.choices:continuedelta=chunk.choices[0].deltaifhasattr(delta,"reasoning_content")and delta.reasoning_content is not None:ifnot is_answering:print(delta.reasoning_content,end="",flush=True)ifhasattr(delta,"content")and delta.content:ifnot is_answering:print("\n"+"="*20+"完整回复"+"="*20)is_answering=Trueprint(delta.content,end="",flush=True)接下来将 api_key 配置成第一步配置的 api key,然后就可以看到输出结果了。
如果要换模型可以改model="qwen-max",在模型用量里面改成对应模型的名称就行了。
api key 最好配置在 windows 的环境变量中,然后删掉 api_key 的配置,这时候这个库会去读取环境变量里面的OPENAI_API_KEY,初始化 client 的时候就可以用下面的方法去初始化了。
client=OpenAI(base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",)同样的启动也可以看到输出。
3. 代码学习 - OpenAPI 库基本使用
fromopenaiimportOpenAI client:OpenAI=OpenAI(api_key="your_api_key_here",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")- api_key:模型厂商提供的 APIKEY 密钥。
- base_url:模型厂商的 API 接入地址,比如 OpenAI、阿里云、腾讯云等。
response=client.chat.completions.create(model="qwen3-max",messages=[{"role":"system","content":"你是一个Python编程专家,并且不说废话简单回答"},{"role":"assistant","content":"好的,我是编程专家,并且话不多,你要问什么?"},{"role":"user","content":"输出1-10的数字,使用python代码"}])上面是模型调用的方法,client.chat.completions.create会向 AI 服务器发送网络请求,然后将返回的结果赋值给 response,这里是同步阻塞调用,代码会卡在这里知道返回结果,response 是 ChatCompletion 对象。
- model:模型名称,要调用的 AI 模型,必填,
- messages:对话消息列表,也就是给模型提供的消息,Iterable 类型,必填,可以看到的是每一条就是一条消息。
- 上面示例 message 里面的 key 有两个
role和content,role 是角色,content 是发给模型的内容。 - System 角色:设定助手整体行为、角色和规则,算是全局的背景设定,影响后续所有交互,简单来说就是告诉 AI,你是什么,要做什么。
- assistent 角色:AI 历史回答,单论会话可以不用,多轮会话要用,存放 AI 上一轮的回复,拼接到上下文,让模型记住聊天历史,简单理解为上下文。
- user 角色:代表用户,content 就是具体跟模型的对话了。
- 上面示例 message 里面的 key 有两个
调用之后我们来看下回复里面的一些重要字段。
{"id":chatcmpl-xxx,"model":qwen3-max,"created":1779554091,"object":response.object,"choices":[{"index":0,"finish_reason":stop,# stop 正常结束,length 令牌数超限制,function_call 触发函数调用"message":{"role":assistant,"content":生成的回答}}],# 问答 token 消耗"usage":{"prompt_tokens":prompt_tokens,"completion_tokens":completion_tokens,"total_tokens":total_tokens}}最终整体测试代码如下。
fromopenaiimportOpenAI# 1. 获取client对象,OpenAI类对象client=OpenAI(base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 2. 调用模型response=client.chat.completions.create(model="qwen3-max",messages=[{"role":"system","content":"你是一个Python编程专家,并且不说废话简单回答"},{"role":"assistant","content":"好的,我是编程专家,并且话不多,你要问什么?"},{"role":"user","content":"输出1-10的数字,使用python代码"}])# 3. 处理结果print(response.choices[0].message.content)输出如下:
4. 代码学习 - OpenAPI 流式输出
平时跟豆包、千问等大模型对话的时候输出都是一段一段输出的,这种就是流式输出,体验也是比较好的,代码里面需要把stream设置为True。同时结果就是遍历整个 response 来输出,而不是直接把整个 response 输出到控制台,代码整体如下。
fromopenaiimportOpenAI client=OpenAI(base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")response=client.chat.completions.create(model="qwen3-max",messages=[{"role":"system","content":"你是一个Python编程专家,并且话非常多"},{"role":"assistant","content":"好的,我是编程专家,并且话非常多,你要问什么?"},{"role":"user","content":"输出1-10的数字,使用python代码"}],stream=True# 开启了流式输出的功能)forchunkinresponse:# 流式输出, 每一段以空格分割# flush=True 表示立刻刷新缓冲区print(chunk.choices[0].delta.content,end=' ',flush=True)输出结果如下。
我们可以 debug 看下 response,返回的是一个 Stream 类型的对象。
5. 代码学习 - OpenAPI 附带历史消息
调用模型传入的 messages 是一个 list 参数,也就是表明有非常多的消息在内,正常多轮会话 ai 如果需要记住上下文消息,需要我们自己传给 ai,相当于我们自己提供历史记录给 ai。
fromopenaiimportOpenAI# 1. 获取client对象,OpenAI类对象client=OpenAI(base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 2. 调用模型response=client.chat.completions.create(model="qwen3-max",messages=[# 使用 assistant 提供历史记录{"role":"system","content":"你是AI助理,回答很简洁"},{"role":"user","content":"用户1有2条狗"},{"role":"assistant","content":"好的"},# 表示 AI 回复收到了{"role":"user","content":"用户2有3条狗"},{"role":"assistant","content":"好的"},# 表示 AI 回复收到了{"role":"user","content":"总共有几个宠物?"}],stream=True# 开启了流式输出的功能)# 3. 处理结果forchunkinresponse:print(chunk.choices[0].delta.content,end=" ",# 每一段之间以空格分隔flush=True# 立刻刷新缓冲区)# 输出 5 条 狗。可以看到 ai 确实记住了每一次消息,最后问总共有多少个宠物,ai 也可以正确返回结果。
如有错误,欢迎指出!!!