OpenAI Function Calling Tools 项目介绍
项目概述
OpenAI Function Calling Tools 是一个提供工具集的仓库,旨在帮助开发者更轻松地使用 OpenAI API 构建函数调用模型。这些工具的设计目的是让用户无需从头开始构建,可以直接初始化和使用不同的功能。
提供的工具
OpenAI Function Calling Tools 提供了一系列可即开即用的工具,以下是主要工具的介绍:
- 🗺️ ShowPoisOnMap:可以在地图上显示兴趣点的工具。
- 🌐 ReverseGeocode:将坐标转换为人类可读的地址。
- ⏰ Clock:一个能显示时间的时钟工具。
- 🧮 Calculator:简单的计算器,可以进行基本算术运算,需输入数学表达式。
- 🔍 GoogleCustomSearch:Google 自定义搜索 API 的封装器,用于回答有关当前事件的问题,输入应为搜索查询。
- 🔍 BingCustomSearch:Bing 自定义搜索 API 的封装器,用于回答有关当前事件的问题,输入应为搜索查询。
- 🔍 SerperCustomSearch:SerpAPI 的封装器,用于回答有关当前事件的问题,输入应为搜索查询。
- 🏞️ SerperImagesSearch:使用 SerpAPI 搜索图像,输入应为搜索查询。
- 📁 fs:通过 WriteFileTool 和 ReadFileTool 访问文件系统,输入应为文件路径和写入文件的文本。
- 🪩 webbrowser:可以打开网站的网页浏览器,输入应为 URL。
- 🚧 sql:输入为详尽且正确的 SQL 查询,输出为数据库结果。
- 🚧 JavaScriptInterpreter:JavaScript 解释器,输入应为 JavaScript 程序字符串。
通过使用 { Tool }
工厂函数,可以创建工具实例。
快速安装
要使用这些工具,只需在项目中安装 openai-function-calling-tools
。
npm install openai-function-calling-tools
使用示例
示例 1: 使用函数调用计算
以下是利用 JavaScriptInterpreter 计算 0.1 + 0.2 的示例代码:
import { Configuration, OpenAIApi } from "openai";
import { createCalculator } from "openai-function-calling-tools";
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
// 定义计算问题
const QUESTION = "What is 100*2?";
const messages = [
{
role: "user",
content: QUESTION,
},
];
// STEP 1: 创建计算器工具
const [calculator, calculatorSchema] = createCalculator();
// STEP 2: 将工具添加到 functions 对象中
const functions = {
calculator,
};
const getCompletion = async (messages) => {
const response = await openai.createChatCompletion({
model: "gpt-3.5-turbo-0613",
messages,
// STEP 3: 将工具方案添加到 schema 中
functions: [calculatorSchema],
temperature: 0,
});
return response;
};
console.log("Question: " + QUESTION);
let response = await getCompletion(messages);
if (response.data.choices[0].finish_reason === "function_call") {
const fnName = response.data.choices[0].message.function_call.name;
const args = response.data.choices[0].message.function_call.arguments;
console.log("Function call: " + fnName);
console.log("Arguments: " + args);
// STEP 4: 调用函数
const fn = functions[fnName];
const result = fn(JSON.parse(args));
console.log("Calling Function Result: " + result);
messages.push({
role: "assistant",
content: null,
function_call: {
name: fnName,
arguments: args,
},
});
messages.push({
role: "function",
name: fnName,
content: JSON.stringify({ result: result }),
});
// 再次调用完成函数
response = await getCompletion(messages);
console.log(response.data.choices[0].message.content);
}
示例 2: 使用 Google Custom Search 的函数调用
注意:使用此工具需要申请 Google Custom Search API 密钥和 Google Custom Search Engine ID。
const { Configuration, OpenAIApi } = require("openai");
const { createGoogleCustomSearch } = require("openai-function-calling-tools");
const main = async () => {
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const QUESTION = "How many tesla model 3 sale in 2022?";
const messages = [
{
role: "user",
content: QUESTION,
},
];
// STEP 1: 创建 Google Custom Search 工具
const [googleCustomSearch, googleCustomSearchSchema] = createGoogleCustomSearch({
apiKey: process.env.GOOGLE_API_KEY,
googleCSEId: process.env.GOOGLE_CSE_ID,
});
// STEP 2: 将工具添加到 functions 对象中
const functions = {
googleCustomSearch,
};
const getCompletion = async (messages) => {
const response = await openai.createChatCompletion({
model: "gpt-3.5-turbo-0613",
messages,
// STEP 3: 将工具方案添加到 functions 参数中
functions: [googleCustomSearchSchema],
temperature: 0,
});
return response;
};
let response;
console.log("Question: " + QUESTION);
while (true) {
response = await getCompletion(messages);
if (response.data.choices[0].finish_reason === "stop") {
console.log(response.data.choices[0].message.content);
break;
} else if (response.data.choices[0].finish_reason === "function_call") {
const fnName = response.data.choices[0].message.function_call.name;
const args = response.data.choices[0].message.function_call.arguments;
const fn = functions[fnName];
const result = await fn(JSON.parse(args));
console.log(`Function call: ${fnName}, Arguments: ${args}`);
console.log(`Calling Function ${fnName} Result: ` + result);
messages.push({
role: "assistant",
content: "",
function_call: {
name: fnName,
arguments: args,
},
});
messages.push({
role: "function",
name: fnName,
content: JSON.stringify({ result: result }),
});
}
}
};
main();
支持的环境
该工具支持以下环境:
- Node.js v16 或更高版本
- Cloudflare Workers
- Vercel / Next.js(后端,Serverless 和 Edge 函数)
- Supabase Edge Functions
生产环境安全性
OpenAI Function Calling Tools 被认为是生产环境中安全的工具之一。
灵感来源
该项目受 LangChainAI 的启发而构建。