大模型在企业中应用的挑战与OpenAI Function Calling的实践

随着人工智能技术的不断发展,大模型在企业中的应用也越来越广泛。然而,在实际应用中,企业仍然面临着一些挑战,尤其是在与外部环境的交互上。本文将探讨这些挑战,并介绍一种有效的解决方案——OpenAI Function Calling。

一、大模型在企业中应用的挑战

图片

  1. 获取实时信息:大模型在处理静态数据时表现出色,但在获取和处理实时信息方面,仍存在一定困难。

  2. 使用企业数据:大模型需要访问企业内部数据,这些数据往往分散在不同的系统中,如何高效地整合和利用这些数据是一个挑战。

  3. 多模态应用:企业应用往往需要处理多种类型的数据,如文本、图像、音频等,多模态应用要求模型具备更强的处理能力。

  4. 理解复杂的实际场景:企业业务场景复杂多变,大模型需要具备强大的理解和推理能力,才能应对各种复杂情况。

  5. 在实际环境中执行动作:将模型的预测和决策应用到实际操作中,确保其在真实环境中有效执行,是一个关键挑战。

二、OpenAI Function Calling 简介

在这里插入图片描述

为了解决上述挑战,OpenAI 推出了 Function Calling 功能。通过这个功能,可以将方法(工具)说明随用户请求一起放在 Prompt 中传给 GPT,GPT 返回要调用的方法名及参数值,然后在外部运行该方法获得结果,再将调用结果及前面的对话历史一起放回 Prompt,再次调用 GPT。

三、OpenAI Function Calling 实践与实现思路

1、为了在实际应用中实现 Function Calling

可以按照以下步骤进行:

在这里插入图片描述

  1. 构建一个 dict 对象存储方法:例如,{“方法1”: 方法1, “方法2”: 方法2, …}。
  2. 在 Prompt 中加入方法定义:将方法的定义和用途描述放在 Prompt 中,传递给 GPT。
  3. 根据 LLM 的返回,决定是否调用函数:如果返回信息中含有 “function_call”,则调用指定函数,否则直接返回信息给用户。
  4. 调用函数并再次调用 LLM:如需调用函数,则执行 LLM 指定的函数,并将结果及调用的函数一起放在 Prompt 中,再次调用 LLM,获取最终结果。

2、如何使用 OpenAI Function Calling

  1. 方法用途描述:在定义方法时,需要详细描述其用途,让模型能够准确理解该方法的功能。

  2. 参数描述:清晰描述每个参数的作用和类型,确保模型能够正确生成参数值。

  3. 控制模型如何响应函数调用

    • “none” 表示模型不调用函数
    • “auto” 表示模型可以自动调用函数
    • 通过 {“name”: “my_function”} 强制模型调用指定函数

默认值为 “auto”,意味着模型在大多数情况下会自动选择是否调用函数。

让我们来看一个具体的例子:

import openai
import os
import json

# 加载 .env 文件
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
# 从环境变量中获得你的 OpenAI Key和配置URL
openai.api_key = os.getenv('OPENAI_API_KEY')
openai.api_base = os.getenv('OPENAI_API_URL')
model = os.getenv('OPENAI_API_MODEL')

def get_current_cluster_state(cluster_name):
    print(f"cluster:{cluster_name}")    
    return  """ERROR: Failed to pull image "tanjp/docker/dsp:latest"""

funcs = {"get_current_cluster_state": get_current_cluster_state}

def run(input):
    msg=[{"role":"user","content":input}]    
    ret = run_conversation(msg)    
    return ret["content"] 

#function 接受一个名为 "cluster_name" 的参数,用于指定要查询状态的集群名称
#temperature=0,  # 模型输出的随机性,0 表示随机性最小。需要填写为0,否则会出现其他问题
def run_conversation(msg):
    response = openai.ChatCompletion.create(
        model=model,        
        messages=msg,        
        temperature=0,  # 模型输出的随机性,0 表示随机性最小        
        functions=[       
            {           
               "name": "get_current_cluster_state",                
               "description": "Get the current state in a given cluster", #⽅法⽤途描述                
               "parameters": {                    
                   "type": "object",                    
                   "properties": {                        
                       "cluster_name": {                         
                           "type": "string",                           
                           "description": "the name of the cluster",#参数描述                      
                       }, 
                                                                  
                   },                    
                   "required": ["cluster_name"],                
               },            
           }        
       ],        
       function_call="auto",        
       #"""控制模型如何响应函数调⽤• “none” 表示模型不调⽤函数• “auto” 表示模型可以⾃动调⽤函数• 通过 {"name": “my_function”} 强制模型调⽤指定函数• 默认值为 "auto"  """    
   )    
   
   message =  response["choices"][0]["message"]    
   print("----- message ----")    
   print(message)    
   print("----- message ----")    
   # 如果不需要调用function,则直接返回结果    
   if not message.get("function_call"):    
       return message        
       
       # 获取调用的方法    
       function_name = message["function_call"]["name"]    
       function_args = json.loads(message["function_call"]["arguments"])    
       print(function_args)    
       res = funcs[function_name](function_args["cluster_name"])     
       message["content"]=None    
       msg.append(message)    
       msg.append({     
                   "role": "function",                
                   "name": function_name,                
                   "content": res,            
               })    
      return run_conversation(msg)

#python入口函数
if __name__ == "__main__": 
    #print(run("Hello"))    
    #集群“DSP”出了什么问题?如果有错误,给我一些建议。    
    print(run("What's wrong with the cluster 'DSP'? And if there's an error, give me some suggestion. "))

在这个例子中,我们定义了一个名为 get_current_cluster_state 的函数,并在 Prompt 中包含了方法的用途描述和参数描述。模型会根据用户的输入决定是否调用该函数,并返回结果。

结论

通过 OpenAI Function Calling 功能,企业可以更高效地应用大模型,解决获取实时信息、使用企业数据、多模态应用、理解复杂场景和在实际环境中执行动作等挑战。我们期待这一技术能够在更多实际应用中发挥重要作用,助力企业实现智能化转型。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值