当前位置:   article > 正文

Py之OpenAI Python API:openai-python的简介、安装、使用方法之详细攻略

openai python

Py之OpenAI Python API:openai-python的简介、安装、使用方法之详细攻略

目录

openai-python的简介

openai-python的安装

1、安装

2、用法

(1)、基础用法

(2)、异步用法

(3)、流式响应

(4)、异步客户端使用完全相同的接口

(5)、模块级客户端

3、使用类型

4、分页

(1)、使用异步

(2)、更细粒度的控制处理页面

(3)、或者直接使用返回的数据

5、嵌套参数

6、文件上传

7、处理错误

(1)、错误代码如下

(2)、重试

(3)、超时

8、高级

(1)、日志记录

(2)、如何区分None表示null还是缺失

(3)、访问原始响应数据(例如,标头)

9、配置HTTP客户端

(1)、可以直接覆盖httpx客户端

(2)、管理HTTP资源

10、Microsoft Azure OpenAI

openai-python的使用方法

1、基础用法

NLP之ChatGPT:基于openai框架通过调用接口(云服务的API)实现GPT-3功能—四大模型(ada→babbage→curie→davinci)简介、使用方法及其代码实现之详细攻略

NLP之Chatgpt:基于openai框架通过调用API接口实现Chatgpt的吊炸天功能的图文教程(基于python代码实现)、案例应用之详细攻略

NLP之ChatGPT:基于openai框架通过调用接口(云服务的API)实现GPT-3功能—四大模型(ada→babbage→curie→davinci)简介、使用方法及其代码实现之详细攻略

NLP之GPT-3:基于openai框架通过调用接口(云服务的API)基于自定义数据集利用GPT-3算法实现模型预训练和微调的应用案例实现代码

2、进阶用法

LLMs之Chinese-LLaMA-Alpaca:源码解读crawl_prompt.py文件利用OpenAI的API(如ChatGPT)结合prompt技术(80多个主题【科技+娱乐+体育+金融+时政+教育+医疗等】+14个任务【开放式生成+分类+问答+摘要+翻译+代码等】)设计不同话题下的指令数据(Json数据格式)进行生成并写到txt文件中


openai-python的简介

OpenAI Python库提供了从任何Python 3.7+应用程序方便访问OpenAI REST API的途径。该库包含了所有请求参数和响应字段的类型定义,并提供了由httpx提供支持的同步和异步客户端。该库是通过Stainless从我们的OpenAPI规范生成的。

GitHub地址https://github.com/openai/openai-python

API文档https://platform.openai.com/docs

openai-python的安装

要求,Python 3.7或更高版本。

1、安装

注意:SDK在v1中进行了重写,该版本于2023年11月6日发布。请查看v1迁移指南,其中包含自动更新代码的脚本。

pip install openai

2、用法

(1)、基础用法

此库的完整API可以在api.md中找到,尽管可以提供api_key关键字参数,但我们建议使用python-dotenv将OPENAI_API_KEY="My API Key"添加到您的.env文件中,以便不将API密钥存储在源代码控制中。

  1. from openai import OpenAI
  2. client = OpenAI(
  3. # 默认为os.environ.get("OPENAI_API_KEY")
  4. api_key="My API Key",
  5. )
  6. chat_completion = client.chat.completions.create(
  7. messages=[
  8. {
  9. "role": "user",
  10. "content": "Say this is a test",
  11. }
  12. ],
  13. model="gpt-3.5-turbo",
  14. )

(2)、异步用法

只需导入AsyncOpenAI而不是OpenAI,并在每个API调用前使用await:

同步和异步客户端之间的功能是相同的。

  1. import asyncio
  2. from openai import AsyncOpenAI
  3. client = AsyncOpenAI(
  4. # 默认为os.environ.get("OPENAI_API_KEY")
  5. api_key="My API Key",
  6. )
  7. async def main() -> None:
  8. chat_completion = await client.chat.completions.create(
  9. messages=[
  10. {
  11. "role": "user",
  12. "content": "Say this is a test",
  13. }
  14. ],
  15. model="gpt-3.5-turbo",
  16. )
  17. asyncio.run(main())

(3)、流式响应

我们支持使用Server Side Events(SSE)进行流式响应。

  1. from openai import OpenAI
  2. client = OpenAI()
  3. stream = client.chat.completions.create(
  4. model="gpt-4",
  5. messages=[{"role": "user", "content": "Say this is a test"}],
  6. stream=True,
  7. )
  8. for part in stream:
  9. print(part.choices[0].delta.content or "")

(4)、异步客户端使用完全相同的接口

  1. from openai import AsyncOpenAI
  2. client = AsyncOpenAI()
  3. stream = await client.chat.completions.create(
  4. prompt="Say this is a test",
  5. messages=[{"role": "user", "content": "Say this is a test"}],
  6. stream=True,
  7. )
  8. async for part in stream:
  9. print(part.choices[0].delta.content or "")

(5)、模块级客户端

注意,我们强烈建议实例化客户端实例,而不是依赖于全局客户端。我们还公开了一个全局客户端实例,可以以类似于v1之前版本的方式访问。

  1. import openai
  2. # 可选; 默认为`os.environ['OPENAI_API_KEY']`
  3. openai.api_key = '...'
  4. # 所有客户端选项都可以像“OpenAI”实例化对应的方式进行配置
  5. openai.base_url = "https://..."
  6. openai.default_headers = {"x-foo": "true"}
  7. completion = openai.chat.completions.create(
  8. model="gpt-4",
  9. messages=[
  10. {
  11. "role": "user",
  12. "content": "How do I output all files in a directory using Python?",
  13. },
  14. ],
  15. )
  16. print(completion.choices[0].message.content)

API与标准客户端实例化API完全相同。这旨在用于REPL或笔记本,以进行更快的迭代,而不是在应用代码中使用。

我们建议在应用代码中始终实例化客户端(例如,使用client = OpenAI()):
>> 可能难以理解客户端选项的配置位置;
>> 某些客户端选项可能无法在不潜在地引起竞争条件的情况下更改;
>> 更难以为测试目的进行模拟;
>> 不可能控制网络连接的清理;

3、使用类型

嵌套请求参数是TypedDicts。响应是Pydantic模型,提供了诸如序列化回JSON(v1,v2)等帮助方法。要获得字典,请调用model.model_dump()。

Typed请求和响应在编辑器中提供自动完成和文档。如果您想在VS Code中看到类型错误以帮助更早地捕获错误,请将python.analysis.typeCheckingMode设置为basic。

4、分页

OpenAI API中的列表方法是分页的。该库提供了使用每个列表响应的自动分页迭代器,因此您无需手动请求连续的页面:

  1. import openai
  2. client = OpenAI()
  3. all_jobs = []
  4. # 根据需要自动获取更多页面。
  5. for job in client.fine_tuning.jobs.list(
  6. limit=20,
  7. ):
  8. # 在此处对作业执行某些操作
  9. all_jobs.append(job)
  10. print(all_jobs)

(1)、使用异步

或者,使用异步:

  1. import asyncio
  2. import openai
  3. client = AsyncOpenAI()
  4. async def main() -> None:
  5. all_jobs = []
  6. # 遍历所有页面上的项目,根据需要发出请求。
  7. async for job in client.fine_tuning.jobs.list(
  8. limit=20,
  9. ):
  10. all_jobs.append(job)
  11. print(all_jobs)
  12. asyncio.run(main())

(2)、更细粒度的控制处理页面

或者,您可以使用.has_next_page()、.next_page_info()或.get_next_page()方法以更细粒度的控制处理页面:

  1. first_page = await client.fine_tuning.jobs.list(
  2. limit=20,
  3. )
  4. if first_page.has_next_page():
  5. print(f"will fetch next page using these details: {first_page.next_page_info()}")
  6. next_page = await first_page.get_next_page()
  7. print(f"number of items we just fetched: {len(next_page.data)}")
  8. # 非异步使用时删除`await`。

(3)、或者直接使用返回的数据

  1. first_page = await client.fine_tuning.jobs.list(
  2. limit=20,
  3. )
  4. print(f"next page cursor: {first_page.after}") # => "next page cursor: ..."
  5. for job in first_page.data:
  6. print(job.id)
  7. # 非异步使用时删除`await`

5、嵌套参数

嵌套参数是用TypedDict类型的字典表示的,例如:

  1. from openai import OpenAI
  2. client = OpenAI()
  3. completion = client.chat.completions.create(
  4. messages=[
  5. {
  6. "role": "user",
  7. "content": "Can you generate an example json object describing a fruit?",
  8. }
  9. ],
  10. model="gpt-3.5-turbo",
  11. response_format={"type": "json_object"},
  12. )

6、文件上传

与文件上传对应的请求参数可以作为字节、PathLike实例或(文件名、内容、媒体类型)的元组传递。

  1. from pathlib import Path
  2. from openai import OpenAI
  3. client = OpenAI()
  4. client.files.create(
  5. file=Path("input.jsonl"),
  6. purpose="fine-tune",
  7. )

异步客户端使用完全相同的接口。如果传递PathLike实例,文件内容将自动异步读取。

7、处理错误

当库无法连接到API(例如,由于网络连接问题或超时)时,会引发openai.APIConnectionError的子类。当API返回非成功状态码时(即,4xx或5xx响应),会引发openai.APIStatusError的子类,其中包含status_code和response属性。所有错误都继承自openai.APIError。

  1. import openai
  2. from openai import OpenAI
  3. client = OpenAI()
  4. try:
  5. client.fine_tunes.create(
  6. training_file="file-XGinujblHPwGLSztz8cPS8XY",
  7. )
  8. except openai.APIConnectionError as e:
  9. print("无法连接到服务器")
  10. print(e.__cause__) # 一个底层异常,可能在httpx内部引发。
  11. except openai.RateLimitError as e:
  12. print("收到了429状态码;我们应该稍微退后一点。")
  13. except openai.APIStatusError as e:
  14. print("收到了另一个非200范围的状态码")
  15. print(e.status_code)
  16. print(e.response)

(1)、错误代码如下

Status CodeError Type
400BadRequestError
401AuthenticationError
403PermissionDeniedError
404NotFoundError
422UnprocessableEntityError
429RateLimitError
>=500InternalServerError
N/AAPIConnectionError

(2)、重试

默认情况下,某些错误将自动重试2次,具有短暂的指数回退。默认情况下,将对连接错误(例如,由于网络连接问题)、408请求超时、409冲突、429速率限制和>=500内部错误进行重试。

您可以使用max_retries选项配置或禁用重试设置:

  1. from openai import OpenAI
  2. # 配置所有请求的默认值:
  3. client = OpenAI(
  4. # 默认为2
  5. max_retries=0,
  6. )
  7. # 或者,按请求配置:
  8. client.with_options(max_retries=5).chat.completions.create(
  9. messages=[
  10. {
  11. "role": "user",
  12. "content": "How can I get the name of the current day in Node.js?",
  13. }
  14. ],
  15. model="gpt-3.5-turbo",
  16. )

(3)、超时

默认情况下,请求在10分钟后超时。您可以使用timeout选项进行配置,该选项接受float或httpx.Timeout对象:

在超时时,将抛出APITimeoutError。请注意,默认情况下,超时的请求将进行两次重试。

  1. from openai import OpenAI
  2. # 配置所有请求的默认值:
  3. client = OpenAI(
  4. # 默认为60秒
  5. timeout=20.0,
  6. )
  7. # 更精细的控制:
  8. client = OpenAI(
  9. timeout=httpx.Timeout(60.0, read=5.0, write=10.0, connect=2.0),
  10. )
  11. # 重写每个请求:
  12. client.with_options(timeout=5 * 1000).chat.completions.create(
  13. messages=[
  14. {
  15. "role": "user",
  16. "content": "How can I list all files in a directory using Python?",
  17. }
  18. ],
  19. model="gpt-3.5-turbo",
  20. )

8、高级

(1)、日志记录

我们使用标准库的日志模块。您可以通过将环境变量OPENAI_LOG设置为debug来启用日志记录。

$ export OPENAI_LOG=debug

(2)、如何区分None表示null还是缺失

在API响应中,字段可能明确为null,也可能完全缺失;在这两种情况下,其值在此库中均为None。您可以使用.model_fields_set来区分这两种情况:

  1. if response.my_field is None:
  2. if 'my_field' not in response.model_fields_set:
  3. print('Got json like {}, without a "my_field" key present at all.')
  4. else:
  5. print('Got json like {"my_field": null}.')

(3)、访问原始响应数据(例如,标头)

