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

news2024/9/21 16:39:05

其实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 os

api_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 os

def 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 os

def 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 completion

messages = [{'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 os

def 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.coloradmin.cn/o/2122895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS学习17--CSS3 过渡、2D变形、3D变形、动画

CSS3 过渡、2D变形、3D变形、动画 一、过渡二、2D变形 transform1.移动 translate2.缩放 scale3. 旋转 rotate4. 倾斜 skew 三、3D变形1. rotateX()rotateY() rotateZ()2. 体会透视 perspective3. translat…

直播电商系统卷轴模式源码开发的发展前景

随着互联网技术的飞速发展和直播电商的日益兴起,直播电商系统已成为数字经济的重要组成部分。其中,卷轴模式作为一种结合了积分奖励和任务兑换机制的商业模式,正逐渐在直播电商领域崭露头角,并展现出广阔的发展前景。本文将从卷轴…

【腾讯云】AI驱动的数据库TDSQL-C如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图

欢迎来到《小5讲堂》 这是《腾讯云》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景效果图流程图创建数据库基本信息数据库配置设置密码控制台开启…

学工控必须知道的变频器字母符号

#变频器##变频器故障##伺服电机##电工##电工#工控人加入PLC工业自动化精英社群 工控人加入PLC工业自动化精英社群

windows软件应该安装在哪里

100%原创动力 文章目录 前言一、安装路径二、数据文件夹1.用户文件夹2.AppData 三、为什么需要管理员权限四、绿色软件 前言 windows软件应该安装在哪里 一、安装路径 windows系统安装软件应该安装在哪里,根据windows规范应该安装在某个盘的 Program Files 目录…

ICP备案办理的流程中股东附件不显示如何解决

ICP备案办理的流程中股东附件不显示如何解决 问题解决方案注意吐槽 问题 问题弹窗: 部分一级股东没有上传证照附件,请检查并上传。 问题内容: 在【股东追溯及其相关证明材料】这一页中无法保存,提示要上传证照附件,但这边找不到任…

dwg2text抽取dwg文件文字不完整分析

libdxfrw项目中dxf2text命令可以抽取dwg文件中的文字部分,编译完工程后对手头上的dwg文件提取时发现抽取不完整,对源码进行分析时发现该命令只处理了text部分,不处理mtext部分 bool dx_iface::printText(const std::string& fileI, dx_da…

Cross-Encoder实现文本匹配(重排序模型)

引言 前面几篇文章都是基于表示型的方法训练BERT进行文本匹配,而本文是以交互型的方法。具体来说,将待匹配的两个句子拼接成一个输入喂给BERT模型,最后让其输出一个相似性得分。 文本匹配系列文章先更新到此,目前为止都是基于监督…

AI大模型行业专题报告:大模型发展迈入爆发期,开启AI新纪元

大规模语言模型(Large Language Models,LLM)泛指具有超大规模参数或者经过超大规模数据训练所得到的语言模型。与传统语言模型相比,大语言模型的构建过程涉及到更为复杂的训练方法,进而展现出了强大的自然语言理解能力…

网络药理学:1、文章基本思路、推荐参考文献、推荐视频

文章基本思路 选择一味中药或者中药复方(常见的都是选择一味中药,如:大黄、银柴胡等),同时选择一个要研究的疾病(如食管癌等)获得中药的主要化学成分或者说活性成分(有时候也以化合…

一款专为网络专业人士设计的多功能扫描工具,支持主机存活探测、端口扫描、服务爆破、漏洞扫描等功能

前言 在网络维护和安全检测中,有效的工具对于提高-效率至关重要。传统的网络扫描工具往往功能单一,需要多个工具配合使用,这不仅增加了工作的复杂度,还可能因为工具间的兼容性问题导致工作效率下降。面对这样的挑战,我…

深度解析 | 二元Logistic回归模型(单因素筛查、软件操作及结果解读)

一、Logistic回归的类型 Logistic回归(又称逻辑回归)是一种广义的线性回归分析模型,用于研究分类型因变量与自变量之间影响关系。Logistic回归分析根据因变量的不同可分为二元Logistic回归、多分类Logistic回归,有序Logistic回归…

大牛直播SDK最经典的一句

搜索引擎搜大牛直播SDK,居然提示我搜“大牛直播SDK最经典的一句”,闲来无事,点开看看,AI智能问答,给出了答案: ‌大牛直播SDK最经典的一句是:"我们只做最擅长的部分,我们不做的,提供对接接…

《向量数据库指南》——解锁AI新篇章:高效处理非结构化数据的五大策略

在探讨如何有效处理非结构化数据这一AI发展的核心挑战时,我们首先需要深入理解非结构化数据的本质特性及其带来的技术难题,进而探讨当前技术生态中的不足与机遇,并提出一系列专业且可操作的解决方案。 非结构化数据的四大挑战 1. 数量庞大: 非结构化数据,如文本、图像、…

图为科技基于昇腾AI,打造智慧工厂检测解决方案

中国作为全球制造业的翘楚,在工业领域成就斐然。因工业生产的特殊环境与工艺要求,面临着高温、高压、易燃易爆等多重高危因素。 其生产装置通常大型化且密集,生产工艺复杂,生产过程紧密耦合。在这样的背景下,围绕“人…

springboot汽车租赁系统-计算机毕业设计源码65876

目录 第 1 章 引 言 1.1 选题背景 1.2 研究现状 1.3 论文结构安排 第 2 章 系统的需求分析 2.1 系统可行性分析 2.1.1 技术方面可行性分析 2.1.2 经济方面可行性分析 2.1.3 法律方面可行性分析 2.1.4 操作方面可行性分析 2.2 系统功能需求分析 2.3 系统性需求分析 …

金智维K-RPA基本介绍

一、K-RPA基本组成 K-RPA软件机器人管理系统基于“RPAX”数字化技术打造,其核心系统由管理中心(Server)、设计器(Control)、机器人(Robot/Agent)三大子系统组成,各子系统协同工作,易于构建协同式环境。 管理中心(Server&#xff…

测试人员必备的linux命令(已分组)

文件与目录管理 查看当前目录:pwd 列出目录内容:ls [-l] (-l 参数显示详细信息) 切换目录:cd [目录名] 创建目录:mkdir [-p] 目录名 (-p 可以递归创建目录) 删除空目录&#xf…

NVDLA专题14:Runtime environment-用户模式驱动

运行时环境(runtime environment)包括在兼容的NVDLA硬件上运行编译神经网络的软件。 它由两部分组成: 用户模式驱动(User Mode Driver, UMD): 这是应用程序的主接口,正如Compile library中所详述的,对神经…

数据看板多端查看无压力,教你轻松设置响应式布局

最近,山海鲸可视化新增了一个非常实用的功能,叫作“响应式布局”。今天我来为大家介绍一下这个新功能以及它如何提升我们在不同设备上的使用体验。 你可能在用手机浏览网页时注意到,有些网站在手机和电脑上的显示方式几乎相同。然而&#xff…