mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-17 13:57:10 +00:00
fix: 加个天气小工具
This commit is contained in:
parent
39478d2928
commit
e192e51ef2
7 changed files with 104 additions and 30 deletions
|
|
@ -15,7 +15,7 @@ export class JinyanTool extends AbstractTool {
|
|||
},
|
||||
time: {
|
||||
type: 'string',
|
||||
description: '禁言时长,单位为秒'
|
||||
description: '禁言时长,单位为秒,默认为600'
|
||||
},
|
||||
isPunish: {
|
||||
type: 'string',
|
||||
|
|
|
|||
32
utils/tools/WeatherTool.js
Normal file
32
utils/tools/WeatherTool.js
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
import { AbstractTool } from './AbstractTool.js'
|
||||
import {Config} from "../config.js";
|
||||
|
||||
export class WeatherTool extends AbstractTool {
|
||||
name = 'weather'
|
||||
|
||||
parameters = {
|
||||
properties: {
|
||||
city: {
|
||||
type: 'string',
|
||||
description: '要查询的地点,细化到县/区级'
|
||||
}
|
||||
},
|
||||
required: ['city']
|
||||
}
|
||||
|
||||
func = async function (opts) {
|
||||
let { city } = opts
|
||||
let key = Config.amapKey
|
||||
|
||||
let adcodeRes = await fetch(`https://restapi.amap.com/v3/config/district?keywords=${city}&subdistrict=1&key=${key}`)
|
||||
adcodeRes = await adcodeRes.json()
|
||||
let adcode = adcodeRes.districts[0].adcode
|
||||
let cityName = adcodeRes.districts[0].name
|
||||
let res = await fetch(`https://restapi.amap.com/v3/weather/weatherInfo?city=${adcode}&key=${key}`)
|
||||
res = await res.json()
|
||||
let result = res.lives[0]
|
||||
return `the weather information of area ${cityName} in json format is:\n${JSON.stringify(result)}`
|
||||
}
|
||||
|
||||
description = 'Useful when you want to query weather '
|
||||
}
|
||||
|
|
@ -1,5 +1,9 @@
|
|||
import { AbstractTool } from './AbstractTool.js'
|
||||
|
||||
import { ChatGPTAPI } from '../openai/chatgpt-api.js'
|
||||
import { Config } from '../config.js'
|
||||
import fetch from 'node-fetch'
|
||||
import proxy from 'https-proxy-agent'
|
||||
import { getMaxModelTokens } from '../common.js'
|
||||
export class WebsiteTool extends AbstractTool {
|
||||
name = 'website'
|
||||
|
||||
|
|
@ -15,14 +19,42 @@ export class WebsiteTool extends AbstractTool {
|
|||
|
||||
func = async function (opts) {
|
||||
let { url } = opts
|
||||
let res = await fetch(url, {
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
|
||||
}
|
||||
})
|
||||
let text = await res.text()
|
||||
text = text.slice(0, Math.min(text.length, 4000))
|
||||
return `this is part of the content of website:\n ${text}`
|
||||
try {
|
||||
let res = await fetch(url, {
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
|
||||
}
|
||||
})
|
||||
let text = await res.text()
|
||||
let maxModelTokens = getMaxModelTokens(Config.model)
|
||||
text = text.slice(0, Math.min(text.length, maxModelTokens - 1600))
|
||||
let api = new ChatGPTAPI({
|
||||
apiBaseUrl: Config.openAiBaseUrl,
|
||||
apiKey: Config.apiKey,
|
||||
debug: false,
|
||||
completionParams: {
|
||||
model: Config.model
|
||||
},
|
||||
fetch: (url, options = {}) => {
|
||||
const defaultOptions = Config.proxy
|
||||
? {
|
||||
agent: proxy(Config.proxy)
|
||||
}
|
||||
: {}
|
||||
const mergedOptions = {
|
||||
...defaultOptions,
|
||||
...options
|
||||
}
|
||||
return fetch(url, mergedOptions)
|
||||
},
|
||||
maxModelTokens
|
||||
})
|
||||
const htmlContentSummaryRes = await api.sendMessage(`这是一个网页html的内容,请你从中提取出其中的主体内容告诉我。${text}`)
|
||||
let htmlContentSummary = htmlContentSummaryRes.text
|
||||
return `this is the main content of website:\n ${htmlContentSummary}`
|
||||
} catch (err) {
|
||||
return `failed to visit the website, error: ${err.toString()}`
|
||||
}
|
||||
}
|
||||
|
||||
description = 'Useful when you want to browse a website by url'
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue