Custom Tool
观看如何使用自定义工具
问题
函数通常接收结构化的输入数据。假设你想让大型语言模型(LLM)能够调用Airtable的创建记录API,那么请求体参数必须以特定的方式组织。例如:
/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
"records": [
{
"fields": {
"地址":"某个地址",
“名称”:“某个名称”,
“已访问”:是
}
}
]理想情况下,我们希望大型语言模型(LLM)能返回像这样的适当结构化的数据:
/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
{
"地址":"某个地址",
"Name": "某个名字",,
“已访问”:是
}因此,我们可以提取该值并将其解析为API所需的格式。然而,指示大型语言模型(LLM)输出精确的模式是困难的。
借助新的OpenAI函数调用模型,现在已可以实现。gpt-4-0613和gpt-3.5-turbo-0613经过专门训练,能够返回结构化数据。该模型将智能地选择输出一个包含调用这些函数的参数的JSON对象。
教程
目标:让代理自动获取股票价格变动,检索相关股票新闻,并向Airtable添加新记录。
让我们开始吧🚀
创建工具
为了实现这一目标,我们需要三个工具:
获取股票价格变动
获取股市新闻
添加Airtable记录
获取股票价格变动
根据以下详细信息创建一个新工具(可根据需要进行修改):
名称:get_stock_movers
描述:获取价格/成交量变动最大的股票,例如活跃股、上涨股、下跌股等。
描述是重要的一环,因为ChatGPT依靠它来决定何时使用此工具。

JavaScript函数:我们将使用Morning Star的
/market/v2/get-moversAPI来获取数据。首先,如果你尚未订阅测试,请点击订阅,然后复制代码并将其粘贴到JavaScript函数中。最后返回
result。

最终代码应为:
/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
const fetch = require('node-fetch');;
const url = 'https://morning-star.p.rapidapi.com/market/v2/get-movers';;
const options = {
方法:'GET',
头部:{
'X-RapidAPI-Key': '替换为您的API密钥',,
'X-RapidAPI-Host': 'morning-star.p.rapidapi.com'
}
};
尝试 {
const response = await fetch(url, options);;
const result = await response.text();;
控制台输出结果(console.log(result));
返回结果;
} catch (error) {
console.error(error);;
返回“”;
}你现在可以保存它了。
获取股票新闻
根据以下详细信息创建一个新工具(您可以根据需要进行更改):
名称:get_stock_news
描述:获取某股票的最新消息
输入模式:
属性:performanceId
类型:字符串
描述:股票的ID,在API中称为performanceID
必填:是
输入模式告诉大型语言模型(LLM)以JSON对象的形式返回什么。在这种情况下,我们期望得到一个如下所示的JSON对象:
{ "performanceId": "某个股票代码" }
JavaScript函数:我们将使用Morning Star的
/news/listAPI来获取数据。首先,如果你尚未订阅测试,请先点击订阅,然后复制代码并将其粘贴到JavaScript函数中。最后返回
result。
接下来,将硬编码的URL查询参数performanceId:
0P0000OQN8替换为输入模式中指定的属性变量:$performanceId您可以在JavaScript函数中,通过在变量名前添加前缀
$,来使用输入模式中指定的任何属性作为变量。

