Function Calling

 Function Calling

这个功能总结下来也很简单就几个字 —— 可识别且格式化输出

Output Parser或者Prompt Engineering才能够一步步达到我们想要的输出。但现在,OpenAI直接在模型上进行微调并暴露了出来,确实方便了开发者不少

下面我们就以发邮件为例,告诉AI:帮我给小美发一封邮件,告诉她我晚上不回去吃了。

交互流程应该是这样的:

  • 用户prompt
  • AI收到promt,充当语义分析的角色
  • 返回结构化的数据(收件人是谁,内容是啥)
  • 开发者拿到数据执行操作

在完全不处理prompt的情况下,AI是这么干的:

亲爱的小关,
我希望你一切都好。我写这封邮件是想告诉你一个消息:今天晚上我不能回去一起吃饭了。
实际上,有一些紧急的事情需要我处理,我必须留在这里解决它们。我非常抱款无法按照原
计划与你共进晚餐,
我知道我们计划了很久,而目我很期待和你一起应过美好的时光。但是,这个突发事件需要
我的察急处理,我无法推迟或忽视它。希望你能够理解。
我希望我们能够重新安排一次晚餐,以弥补这次的遗憾。请告诉我你方便的时间,我会尽力
安排与你见面,并目给你一个特别的晚餐。
再次对我的不得已而缺席表示诚挚的道款我珍惜我们的友谊,希望你知道我绝不是故意
的。
祝你过一个愉快的晚餐,期待我们很快能够见面,
衷心的问候,
[你的名字]

他更多的是理解为要generate content

模型层面,识别出何时需要调用函数来对输出格式化

也就是调用 openai.ChatCompletion.create

import json
from enum import Enum
import openai
openai.api_key = 'xxx'

from EmailSkill import send_email, send_email_action

class SkillFunctions(Enum):
  SendEmail = 'send_email'

def run_conversation():
  MODEL = "gpt-3.5-turbo-0613"
  response = openai.ChatCompletion.create(
    model=MODEL,
    messages=[
      {"role": "user", "content": "给小美发个邮件,告诉她我晚饭不回家吃了"},
    ],
    temperature=0,
    functions=[
      {
        "name": SkillFunctions.SendEmail.value,
        "description": "send email assistant",
        "parameters": {
          "type": "object",
          "properties": {
            "receiver": {
              "type": "string",
              "description": "收件人名字即可",
            },
            "content": {"type": "string", "description": "邮件的内容"},
          },
          "required": ["receiver", "content"],
        },
      }
    ],
    function_call="auto",
  )

  message = response["choices"][0]["message"]
  print(message)
run_conversation()
if(message.get("function_call")):
    function_name = message["function_call"]["name"]
    arguments = json.loads(message["function_call"]["arguments"])

    if (function_name == SkillFunctions.SendEmail.value):
      email_info = send_email(
        receiver=arguments.get('receiver'),
        content=arguments.get('content')
      )
      print(email_info)
      send_email_action(**email_info)
      print('邮件已发送')

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ai君臣

学会的就要教给人

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值