GPT-4 和 GBT-3.5 中的函数调用就像与您的 AI 模型探讨 Python 函数一样。您向模型解释函数,提出问题,如果模型将问题辨认为须要您形容的函数之一,它将为您提供应用该函数所需的参数。这个性能就像在Langchain中应用一样,但能够间接在OpenAi API中应用。这是一个弱小的性能,能够使你的代码更简略、更高效。
在本文中,我将领导您如何应用ChatGPT将音讯发送到Slack和Google工作表,咱们将应用Slack Webhook和Google电子表格,这些办法很容易施行,仿佛您能够对提供API的任何服务应用相似的办法
特地是,它从自然语言中提取必要的信息(例如,在Product_Codes,价格,客户,Client_Code,订单,总计的状况下),真是太好了。
1. 设置环境
- 您想从在本地计算机上创立 venv 开始。
首先,关上终端并创立一个虚拟环境。
Python -m venv venv
而后激活它:
venv\Scripts\activate
您当初应该在终端中看到 ( Venv )。
当初,让咱们装置所需的依赖项:
凋谢 AI == 0.27.7 , gspread == 5.10.0 , oauth2client == 4.1.3
最初,咱们须要为 OpenAI API 密钥设置一个环境变量:
汇合 OPENAI_API_KEY=<YOUR_API_KEY>set Spreadsheet_id = <id>
设置 WEBHOOK_URL = <URL>
首先,函数调用是响应用户输出而收回特定的函数。
所以你必须创立一个函数。这一次,为了写入Google电子表格并写入Slack,请创立一个函数来执行这些过程。
写入电子表格的函数如下。要拜访电子表格,您须要从 Google Cloud 控制台获取蕴含身份验证信息的 JSON 文件。如果您向 ChatGPT 询问无关该问题的程序,它将失去解决,因而请询问。
def write_expense_to_spreadsheet(Product_Codes, Price, Client, Client_Code, Orders, Total): scope = [‘https://spreadsheets.google.com/feeds’, ‘https://www.googleapis.com/auth/drive’] creds = ServiceAccountCredentials.from_json_keyfile_name(’C:\Users\mrtar\Documents\GitHub\ChatGPMe\test.json’, scope) gspread_client = GSpreadClient(creds) spreadsheet_id = “1AUhV89IlTFXr6nkrD3gFFFz_6JBOSDHeICxxwpe-O9E” sheet = gspread_client.open_by_key(spreadsheet_id).sheet1
sheet.append_row([Product_Codes、价格、客户、Client_Code、订单、总计])
接下来,咱们将创立一个函数来公布到 Slack。这一次,我抉择应用 Webhook,因为它简化了流程。然而其余公布办法没有问题。如果您向 ChatGPT 询问如何应用它的详细信息,它将被解决,因而请询问(省略)
WEBHOOK_URL = “https://hooks.slack.com/services/T05FQ3RJB1N/B05F0EDLFGA/b6qI…”def post_message_to_slack_via_webhook(message): payload = {‘text’: message} response = requests.post( WEBHOOK_URL, data=json.dumps(payload), headers={‘Content-Type’: ‘application/json’} ) if response.ok: print(’Message sent success ‘) else:
打印(’无奈发送音讯。谬误:’,响应文本)
到目前为止,咱们曾经制作了一个函数来做咱们想做的事。接下来,咱们将解决在 GPT 模型中应用此函数的局部。
填妥的表格如下。
def run_conversation(): user_input=input(“user_input:”) try: response = OpenAI.ChatCompletion.create( model=“gpt-3.5-turbo-0613”, messages=[ {“role”: “system”, “content”: “你是有史以来最好的助手!”}, {“角色”: “用户”, “内容”: user_input}], functions=[ { “名称”: “write_expense_to_spreadsheet”, “形容”: “将费用信息写入电子表格”, “参数”: { “类型”: “对象”, “属性”: { “产品代码”: {“类型”: “数字”}, “价格”: {“类型”: “数字”}, “客户端”: {“类型”: “数字”}, “客户端代码”: {“类型”: “字符串”}, “订单” : {“类型”: “数字”}, “总计” : {“类型”: “数字”}, }, “必须”: [“产品代码”, “价格”, “客户端”, “客户端代码”, “订单”, “总计”], }, }, { “名称”: “post_message_to_slack_via_webhook”, “形容”: “向 Slack 公布音讯”, “参数”: { “类型”: “对象”, “属性”: { “音讯”: {“类型”: “字符串”}, }, “必须”: [“音讯”], }, } ], function_call=“主动”, ) 音讯 = 响应“抉择”[“音讯”] 除了异样作为谬误: 打印(’此处文本:’,谬误) 如果 message.get(“function_call”): function_name =message“function_call” arguments = json.loads(message“function_call”) # print(arguments) print(message“function_call”) 如果function_name == “write_expense_to_spreadsheet”: function_response = write_expense_to_spreadsheet( Product_Codes=arguments.get(“Product Codes”), Price=arguments.get(“Price”), Client=arguments.get(“Client”), Client_Code=arguments.get(“Client Code”), Orders=arguments.get(“Orders”), Total=arguments.get(“Total”)) elif function_name == “post_message_to_slack_via_webhook”: function_response = post_message_to_slack_via_webhook( message=arguments.get(“message”), ) else: raise NotImplementError() second_response = openai.ChatCompletion.create( model=“gpt-3.5-turbo-0613”, # 获取用户输出音讯=[ {“角色”: “用户”, “内容”: user_input}, 音讯, { “角色”: “函数”, “名称”: function_name, “内容”: str(function_response), }, ], ) 返回 second_response 否则: 返回响应
print(“response:”, run_conversation()“choices”“message”, “\n\n”)
以下是简要阐明。首先,这次咱们将接管用户的输出,以便依据用户的输出对性能进行梳理。
user_input=输出(“user_input:”)
而后,它将用户的输出传递给 GPT API。应用openai。ChatCompletion.create ,您须要指定模型和音讯。
model=“gpt-3.5-turbo-0613”,messages=[ {“角色”: “零碎”, “内容”: “你是有史以来最好的助手!”},
{“角色”: “用户”, “内容”: user_input}],
申明模型和音讯就像咱们应用 GPT API 一样。这一次,我将零碎音讯设置为“你是有史以来最好的助手!
这样做是因为它仿佛会使过程更加准确。
上面是咱们应用此函数调用增加的函数的新局部。
functions=[ { “名称”: “write_expense_to_spreadsheet”, “形容”: “将信息写入电子表格.”, “参数”: { “类型”: “对象”, “属性”: { “产品代码”: {“类型”: “数字”}, “价格”: {“类型”: “数字”}, “客户端”: {“类型”: “数字”}, “客户端代码”: {“类型”: “字符串”}, “订单” : {“类型”: “数字”}, “总计” : {“类型”: “数字”}, }, “必填”: [“产品代码”, “价格”, “客户”, “客户代码”, “订单”, “总计”], }, }, { “名称”: “post_message_to_slack_via_webhook”, “description”: “将音讯公布到 Slack”, “参数”: { “类型”: “对象”, “属性”: { “音讯”: {“类型”: “字符串”}, }, “必须”: [“音讯”], }, }
],
“名称”是你对函数的称说,“形容”是对函数性能的简要阐明。GPT 应用此形容依据用户所说的内容决定应用哪个函数。
在参数局部中,指定要从用户输出的文本中提取的信息(例如Product_Codes,价格,客户,Client_Code,订单,总计)。
通过以这种形式指定它,它从用户输出的文本中提取必要的信息。步骤 2 之后的内容与官网文档简直雷同,但要执行的解决是依据函数名称划分的。Second_response 如果未调用该函数,则将执行内容。在上述示例中,除了输出费用和公布到 Slack 之外,还将执行它。
让咱们尝试一下
第一个查问:您是否将产品代码 = 5642foun 和价格 = 29$ 和客户端 = Tarik 增加到 Google 工作表
论断:
我感觉应用语音和句子等自然语言作为调用函数的工具的确扩大了咱们的可能性。我想查看的事件还有很多,但当初,我将在这里完结咱们的探讨
发表回复