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

假设你已经获取到了API KEY,阿里云将这个 API 命名为 DASHSCOPE_API_KEY,但是国内大模型开启了新的篇章,考虑到以后可能会进行多模型的 API 输出对比,不再固定命为 OPENAI_API_KEY。为了后续代码正常执行,阿里云的 API 环境名暂时保持为 OPENAI_API_KEY

环境变量配置

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

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

在终端设置:

此方法仅适用于当前终端会话,关闭终端后设置会失效。

bash 复制代码
export OPENAI_API_KEY="your-api-key"

写入配置文件(推荐)

bash 复制代码
echo 'export OPENAI_API_KEY="your-api-key"' >> ~/.bashrc
source ~/.bashrc  # 重新加载配置文件

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

此方法仅在当前 Python 程序或 Notebook 中有效,其他程序或 Notebook 不会共享此设置。

python 复制代码
import os
os.environ['OPENAI_API_KEY'] = 'your-api-key'

os.getenv()

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

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

实例

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

python 复制代码
import os

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

演示

首先命令行安装 openai 库。

bash 复制代码
curl -LsSf https://astral.sh/uv/install.sh 
export PATH="你的安装目录:$PATH"
uv --version
# 我临时建一个虚拟环境来做测试
uv venv /data/hhan/tmp-openai-env
source /data/hhan/tmp-openai-env/bin/activate
uv pip install openai
python -c "import openai; print(openai.__version__)"

单轮对话

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

python 复制代码
from openai import OpenAI
import os

# 初始化 OpenAI 客户端,使用阿里云 DashScope API
client = OpenAI(
    api_key=os.getenv('OPENAI_API_KEY'), # 如果你没有配置环境变量,使用 api_key="your-api-key" 替换
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 这里使用的是阿里云的大模型,如果需要使用其他平台,请参考对应的开发文档后对应修改
)

# 调用 API 获取模型回复
response = client.chat.completions.create(
    model="qwen-turbo",
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        {'role': 'user', 'content': '你是谁?'}]
    )

# 打印模型回复内容
print(response.choices[0].message.content)

输出

python 复制代码
我是通义千问,是阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型。我能够回答问题、创作文字、逻辑推理、编程等多种任务。你可以问我任何问题,我会尽我所能帮助你。

多论对话

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

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

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

python 复制代码
from openai import OpenAI
import os

# 初始化OpenAI客户端
client = OpenAI(
    api_key=os.getenv('OPENAI_API_KEY'), 
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

# 初始化对话历史
messages = [{"role": "system", "content": "You are a helpful assistant."}]

# 进行多轮对话,当前为3轮
for i in range(3):
    # 获取用户输入
    user_input = input("请输入:")
    
    # 添加用户消息到对话历史
    messages.append({"role": "user", "content": user_input})
    
    # 调用API获取模型回复
    response = client.chat.completions.create(
        model="qwen-turbo",
        messages=messages
    )
    
    # 提取模型回复内容
    assistant_output = response.choices[0].message.content
    
    # 将模型回复添加到对话历史
    messages.append({"role": "assistant", "content": assistant_output})
    
    print(f'用户输入:{user_input}')
    print(f'模型输出:{assistant_output}\n')

输出

python 复制代码
请输入:你好,想问一个问题?
用户输入:你好,想问一个问题?
模型输出:你好!当然可以,我很乐意帮你解答问题。请随时告诉我你想问什么,我会尽力提供帮助。😊

请输入:1+1的结果是多少?
用户输入:1+1的结果是多少?
模型输出:1+1的结果是2。😊

请输入:我刚刚问你什么问题?
用户输入:我刚刚问你什么问题?
模型输出:你刚刚问的是:"1+1的结果是多少?" 我回答你说:"1+1的结果是2。😊" 😊

流式输出

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

当然可以,下面的代码相当于之前的单轮对话,只是改变了输出方式。

python 复制代码
from openai import OpenAI
import os

# 初始化OpenAI客户端
client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

# 开启流式输出
response = client.chat.completions.create(
    model="qwen-turbo",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "你是谁?"}
    ],
    stream=True,
)

# 实时打印模型回复的增量内容
for chunk in response:
    # 判断回复内容是否非空
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end='') 

Q:为什么要获取流式输出?

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

相关推荐
寒水馨20 小时前
macOS下载、安装openclaw-v2026.7.1(附安装包OpenClaw-2026.7.1.dmg)
macos·大模型·github·开源软件·ai助手·openclaw·gpt-5.6
白玉cfc1 天前
【iOS】MRC和ARC
macos·ios·cocoa
飞雪金灵1 天前
mac电脑 Maven下载安装和配置环境变量
macos·maven·maven下载安装·mac电脑环境
雨声不在1 天前
macos 12使用docker
macos·docker·容器
一叶龙洲1 天前
ubuntu26.04 xfce美化成mac
服务器·ubuntu·macos
李小白杂货铺1 天前
Oh My Zsh 简记
macos·macbook·zsh·主题·插件·oh my zsh·omz
fukai77222 天前
macOS防止休眠的菜单栏小工具
macos
web守墓人2 天前
【go语言】gotar:使用go语言复刻tar命令,并加入7z支持,可独立运行在windows、linux、macos上
linux·macos·golang
之歆3 天前
从 Mac 回到 Windows:用 PowerToys + AutoHotkey 找回熟悉手感
windows·macos
星辰即远方3 天前
字符串合法性检验
macos·ios·cocoa