1. 初识LLM API:环境配置与多轮对话演示

其实AI应用并不是一个什么很高大上的东西,你可以将它当作一个文字的“调库”行为,“调库”只需要知道库名就行了,这里实际也是如此。甚至你只需要知道你想问什么,将你的消息作为输入,就能从大模型得到输出。而这个“库”本身,是已经部署好了的,对于这样的一个黑盒的使用并没有太多的技术要求,不用担心自己的知识储备不够,因为这里并不需要你对AI本身有了解,也不需要你去训练一个AI,只是使用它。

毕竟在ChatGPT发布(2022.11.30)之前,AI应用并不广泛被需要,这是大模型兴起之后的自然产物。

使用国内大模型API是为了降低获取门槛。(不过获取步骤确实稍微复杂点,有种国内外教科书风格的差异感)

代码文件下载

这里假设你已经获取到了API KEY,如果没有的话可以参考0. 阿里大模型API获取步骤,阿里云将这个 API 命名为DASHSCOPE_API_KEY灵积是阿里云推出的模型服务平台,DashScope 是灵积的英文名),不过为了更加通用,我们还是将其命名为OPENAI_API_KEY

环境变量配置

环境变量是操作系统中以键值对形式存储的配置项,常用于保存敏感信息(如 API 密钥、数据库连接地址等),这样可以避免将这些私密的信息直接写在代码中。

你可以通过操作系统设置环境变量,或者直接在 Python 脚本中设置,二选一。

在终端 (Linux/Mac) 设置:

export OPENAI_API_KEY="your-api-key"

在命令提示符 (Windows) 中设置:

set OPENAI_API_KEY=your-api-key

通过 Python 程序设置环境变量:

import os
os.environ['OPENAI_API_KEY'] = 'your-api-key'

os.getenv()

os.getenv() 是 Python 中 os 模块的一个函数,用于获取系统环境变量的值,语法:

os.getenv('VARIABLE_NAME', default_value)
  • 'VARIABLE_NAME': 要获取的环境变量的名称。
  • default_value (可选): 如果环境变量不存在,可以指定一个默认值,当环境变量未设置时将返回该默认值。

示例:

假设你已经配置好了 DASHSCOPE_API_KEY 的环境变量,并且你想在 Python 脚本中访问它:

import osapi_key = os.getenv('OPENAI_API_KEY')
print(api_key)  # 如果环境变量已设置,它将输出对应的值。

如果该环境变量没有设置,并且你希望提供一个默认值:

api_key = os.getenv('OPENAI_API_KEY', 'default_key')
print(api_key)  # 如果环境变量没有设置,它将输出 'default_key'。

演示

我们选择使用OpenAI库进行演示,首先命令行安装。

pip3 install -U openai

在安装完成后,用 Python 进行访问尝试,在这里我们使用通义千问-Turbo进行演示。

from openai import OpenAI
import osdef get_response():client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'), # 如果你没有配置环境变量,使用"your-api-key"替换base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 这里使用的是阿里云的大模型,如果需要使用其他平台,请参考对应的开发文档后对应修改)completion = client.chat.completions.create(model="qwen-turbo",messages=[{'role': 'system', 'content': 'You are a helpful assistant.'},{'role': 'user', 'content': '你是谁?'}])print(completion.model_dump_json())get_response()

完整的运行流程和结果如下:

image-20240910205850411

注意,不要误用成api_key=os.getenv("your-api-key")os.getenv()用于获取对应系统环境变量的值,API本身并不是这个环境变量。

否则你就会遇到一个对于新手来讲不够直接的报错:OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY environment variable

多轮对话

之前的代码只提供了单轮的对话,没有历史记录,没有上下文,只是一个简单的临时对话,你可以将其理解为无痕浏览,关了就没了。

接下来,我们介绍多轮的对话,这里的轮指的是一次问答。模型本身并不会因为你的问题即时得到训练,所以也不会保留你之前的对话,那我们怎么去让模型知道呢?

答:朴素的手动保存上传。

from openai import OpenAI
import osdef get_response(messages):client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",)completion = client.chat.completions.create(model="qwen-turbo",messages=messages)return completionmessages = [{'role': 'system', 'content': 'You are a helpful assistant.'}]
# 您可以自定义设置对话轮数,当前为3
for i in range(3):user_input = input("请输入:")# 将用户问题信息添加到messages列表中,这部分等价于之前的单轮对话messages.append({'role': 'user', 'content': user_input})assistant_output = get_response(messages).choices[0].message.content# 将大模型的回复信息添加到messages列表中,这里是历史记录,保存上下文messages.append({'role': 'assistant', 'content': assistant_output})print(f'用户输入:{user_input}')print(f'模型输出:{assistant_output}')print('\n')

image-20240910210117351

流式输出

