前言:
此时各位老铁们对“mysqlthenelse”大概比较看重,各位老铁们都需要知道一些“mysqlthenelse”的相关资讯。那么小编也在网摘上汇集了一些对于“mysqlthenelse””的相关内容,希望咱们能喜欢,各位老铁们快快来学习一下吧!ChatGPT在写文章、代码、设计等方面效果都出乎意料,但用于工作中还是需要去做适当优化改动的,却也是可以作为日常工作的帮手去使用,今天用openai api的方式去使用下,后期开发为桌面应用更加方便个人使用。
一、chatGPT与OpenAI
OpenAI是一家人工智能研究公司,开发并提供了一系列人工智能技术和产品,其中chatGPT是OpenAI公司的一个技术产品,它使用了GPT(Generative Pre-trained Transformer)技术,是一个用于对话生成的预训练语言模型,当然OpenAI的训练模型有很多种。API方式使用的效果,取决于OpenAI API的开发版本。
二、注册和获取API KEY
需要科学上网,以及国外手机号,这里不做描述,网上搜索较多,或者私信沟通。
三、Openai API 参数介绍和使用方法
1. 环境准备
安装OpenAI提供的openai库,就可以调用API进行使用
pip install openai
2. 参数介绍
过程主要是调用openai.chatCompletion.create()函数实现,需要了解几个基本参数的含义
model: string类型,产生内容所需要的模型, 可以在OpenAI Docs查看或者通过models.list获取。messages:数组类型,会话过程中一系列问题或内容的描述temperature:取值0-2,控制结果的随机性,取值越大,每次回答结果随机性越大,如果取值为0,结果固定max_tokens:生成结果的最大tokens数目,不能超过所用模型的上下文长度stop:最大长度是4的字符串列表,一旦生成的 tokens 包含其中的内容,将停止生成并返回结果presence_penalty:用于控制主题的重复度, -2.0 ~ 2.0 之间的数字,正值根据到目前为止是否出现在文本中来惩罚新标记,从而增加模型谈论新主题的可能性。frequency_penalty:用于控制字符的重复度, -2.0 ~ 2.0 之间的数字,正值根据文本中的现有频率惩罚新标记,从而降低模型逐字重复同一行的可能性。top_p: 用于代替 temperature 的参数,对应机器学习中 nucleus sampling,如果设置 0.1 意味着只考虑构成前 10% 概率质量的 tokensn: integer类型,用于控制生成多少个结果,返回的结果choices项是一个列表,多个结果需要遍历提取text项的值。
3. API调用
先尝试文本总结方面,看API给出怎样的结果输出;然后再尝试写代码方面结果输出。
首先是通过调用OpenAI API方式,其次也可以通过Restful方式接入调用
3.1 文本输出:
python调用api如下:
class OpenaiApi: def __init__(self, api_key): openai.api_key = api_key def generate_text(self, sys_prompt, user_prompt, model): response = openai.chatCompletion.create( model=model, # prompt=prompt, messages=[ {"role": "system", "content": sys_prompt}, {"role": "user", "content": user_prompt} ], temperature=0.7, max_tokens=1000, n=1, stop=None, presence_penalty=0, frequency_penalty=0, timeout=15, ) return response["choices"][0]["message"]["content"] def get_models(self): models = openai.Model.list() return [model.id for model in models["data"]] if __name__ == '__main__': # 个人申请额API KEY, 请替换为自己的key api_key = "sk-8jAWlNOZPmilcbvDkdKlkkdWoIACWUjmVbnI" openai_api = OpenaiApi(api_key) # 获取models类型 # models = openai_api.get_models() # print("Available models:") # for model in models: # print(model) system_prompt = "你是一位散文作家" user_prompt = "写一段赞美西湖风景的句子" model = "gpt-3.5-turbo" generated_text = openai_api.generate_text(sys_prompt=system_prompt,user_prompt=user_prompt, model=model,) print("Generated text:\n", generated_text)
执行结果如下:
写主题/大纲:
system_prompt = "你是一位学者或者读者"user_prompt = "写一篇关于《高效能人士的七个习惯》书籍的大纲,并就每个大纲做简要阐述"
结果如下:
学习总结
system_prompt = "你是一位人工智能技术专家"user_prompt = "学习人工智能的路径"model = "text-davinci-003"temperature = 0.7
结果如下:
书籍推荐
system_prompt = "你是一位人工智能技术专家" user_prompt = "推荐十分学习人工智能的书籍"model = "text-davinci-003"
响应结果如下:
3.2 代码输出
python-selenium初始化实现
system_prompt = "你是一位做selenium自动化测试技术专家"user_prompt = "python面向对象方式编写selenium的service启动,driver实例创建,service停止的实现代码"model = "gpt-3.5-turbo"temperature = 0max_tokens = 1000
结果生成代码如下:
from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.firefox.options import Optionsclass SeleniumService: def __init__(self, browser_name): """Initialize the class Args: browser_name (str): Browser name. It could be Chrome, Firefox, etc. """ self.browser_name = browser_name def start_service(self): """Start the service """ if self.browser_name == 'Chrome': opts = Options() opts.headless = True driver = webdriver.Chrome(options=opts) elif self.browser_name == 'Firefox': opts = Options() opts.headless = True driver = webdriver.Firefox(options=opts) return driver def stop_service(self, driver): """Stop the service """ driver.quit()# Usageif __name__ == "__main__": # Start the service selenium_service = SeleniumService(browser_name='Chrome') driver = selenium_service.start_service() # Do something with the driver driver.get(';) print(driver.title) # Stop the service selenium_service.stop_service(driver)
其次通过网页版chatGPT,输入相同的prompt,代码生成如下:
from selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.chrome.options import Optionsclass SeleniumWrapper: def __init__(self, chromedriver_path, chrome_options=None): self.chromedriver_path = chromedriver_path self.chrome_options = chrome_options or Options() def start_service(self): self.service = Service(executable_path=self.chromedriver_path) self.service.start() def stop_service(self): self.service.stop() def create_driver(self): self.driver = webdriver.Remote( command_executor=self.service.service_url, options=self.chrome_options, ) return self.driverif __name__ == '__main__': chromedriver_path = '/path/to/chromedriver' selenium_wrapper = SeleniumWrapper(chromedriver_path) selenium_wrapper.start_service() driver = selenium_wrapper.create_driver() driver.get(';) print(driver.title) selenium_wrapper.stop_service()
由代码对比看出,chatGPT相对比API调用生成的代码一个是更理解prompt的意思(网页版用浏览器驱动启动一项service),另一个是更契合实际工作使用。其中api的版本差异应该是一方面原因。
python修复bug
# 初始代码# ls = [3, 5, 1, 6, 0] # for i in range(len(ls)):# if ls[i] > ls[i+1]:# ls[i],ls[i+1] = ls[i+1],ls[i]system_prompt = "你是一位python技术专家"user_prompt = "ls = [3, 5, 1, 6, 0]\nfor i in range(len(ls)):\nif ls[i] > ls[i+i]:\nls[i],ls[i+1] = ls[i+1],ls[i]\n#修复上方代码中的错误"model = "gpt-3.5-turbo"temperature = 0
运行结果如下,下标越界的bug已修复
python代码重构
# 原始代码for i in range(n): if a[i]='1': ls.append('one') if a[i]='2': ls.append('two') if a[i]='3': ls.append('thress') if a[i] != '1' and a[i]!='2' and a[i]!='3': ls.append('zero')# api调用system_prompt = "你是一位python技术专家"user_prompt = "for i in range(n):\nif a[i]='1':\nls.append('one')\nif a[i]='2':\nls.append('two')\nif a[i]='3'\nls.append('thress')\nif a[i] != '1' and a[i]!='2' and a[i]!='3'\nls.append('zero')\n#重构上方代码的逻辑"model = "gpt-3.5-turbo"temperature = 0
运行后的结果如下:进行了简单合并处理
python转换java代码
#原始python代码:s='abuidabcuho'dt=dict()for i in range(len(s)): if s[i] in dt: dt[s[i]]+=1 else: dt[s[i]]=1# 调用openai api参数:system_prompt = "你是一位python和java技术专家"user_prompt = "s='abuidabcuho'\ndt=dict()\nfor i in range(len(s)):\n if s[i] in dt:\n dt[s[i]]+=1\nelse: \ndt[s[i]]=1\n#上方python代码转换为java代码"model = "gpt-3.5-turbo"temperature = 0
转换结果如下:
MySQL语句生成
# 表student,列=[name,math, language, englist] # 表class, 列=[name, class, grade]\n# # 创建MySQL查询:grade=1,class=2且语文都大于90的name# prompt如下system_prompt = "你是一位SQL编程人员"user_prompt = "# 表student,列=[name,math, language, englist] 表class, 列=[name, class, grade]\n# 创建MySQL查询:grade=1,class=2且语文都大于90的name\nquery = "model = "gpt-3.5-turbo"temperature = 0
执行结果如下:
Restful方式调用
class ChatApi: def __init__(self, api_key): self.api_key = api_key def generate_text(self, system_prompt, user_prompt, model): url = "; headers = { "Content-Type": "application/json", "Authorization": f"Bearer {api_key}" } data = { "model": model, messages=[ {"role": "system", "content": sys_prompt}, {"role": "user", "content": user_prompt} ], "max_tokens": 100, "temperature": 0.5, } try: response = requests.post(url, headers=headers, json=data) response_json = response.json() return response["choices"][0]["message"]["content"] except Exception as e: print("Request failed with status code:", response.status_code)if __name__ == '__main__': # 个人申请的API KEY, 请替换为自己的key api_key = "sk-8jAWlNOZPmilcbvDkdKlkkdWoIACWUjmVbnI” system_prompt = "你是一位诗歌作者" user_prompt = "写一首寓意为生命不息,奋斗不止的诗歌" model = "gpt-3.5-turbo" chat_api = ChatApi(api_key) res = chat_api.generate_text(system_prompt=ystem_prompt, user_prompt=user_prompt, model=model) print("Generated text:\n", res)
生成结果如下:
以上共勉。
感谢阅读,欢迎关注微信公众号(ATester),所有文章会在公众号首发。
标签: #mysqlthenelse