AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


大模型在企业中应用的挑战与OpenAI Function Calling的实践
发布日期:2024-06-11 08:12:45 浏览次数: 2104 来源:智能体AI


随着人工智能技术的不断发展,大模型在企业中的应用也越来越广泛。然而,在实际应用中,企业仍然面临着一些挑战,尤其是在与外部环境的交互上。本文将探讨这些挑战,并介绍一种有效的解决方案——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 openaiimport osimport json
# 加载 .env 文件from dotenv import load_dotenv, find_dotenv_ = load_dotenv(find_dotenv())# 从环境变量中获得你的 OpenAI Key和配置URLopenai.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"]=Nonemsg.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 功能,企业可以更高效地应用大模型,解决获取实时信息、使用企业数据、多模态应用、理解复杂场景和在实际环境中执行动作等挑战。我们期待这一技术能够在更多实际应用中发挥重要作用,助力企业实现智能化转型。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询