OpenAI Python库让开发者能够轻松使用各种人工智能模型。通过这个库,我们可以在自己的程序中添加文本生成、图像创建、语音识别等智能功能。
首先需要安装OpenAI库:
pip install openai如果你使用Python 3,可能需要用pip3:
pip3 install openai安装完成后,还需要获取api密钥。访问OpenAI官网注册账号,然后在API密钥页面生成密钥。
下面是使用OpenAI库的基本代码结构:
from openai import OpenAI
# 创建客户端,需要填入你的API密钥
client = OpenAI(api_key="你的API密钥")
# 发送请求获取响应
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "请用简单的话解释什么是人工智能"}
]
)
# 显示回答
print(response.choices[0].message.content)由于国内访问OpenAI可能遇到困难,我们可以使用阿里云百炼等国内服务。这些服务提供了与OpenAI兼容的接口。
首先访问阿里云百炼平台(bailian.console.aliyun.com),注册账号并获取API密钥。
使用示例:
from openai import OpenAI
def ask_question():
client = OpenAI(
api_key="你的阿里云API密钥", # 替换成你的实际密钥
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-plus", # 使用通义千问模型
messages=[
{'role': 'system', 'content': '你是一个有用的助手。'},
{'role': 'user', 'content': 'Python是什么?'}
]
)
answer = completion.choices[0].message.content
print(answer)
if __name__ == '__main__':
ask_question()这段代码会向AI模型提问"Python是什么?"并显示回答。
AI模型可以记住对话上下文,进行连续对话:
from openai import OpenAI
def chat_example():
client = OpenAI(
api_key="你的API密钥",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 定义对话历史
messages = [
{'role': 'system', 'content': '你是一个编程专家,用中文回答。'},
{'role': 'user', 'content': '怎么学习Python?'}
]
# 第一次提问
completion = client.chat.completions.create(
model="qwen-plus",
messages=messages
)
first_answer = completion.choices[0].message.content
print("AI回答:", first_answer)
# 添加AI的回答到对话历史
messages.append({'role': 'assistant', 'content': first_answer})
# 继续提问,AI会记住之前的对话
messages.append({'role': 'user', 'content': '能推荐具体的学习资源吗?'})
completion = client.chat.completions.create(
model="qwen-plus",
messages=messages
)
second_answer = completion.choices[0].message.content
print("AI继续回答:", second_answer)
chat_example()对于长回答,可以使用流式输出,让文字逐个显示:
from openai import OpenAI
def stream_example():
client = OpenAI(
api_key="你的API密钥",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-plus",
messages=[
{'role': 'user', 'content': '用300字介绍中国的长城'}
],
stream=True # 启用流式输出
)
print("AI回答:", end="", flush=True)
for chunk in completion:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="", flush=True)
print() # 最后换行
stream_example()from openai import OpenAI
def code_helper():
client = OpenAI(
api_key="你的API密钥",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
question = """
请帮我写一个Python函数,功能是:
1. 接收一个数字列表
2. 返回列表中所有偶数的平方
3. 包含详细的代码注释
"""
completion = client.chat.completions.create(
model="qwen-plus",
messages=[
{'role': 'system', 'content': '你是一个专业的Python程序员。'},
{'role': 'user', 'content': question}
]
)
print("生成的代码:")
print(completion.choices[0].message.content)
code_helper()from openai import OpenAI
def study_assistant():
client = OpenAI(
api_key="你的API密钥",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
topic = "光合作用"
grade = "初中"
prompt = f"""
请为{grade}学生解释{topic}:
1. 用简单易懂的语言
2. 举一个生活中的例子
3. 列出3个关键点
"""
completion = client.chat.completions.create(
model="qwen-plus",
messages=[{'role': 'user', 'content': prompt}]
)
print(completion.choices[0].message.content)
study_assistant()通过调整参数可以控制AI的回答:
from openai import OpenAI
def controlled_response():
client = OpenAI(
api_key="你的API密钥",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-plus",
messages=[{'role': 'user', 'content': '写一个关于友谊的短故事'}],
max_tokens=150, # 限制回答长度
temperature=0.7, # 控制创造性(0-1,越小越确定)
)
print(completion.choices[0].message.content)
controlled_response()在实际使用中需要处理可能出现的错误:
from openai import OpenAI
import time
def safe_ai_request(prompt, max_retries=3):
client = OpenAI(
api_key="你的API密钥",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
for attempt in range(max_retries):
try:
completion = client.chat.completions.create(
model="qwen-plus",
messages=[{'role': 'user', 'content': prompt}],
timeout=30 # 30秒超时
)
return completion.choices[0].message.content
except Exception as e:
print(f"请求失败,第{attempt + 1}次重试... 错误: {e}")
if attempt < max_retries - 1:
time.sleep(2) # 等待2秒后重试
else:
return "请求失败,请检查网络连接和API密钥"
return "未知错误"
# 使用示例
result = safe_ai_request("什么是机器学习?")
print(result)使用AI服务需要注意费用控制:
from openai import OpenAI
class AIChat:
def __init__(self, api_key):
self.client = OpenAI(
api_key=api_key,
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
self.conversation_history = []
self.total_tokens = 0
def add_message(self, role, content):
self.conversation_history.append({"role": role, "content": content})
def ask(self, question, max_tokens=500):
self.add_message("user", question)
completion = self.client.chat.completions.create(
model="qwen-plus",
messages=self.conversation_history,
max_tokens=max_tokens
)
answer = completion.choices[0].message.content
self.add_message("assistant", answer)
# 统计使用情况
if hasattr(completion, 'usage'):
self.total_tokens += completion.usage.total_tokens
print(f"本次使用token数: {completion.usage.total_tokens}")
print(f"累计使用token数: {self.total_tokens}")
return answer
# 使用示例
chat_bot = AIChat("你的API密钥")
response = chat_bot.ask("Python有哪些主要应用领域?")
print(response)
response2 = chat_bot.ask("其中哪个最适合初学者?")
print(response2)from openai import OpenAI
def interactive_chat():
client = OpenAI(
api_key="你的API密钥",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
messages = [
{'role': 'system', 'content': '你是一个友好、乐于助人的助手。用中文回答,回答要简洁明了。'}
]
print("AI助手已启动!输入'退出'结束对话")
print("-" * 50)
while True:
user_input = input("你: ").strip()
if user_input.lower() in ['退出', 'exit', 'quit']:
print("再见!")
break
if not user_input:
continue
messages.append({'role': 'user', 'content': user_input})
try:
completion = client.chat.completions.create(
model="qwen-plus",
messages=messages,
max_tokens=300
)
ai_response = completion.choices[0].message.content
print(f"AI: {ai_response}")
messages.append({'role': 'assistant', 'content': ai_response})
except Exception as e:
print(f"出错: {e}")
# 启动对话
interactive_chat()保护API密钥:不要将密钥直接写在代码中,可以使用环境变量
控制费用:设置使用限制,避免意外产生高额费用
错误处理:添加重试机制和超时设置
内容审核:对用户输入和AI输出进行适当检查
用户体验:使用流式输出改善长时间等待的感受
更安全的方式是使用环境变量存储API密钥:
import os
from openai import OpenAI
# 从环境变量读取API密钥
api_key = os.getenv('ALIYUN_API_KEY')
if not api_key:
print("请设置ALIYUN_API_KEY环境变量")
exit(1)
client = OpenAI(
api_key=api_key,
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)在命令行中设置环境变量:
export ALIYUN_API_KEY="你的实际API密钥"| 分类 | 方法 / 属性 | 方法 / 属性 | 示例代码 |
|---|---|---|---|
| 安装与导入 | pip install openai | 安装官方 Python SDK | import openai |
| 客户端初始化 | openai.OpenAI(api_key="API_KEY") | 创建客户端对象 | client = openai.OpenAI(api_key="sk-xxx") |
| 模型管理 | client.models.list() | 获取可用模型列表 | models = client.models.list() |
| 文本补全 | client.completions.create() | 根据提示生成文本 | client.completions.create(model="text-davinci-003", prompt="你好", max_tokens=50) |
| 聊天生成 | client.chat.completions.create() | 基于消息生成对话 | client.chat.completions.create(model="gpt-3.5-turbo", messages=[{'role':'user','content':'你好'}]) |
| 流式输出 | stream=True | 边生成边输出 | for chunk in client.chat.completions.create(…, stream=True): print(chunk.choices[0].delta.content, end='') |
| 上传文件 | client.files.upload() | 上传训练或微调文件 | client.files.upload(file=open("data.jsonl","rb"), purpose="fine-tune") |
| 查看文件 | client.files.list() | 获取文件列表 | client.files.list() |
| 微调模型 | client.fine_tunes.create() | 对模型进行微调 | client.fine_tunes.create(training_file="file-xxx", model="davinci") |
| 生成嵌入 | client.embeddings.create() | 获取文本向量 | client.embeddings.create(input="Hello world", model="text-embedding-3-small") |
| 音频转文本 | client.audio.transcriptions.create() | 将音频转为文字 | client.audio.transcriptions.create(file=open("audio.mp3","rb"), model="whisper-1") |
| 错误处理 | openai.error.OpenAIError | 捕获 SDK 错误 | try: … except openai.error.OpenAIError as e: print(e) |
| 配置超时 | client = OpenAI(api_key="xxx", timeout=30) | 设置请求超时 | client = OpenAI(api_key="sk-xxx", timeout=30) |
OpenAI Python库为开发者提供了强大的人工智能能力。通过国内服务如阿里云百炼,我们可以方便地在项目中使用这些功能。
主要使用步骤:
安装openai库
获取API密钥
创建客户端连接
发送请求并处理响应
这个库可以用于构建聊天机器人、代码助手、学习工具等各种智能应用。使用时要注意费用控制和错误处理,确保程序的稳定性和安全性。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!