语言模型并不是直接得出完整的一句话,而是一个字一个字(其实是token,为了更大白话一点这里用字帮助理解)去生成的。前面的对话都是直接获取到了最终的生成结果,我们怎么得知它具体是怎么来的呢?

下面这部分相当于之前的单轮对话,只是改变了输出方式。

from openai import OpenAI
import osdef get_response():client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",)completion = client.chat.completions.create(model="qwen-turbo",messages=[{'role': 'system', 'content': 'You are a helpful assistant.'},{'role': 'user', 'content': '你是谁?'}],stream=True,# 可选,配置以后会在流式输出的最后一行展示token使用信息stream_options={"include_usage": True})for chunk in completion:print(chunk.model_dump_json())if __name__ == '__main__':get_response()

image-20240910210206045

我们为什么要获取流式输出?因为使用直接的对话模式需要等待大模型生成结束后,才传回每个部分拼接后的结果,而流式输出可以让你实时了解到生成的信息,在模型生成的时候进行阅读,从而利用上中间的等待时间,这是一个可以同步进行的事情,异步浪费了我们的时间。毕竟,有些回答刚一开口就可以否决掉。

常见问题:

  1. 通义千问、灵积、DashScope、百炼是什么关系?

    通义千问是阿里云研发的大语言模型;灵积是阿里云推出的模型服务平台,提供了包括通义千问在内的多种模型的服务接口,DashScope是灵积的英文名,两者指的是同一平台;百炼是阿里云推出的一站式大模型应用开发平台,同时也提供模型调用服务。

  2. 我如果想调用通义千问模型,是要通过灵积平台还是百炼平台?

    对于需要调用通义千问模型的开发者而言,通过灵积平台与百炼平台调用通义千问模型都是通过dashscope SDK或OpenAI兼容或HTTP方式实现。两个平台都可以获取到API-KEY,且是同步的。因此您只需准备好计算环境,并在两个平台任选其一创建API-KEY,即可发起通义千问模型的调用。

进一步

当前文章所有的代码已经整理为了notebook文件:LLM API 使用演示——从环境配置到多轮对话.ipynb 下载

阿里大模型平台同样支持很多其他的模型,比如Llama3.1,ChatGLM3,StableDiffusion等,感兴趣的话详细可见模型列表。

下一篇文章:2. 简单入门:使用API搭建AI应用(待上传)。

参考链接

  • Chat - OpenAI Docs
  • Completions - OpenAI Docs
  • 通过API使用通义千问-阿里云官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/421023.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【html】新建一个html并且在浏览器运行

以下是一个简单的 HTML 小项目&#xff0c;展示一个包含标题、按钮和点击按钮后弹出提示框的基本页面 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthde…

K8s的Pv和Pvc就是为了pod数据持久化

一、 1.pv&#xff08;persistent volume&#xff09;&#xff1a;是k8s虚拟化的存储资源&#xff0c;实际上就是存储&#xff0c;列如本地的硬盘、网络文件系统&#xff08;Nfs&#xff09;、lvm、RAID、云存储。 2.pvc&#xff1a;pod对存储资源的请求&#xff0c;定义了需…

Linux基础3-基础工具1(什么是工具,yum,vim基础)

目录 一.什么是工具 二.yum 2.1 yum基础 2.2 yum拓展 2.3 rzsz 三.vim基础 四.下章内容 1. vim 插入模式&#xff0c;底行模式&#xff0c;命令模式下详解。vim基础配置 2. gcc/g 基础 一.什么是工具 工具的本质是也是指令。通过工具我们能快速的实现某些功能 二.yum 2.1…

服装|基于Java+vue的服装定制系统(源码+数据库+文档)

服装定制系统 目录 基于Javavue的服装定制系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布…

SONIC系统(1)编译与构建

1、环境 准备一个linux环境&#xff0c;我这里使用ubuntu20.04 安装所需依赖 sudo apt-get update sudo apt-get install -y build-essential fakeroot debhelper \autotools-dev quilt libssl-dev libncurses5-dev \python3-pip python3-setuptools python3-wheel python3-…

Vue3+TypeScript二次封装axios

安装如下 npm install axios 第一步&#xff1a;创建config配置文件&#xff0c;用于存放请求后端的ip地址&#xff0c;用于后期打包后便于修改ip地址。 注&#xff1a;typescript要求参数要有类型。&#xff08;ES6 定义对象 属性 类型 修改的是属性的值&#xff09; inte…

Java+vue的医药进出口交易系统(源码+数据库+文档)

外贸系统|医药进出口交易系统 目录 基于Javavue的服装定制系统 一、前言 二、系统设计 三、系统功能设计 仓储部门功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设…

解锁生活密码,AI答案之书解决复杂难题

