中山建网站价格,上海松江区做网站的公司,搞个网站需要多少钱,电子商务网站建设前期规划方案考虑到使用 magic 申请 OpenAPI 的账号挺麻烦的#xff0c;这里以商汤日日新大模型 SenseNova 介绍 Function Call 的功能。 官方链接#xff1a;日日新开放平台 一、Function Call 是个啥#xff1f;
在 LLM#xff08;Large Language Model#xff09; 语言大模型时代这里以商汤日日新大模型 SenseNova 介绍 Function Call 的功能。 官方链接日日新开放平台 一、Function Call 是个啥
在 LLMLarge Language Model 语言大模型时代Function Call函数调用是指可靠地连接 LLM 与外部工具的能力。让用户能够使用高效的外部工具、与外部 API 进行交互。
GPT-4 和国内 SenseNova 等经过微调的 LLM能够检测函数是否被调用随后输出包含调用函数参数的 JSON。通过这一过程被调用的函数能够作为工具添加到您的 AI 应用中并且您可以在单个请求中定义多个函数。
函数调用是一项重要能力。它对于构建 LLM 驱动的聊天机器人或代理至关重要。这些聊天机器人或代理需要为 LLM 检索上下文。它们还与外部工具交互。这种交互是通过将自然语言转换为 API 调用来完成的。
函数调用使开发者能够创建
能够高效使用外部工具回答问题的对话代理。例如查询「上海的天气如何」将被转换为类似 get_current_weather(location: string, unit: celsius | fahrenheit) 的函数调用。用于提取和标记数据的 LLM 驱动解决方案例如从维基百科文章中提取人名。可以帮助将自然语言转换为 API 调用或有效数据库查询的应用程序。能够与知识库交互的对话式知识检索引擎。从文本中提取结构化数据。
二、使用 SenseNova 进行函数调用
假设一个用户向模型提出以下问题
上海今天的天气怎么样
看大部分的教程都是用这个示例来说明函数调用但这里想说商汤的 SenseNova 其实已经支持联网功能了API 层面设置对应的参数即可自动从网络上实时获取天气信息
这里对比一下 ChatGPT 和 SenseChat基于 SenseNova 大模型的聊天机器人看下他们的回答分别是什么 商汤通过 search_enable 参数将是否开启在线检索开放出来了以下是配置参数 所以用天气怎么样无法作为函数调用示例代码了。下面我们通过「查询学生成绩」来讲解如何使用函数调用。
功能我们有一个数据库其中有学生表记录每个学生的成绩我现在需要和 SenseNova 交流问它其中某个学生的成绩怎么样。
要使用函数调用处理此请求第一步是定义一个查询学生成绩的函数。您将作为 SenseNova API 请求的一部分传递这些函数
tools [{type: function,function: {name: get_score,description: 通过学生的姓名查询学生的成绩, # 这个描述对 LLM 非常重要parameters: {type: object,properties: {name: {type: string,description: 学生姓名}},required: [name]}}}
]
tool_choice {mode: auto
}get_score 函数能够返回指定学生的成绩信息。当您将这个函数定义作为请求的一部分传递时它实际上并不执行函数只是返回一个包含调用函数所需参数的 JSON 对象。
以下是实现这一需求的函数调用整个代码片段读者可自行复制粘贴执行一下前提是申请了 SenseNova 的试用账号。
import json
import osimport sensenovaak os.environ[SENSENOVA_AK]
sk os.environ[SENSENOVA_SK]sensenova.access_key_id ak
sensenova.secret_access_key sk
model_id SenseChat-FunctionCalltools [{type: function,function: {name: get_score,description: 通过学生的姓名查询学生的成绩, # 这个描述对 LLM 非常重要parameters: {type: object,properties: {name: {type: string,description: 学生姓名}},required: [name]}}}
]
tool_choice {mode: auto
}def get_response(question):resp sensenova.ChatCompletion.create(modelmodel_id,messages[{role: user, content: question}],max_new_tokens1024,temperature0.8,toolstools,tool_choicetool_choice,)return resp[data][choices][0]question 帮我查询张三的考试成绩
# 1. 第一次 LLM 调用
message get_response(question)def get_score(name):模拟读取数据库中的学生表:param name::return:# 用一个字典存储姓名和成绩对应关系, 实际这里是查询数据库scores {小明: 90, 小红: 80, 小白: 59, 张三: 99}score {name: name,score: scores[name]}return json.dumps(score)# 2. 解析第一次LLM调用结果构建参数进行第二次LLM调用获取最终结果
if message.get(tool_calls):# 函数调用ID下一次调用需要传入tool_call_id message[tool_calls][0][id]# 我们定义的函数参数值这里是经过 LLM 解析后将帮我查询张三的考试成绩这种非结构化数据转为了结构化数据这里的name张三name json.loads(message[tool_calls][0][function][arguments]).get(name)# 调用我们定义的函数:get_scorefunction_response get_score(namename)# 将用户的原始输入、第一次LLM返回的message、还有tool_call_id/function_response一起组成第二次调用的messages发起LLM第二次调用second_response sensenova.ChatCompletion.create(modelmodel_id,messages[{role: user, content: question},message,{role: tool, content: function_response, tool_call_id: tool_call_id}],toolstools,tool_choicetool_choice,)# 输出想要的结果print(second_response[data][choices][0][message])输出
张三的考试成绩是99分。
三、小结
通过上面的示例相信你应该对 Function Call函数调用的用法和作用有了初步了解如有不明白的地方欢迎留言或私聊联系我。