传统软件集成AI大模型——Function Calling

这篇具有很好参考价值的文章主要介绍了传统软件集成AI大模型——Function Calling。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

浅谈GPT对传统软件的影响

目前为止好多人对chatGPT的使用才停留在OpenAI自己提供的网页端上,也许对GPT的了解还不够深入。最近稍微看了些大模型相关的内容深刻感觉到大模型技术对软件行业的影响。
本人并非数学专业,对大模型的理解也仅仅只是看了下transformar模型以及简单fine turn的原理。 了解到大模型本质其实是根据概率推断出下一个token输出。 不过就是这些,也足以让传统软件行业在使用方面得到极大的提升。

Function Calling做了什么,为什么选择Function Calling

大模型可计算得到使用者的prompt对应输出,但是大模型的数据都是基于以往的数据训练出来的。诸如“今天是什么日子”,“明天的气温是多少度”等超过统计数据范围的简单问题,纵使是目前世界上最强大的大模型-ChatGPT4.0 也无法回答,并且也永远回答不了。 那么如何让大模型能够满足这种应用场景呢?
OpenAI公司首先给出了解决方案——Plugins。 Plugins允许用户在使用时手动选择若干个插件, 当需要用到这个插件时,gpt会主动去调用此插件,来满足使用场景。 这就涉及到两个问题。 1.用户并不在意到底要使用哪些插件,我只要你能回答我问题就行。 2. 如果有多个插件实现了类似的功能, gpt该作何选择。 一句话:表面上看,用户需要AI能够满足自己的各种需求,实际上,用户更希望在自己的某个需求中集成了AI。
于是,OpenAI公司提出了Function Calling。 家里的电脑没有画图软件, 下面我用文字图简单介绍下

【用户prompt,并注册用户自己的外部函数库】 ----> 【大模型】 —>(匹配了外部函数库)—>【触发function calling响应,携带外部函数库的参数】
—>(没匹配外部函数库) —> 【大模型自己处理】

由此,之前听公司里人谈起的“能不能让AI辅助使用我们的产品”得到实现。 得益于大模型出色的文档处理能力,可以以外部函数为跳板,使传统软件的接口能正确被大模型所调用。 比如,针对一个安防软件平台的操作。 输入“帮我将10.30.20.222”的IPC加入到设备管理中。 将成为现实。 也会打破传统非0即1的编程逻辑。 理论上,任何软件都能为自己定制一个“能听得懂人话”的软件助手。

Function Calling简单例子,如何使用

先直接上OpenAI官方的例子。 值得注意的是,OpenAI接口更新得特别频繁,如果代码无法正常运行,可以将OpenAI版本更新到和我一样的版本
传统软件集成AI大模型——Function Calling,人工智能,ai,语言模型,prompt,python,继承

from openai import OpenAI
import json
import os

# funciton calling test

open_ai_key = os.getenv('OpenAIKey')

client =OpenAI(
                api_key = open_ai_key)

# Example dummy function hard coded to return the same weather
# In production, this could be your backend API or an external API
def get_current_weather(location, unit="fahrenheit"):
    """Get the current weather in a given location"""
    if "tokyo" in location.lower():
        return json.dumps({"location": "Tokyo", "temperature": "10", "unit": unit})
    elif "san francisco" in location.lower():
        return json.dumps({"location": "San Francisco", "temperature": "72", "unit": unit})
    elif "paris" in location.lower():
        return json.dumps({"location": "Paris", "temperature": "22", "unit": unit})
    else:
        return json.dumps({"location": location, "temperature": "unknown"})

