获取searxng搜索结果url的内容作为大模型回答的参考,而不是使用searxng搜索结果的摘要内容

This commit is contained in:
Miter 2025-04-25 12:49:37 +08:00 committed by 亢奋猫
parent a546c265ee
commit 32f160444b

View File

@ -1,6 +1,7 @@
import { SearxngClient } from '@agentic/searxng' import { SearxngClient } from '@agentic/searxng'
import { WebSearchState } from '@renderer/store/websearch' import { WebSearchState } from '@renderer/store/websearch'
import { WebSearchProvider, WebSearchResponse } from '@renderer/types' import { WebSearchProvider, WebSearchResponse, WebSearchResult } from '@renderer/types'
import { fetchWebContent, noContent } from '@renderer/utils/fetch'
import axios from 'axios' import axios from 'axios'
import ky from 'ky' import ky from 'ky'
@ -112,20 +113,28 @@ export default class SearxngProvider extends BaseWebSearchProvider {
if (!result || !Array.isArray(result.results)) { if (!result || !Array.isArray(result.results)) {
throw new Error('Invalid search results from SearxNG') throw new Error('Invalid search results from SearxNG')
} }
return {
query: result.query,
results: result.results.slice(0, websearch.maxResults).map((result) => {
let content = result.content || ''
if (websearch.contentLimit && content.length > websearch.contentLimit) {
content = content.slice(0, websearch.contentLimit) + '...'
}
return { const validItems = result.results
title: result.title || 'No title', .filter((item) => item.url.startsWith('http') || item.url.startsWith('https'))
content: content, .slice(0, websearch.maxResults)
url: result.url || '' // console.log('Valid search items:', validItems)
}
}) // Fetch content for each URL concurrently
const fetchPromises = validItems.map(async (item) => {
// console.log(`Fetching content for ${item.url}...`)
const result = await fetchWebContent(item.url, 'markdown', this.provider.usingBrowser)
if (websearch.contentLimit && result.content.length > websearch.contentLimit) {
result.content = result.content.slice(0, websearch.contentLimit) + '...'
}
return result
})
// Wait for all fetches to complete
const results: WebSearchResult[] = await Promise.all(fetchPromises)
return {
query: query,
results: results.filter((result) => result.content != noContent)
} }
} catch (error) { } catch (error) {
console.error('Searxng search failed:', error) console.error('Searxng search failed:', error)