找回密码
 会员注册
查看: 31|回复: 0

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

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
69864
发表于 2024-9-10 08:40:53 | 显示全部楼层 |阅读模式
Py之OpenAIPythonAPI: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、MicrosoftAzureOpenAIopenai-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的简介OpenAIPython库提供了从任何Python3.7+应用程序方便访问OpenAIRESTAPI的途径。该库包含了所有请求参数和响应字段的类型定义,并提供了由httpx提供支持的同步和异步客户端。该库是通过Stainless从我们的OpenAPI规范生成的。GitHub地址:https://github.com/openai/openai-pythonAPI文档:https://platform.openai.com/docsopenai-python的安装要求,Python3.7或更高版本。1、安装注意:SDK在v1中进行了重写,该版本于2023年11月6日发布。请查看v1迁移指南,其中包含自动更新代码的脚本。pipinstallopenai2、用法(1)、基础用法此库的完整API可以在api.md中找到,尽管可以提供api_key关键字参数,但我们建议使用python-dotenv将OPENAI_API_KEY="MyAPIKey"添加到您的.env文件中,以便不将API密钥存储在源代码控制中。fromopenaiimportOpenAIclient=OpenAI(#默认为os.environ.get("OPENAI_API_KEY")api_key="MyAPIKey",)chat_completion=client.chat.completions.create(messages=[{"role":"user","content":"Saythisisatest",}],model="gpt-3.5-turbo",)(2)、异步用法只需导入AsyncOpenAI而不是OpenAI,并在每个API调用前使用await:同步和异步客户端之间的功能是相同的。importasynciofromopenaiimportAsyncOpenAIclient=AsyncOpenAI(#默认为os.environ.get("OPENAI_API_KEY")api_key="MyAPIKey",)asyncdefmain()->None:chat_completion=awaitclient.chat.completions.create(messages=[{"role":"user","content":"Saythisisatest",}],model="gpt-3.5-turbo",)asyncio.run(main())(3)、流式响应我们支持使用ServerSideEvents(SSE)进行流式响应。fromopenaiimportOpenAIclient=OpenAI()stream=client.chat.completions.create(model="gpt-4",messages=[{"role":"user","content":"Saythisisatest"}],stream=True,)forpartinstream:print(part.choices[0].delta.contentor"")(4)、异步客户端使用完全相同的接口fromopenaiimportAsyncOpenAIclient=AsyncOpenAI()stream=awaitclient.chat.completions.create(prompt="Saythisisatest",messages=[{"role":"user","content":"Saythisisatest"}],stream=True,)asyncforpartinstream:print(part.choices[0].delta.contentor"")(5)、模块级客户端注意,我们强烈建议实例化客户端实例,而不是依赖于全局客户端。我们还公开了一个全局客户端实例,可以以类似于v1之前版本的方式访问。importopenai#可选;默认为`os.environ['OPENAI_API_KEY']`openai.api_key='...'#所有客户端选项都可以像“OpenAI”实例化对应的方式进行配置openai.base_url="https://..."openai.default_headers={"x-foo":"true"}completion=openai.chat.completions.create(model="gpt-4",messages=[{"role":"user","content":"HowdoIoutputallfilesinadirectoryusingPython?",},],)print(completion.choices[0].message.content)API与标准客户端实例化API完全相同。这旨在用于REPL或笔记本,以进行更快的迭代,而不是在应用代码中使用。我们建议在应用代码中始终实例化客户端(例如,使用client=OpenAI()):>>可能难以理解客户端选项的配置位置;>>某些客户端选项可能无法在不潜在地引起竞争条件的情况下更改;>>更难以为测试目的进行模拟;>>不可能控制网络连接的清理;3、使用类型嵌套请求参数是TypedDicts。响应是Pydantic模型,提供了诸如序列化回JSON(v1,v2)等帮助方法。要获得字典,请调用model.model_dump()。Typed请求和响应在编辑器中提供自动完成和文档。如果您想在VSCode中看到类型错误以帮助更早地捕获错误,请将python.analysis.typeCheckingMode设置为basic。4、分页OpenAIAPI中的列表方法是分页的。该库提供了使用每个列表响应的自动分页迭代器,因此您无需手动请求连续的页面:importopenaiclient=OpenAI()all_jobs=[]#根据需要自动获取更多页面。forjobinclient.fine_tuning.jobs.list(limit=20,):#在此处对作业执行某些操作all_jobs.append(job)print(all_jobs)(1)、使用异步或者,使用异步:importasyncioimportopenaiclient=AsyncOpenAI()asyncdefmain()->None:all_jobs=[]#遍历所有页面上的项目,根据需要发出请求。asyncforjobinclient.fine_tuning.jobs.list(limit=20,):all_jobs.append(job)print(all_jobs)asyncio.run(main())(2)、更细粒度的控制处理页面或者,您可以使用.has_next_page()、.next_page_info()或.get_next_page()方法以更细粒度的控制处理页面:first_page=awaitclient.fine_tuning.jobs.list(limit=20,)iffirst_page.has_next_page():print(f"willfetchnextpageusingthesedetails:{first_page.next_page_info()}")next_page=awaitfirst_page.get_next_page()print(f"numberofitemswejustfetched:{len(next_page.data)}")#非异步使用时删除`await`。(3)、或者直接使用返回的数据first_page=awaitclient.fine_tuning.jobs.list(limit=20,)print(f"nextpagecursor:{first_page.after}")#=>"nextpagecursor:..."forjobinfirst_page.data:print(job.id)#非异步使用时删除`await`5、嵌套参数嵌套参数是用TypedDict类型的字典表示的,例如:fromopenaiimportOpenAIclient=OpenAI()completion=client.chat.completions.create(messages=[{"role":"user","content":"Canyougenerateanexamplejsonobjectdescribingafruit?",}],model="gpt-3.5-turbo",response_format={"type":"json_object"},)6、文件上传与文件上传对应的请求参数可以作为字节、PathLike实例或(文件名、内容、媒体类型)的元组传递。frompathlibimportPathfromopenaiimportOpenAIclient=OpenAI()client.files.create(file=Path("input.jsonl"),purpose="fine-tune",)异步客户端使用完全相同的接口。如果传递PathLike实例,文件内容将自动异步读取。7、处理错误当库无法连接到API(例如,由于网络连接问题或超时)时,会引发openai.APIConnectionError的子类。当API返回非成功状态码时(即,4xx或5xx响应),会引发openai.APIStatusError的子类,其中包含status_code和response属性。所有错误都继承自openai.APIError。importopenaifromopenaiimportOpenAIclient=OpenAI()try:client.fine_tunes.create(training_file="file-XGinujblHPwGLSztz8cPS8XY",)exceptopenai.APIConnectionErrorase:print("无法连接到服务器")print(e.__cause__)#一个底层异常,可能在httpx内部引发。exceptopenai.RateLimitErrorase:print("收到了429状态码;我们应该稍微退后一点。")exceptopenai.APIStatusErrorase:print("收到了另一个非200范围的状态码")print(e.status_code)print(e.response)(1)、错误代码如下StatusCodeErrorType400BadRequestError401AuthenticationError403PermissionDeniedError404NotFoundError422UnprocessableEntityError429RateLimitError>=500InternalServerErrorN/AAPIConnectionError(2)、重试默认情况下,某些错误将自动重试2次,具有短暂的指数回退。默认情况下,将对连接错误(例如,由于网络连接问题)、408请求超时、409冲突、429速率限制和>=500内部错误进行重试。您可以使用max_retries选项配置或禁用重试设置:fromopenaiimportOpenAI#配置所有请求的默认值:client=OpenAI(#默认为2max_retries=0,)#或者,按请求配置:client.with_options(max_retries=5).chat.completions.create(messages=[{"role":"user","content":"HowcanIgetthenameofthecurrentdayinNode.js?",}],model="gpt-3.5-turbo",)(3)、超时默认情况下,请求在10分钟后超时。您可以使用timeout选项进行配置,该选项接受float或httpx.Timeout对象:在超时时,将抛出APITimeoutError。请注意,默认情况下,超时的请求将进行两次重试。fromopenaiimportOpenAI#配置所有请求的默认值:client=OpenAI(#默认为60秒timeout=20.0,)#更精细的控制:client=OpenAI(timeout=httpx.Timeout(60.0,read=5.0,write=10.0,connect=2.0),)#重写每个请求:client.with_options(timeout=5*1000).chat.completions.create(messages=[{"role":"user","content":"HowcanIlistallfilesinadirectoryusingPython?",}],model="gpt-3.5-turbo",)8、高级(1)、日志记录我们使用标准库的日志模块。您可以通过将环境变量OPENAI_LOG设置为debug来启用日志记录。$exportOPENAI_LOG=debug(2)、如何区分None表示null还是缺失在API响应中,字段可能明确为null,也可能完全缺失;在这两种情况下,其值在此库中均为None。您可以使用.model_fields_set来区分这两种情况:ifresponse.my_fieldisNone:if'my_field'notinresponse.model_fields_set:print('Gotjsonlike{},withouta"my_field"keypresentatall.')else:print('Gotjsonlike{"my_field":null}.')(3)、访问原始响应数据(例如,标头)可以通过在任何HTTP方法调用前加上.with_raw_response。来访问“raw”Response对象。这些方法返回一个APIResponse对象。fromopenaiimportOpenAIclient=OpenAI()response=client.chat.completions.with_raw_response.create(messages=[{"role":"user","content":"Saythisisatest",}],model="gpt-3.5-turbo",)print(response.headers.get('X-My-Header'))completion=response.parse()#获取`chat.completions.create()`将返回的对象print(completion)9、配置HTTP客户端(1)、可以直接覆盖httpx客户端以根据您的用例进行自定义,包括:>>对代理的支持>>自定义传输>>附加高级功能importhttpxfromopenaiimportOpenAIclient=OpenAI(base_url="http://my.test.server.example.com:8083",http_client=httpx.Client(proxies="http://my.test.proxy.example.com",transport=httpx.HTTPTransport(local_address="0.0.0.0"),),)(2)、管理HTTP资源默认情况下,该库在客户端被垃圾回收时关闭底层的HTTP连接。如果需要,您可以使用.close()方法手动关闭客户端,或者使用在退出时关闭的上下文管理器。10、MicrosoftAzureOpenAI要在AzureOpenAI中使用此库,请使用AzureOpenAI类,而不是OpenAI类。注意,AzureAPI的形状与核心API的形状不同,这意味着响应/参数的静态类型不总是正确的。fromopenaiimportAzureOpenAI#从环境变量AZURE_OPENAI_API_KEY获取API密钥client=AzureOpenAI(#https://learn.microsoft.com/en-us/azure/ai-services/openai/reference#rest-api-versioningapi_version="2023-07-01-preview"#https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resourceazure_endpoint="https://example-endpoint.openai.azure.com",)completion=client.chat.completions.create(model="deployment-name",#例如gpt-35-instantmessages=[{"role":"user","content":"HowdoIoutputallfilesinadirectoryusingPython?",},],)print(completion.model_dump_json(indent=2))除了基本OpenAI客户端提供的选项之外,还提供了以下选项:azure_endpointazure_deploymentapi_versionazure_ad_tokenazure_ad_token_provider可以在这里找到使用AzureActiveDirectory与客户端的示例。openai-python的使用方法1、基础用法NLP之ChatGPT:基于openai框架通过调用接口(云服务的API)实现GPT-3功能—四大模型(ada→babbage→curie→davinci)简介、使用方法及其代码实现之详细攻略https://yunyaniu.blog.csdn.net/article/details/128960658NLP之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/128960658NLP之GPT-3:基于openai框架通过调用接口(云服务的API)基于自定义数据集利用GPT-3算法实现模型预训练和微调的应用案例实现代码https://yunyaniu.blog.csdn.net/article/details/1297715402、进阶用法LLMs之Chinese-LLaMA-Alpaca:源码解读crawl_prompt.py文件利用OpenAI的API(如ChatGPT)结合prompt技术(80多个主题【科技+娱乐+体育+金融+时政+教育+医疗等】+14个任务【开放式生成+分类+问答+摘要+翻译+代码等】)设计不同话题下的指令数据(Json数据格式)进行生成并写到txt文件中https://yunyaniu.blog.csdn.net/article/details/131137578
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-7 05:57 , Processed in 0.487585 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表