1、获取API密钥
使用OpenAI账号登入:OpenAI登入后选择View API keys -> API Keys页面。
点击Create new secret key获得一个API密钥,复制。
2、连接API
pip命令安装OpenAI python包:pip install openai
在要编写的Python程序中导入OpenAI包并使用刚才获得的API密钥
import openai
openai.api_key = "YOUR_API_KEY"#第一步获取的API密钥
3、文本生成
使用openai.Completion.create()方法来生成文本
prompt = "Once upon a time"response = openai.Completion.create( engine="davinci", prompt=prompt, temperature=0.5, max_tokens=50, n=1, stop=None, timeout=20,)print(response.choices[0].text)
4、创作示例
import openaiopenai.api_key = "YOUR_API_KEY" #刚才获取的API密钥prompt = "推荐5本最适合学习Java的书籍"response = openai.Completion.create( engine="text-davinci-003", prompt=prompt, temperature=0.8, max_tokens=1000, n=1, stop=None, timeout=20,)print(response.choices[0].text)
输出结果:
1. 《Java编程思想(第4版)》:是一本著名的入门书籍,内容涵盖了Java基础知识、类、对象、接口、字符串、异常、泛型、IO流等。
2. 《java核心技术 卷Ⅰ:基础知识(第9版)》:是一本最新的Java技术入门教程,主要介绍Java的基础知识和范例,内容涵盖了Java语言的基本概念、基本技术、面向对象编程、类、构造器、接口、内部类、包和异常处理等。
3. 《Java 8实战(第2版)》:是一本介绍Java 8新特性的书籍,大量地使用示例和案例详细介绍了新增的特性,内容涵盖了lambda表达式、新特性stream API、定制接口、时间日期API、并发API等等。
4. 《深入理解Java虚拟机(第2版)》:是一本经典的深入剖析JVM的书籍,详细讲解了JVM的内部结构,内容涵盖了类加载机制、内存分配、垃圾收集、JIT编译、类文件格式等等。
5. 《Java性能优化权威指南(第2版)》:是一本专业介绍Java性能优化技术的书籍,包括了Java应用性能针对性分析和优化技术,内容涵盖了Java应用性能分析、垃圾收集器、内存优化、网络性能优化、JVM参数调优等。
Process finished with exit code 0
5、可能遇到的问题
因为目前openai对地区限制的原因,即使设置了全局代理使用API调用时,还是会出现科学上网代理的错误问题。
错误提示:openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-003/completions (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000205FFB386A0>: Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。'))
解决办法:
①打开文件路径:D:\Anaconda3\envs\py\Lib\site-packages\openai\api_reuqestor.py(openai库路径)
②找到if not hasattr(_thread_context,"session"): 方法,并在此方法上加入代理。(此方法大概在512行)
# proxy = {# 'http': 'http://<代理ip>:<代理端口>',# 'https': 'https://<代理ip>:<代理端口>'# } proxy={ 'http':'127.0.0.1:10809', 'https':'127.0.0.1:10809' }
③在result = _thread_context.session.request(中加入代理
result = _thread_context.session.request( method, abs_url, headers=headers, data=data, files=files, stream=stream, timeout=request_timeout if request_timeout else TIMEOUT_SECS, proxies=proxy # 新增此行 )
再次运行API测试代码发现已经成功返回数据