合肥城乡建设网站,九江县建设规划局网站,岐山网站建设,极客邦系列篇章#x1f4a5;
AI大模型探索之路-实战篇4#xff1a;深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5#xff1a;探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6#xff1a;掌握Function Calling的详细流程 目录 系列篇章#x1f4a…系列篇章
AI大模型探索之路-实战篇4深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6掌握Function Calling的详细流程 目录 系列篇章一、前言二、Function Calling函数封装1、定义客户端2、API调用测试3、定义函数4、定义参数数据格式5、定义一个标准的funcation call函数6、取出注释说明信息7、生成JSON Schema对象8、清理返回对象的特殊字符9、转换为JSON格式10、查看悟空函数信息11、调用API生成JSON格式函数信息12、输出原始函数对比 三、定义自动输出function 参数的函数1、自动输出funcation的函数2、自动生成funcation函数调用测试3、定义参数数据4、调用API测试5、定义第二个函数6、两个函数生成测试7、两个工具函数一起调用API测试 四、结语 一、前言
继前文对Function Calling操作流程的详细回顾之后本文将进一步探讨OpenAI的Function Calling技术在实际应用中的表现。通过利用大型模型的强大能力自动生成function函数我们旨在提升代码的通用性与扩展性。这一深入分析的核心目标是为智能数据分析平台的顺利部署打下坚实的技术基础。
这种基于人工智能的Function Calling技术探索是未来软件开发和维护领域的重要发展方向它不仅能提高开发效率还能大幅降低维护成本提高软件的适应性和灵活性。通过本文的深入分析我们希望为读者提供更全面的了解和应用视角促进技术的进一步发展和应用。
二、Function Calling函数封装
在本章节中我们将继续深入探索大模型自动生成function函数的全过程。此技术不仅体现了人工智能领域的前沿进展还具有实际应用的重要可行性。我们将通过具体的步骤和实践案例分析这一技术的具体工作原理及其在实际应用中的执行效果。 1获取函数的注释说明 首先为了有效利用大模型生成function函数我们需要从已有的代码中获取目标函数的注释说明。这些注释将提供函数的目的、输入参数以及预期输出等关键信息。精确而详尽的注释是确保大模型能正确理解并生成符合需求的函数定义的前提。 2将注释说明提供给大模型由大模型生成相应的JSON Schema 获得注释后我们将其提供给大模型。模型将根据这些注释自动生成一个对应的JSON Schema。这一步骤是自动化过程中的关键因为它直接关系到最终生成的function函数是否能满足实际的业务需求。 3) 对大模型生成的JSON Schema进行检查和补充 虽然大模型能够根据注释生成JSON Schema但手动检查和补充这一环节仍然不可或缺。我们需确保生成的JSON Schema与手工创建的完全一致包括所有细节和特定条件。这一过程可能需要开发者与模型之间的多次迭代直到达到最优的输出结果。
通过这一系列的步骤我们将能够有效地利用大模型自动生成function函数从而提升开发效率并减少人为错误。
1、定义客户端
import openai
import os
import numpy as np
import pandas as pd
import json
import io
from openai import OpenAI
#获取API KEY
openai.api_key os.getenv(OPENAI_API_KEY)
#创建客户端
client OpenAI(api_keyopenai.api_key)2、API调用测试
response client.chat.completions.create(#modelgpt-4-0613,modelgpt-3.5-turbo,# 这里最好使用gpt4messages[{role: user, content: 什么是JSON Schema}]
)response.choices[0].message.content输出
JSON Schema是一种用于描述和验证JSON数据结构的规范。它定义了数据的类型、格式、约束和关系使得可以对JSON数据进行验证和验证。通过JSON Schema开发人员可以确保数据的完整性、准确性和一致性以及在不同应用程序和平台之间的数据交换的有效性。JSON Schema可以被用来验证输入数据、生成文档和测试数据等各种用途。3、定义函数
def sunwukong_function(data):孙悟空算法函数该函数定义了数据集计算过程:param data: 必要参数表示带入计算的数据表用字符串进行表示:returnsunwukong_function函数计算后的结果返回结果为表示为JSON格式的Dataframe类型对象data io.StringIO(data)df_new pd.read_csv(data, sep\s, index_col0)res df_new * 10return json.dumps(res.to_string())4、定义参数数据格式
# 创建一个DataFrame
df pd.DataFrame({x1:[1, 2], x2:[3, 4]})df_str df.to_string()data io.StringIO(df_str)df_new pd.read_csv(data, sep\s, index_col0)5、定义一个标准的funcation call函数
# 定义工具函数
sunwukong{type: function,function: {name: sunwukong_function,description: 用于执行孙悟空算法函数定义了一种特殊的数据集计算过程,parameters: {type: object,properties: {data: {type: string,description: 执行孙悟空算法的数据集},},required: [data],},}}#将函数放入工具列表
tools [sunwukong]#定义工具函数字典
available_tools {sunwukong_function: sunwukong_function,
}6、取出注释说明信息
import inspect
# 取出注释信息
print(inspect.getdoc(sunwukong_function))输出
孙悟空算法函数该函数定义了数据集计算过程
:param data: 必要参数表示带入计算的数据表用字符串进行表示
:returnsunwukong_function函数计算后的结果返回结果为表示为JSON格式的Dataframe类型对象7、生成JSON Schema对象
取出注释信息调用大模型API生成JSON Schema对象
function_description inspect.getdoc(sunwukong_function)
response client.chat.completions.create(modelgpt-3.5-turbo,messages[{role: system, content: 以下是孙悟空函数的函数说明%s % function_description},{role: user, content: 请帮我编写一个JSON Schema对象用于说明孙悟空函数的参数输入规范。输出结果要求是JSON Schema格式的JONS类型对象不需要任何前后修饰语句。}]
)
# 使用gpt3.5发现有时候生成正确但是有时候生成的json信息还是有些缺少gpt.4会更稳定
response.choices[0].message.content输出
8、清理返回对象的特殊字符
# 将变量 response.choices[0].message.content 中的字符串中的 和 json 替换为空字符串
rresponse.choices[0].message.content.replace(,).replace(json,)9、转换为JSON格式
json.loads(r)输出
{type: object,required: [data],properties: {data: {type: string,description: Represents the data table to be calculated}}}10、查看悟空函数信息
# 打印悟空函数的json格式与上面模型生成的json对比
sunwukong输出
{type: function,function: {name: sunwukong_function,description: 用于执行孙悟空算法函数定义了一种特殊的数据集计算过程,parameters: {type: object,properties: {data: {type: string, description: 执行孙悟空算法的数据集}},required: [data]}}}#打印参数信息
sunwukong[function][parameters]输出
{type: object,properties: {data: {type: string, description: 执行孙悟空算法的数据集}},required: [data]}11、调用API生成JSON格式函数信息
system_prompt 以下是某的函数说明%s % function_description
user_prompt 根据这个函数的函数说明请帮我创建一个JSON格式的字典这个字典有如下5点要求\1.字典总共有三个键值对\2.第一个键值对的Key是字符串namevalue是该函数的名字%s也是字符串\3.第二个键值对的Key是字符串descriptionvalue是该函数的函数的功能说明也是字符串\4.第三个键值对的Key是字符串parametersvalue是一个JSON Schema对象用于说明该函数的参数输入规范。\5.输出结果必须是一个JSON格式的字典且不需要任何前后修饰语句 % function_name
response client.chat.completions.create(modelgpt-3.5-turbo,messages[{role: system, content: system_prompt},{role: user, content: user_prompt}]
)
response.choices[0].message.content输出
清理特殊字符后转化JSON格式输出
json_function_descriptionjson.loads(response.choices[0].message.content.replace(,).replace(json,))
json_function_description输出
{name: sunwukong_function,description: 孙悟空算法函数该函数定义了数据集计算过程,parameters: {type: object,properties: {data: {type: string,description: 必要参数表示带入计算的数据表用字符串进行表示}},required: [data]}}12、输出原始函数对比
# 输出悟空函数和生成的函数信息对比
sunwukong输出
{type: function,function: {name: sunwukong_function,description: 用于执行孙悟空算法函数定义了一种特殊的数据集计算过程,parameters: {type: object,properties: {data: {type: string, description: 执行孙悟空算法的数据集}},required: [data]}}}补充缺少的部分信息
# 补充缺少的部分信息
json_str{type: function,function:json_function_description}
json_str输出
{type: function,function: {name: sunwukong_function,description: 孙悟空算法函数该函数定义了数据集计算过程,parameters: {type: object,properties: {data: {type: string,description: 必要参数表示带入计算的数据表用字符串进行表示}},required: [data]}}}再次输出悟空函数进行对比基本上已经一摸一样了
三、定义自动输出function 参数的函数
继前文的探讨和实验验证了利用大模型自动生成function参数的函数的可行性之后本章节将专注于如何有效地封装这一功能并通过提供多个函数工具进行具体的调用测试来展示其实用性。
1、自动输出funcation的函数
def auto_functions(functions_list):Chat模型的functions参数编写函数:param functions_list: 包含一个或者多个函数对象的列表:return满足Chat模型functions参数要求的functions对象def functions_generate(functions_list):# 创建空列表用于保存每个函数的描述字典functions []# 对每个外部函数进行循环for function in functions_list:# 读取函数对象的函数说明function_description inspect.getdoc(function)# 读取函数的函数名字符串function_name function.__name__system_prompt 以下是某的函数说明%s % function_descriptionuser_prompt 根据这个函数的函数说明请帮我创建一个JSON格式的字典这个字典有如下5点要求\1.字典总共有三个键值对\2.第一个键值对的Key是字符串namevalue是该函数的名字%s也是字符串\3.第二个键值对的Key是字符串descriptionvalue是该函数的函数的功能说明也是字符串\4.第三个键值对的Key是字符串parametersvalue是一个JSON Schema对象用于说明该函数的参数输入规范。\5.输出结果必须是一个JSON格式的字典且不需要任何前后修饰语句 % function_nameresponse client.chat.completions.create(modelgpt-3.5-turbo,messages[{role: system, content: system_prompt},{role: user, content: user_prompt}])json_function_descriptionjson.loads(response.choices[0].message.content.replace(,).replace(json,))json_str{type: function,function:json_function_description}functions.append(json_str)return functions## 最大可以尝试4次max_attempts 4attempts 0while attempts max_attempts:try:functions functions_generate(functions_list)break # 如果代码成功执行跳出循环except Exception as e:attempts 1 # 增加尝试次数print(发生错误, e)if attempts max_attempts:print(已达到最大尝试次数程序终止。)raise # 重新引发最后一个异常else:print(正在重新运行...)return functions定义函数列表
functions_list [sunwukong_function]2、自动生成funcation函数调用测试
tools auto_functions(functions_list)查看生成后的工具函数
toolsdescription: 孙悟空算法函数该函数定义了数据集计算过程,parameters: {type: object,properties: {data: {type: string,description: 表示带入计算的数据表用字符串进行表示}},required: [data]}}}]3、定义参数数据
df_str pd.DataFrame({x1:[1, 2], x2:[3, 4]}).to_string()
df_str4、调用API测试
使用自动生成的funcation call函数调用OpenAI测试看大模型能否找到函数
messages[{role: system, content: 数据集data%s数据集以字符串形式呈现 % df_str},{role: user, content: 请在数据集data上执行孙悟空算法}
]
response client.chat.completions.create(modelgpt-3.5-turbo,messagesmessages,toolstools,tool_choiceauto, )
response.choices[0].message输出从输出结构中可以看到已经正常找到生成的工具函数
5、定义第二个函数
#在定义一个工具函数一起测试
def tangseng_function(data):唐僧算法函数该函数定义了数据集计算过程:param data: 必要参数表示带入计算的数据表用字符串进行表示:returntangseng_function函数计算后的结果返回结果为表示为JSON格式的Dataframe类型对象data io.StringIO(data)df_new pd.read_csv(data, sep\s, index_col0)res df_new * 1000000return json.dumps(res.to_string())#两个函数一起放入工具列表
functions_list[sunwukong_function,tangseng_function]6、两个函数生成测试
# 使用gpt3.5发现有时候生成正确但是有时候生成的json信息还是有些缺少gpt.4会更稳定
tools auto_functions(functions_list)
tools输出
[{type: function,function: {name: sunwukong_function,description: 孙悟空算法函数该函数定义了数据集计算过程,parameters: {type: object,properties: {data: {type: string, description: 表示带入计算的数据表}},required: [data]}}},{type: function,function: {name: tangseng_function,description: 唐僧算法函数该函数定义了数据集计算过程,parameters: {type: object,properties: {data: {type: string,description: 必要参数表示带入计算的数据表用字符串进行表示}},required: [data]}}}]7、两个工具函数一起调用API测试
messages[{role: system, content: 数据集data%s数据集以字符串形式呈现 % df_str},{role: user, content: 请在数据集data上执行唐僧算法函数}
]
response client.chat.completions.create(modelgpt-3.5-turbo,messagesmessages,toolstools,tool_choiceauto, )
response.choices[0].message输出根据输出可以看到已经成功找到工具函数
四、结语
在本文的探讨和实践过程中我们深入探索了利用大规模语言模型的生成能力来自动构建function函数的可能性和方法。通过精心设计的实验和不断的调优我们成功实现了利用这些先进模型自动生成高质量的function函数这不仅大大提高了开发效率还为函数的多样性和创新性打开了新的大门。 此外我们还专注于提高这些自动生成的函数在实际应用中的通用性和扩展性。这意味着所开发的函数不仅适用于当前的特定任务还能在不同的应用环境和项目中轻松调整和扩展从而保证长远的可用性和持续的价值。这一目标的实现显著增强了代码的复用性和适应性为软件开发行业带来了新的工作效率和创新思路。 更多专栏系列文章AIGC-AI大模型探索之路 如果文章内容对您有所触动别忘了点赞、⭐关注收藏加入我让我们携手同行AI的探索之旅一起开启智能时代的大门