随着人工智能技术的不断发展,大模型在企业中的应用也越来越广泛。然而,在实际应用中,企业仍然面临着一些挑战,尤其是在与外部环境的交互上。本文将探讨这些挑战,并介绍一种有效的解决方案——OpenAI Function Calling。
一、大模型在企业中应用的挑战
-
获取实时信息:大模型在处理静态数据时表现出色,但在获取和处理实时信息方面,仍存在一定困难。
-
使用企业数据:大模型需要访问企业内部数据,这些数据往往分散在不同的系统中,如何高效地整合和利用这些数据是一个挑战。
-
多模态应用:企业应用往往需要处理多种类型的数据,如文本、图像、音频等,多模态应用要求模型具备更强的处理能力。
-
理解复杂的实际场景:企业业务场景复杂多变,大模型需要具备强大的理解和推理能力,才能应对各种复杂情况。
-
在实际环境中执行动作:将模型的预测和决策应用到实际操作中,确保其在真实环境中有效执行,是一个关键挑战。
二、OpenAI Function Calling 简介
为了解决上述挑战,OpenAI 推出了 Function Calling 功能。通过这个功能,可以将方法(工具)说明随用户请求一起放在 Prompt 中传给 GPT,GPT 返回要调用的方法名及参数值,然后在外部运行该方法获得结果,再将调用结果及前面的对话历史一起放回 Prompt,再次调用 GPT。
三、OpenAI Function Calling 实践与实现思路
1、为了在实际应用中实现 Function Calling
可以按照以下步骤进行:
- 构建一个 dict 对象存储方法:例如,{“方法1”: 方法1, “方法2”: 方法2, …}。
- 在 Prompt 中加入方法定义:将方法的定义和用途描述放在 Prompt 中,传递给 GPT。
- 根据 LLM 的返回,决定是否调用函数:如果返回信息中含有 “function_call”,则调用指定函数,否则直接返回信息给用户。
- 调用函数并再次调用 LLM:如需调用函数,则执行 LLM 指定的函数,并将结果及调用的函数一起放在 Prompt 中,再次调用 LLM,获取最终结果。
2、如何使用 OpenAI Function Calling
-
方法用途描述:在定义方法时,需要详细描述其用途,让模型能够准确理解该方法的功能。
-
参数描述:清晰描述每个参数的作用和类型,确保模型能够正确生成参数值。
-
控制模型如何响应函数调用:
-
- “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大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。