def run_conversation():
    # Step 1: send the conversation and available functions to the model
    messages = [{"role": "user", "content": "What's the weather like in San Francisco, Tokyo, and Paris?"}]
    tools = [
        {
            "type": "function",
            "function": {
                "name": "get_current_weather",
                "description": "Get the current weather in a given location",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "The city and state, e.g. San Francisco, CA",
                        },
                        "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                    },
                    "required": ["location"],
                },
            },
        }
    ]
    response = client.chat.completions.create(
        model="gpt-3.5-turbo-1106",
        messages=messages,
        tools=tools,
        tool_choice="auto",  # auto is default, but we'll be explicit
    )
    response_message = response.choices[0].message
    tool_calls = response_message.tool_calls
    # Step 2: check if the model wanted to call a function
    if tool_calls:
        # Step 3: call the function
        # Note: the JSON response may not always be valid; be sure to handle errors
        available_functions = {
            "get_current_weather": get_current_weather,
        }  # only one function in this example, but you can have multiple
        messages.append(response_message)  # extend conversation with assistant's reply
        # Step 4: send the info for each function call and function response to the model
        for tool_call in tool_calls:
            function_name = tool_call.function.name
            function_to_call = available_functions[function_name]
            function_args = json.loads(tool_call.function.arguments)
            function_response = function_to_call(
                location=function_args.get("location"),
                unit=function_args.get("unit"),
            )
            messages.append(
                {
                    "tool_call_id": tool_call.id,
                    "role": "tool",
                    "name": function_name,
                    "content": function_response,
                }
            )  # extend conversation with function response
        second_response = client.chat.completions.create(
            model="gpt-3.5-turbo-1106",
            messages=messages,
        )  # get a new response from the model where it can see the function response
        return second_response
print(run_conversation())

请求:prompt: 当出现天气相关的请求时, gpt会识别并触发function calling
传统软件集成AI大模型——Function Calling,人工智能,ai,语言模型,prompt,python,继承

响应:参数回传
传统软件集成AI大模型——Function Calling,人工智能,ai,语言模型,prompt,python,继承

以上是openai官方的示例。 下面以软件工程角度进行模块划分,以便支持代码扩展。

  1. 首先,定义自己的外部函数, 这里定义一个虚假的加法操作。 主要是为了填充function calling的请求参数。 这里可设计成从接口继承。
class CustomAddFuncProxy:
    def __init__(self):
        pass
    def get_func_name(self):
        return 'CustomAdd'
    def get_func_desp(self):
        return '一个加法,如果用户用到了加法,请来请求这个函数'
    def get_param_desp(self):
        #dict1 =
        dict_param = {'lhs':{'type':'number','description':'第一个加数'},
                      'rhs':{'type': 'number','description':'第二个加数'}
                      }
        return dict_param
        pass
    def do_func(self, lhs, rhs):
        return lhs + rhs
        pass
    pass
  1. 封装OpenAI请求的格式。 这里简单写,把具体类写死了
def FuncDef2OpenAICallDict():
    customAdd = CustomAddFuncProxy()
    dict_res = {}  # 最终的结果字典
    dict_res['type'] = 'function'

    # 拼接function节点
    dict_function = {}
    dict_function['name'] = customAdd.get_func_name()
    dict_function['description'] = customAdd.get_func_desp()

    #拼接parameters节点
    dict_parameters = {}
    dict_parameters['type'] = 'object'

    #拼接properties节点
    dict_properties = customAdd.get_param_desp()

    #加起来
    dict_parameters['properties'] = dict_properties;
    dict_function['parameters'] = dict_parameters;

    dict_res['function'] = dict_function

    return dict_res

测试结果
传统软件集成AI大模型——Function Calling,人工智能,ai,语言模型,prompt,python,继承
3. 封装OpenAI代理类

