import type { LarkEvent } from "@egg/lark-msg-tool" import { NetToolBase } from "@egg/net-tool" import { APP_CONFIG } from "../../constant/config" import { LarkServer } from "../../types" interface Chat2SoupParams { user_query: string soup_id: string history: string } interface Chat2SoupResp { type: "GAME" | "END" | "OTHER" content: string } interface Soup { /** * 海龟汤ID */ title: string /** * 海龟汤内容 */ query: string /** * 海龟汤答案 */ answer: string } class AttachService extends NetToolBase { protected hostMap: Record = { dev: "https://lark-egg-preview.ai.xiaomi.com", preview: "https://lark-egg-preview.ai.xiaomi.com", production: "https://lark-egg.ai.xiaomi.com", } /** * 监控CI状态 * @param {string} chat_id - 聊天ID。 * @returns {Promise} 返回CI监控结果。 */ async ciMonitor(chat_id: string) { const URL = `https://lark-egg.ai.xiaomi.com/gitlab_monitor/ci?chat_id=${chat_id}` return this.get(URL).catch(() => "") } /** * 收集报告数据 * @param {LarkEvent.Data} body - 报告数据。 * @returns {Promise} 返回报告收集结果。 */ async reportCollector(body: LarkEvent.Data) { const URL = "https://report.imoaix.cn/report" return this.post(URL, body).catch(() => "") } /** * 代理MiChat事件 * @param {LarkEvent.Data} body - 事件数据。 * @returns {Promise} 返回空。 */ async proxyMiChatEvent(body: LarkEvent.Data) { const hostList = ["michat-staging.ai.srv", "michat.ai.srv"] const path = "/api/v1/bypass/robot_event_callback" for (const host of hostList) { const URL = `http://${host}${path}` await this.post(URL, body).catch(() => "") } } /** * 开始海龟汤 */ async startSoup() { const URL = "https://lark-egg.ai.xiaomi.com/soup" return this.post(URL, {}).catch(() => null) } /** * 和海龟汤聊天 * @param {Chat2SoupParams} body - 聊天参数 */ async chat2Soup(body: Chat2SoupParams) { const URL = "https://lark-egg.ai.xiaomi.com/soup/chat" return this.post(URL, body).catch(() => null) } /** * 抓取网页内容 * @param {string} url - 网页URL。 * @returns {Promise} 返回抓取的网页内容。 */ async crawlWeb(url: string) { const URL = "https://lark-egg.ai.xiaomi.com/tools/web/crawler" return this.get>(URL, { url }).catch(() => null) } /** * 使用mify爬虫抓取网页内容 * @param {string} link - 网页链接 * @param {string} userDescription - 用户描述 * @returns {Promise} 返回爬取结果 */ async mifyCrawler(link: string, userDescription: string) { const URL = "https://mify-be.pt.xiaomi.com/api/v1/workflows/run" return this.post( URL, { inputs: { link, userDescription, }, response_mode: "blocking", user: "egg-server", }, {}, { Authorization: `Bearer ${APP_CONFIG.MIFY_CRAWLER_TOKEN}`, } ) .then((res) => { return res.data.outputs.content }) .catch((error) => { return `mify爬虫调用失败 - ${error.message}` }) } /** * 使用bochaai搜索网页 * @param {string} query - 搜索关键词 * @returns 返回搜索结果 */ async webSearch(query: string) { const URL = "https://api.bochaai.com/v1/web-search" return this.post( URL, { query, summary: true, }, {}, { Authorization: `Bearer ${APP_CONFIG.BOCHA_SK}`, } ) .then((res) => { const { value } = res.data.webPages return value.map(({ siteName, summary, name, url }: any) => ({ pageName: name, url, siteName, summary, })) as { siteName: string summary: string }[] }) .catch(() => null) } } export default AttachService