Python 开发 - OpenAI 兼容阿里云百炼平台 API

OpenAI 兼容阿里云百炼平台 API

1、具体实现
  1. 配置阿里云百炼平台的 API 密钥:https://bailian.console.aliyun.com/?tab=api#/api

  2. 安装 openai 库和 python-dotenv 库

shell 复制代码
pip install openai
shell 复制代码
pip install python-dotenv
  1. 创建并编辑 .env 文件,这里选择 阿里云百炼平台 -> 模型服务 -> 模型广场 -> 通义千问3-Max
env 复制代码
# API 密钥
API_KEY="【你的 API 密钥】"

# 基础 URL
BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"

# 模型 Code
MODEL="qwen3-max"
  1. 编写测试代码
python 复制代码
from openai import OpenAI
from dotenv import load_dotenv
import os

load_dotenv()

api_key = os.getenv("API_KEY")
base_url = os.getenv("BASE_URL")
model = os.getenv("MODEL")

client = OpenAI(
    api_key=api_key,
    base_url=base_url
)

completion = client.chat.completions.create(
    model=model,
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "你是谁?"}
    ],
    stream=True
)

for chunk in completion:
    print(chunk.choices[0].delta.content, end="", flush=True)
复制代码
# 输出结果

你好!我是通义千问(Qwen),由通义实验室研发的超大规模语言模型。我可以回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等。如果你有任何问题或需要帮助,欢迎随时告诉我!
2、解读
  1. 导入 openai 库、dotenv 库、操作系统接口模块
python 复制代码
from openai import OpenAI
from dotenv import load_dotenv
import os
  1. 加载并读取 .env 文件中的环境变量
python 复制代码
load_dotenv()

api_key = os.getenv("API_KEY")
base_url = os.getenv("BASE_URL")
model = os.getenv("MODEL")
  1. 创建 OpenAI 客户端实例
参数 说明
api_key API 密钥
base_url 基础 URL
python 复制代码
client = OpenAI(
    api_key=api_key,
    base_url=base_url
)
  1. 创建聊天完成请求
参数 说明
model 模型 Code
messages 对话消息列表
stream 是否启用流式响应
python 复制代码
completion = client.chat.completions.create(
    model=model,
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "你是谁?"}
    ],
    stream=True
)
  1. 处理流式响应
python 复制代码
for chunk in completion:
    print(chunk.choices[0].delta.content, end="", flush=True)

补充学习

1、不启用流式响应
python 复制代码
from openai import OpenAI
from dotenv import load_dotenv
import os

load_dotenv()

api_key = os.getenv("API_KEY")
base_url = os.getenv("BASE_URL")
model = os.getenv("MODEL")

client = OpenAI(
    api_key=api_key,
    base_url=base_url
)

completion = client.chat.completions.create(
    model=model,
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "你是谁?"}
    ]
)

response = completion.choices[0].message.content
print(response)
2、print 函数参数
参数 说明
end 指定 print 函数结束后要添加的字符
flush 指定是否强制立即刷新输出缓冲区
  1. 默认情况,print 函数后自动换行
python 复制代码
print("Hello")
print("World")
复制代码
# 输出结果

Hello
World
python 复制代码
# 等同于

print("Hello", end="\n")
print("World")
复制代码
# 输出结果

Hello
World
  1. 换行 2 次
python 复制代码
print("Hello", end="\n\n")
print("World")
复制代码
# 输出结果

Hello

World
  1. 不换行
python 复制代码
print("Hello", end="")
print("World")
复制代码
# 输出结果

HelloWorld
  1. 自定义分隔符
python 复制代码
print("Hello", end=" ")
print("World")
复制代码
# 输出结果

Hello World
python 复制代码
print("Hello", end="---")
print("World")
复制代码
# 输出结果

Hello---World

关于 messages

1、基本介绍
python 复制代码
messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "你是谁?"}
]
字段 说明
role 对话的角色
content 对话的内容
角色 说明
system 系统角色,设置模型的身份和行为准则
user 用户角色,表示用户的输入
assistant 助手角色,表示模型的输出
2、演示
(1)客服
python 复制代码
messages=[
    {"role": "system", "content": "你是公司的客服,态度友好专业"},
    {"role": "user", "content": "我的产品坏了怎么办?"}
]
复制代码
# 输出结果

您好!很抱歉听到您的产品出现了问题。为了更好地帮您解决,请您提供以下信息:

1. **产品名称和型号**(如果有的话)  
2. **购买时间及渠道**(例如:官网、某电商平台、线下门店等)  
3. **具体出现了什么问题**(可以简单描述故障现象)  
4. **是否还在保修期内**

我们会根据您提供的信息,尽快为您安排维修、更换或退款等售后服务。如果您手边有产品照片或故障视频,也可以一并提供,有助于我们更快判断问题哦!

期待您的回复,祝您今天愉快!😊
(2)Python 专家
python 复制代码
messages=[
    {"role": "system", "content": "你是一个 Python 专家,给出详细代码和解释"},
    {"role": "user", "content": "如何用 Python 读取 CSV 文件?"}
]
复制代码
# 输出结果

在 Python 中读取 CSV 文件有多种方法,最常用的是使用内置的 `csv` 模块和第三方库 `pandas`。下面详细介绍这两种方法:

## 方法一:使用内置的 `csv` 模块

### 1. 基本读取(返回列表)

```python
import csv

# 读取 CSV 文件
with open('data.csv', 'r', encoding='utf-8') as file:
    csv_reader = csv.reader(file)
    
    # 读取所有行
    for row in csv_reader:
        print(row)  # 每行是一个列表
```

