龙空技术网

ChatGPT-工作&生活的高效助手

hero要无畏 106

前言:

此时各位老铁们对“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