可以通过在任何HTTP方法调用前加上.with_raw_response。来访问“raw” Response对象。这些方法返回一个APIResponse对象。

  1. from openai import OpenAI
  2. client = OpenAI()
  3. response = client.chat.completions.with_raw_response.create(
  4. messages=[{
  5. "role": "user",
  6. "content": "Say this is a test",
  7. }],
  8. model="gpt-3.5-turbo",
  9. )
  10. print(response.headers.get('X-My-Header'))
  11. completion = response.parse() # 获取`chat.completions.create()`将返回的对象
  12. print(completion)

9、配置HTTP客户端

(1)、可以直接覆盖httpx客户端

以根据您的用例进行自定义,包括:
>> 对代理的支持
>> 自定义传输
>> 附加高级功能

  1. import httpx
  2. from openai import OpenAI
  3. client = OpenAI(
  4. base_url="http://my.test.server.example.com:8083",
  5. http_client=httpx.Client(
  6. proxies="http://my.test.proxy.example.com",
  7. transport=httpx.HTTPTransport(local_address="0.0.0.0"),
  8. ),
  9. )

(2)、管理HTTP资源

默认情况下,该库在客户端被垃圾回收时关闭底层的HTTP连接。如果需要,您可以使用.close()方法手动关闭客户端,或者使用在退出时关闭的上下文管理器。

10、Microsoft Azure OpenAI

要在Azure OpenAI中使用此库,请使用AzureOpenAI类,而不是OpenAI类。

注意,Azure API的形状与核心API的形状不同,这意味着响应/参数的静态类型不总是正确的。

  1. from openai import AzureOpenAI
  2. # 从环境变量AZURE_OPENAI_API_KEY获取API密钥
  3. client = AzureOpenAI(
  4. # https://learn.microsoft.com/en-us/azure/ai-services/openai/reference#rest-api-versioning
  5. api_version="2023-07-01-preview"
  6. # https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resource
  7. azure_endpoint="https://example-endpoint.openai.azure.com",
  8. )
  9. completion = client.chat.completions.create(
  10. model="deployment-name", # 例如gpt-35-instant
  11. messages=[
  12. {
  13. "role": "user",
  14. "content": "How do I output all files in a directory using Python?",
  15. },
  16. ],
  17. )
  18. print(completion.model_dump_json(indent=2))

除了基本OpenAI客户端提供的选项之外,还提供了以下选项:
azure_endpoint
azure_deployment
api_version
azure_ad_token
azure_ad_token_provider

可以在这里找到使用Azure Active Directory与客户端的示例。

openai-python的使用方法

1、基础用法

NLP之ChatGPT:基于openai框架通过调用接口(云服务的API)实现GPT-3功能—四大模型(ada→babbage→curie→davinci)简介、使用方法及其代码实现之详细攻略

https://yunyaniu.blog.csdn.net/article/details/128960658

NLP之Chatgpt:基于openai框架通过调用API接口实现Chatgpt的吊炸天功能的图文教程(基于python代码实现)、案例应用之详细攻略

NLP之Chatgpt:基于openai框架通过调用API接口实现Chatgpt的吊炸天功能的图文教程(基于python代码实现)、案例应用之详细攻略-CSDN博客

NLP之ChatGPT:基于openai框架通过调用接口(云服务的API)实现GPT-3功能—四大模型(ada→babbage→curie→davinci)简介、使用方法及其代码实现之详细攻略

https://yunyaniu.blog.csdn.net/article/details/128960658

NLP之GPT-3:基于openai框架通过调用接口(云服务的API)基于自定义数据集利用GPT-3算法实现模型预训练和微调的应用案例实现代码

https://yunyaniu.blog.csdn.net/article/details/129771540

2、进阶用法

LLMs之Chinese-LLaMA-Alpaca:源码解读crawl_prompt.py文件利用OpenAI的API(如ChatGPT)结合prompt技术(80多个主题【科技+娱乐+体育+金融+时政+教育+医疗等】+14个任务【开放式生成+分类+问答+摘要+翻译+代码等】)设计不同话题下的指令数据(Json数据格式)进行生成并写到txt文件中

https://yunyaniu.blog.csdn.net/article/details/131137578

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/463978
推荐阅读
相关标签
  

闽ICP备14008679号