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! 😊
相关推荐
momo在敲码19 小时前
Claude Sub-agents 完整可跑代码:3 个 design pattern + omni-report 真实编排(45 min → 8 min
人工智能·github
92year19 小时前
用 browser-use 让 AI 自己操作浏览器:从安装到自动填表全流程
python·ai·浏览器自动化·browser-use
moMo19 小时前
# 不懂机器学习也能玩 NLP?用DeepSeek 跑通四种经典任务
人工智能·机器学习
人道领域19 小时前
【LeetCode刷题日记】93.复原IP地址
java·开发语言·算法·leetcode
caimouse19 小时前
Reactos 第 3 章 内存管理 — 【中篇】Hyperspace、系统空间、API 与异常
c语言·开发语言·windows·架构
Holman19 小时前
用 Claude Code 30 分钟建立代码心智模型
人工智能·ai编程
全栈人月19 小时前
使用 Kilo Code 解决遗留代码恐惧症
人工智能·单元测试·代码规范
团象科技19 小时前
记录跨境独立站 海外VPS组合落地的一线实操动态与调研手记
大数据·人工智能
leeyi19 小时前
SSE 实时推流 —— Token 怎么一个个蹦出来
后端·agent
摇滚侠19 小时前
JavaWeb 全套教程 Listener 112-113
java·开发语言·servlet·tomcat·intellij-idea