最终代码:
/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
const fetch = require('node-fetch');;
const url = 'https://morning-star.p.rapidapi.com/news/list?performanceId=' + $performanceId;;
const options = {
方法:'GET',
头部:{
'X-RapidAPI-Key': '替换为您的API密钥',,
'X-RapidAPI-Host': 'morning-star.p.rapidapi.com'
}
};
尝试 {
const response = await fetch(url, options);;
const result = await response.text();;
控制台输出结果:console.log(result);;
返回结果;
} catch (error) {
console.error(error);;
返回“”;
}你现在可以保存它了。
添加Airtable记录
根据以下详细信息创建一个新工具(可根据需要进行修改):
名称:add_airtable
描述:将股票信息、新闻摘要及价格变动添加到Airtable中
输入模式:
属性:库存
类型:字符串
描述:股票代码
必填:是
属性:移动
类型:字符串
描述:价格变动百分比
必填:是
属性:新闻摘要
类型:字符串
描述:股票新闻摘要
必填:是
ChatGPT将返回一个类似这样的JSON对象:
/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
{ "股票代码": "某某股票代码", "涨跌幅": "20%", "新闻摘要": "某某摘要" }
JavaScript函数:我们将使用Airtable创建记录API在现有表中创建新记录。您可以从这里找到tableId和baseId。您还需要创建一个个人访问令牌,具体操作方法请见这里。
最终代码应如下所示。注意我们如何将 $stock、 $move 和 $news_summary 作为变量传入:
/// 译文内容:
---
根据上面的信息,执行如下指令:
你是个专业的翻译,负责把英语内容翻译成中文内容,请帮我翻译一下原文内容
const fetch = require('node-fetch');;
const baseId = '你的基础ID';;
const tableId = 'your-table-id';;
const token = 'your-token';;
const body = {
"records": [
{
"fields": {
"stock": $stock,,
"move": $move,,
"news_summary": $news_summary,,
}
}
]
};
const options = {
方法:'POST',
头部:{
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
正文:JSON.stringify(正文)
};
const url = `https://api.airtable.com/v0/${baseId}/${tableId}`
尝试 {
const response = await fetch(url, options);;
const text = await response.text();;
返回文本;
} catch (error) {
console.error(error);;
返回 "";;
}你现在可以保存它了。
你应该会看到创建了3个工具:

创建聊天流程
您可以从市场中使用模板“OpenAI Function Agent”,并将工具替换为“自定义工具”。选择您已创建的工具。
注意:OpenAI函数代理目前仅支持0613型号。

保存聊天流程并开始测试。作为初学者,你可以试着问:
今天价格波动最大的股票是哪只
今天股价波动最大的股票是Overstock.com(OSTK),股价波动了17.47%
然后,你可以接着问另一个问题,以获取那只特定股票的最新消息:
关于这支股票,有哪些最新的消息可能会导致股价变动?
以下是关于Overstock.com(OSTK)的最新消息,这些消息可能引发了股价的波动:
标题:“Overstock以2150万美元成功竞购Bed Bath & Beyond资产,股价飙升” 来源:MarketWatch 发布日期:2023年6月22日 摘要:Overstock.com在成功竞购价值2150万美元的Bed Bath & Beyond资产后,股价大幅上涨。
标题:“考虑交易Meta Platforms、Overstock.com、沃尔玛、家得宝或联合包裹运送服务公司的期权或股票?”来源:美通社 发布日期:2023年6月22日 摘要:这篇新闻文章讨论了投资者可能考虑的潜在交易期权和股票,包括Overstock.com。
请注意,这些新闻文章仅供参考,可能并非价格变动的唯一原因。在做出任何投资决策之前,始终建议您进行深入的研究和分析。
最后,你可以让ChatGPT在Airtable中添加一条新记录:
你能在Airtable中添加一条记录,包含股票代码、价格变动和新闻摘要吗?
_ 我已向Airtable添加了一条记录,详细信息如下: _
股票代码:OSTK 价格变动:17.47% 新闻摘要:Overstock.com在成功竞购价值2150万美元的Bed Bath & Beyond资产后,其股价大幅上涨
🎉🎉瞧! 这就是如何创建自己的自定义工具并将其与OpenAI Function Agent一起使用的方法!
附加
将会话ID传递给函数
默认情况下,自定义工具中的函数可以访问以下流配置:
/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
$flow.sessionId
$flow.chatId
$flow.chatflowId
$flow.input以下是将sessionId发送到Discord Webhook的示例:
标签页
/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
const fetch = require('node-fetch');;
const webhookUrl = "https://discord.com/api/webhooks/1124783587267";;
const content = $content; // 从输入模式中捕获
const 会话ID = $flow.会话ID;;
const body = {
“内容”:`${mycontent}`,会话ID为${sessionId}`
};
const options = {
方法:'POST',
头部:{
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
};
const url = `${webhookUrl}?wait=true`
尝试 {
const response = await fetch(url, options);;
const text = await response.text();;
返回文本;
} catch (error) {
console.error(error);;
返回“”;
}将变量传递给函数
在某些情况下,您可能希望将变量传递给自定义工具函数。
例如,你正在创建一个使用自定义工具的聊天机器人。该自定义工具正在执行一个HTTP POST调用,并且成功的身份验证请求需要API密钥。你可以将其作为变量传递。
默认情况下,自定义工具中的函数可以访问变量:
$vars.<变量名>使用API和Embedded在Flowise中传递变量的示例:
标签页
/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
异步函数 query(data) {
const response = await fetch(
“http://localhost:3000/api/v1/prediction/<chatflow-id>”,
{
方法:"POST",
headers: {
"Content-Type": "application/json"
},
正文:JSON.stringify(数据)
}
);
const result = await response.json();;
返回结果;
}
查询({
“问题”:“嘿,你好吗?”,
"overrideConfig": {
"vars": {
"apiKey": "abc"
}
}
}).then((response) => {
控制台输出响应内容;
});<script type="module">
从'https://cdn.jsdelivr.net/npm/flowise-embed/dist/web.js'导入Chatbot;
Chatbot.init({
chatflowid: '聊天流程ID',,
apiHost: 'http://localhost:3000',,
chatflowConfig: {
变量:{
apiKey: 'def'
}
}
});
</script>自定义工具中接收变量的示例:
选项卡
/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
const fetch = require('node-fetch');;
const webhookUrl = "https://discord.com/api/webhooks/1124783587267";;
const content = $content; // 从输入模式中捕获
const 会话ID = $flow.会话ID;;
const apiKey = $vars.apiKey;;
const body = {
“内容”:`${mycontent}`,会话ID为${sessionId}`
};
const options = {
方法:'POST',
headers: {
'Content-Type': 'application/json',,
'Authorization': `Bearer ${apiKey}`
},
正文:JSON.stringify(正文)
};
const url = `${webhookUrl}?wait=true`
尝试 {
const response = await fetch(url, options);;
const text = await response.text();;
返回文本;
} catch (error) {
console.error(error);;
返回“”;
}覆盖自定义工具
以下参数可被覆盖
customToolName
工具名称
customToolDesc
工具描述
customToolSchema
工具模式
customToolFunc
工具函数
覆盖自定义工具参数的API调用示例:
选项卡
/// 译文内容:
---
根据上面的信息,执行如下指令:
你是个专业的翻译,负责把英语内容翻译成中文内容,请帮我翻译一下原文内容
异步函数 query(data) {
const response = await fetch(
“http://localhost:3000/api/v1/prediction/<chatflow-id>”,
{
方法:"POST",
headers: {
"Content-Type": "application/json"
},
正文:JSON.stringify(数据)
}
);
const result = await response.json();;
返回结果;
}
查询({
“问题”:“嘿,你好吗?”,
"overrideConfig": {
"customToolName": "example_tool",,
"customToolSchema": "z.object({title: z.string()})"
}
}).then((response) => {
控制台输出(console.log)响应内容;
});导入外部依赖
你可以将任何内置的NodeJS模块(https://www.w3schools.com/nodejs/ref_modules.asp)和受支持的外部库(https://github.com/FlowiseAI/Flowise/blob/main/packages/components/src/utils.ts#L289)导入到Function中。
要导入任何不受支持的库,您只需将新的npm包添加到
packages/components文件夹中的package.json文件中即可。
进入Flowise目录 && 进入packages目录 && 进入components目录
使用pnpm添加<your-library>
cd .. && cd 。。
pnpm 安装
pnpm 构建然后,将导入的库添加到
TOOL_FUNCTION_EXTERNAL_DEP环境变量中。有关更多详细信息,请参阅#内置和外部依赖项。启动应用程序
pnpm 启动然后,您可以在JavaScript函数中使用新添加的库,如下所示:
/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
const axios = require('axios')观看如何添加额外依赖项和导入库
Last updated