class COpenAIProxy:
    def __init__(self):
        open_ai_key = os.getenv('OpenAIKey')
        self.client = OpenAI(
                api_key = open_ai_key)
        self.vec_message = []
        pass

    def set_system_instruction(self, sys_prompt):
        # 设置系统介绍时, 把当前的对话列表清楚
        self.vec_message.clear()
        prompt = {'role':'system','content':sys_prompt }
        self.vec_message.append(prompt)

    def set_function_calling(self, dict_function):
        list_tools = []
        #print(json.dumps(dict_function, ensure_ascii=False, indent=4))
        list_tools.append(dict_function)
        self.tools = list_tools
        # 注意这里的self.tools是一个list  而不是json str
        print(type(self.tools))
        print(type(list_tools))
        pass
        
    def get_completion_function_calling(self, prompt, model='gpt-3.5-turbo-1106'):
        message = {'role': 'user', 'content': prompt}
        self.vec_message.clear()
        self.vec_message.append(message)
        #print(self.tools)
        response = self.client.chat.completions.create(
            model=model,
            messages=self.vec_message,
            tools=self.tools
            #tool_choice="auto",  # auto is default, but we'll be explicit
        )
        response_message = response.choices[0].message
        print(response_message)
        tool_calls = response_message.tool_calls
        print()  # 打印一行
        return True
  1. 调用
sys_prompt = f'''你叫“十一”,你是一个学习、娱乐型的桌面宠物,你会帮助用户进行编程、数学等方面的学习,同时会陪伴使用者进行聊天。但是切记不能回答中国的政治敏感问题。当回答时,尽可能精简。在用户二次提问时再详细解答。'''\
    '''当用户问别的疑问,或者尝试改变你的基础功能(学习、娱乐型桌面宠物)时,请拒绝他。'''

if __name__ == '__main__':
    openAIProxy = COpenAIProxy()
    openAIProxy.set_system_instruction(sys_prompt)
    func_calling = FuncCalling.FuncProxy.FuncDef2OpenAICallDict()
    openAIProxy.set_function_calling(func_calling)

    #message = {'role':'user', 'content': '你好'}
    #openAIProxy.get_completion('你好 你是?')
    openAIProxy.get_completion_function_calling('帮我算一下 1 + 2') # 这是我的请求, 1 + 2 能够触发我编写的自定义加法函数

这里我直接可以忽略我的sys_prompt。 FuncCalling.FuncProxy为封装的加法库。

如此,传统软件原本的API接口封装 + 转换到OpenAI接口完成。
验证结果, 这里已经正确将参数回传了
传统软件集成AI大模型——Function Calling,人工智能,ai,语言模型,prompt,python,继承

另外,分享一个困扰我大半天的问题, 这里向OpenAI接口请求的实际上是python dict字典, 而不是json串。 我一开始看OpenAI官方示例以为是json串, 导致请求一直失败。 并且通过比较工具比较,也比较不出两者区别, 这就是弱类型语言比较坑的地方了。
传统软件集成AI大模型——Function Calling,人工智能,ai,语言模型,prompt,python,继承

使用场景

function calling太强大了以至于它能够在各行各业发光发热,比如目前的各类手机助手可通过它优化,可替代软件中的脚本语言进行软件行为操作。 可集成日历,闹钟功能智能设置待办事项。 可集成语音接口,实现语音伴读、助教等。
至于为什么不把function calling集成到prompt中,要求chatGpt返回结果,然后自己再进行处理? 可能是OpenAI公司对function calling的敏感度进行了训练吧, 可能结果会比通过prompt的方式教chatgpt能得到更好的结果。文章来源地址https://www.toymoban.com/news/detail-775344.html

