41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
import * as z from "zod"
|
||
import { tool } from "langchain"
|
||
|
||
/**
|
||
* 获取城市经纬度工具
|
||
* @param {string} city - 城市名称
|
||
* @returns {Object|null} - 返回经纬度对象 {lat, lng},如果未找到则返回null
|
||
*/
|
||
export const getLatLngTool = tool(
|
||
async (input) => {
|
||
const { city } = input
|
||
try {
|
||
// 使用open-meteo地理编码API获取经纬度
|
||
console.log('获取城市经纬度:', city)
|
||
const url = `https://geocoding-api.open-meteo.com/v1/search?name=${encodeURIComponent(city)}&language=zh&count=1`
|
||
const res = await fetch(url)
|
||
const data = await res.json()
|
||
|
||
if (data.results?.length) {
|
||
return {
|
||
lat: data.results[0].latitude,
|
||
lng: data.results[0].longitude
|
||
}
|
||
}
|
||
|
||
// 如果没有找到结果,返回null
|
||
return null
|
||
} catch (error) {
|
||
console.error('地理编码API调用失败:', error)
|
||
return null
|
||
}
|
||
},
|
||
{
|
||
name: "get_lat_lng",
|
||
description: `根据城市名称获取经纬度信息`,
|
||
schema: z.object({
|
||
city: z.string().describe("城市名称,例如:北京市海淀区")
|
||
})
|
||
}
|
||
)
|