本文由 ChatMoney团队出品 介绍说明 “答案之书智能体”是您贴心的智慧伙伴&#xff0c;随时准备为您解答生活中的种种困惑。无论您在工作中遭遇瓶颈&#xff0c;还是在情感世界里迷失方向&#xff0c;亦或是对个人成长感到迷茫&#xff0c;它都能倾听您的心声&#xff0c;并给…

大数据Flink(一百一十六):Flink SQL的时间属性

文章目录 Flink SQL的时间属性 一、Flink 三种时间属性简介 二、Flink 三种时间属性的应用场景 三、​​​​​​​SQL 指定时间属性的两种方式 四、​​​​​​​​​​​​​​SQL 处理时间DDL定义 五、​​​​​​​​​​​​​​SQL 事件时间DDL定义 Flink SQL的时…

深入理解Java虚拟机:Jvm总结-垃圾收集器与内存分配策略

第三章 垃圾收集器与内存分配策略 3.1 意义 Java堆和方法区具有不确定性&#xff1a;一个接口的多个实现类、一个方法的不同条件分支需要的内存可能不一样。程序运行起来才知道到底会创建什么对象&#xff0c;创建多少个对象。动态分配内存和垃圾回收排查内存泄漏和内存溢出时…

javascript柯里化

return a b c d; } //通常调用方式 var sum add(1, 2, 3, 4); //柯里化的调用方式 var curryAdd Curry(add); var sum curryAdd(1)(2)(3)(4); //或者很多奇怪的方式调用 var sum curryAdd(1, 2)(3, 4); var sum curryAdd(1, 2, 3)(4); var sum curryAdd(1)(…

5.第二阶段x86游戏实战2-认识内存

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

24/9/6算法笔记 kaggle 房屋价格

预测模型主要分为两大类&#xff1a; 回归模型&#xff1a;当你的目标变量是连续的数值时&#xff0c;你会使用回归模型进行预测。回归模型试图找到输入特征和连续输出之间的关联。一些常见的回归模型包括&#xff1a; 线性回归&#xff08;Linear Regression&#xff09;岭回归…

FFmpeg 7.0 版本 “Dijkstra”的特点概述

FFmpeg 7.0 FFmpeg 官网:https://ffmpeg.org/FFmpeg 官网更新日志,2024.4.5 号发布代号"Dijkstra"的 7.0 版本的 FFmpeg,如下截图: 为什么叫 Dijkstra“Dijkstra” 指的是艾兹格戴克斯特拉(Edsger Wybe Dijkstra),他是一位荷兰计算机科学家,对计算机科学领域…

C#使用TCP-S7协议读写西门子PLC(一)

之前本人发布西门子S7协议的报文 西门子PLC的S7协议报文解析说明_西门子报文详解-CSDN博客 西门子PLC的S7协议是西门子公司在ModbusTcp协议的基础上自定义的一种协议,仅支持西门子PLC,S7协议本质仍然属于TCP协议的一种自定义具体实现 第一步,准备工作。VS2022中新建窗体应…

Redis学习Day3——项目工程开发

扩展阅读推荐&#xff1a; 黑马程序员Redis入门到实战教程_哔哩哔哩_bilibili 一、项目介绍及其初始化 学习Redis的过程&#xff0c;我们还将遇到各种实际问题&#xff0c;例如缓存击穿、雪崩、热Key等问题&#xff0c;只有在实际的项目实践中解决这些问题&#xff0c;才能更好…

教师节特辑:AI绘制的卡通人物,致敬最可爱的人‍

【编号&#xff1a;9】教师节到了&#xff0c;今天我要分享一组由AI绘制的教师节主题卡通人物插画&#xff0c;每一幅都充满了对老师的敬意和爱戴。让我们一起用这些可爱的卡通形象&#xff0c;向辛勤的园丁们致敬&#xff01; &#x1f393;【教师形象】 这…

域名证书,泛域名证书,sni

文章目录 前言一、证书1.全域名证书2.泛域名证书 二、域名证书的使用1、浏览器请求域名证书流程对全域名证书的请求流程对泛域名证书的请求流程ssl client-hello携带server name 报文 2、浏览器对证书的验证流程 三、域名证书和sni 前言 本文介绍了泛域名证书和全域名证书的区别…

JavaWeb【day12】--(SpringBootWeb登录认证)

案例-登录认证 在前面的课程中&#xff0c;我们已经实现了部门管理、员工管理的基本功能&#xff0c;但是大家会发现&#xff0c;我们并没有登录&#xff0c;就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的&#xff0c;所以我们今天的主题就是登录认证。 最终我们…

【32单片机篇】项目:智能台灯

一、项目需求 1. 红外传感器检测是否有人&#xff0c;有人的话实时检测距离&#xff0c;过近则报警&#xff1b;同时计时&#xff0c;超过固定时间则报警&#xff1b; 2. 按键 1 切换工作模式&#xff1a;智能模式、按键模式、远程模式&#xff1b; 3. 智能模式下&#xff0c;…