AI知识库 AI知识库

53AI知识库

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


大模型在企业中应用的挑战与OpenAI Function Calling的实践
发布日期:2024-06-11 08:12:45 浏览次数: 1566
随着人工智能技术的不断发展,大模型在企业中的应用也越来越广泛。然而,在实际应用中,企业仍然面临着一些挑战,尤其是在与外部环境的交互上。本文将探讨这些挑战,并介绍一种有效的解决方案——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"]=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 功能,企业可以更高效地应用大模型,解决获取实时信息、使用企业数据、多模态应用、理解复杂场景和在实际环境中执行动作等挑战。我们期待这一技术能够在更多实际应用中发挥重要作用,助力企业实现智能化转型。

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

定位:开箱即用的大模型落地应用平台

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

年轻人!来一起搞AI吗?

如果你看见AI对商业世界的变革,欢迎来和我们一起探索~

岗位:销售经理

查看详情

岗位:项目经理

查看详情

岗位:产品经理

查看详情

岗位:测试工程师

查看详情

联系我们

售前咨询
186 6662 7370
产品演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询