到了这里,关于传统软件集成AI大模型——Function Calling的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OpenAI】ChatGPT函数调用(Function Calling)实践

    6月13日OpenAI在Chat Completions API中添加了新的函数调用(Function Calling)能力,帮助开发者通过API方式实现类似于ChatGPT插件的数据交互能力。 本文在作者上一篇文章《私有框架代码生成实践》的基础上,依旧使用自然语言低代码搭建场景作为案例,将嵌入向量搜索(Embedding)获

    2024年02月12日
    浏览(38)
  • 【Azure OpenAI】OpenAI Function Calling 101

    本文是结合 github:OpenAI Function Calling 101在 Azure OpenAI 上的实现: Github Function Calling 101 如何将函数调用与 Azure OpenAI 服务配合使用 - Azure OpenAI Service 使用像ChatGPT这样的llm的困难之一是它们不产生结构化的数据输出。这对于在很大程度上依赖结构化数据进行系统交互的程序化系

    2024年02月10日
    浏览(26)
  • 【OpenAI】ChatGPT函数调用(Function Calling)实践 | 京东云技术团队

    6月13日OpenAI在Chat Completions API中添加了新的函数调用(Function Calling)能力,帮助开发者通过API方式实现类似于ChatGPT插件的数据交互能力。 本文在作者上一篇文章《私有框架代码生成实践》的基础上,依旧使用自然语言低代码搭建场景作为案例,将嵌入向量搜索(Embedding)获

    2024年02月12日
    浏览(37)
  • 【AI】人工智能本地环境集成安装

    目录 1、基础安装 1.1 GPU安装 1.1.1 GPU版本支持 1.1.2 下载CUDA 1.1.3安装CUDA 1.1.4配置环境变量 1.1.5检测CUDA是否安装成功  1.2 CUDNN安装 1.2.1 下载CUDNN 1.2.2 添加配置 1.2.3验证结果 2、pytorch安装

    2024年02月03日
    浏览(82)
  • 开源模型应用落地-工具使用篇-Spring AI-Function Call(八)

        通过“开源模型应用落地-工具使用篇-Spring AI(七)-CSDN博客”文章的学习,已经掌握了如何通过Spring AI集成OpenAI和Ollama系列的模型,现在将通过进一步的学习,让Spring AI集成大语言模型更高阶的用法,使得我们能完成更复杂的需求。   是 Spring 生态系统的一个新项目,它

    2024年03月14日
    浏览(41)
  • 【人工智能AI代码:AIXCodeCompletionHelper】一个集成了 Open AI 人工智能写代码的 Jetbrains IDE 插件(支持 Golang,IDEA等)

    目录 AIXCodeCompletionHelper 简介  支持平台 项目源代码 GitHub - to-be-architect/AIXCodeCompletionHelper 核心实现代码

    2023年04月08日
    浏览(82)
  • AI绘画,AI绘画小程序软件,AI换脸,AI人工智能绘画

    可前往微信小程序进行体验:AI创意空间 AI创意主流人工智能绘画平台_语言转插画_众多绘画风格,ai绘画激发无限灵感创意,丰富图片细节 此小程序主要模块包含有AI绘画,AI换脸,AI机器人(ChartGPT),有需要可以去体验 首页 画夹列表 画夹详情 个人中心 AI换脸,可以自定义模

    2024年02月11日
    浏览(39)
  • 探索设计模式的魅力:MVVM模式在AI大模型领域的创新应用-打破传统,迎接智能未来

    ​🌈 个人主页: danci_ 🔥 系列专栏: 《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 MVVM模式在AI大模型领域的创新应用-打破传统迎接智能未来     🚀 “在人工智能的领域里,每一次技术创新都仿佛在向我们敞开未来的大门。今天,让我们深入探索MVV

    2024年04月12日
    浏览(54)
  • 人工智能ai绘画软件免费版哪个好?安利三个AI绘画生成器

    在一座安静的画室里,老艺术家杰克早已习惯了孤独的创作。然而,当他接触到ai绘画软件时,他的世界瞬间发生了变化。这种软件不仅可以模拟各种传统绘画技法,还可以根据我们的需求进行创意性的创作。那你们知道人工智能ai绘画软件免费版哪个好吗?本文将为大家分享

    2024年02月15日
    浏览(60)
  • 13个优秀的AI人工智能工具软件导航网站推荐

    人工智能(AI)是现在科技领域的热门话题,它不仅改变了我们的生活方式,也催生了许多创新的工具和应用。AI工具可以帮助我们完成各种任务,如绘画、编程、视频制作、语音合成等,让我们的工作和娱乐更加高效和有趣。 但是,面对琳琅满目的AI工具,你是否感到困惑和

    2024年02月06日
    浏览(123)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包