From 9c07b4fef7619c3efa683edc561575ccc7e1f52f Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Sat, 24 Jun 2023 01:38:06 +0800 Subject: [PATCH] feat: serp tool --- apps/chat.js | 4 +++- guoba.support.js | 6 ++++++ utils/config.js | 1 + utils/tools/SerpTool.js | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 utils/tools/SerpTool.js diff --git a/apps/chat.js b/apps/chat.js index 5417fad..bc6cfb5 100644 --- a/apps/chat.js +++ b/apps/chat.js @@ -56,6 +56,7 @@ import { SearchMusicTool } from '../utils/tools/SearchMusicTool.js' import { QueryStarRailTool } from '../utils/tools/QueryStarRailTool.js' import { WebsiteTool } from '../utils/tools/WebsiteTool.js' import {WeatherTool} from "../utils/tools/WeatherTool.js"; +import {SerpTool} from "../utils/tools/SerpTool.js"; try { await import('emoji-strip') } catch (err) { @@ -1940,7 +1941,8 @@ export class chatgpt extends plugin { new WebsiteTool(), new JinyanTool(), new KickOutTool(), - new WeatherTool() + new WeatherTool(), + new SerpTool(), ] // if (e.sender.role === 'admin' || e.sender.role === 'owner') { // tools.push(...[new JinyanTool(), new KickOutTool()]) diff --git a/guoba.support.js b/guoba.support.js index 68c2d20..c3fba38 100644 --- a/guoba.support.js +++ b/guoba.support.js @@ -794,6 +794,12 @@ export function supportGuoba () { label: '高德APIKey', bottomHelpMessage: '用于查询天气', component: 'Input' + }, + { + field: 'azSerpKey', + label: 'Azure search key', + bottomHelpMessage: 'https://www.microsoft.com/en-us/bing/apis/bing-web-search-api', + component: 'Input' } ], // 获取配置数据方法(用于前端填充显示数据) diff --git a/utils/config.js b/utils/config.js index 9f9b3bc..da28f08 100644 --- a/utils/config.js +++ b/utils/config.js @@ -126,6 +126,7 @@ const defaultConfig = { autoJapanese: false, enableGenerateContents: false, amapKey: '', + azSerpKey: '', version: 'v2.6.2' } const _path = process.cwd() diff --git a/utils/tools/SerpTool.js b/utils/tools/SerpTool.js new file mode 100644 index 0000000..c987ced --- /dev/null +++ b/utils/tools/SerpTool.js @@ -0,0 +1,41 @@ +import { AbstractTool } from './AbstractTool.js' +import {Config} from "../config.js"; + +export class SerpTool extends AbstractTool { + name = 'serp' + + parameters = { + properties: { + q: { + type: 'string', + description: 'search keyword' + } + }, + required: ['q'] + } + + func = async function (opts) { + let { q } = opts + let key = Config.azSerpKey + + let serpRes = await fetch(`https://api.bing.microsoft.com/v7.0/search?q=${encodeURIComponent(q)}&mkt=zh-CN`, { + headers: { + 'Ocp-Apim-Subscription-Key': key + } + }) + serpRes = await serpRes.json() + + let res = serpRes.webPages.value + res.forEach(p => { + delete p.displayUrl + delete p.isFamilyFriendly + delete p.thumbnailUrl + delete p.id + delete p.isNavigational + + }) + return `the search results are here in json format:\n${JSON.stringify(res)}` + } + + description = 'Useful when you want to search something from the internet. If you don\'t know much about the user\'s question, just search about it!' +}