### 2. 使用 DictReader(返回字典)

```python
import csv

with open('data.csv', 'r', encoding='utf-8') as file:
    csv_reader = csv.DictReader(file)
    
    for row in csv_reader:
        # row 是一个字典,键是列名
        print(row)
        # 可以通过列名访问值
        print(f"Name: {row['name']}, Age: {row['age']}")
```

### 3. 完整示例

假设有一个 `students.csv` 文件:
```csv
name,age,city
Alice,25,New York
Bob,30,Los Angeles
Charlie,35,Chicago
```

```python
import csv

# 读取并处理数据
students = []

with open('students.csv', 'r', encoding='utf-8') as file:
    csv_reader = csv.DictReader(file)
    
    for row in csv_reader:
        students.append({
            'name': row['name'],
            'age': int(row['age']),  # 转换为整数
            'city': row['city']
        })

print(students)
# 输出: [{'name': 'Alice', 'age': 25, 'city': 'New York'}, ...]
```

## 方法二:使用 pandas 库(推荐用于数据分析)

首先需要安装 pandas:
```bash
pip install pandas
```

### 1. 基本读取

```python
import pandas as pd

# 读取 CSV 文件
df = pd.read_csv('data.csv')

# 显示前几行
print(df.head())

# 显示基本信息
print(df.info())
```

### 2. 常用参数

```python
import pandas as pd

# 读取 CSV 文件的各种选项
df = pd.read_csv(
    'data.csv',
    encoding='utf-8',           # 指定编码
    sep=',',                    # 指定分隔符(默认是逗号)
    header=0,                   # 指定标题行(默认是第0行)
    index_col=0,               # 指定索引列
    usecols=['name', 'age'],   # 只读取指定列
    nrows=100,                 # 只读取前100行
    skiprows=1,                # 跳过前1行
    na_values=['NULL', 'N/A']  # 指定哪些值应该被视为 NaN
)
```

### 3. 完整示例

```python
import pandas as pd

# 读取 CSV 文件
df = pd.read_csv('students.csv')

# 查看数据
print("数据形状:", df.shape)
print("\n前5行:")
print(df.head())

# 访问特定列
names = df['name']
ages = df['age']

# 条件筛选
adults = df[df['age'] > 25]

# 统计信息
print("\n年龄统计:")
print(df['age'].describe())
```

## 处理常见问题

### 1. 编码问题

```python
# 如果遇到编码错误,尝试不同的编码
encodings = ['utf-8', 'gbk', 'latin-1', 'cp1252']

for encoding in encodings:
    try:
        df = pd.read_csv('data.csv', encoding=encoding)
        print(f"成功使用 {encoding} 编码")
        break
    except UnicodeDecodeError:
        continue
```

### 2. 处理大文件(分块读取)

```python
# 对于大文件,可以分块读取
chunk_size = 1000
chunks = []

for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size):
    # 处理每个块
    processed_chunk = chunk[chunk['age'] > 18]  # 示例处理
    chunks.append(processed_chunk)

# 合并所有块
result_df = pd.concat(chunks, ignore_index=True)
```

### 3. 自定义分隔符

```python
# 如果 CSV 使用分号分隔
df = pd.read_csv('data.csv', sep=';')

# 或者使用 csv 模块
with open('data.csv', 'r') as file:
    csv_reader = csv.reader(file, delimiter=';')
    for row in csv_reader:
        print(row)
```

## 选择建议

- **简单任务**:使用内置的 `csv` 模块
- **数据分析、处理**:使用 `pandas`
- **内存限制**:对于大文件,考虑分块读取或使用 `csv` 模块逐行处理
- **性能要求高**:`pandas` 通常更快,特别是对于数值计算

这两种方法都能有效读取 CSV 文件,选择哪种取决于你的具体需求和项目复杂度。
(3)英语老师
python 复制代码
messages=[
    {"role": "system", "content": "你是一个英语老师,纠正我的语法错误"},
    {"role": "user", "content": "I goes to school yesterday."}
]
复制代码
# 输出结果

Great effort! However, there's a small grammar mistake in your sentence.  

The correct sentence should be:  
**"I went to school yesterday."**

### Explanation:
- The verb **"go"** is irregular.
- Since you're talking about something that happened **yesterday** (past time), you need the **past tense** form of "go," which is **"went."**
- "I goes" is incorrect because "goes" is used with third-person singular subjects like **he, she,** or **it** (e.g., "She goes to school every day").

Let me know if you'd like more examples! 😊
相关推荐
Haooog2 小时前
Springcloud实用篇学习
后端·spring·spring cloud
iReachers2 小时前
极速AI助手如何使用免费的阿里云的大模型
人工智能·阿里云·云计算
GokuCode2 小时前
【GO高级编程】02.GO接收者概述
开发语言·后端·golang
行云流水20192 小时前
青少年编程考试时间汇总:考级与竞赛的不同节点
人工智能·青少年编程
南_山无梅落2 小时前
7.2 Python3序列 | 字符串操作:常用方法与格式化技巧
python
Aotman_2 小时前
JavaScript去除对象字段空格
开发语言·前端·javascript
飞凌嵌入式2 小时前
飞凌嵌入式受邀亮相菲尼克斯电气技术研讨会,共探开放自动化新未来
大数据·人工智能·自动化
Serverless 社区2 小时前
阿里云 Serverless 计算 11 月产品动态
阿里云·serverless·云计算