前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenAI发布大杀器功能,无数AI创业公司的方案推倒重来

OpenAI发布大杀器功能,无数AI创业公司的方案推倒重来

作者头像
make a bug
发布2023-07-15 14:27:29
2410
发布2023-07-15 14:27:29
举报

OpenAI近期发布了一项重大更新,这次的更新内容不禁让人瞠目结舌,具体更新内容可以看昨天的文章:OpenAI凌晨大更新,价格最高降75%、API函数调用上线、上下文长度提高4倍!今天主要详细讲一下聊天API中新增的函数调用功能,为应用层应用的开发所带来的巨大的影响。

1

基本概念流程

首先,我们要理解函数调用功能的基本概念。简单来说,这是一种让AI调用并执行特定任务的接口,类似于插件,可以为AI增加各种各样的功能。例如,你可以让AI通过函数调用查询数据库,或者从其他在线API获取信息。

这个功能的实现流程大致是这样的:

1. 用户提供一个问题和一组函数给ChatGPT,函数的名称、作用和参数必须明确。

2. ChatGPT判断是否需要调用提供的函数来解答问题,如果需要,会把问题转换成设置好参数的函数调用。

3. 用户根据ChatGPT给出的函数,自行运行函数,然后把函数运行的结果返回给ChatGPT。

4. ChatGPT根据前面的对话信息和函数的执行结果,生成最终的回答。

流程图如下:

看到这里你就会发现整个流程其实非常像一个only-one-job的HuggingGPT,只不过HuggingGPT是调用模型,这里是调用函数。

如果你自己搞一个函数的pipeline,其实就是langchain了。只不过langchain的结构是在函数里与ChatGPT对话来完成任务,而function call是在对话里调用函数,从体感上来说,还是function call更加丝滑一些,langchain哭晕在厕所。

如果再稍微设计一下prompt,让ChatGPT来自己决策完成任务需要使用哪些函数,其实就跟AutoGPT的原理差不多,用GPT驱动GPT。对此有兴趣的可以加入我的星球看AutoGPT的具体原理。

2

代码示例

我们知道普通的聊天机器人无法直接获取真实世界的信息,比如天气和当前时间。但如果使用了函数调用功能,ChatGPT就能通过函数获取这些信息。

说了这么多,我们直接上代码看看!!我们可以定义两个函数,一个用于获取天气,一个用于获取当前时间,示例代码如下。

这两个函数需要将描述和参数定义清楚,以方便ChatGPT理解。

代码语言:javascript
复制

help_functions = [
    {
        "name": "get_current_weather",
        "description": """获取天气情况""",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {
                    "type": "string",
                    "description": f"""获取天气情况的城市或者国家,比如北京、东京、新加坡""",
                },

            },
            "required": ["location"],
        }
     }, 
     {
        "name": "get_local_time",
        "description": """获取当地的时间""",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {
                    "type": "string",
                    "description": f"""获取当地时间的城市或者国家,比如北京、东京、新加坡""",
                },

            },
            "required": ["location"],
        }
     }, 


]

然后设置ChatGPT的角色,还有提问问题。

代码语言:javascript
复制

messages = []
messages.append({"role": "system", "content": "如果不知道函数中的具体参数,不要假设。如果知道或者参数为空,请询问用户具体的内容."})
messages.append({"role": "user", "content": "东京天气怎么样?"})

chat_response = chat_completion_request(
    messages, functions=help_functions
)
assistant_message = chat_response.json()["choices"][0]["message"]
messages.append(assistant_message)
print(assistant_message)

此时,ChatGPT输出为:

代码语言:javascript
复制
{
  'role': 'assistant', 
  'content': None, 
  'function_call': {
    'name': 'get_current_weather',
    'arguments': '{\n  "location": "东京"\n}'
  }
}

这个告诉我们,需要调用get_current_weather函数,参数为 "location": "东京"

我们定义如下的函数,调用并且返回结果。真实情况其实可以调用某个天气的API,也就是说ChatGPT分析出来了我们要调那个api达到来回答我们的问题。

代码语言:javascript
复制
def get_current_weather(location):
    if location == '东京':
        return 'misty'
    return 'sunny'
results = get_current_weather('东京')
print(results)

messages.append({"role": "function", "name": assistant_message["function_call"]["name"], "content": results})

chat_response = chat_completion_request(
    messages, functions=help_functions
)
assistant_message = chat_response.json()["choices"][0]["message"]
messages.append(assistant_message)
print(assistant_message)

此时ChatGPT返回结果:

代码语言:javascript
复制
{
  'role': 'assistant', 
  'content': '东京目前天气状况是雾霾。'
}

然后我们再追问当地时间

代码语言:javascript
复制
messages.append({"role": "user", "content": "当地时间是几点?"})
chat_response = chat_completion_request(
    messages, functions=help_functions
)
assistant_message = chat_response.json()["choices"][0]["message"]
messages.append(assistant_message)
print(assistant_message)

模型输出

代码语言:javascript
复制
{
  'role': 'assistant', 
  'content': None, 
  'function_call': {
    'name': 'get_local_time', 
    'arguments': '{\n  "location": "东京"\n}'
  }
}

这个告诉我们,需要调用get_local_time函数,参数为 "location": "东京"

代码语言:javascript
复制

def get_local_time(location):
    if location == '东京':
        return '21:03 2023年6月15日(星期四) (GMT+9)'
    return '20:03 2023年6月15日(星期四) (GMT+8)'
results = get_current_weather('东京')


messages.append({"role": "function", "name": assistant_message["function_call"]["name"], "content": results})

chat_response = chat_completion_request(
    messages, functions=help_functions
)
assistant_message = chat_response.json()["choices"][0]["message"]
messages.append(assistant_message)
print(assistant_message)

ChatGPT输出

代码语言:javascript
复制
{
  'role': 'assistant', 
  'content': '当前东京的时间是21:03,日期是2023年6月15日(星期四),时区为GMT+9。'
}

3

应用开发工程师将被淘汰

如果大家当过技术开发,都知道。应用层程序员大多时间都在忙着接入api,根据需求写业务端代码。而ChatGPT插件的出现,意味了业务端代码甚至都不用写了~ 让ChatGPT读api文档,生成功能性函数。然后再通过上述的方法进行输入,它可以分析出在什么时候用什么函数,根本就不需要人去写业务逻辑啦。随着算力成本的降低,可调用函数的能力越来越强,我相信有一天应用开发工程师终将不复存在,这个时间会很快。AI应用层出不穷,太依赖人工智能大模型赋能,Openai每升级一轮,创业公司就要迭代升级一轮。完全被动,所以我想现在创业公司应该是越来越难了~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI懒人星球 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档