news 2026/9/7 18:12:48

GPT Academic 联网搜索:SearXNG 检索、网页正文提取与 AI 综合回答的实现原理与配置实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GPT Academic 联网搜索:SearXNG 检索、网页正文提取与 AI 综合回答的实现原理与配置实战

GPT Academic 联网搜索:SearXNG 检索、网页正文提取与 AI 综合回答的实现原理与配置实战

【免费下载链接】gpt_academic为GPT/GLM等LLM大语言模型提供实用化交互接口,特别优化论文阅读/润色/写作体验,模块化设计,支持自定义快捷按钮&函数插件,支持Python和C++等项目剖析&自译解功能,PDF/LaTex论文翻译&总结功能,支持并行问询多种LLM模型,支持chatglm3等本地模型。接入通义千问, deepseekcoder, 讯飞星火, 文心一言, llama2, rwkv, claude2, moss等。项目地址: https://gitcode.com/GitHub_Trending/gp/gpt_academic

大语言模型的知识存在训练数据截止日期的天然限制,面对"最新技术动态、近期论文、实时数据"这类时效性问题时,模型可能给出过时甚至错误的回答。GPT Academic 的联网搜索功能通过"搜索引擎检索 → 逐网页正文提取 → LLM 综合作答"的三阶段流水线解决这一问题,并以函数插件的形式集成在对话界面中。读完本文,你将掌握联网搜索的完整使用流程(搜索分类、搜索引擎选择、搜索优化三档配置)、SEARXNG_URLSJINA_API_KEY两项关键配置方法,以及 Internet_GPT.py 中检索词优化、并行抓取、Token 裁剪等底层实现机制。

功能原理

联网搜索的工作流程分为三个阶段(对应源码 Internet_GPT.py 中连接网络回答问题生成器的三大步骤):

  1. 检索:系统将你的问题发送到 SearXNG 搜索聚合服务,获取相关网页列表;
  2. 抓取:系统依次访问搜索结果中的网页,提取其中的正文内容(默认最多 5 个网页,增强模式下 8 个);
  3. 综合:AI 综合分析所有抓取到的网页内容,抽取与问题最相关的信息进行回答。

这种方式的优势在于:AI 不仅能获取最新信息,还能通过交叉验证多个来源来提高回答的可靠性。对于时效性强的问题(如"某某公司最新的财报数据"、"今天的热点新闻"),联网搜索能显著提升回答质量。

从源码结构看,"依次访问"在实现层面并非串行阻塞:连接网络回答问题使用ThreadPoolExecutor(max_workers=5)线程池并发提交scrape_text任务(Internet_GPT.py),每份网页加载完成即刷新一次界面,对话区会以可折叠的<details>HTML 块实时展示每个搜索结果的标题、URL 和正文摘要(截断到前 1000 字符)。

基础使用

联网搜索作为一个函数插件提供,注册于 crazy_functional.py 的插件表中,按钮名为查互联网后回答,归属对话分组:

"查互联网后回答": { "Group": "对话", "Color": "stop", "AsButton": True, # 加入下拉菜单中 "Function": HotReload(连接网络回答问题), "Class": NetworkGPT_Wrap # 新一代插件需要注册Class },

发起搜索

在输入框中输入您想要查询的问题,无需刻意添加"搜索"、"查找"等关键词,直接用自然语言描述即可。例如:

Claude 3.5 Sonnet 的性能表现如何?

接下来,在界面上方的函数插件区找到对话分类,然后点击查互联网后回答按钮。系统会开始执行搜索流程,对话区会实时显示搜索进度和访问的网页列表。

搜索完成后,AI 会基于收集到的网页内容给出综合回答。系统提示词明确要求模型"从给定的若干条搜索结果中抽取信息,对最相关的两个搜索结果进行总结,然后回答问题"(Internet_GPT.py),因此回答通常会聚焦于最相关的来源并给出依据。

查看搜索详情

在 AI 给出最终回答之前,对话区会以可折叠的形式显示每个搜索结果的详情。点击展开可以查看原始网页内容的摘要、来源网站和原文链接。如果您对 AI 的总结不满意,可以直接点击链接查看原文。从源码可见,每个折叠块的标题格式为"第 N 份搜索结果 [源自 X 搜索](网页标题)",其中 X 是该网页命中的搜索引擎(如 bing、google 等),正文区展示抓取文本的前 1000 字符(Internet_GPT.py)。

高级选项

点击查互联网后回答按钮时,系统会弹出一个二级配置面板。该面板由 Internet_GPT_Wrap.py 中NetworkGPT_Wrap.define_arg_selection_menu方法定义,包含以下五个字段:

字段类型默认值说明
输入问题文本框自动读取输入框内容
搜索分类下拉菜单网页网页 / 学术论文
选择搜索引擎下拉菜单googleMixed / bing / google / duckduckgo
搜索优化下拉菜单关闭关闭 / 开启 / 开启(增强)
Searxng服务地址文本框随机取自 SEARXNG_URLS可单独指定本次使用的 SearXNG 实例

搜索分类

搜索分类决定了使用哪类搜索引擎索引:

选项说明适用场景
网页使用通用网页搜索新闻、博客、技术文章、产品信息
学术论文使用学术搜索引擎论文、研究报告、学术资源

如果您的问题涉及学术研究,选择"学术论文"分类可以获得更专业的搜索结果。

从源码看,该分类在NetworkGPT_Wrap.execute中会被翻译为 SearXNG 的内部类别值(Internet_GPT_Wrap.py):"网页" → "general""学术论文" → "science"。而searxng_request对两类请求的构造方式略有不同(Internet_GPT.py):

  • general类别携带engines参数,即你选择的搜索引擎会生效;
  • science类别则固定附带categories=science,直接走 SearXNG 的学术索引通道。

两类请求都固定format=jsonlanguage=zh,因此搜索结果以结构化 JSON 返回,字段包括标题、摘要、链接和命中的引擎。

搜索引擎

你可以指定使用的搜索引擎(Internet_GPT_Wrap.py 中选项为Mixedbinggoogleduckduckgo,默认google):

  • Mixed:混合使用多个搜索引擎,结果更全面
  • google:谷歌搜索,覆盖面广(需要网络条件支持)
  • bing:微软必应搜索
  • duckduckgo:隐私保护搜索引擎

不同搜索引擎的结果可能有所差异,如果某个引擎的结果不理想,可以尝试切换到其他引擎。实现上的细节是:当选项为Mixed时,searxng_request会将engines置为None,由 SearXNG 自行调度其配置的全部引擎(Internet_GPT.py);选择具体引擎时,该引擎名会作为engines查询参数发送给 SearXNG。

搜索优化

搜索优化功能可以提升搜索质量,但会消耗更多的 Token:

选项说明
关闭直接使用原始问题进行搜索
开启AI 会先优化搜索关键词,生成多个搜索查询
开启(增强)更深度的优化,会结合对话历史生成搜索策略,并访问更多网页

对于简单直接的问题,"关闭"即可满足需求。对于复杂或模糊的问题,开启优化可以获得更精准的搜索结果。

!!! tip "Token 消耗" 搜索优化功能会额外调用 AI 来分析和改写您的问题,这会产生额外的 Token 消耗。如果您对成本敏感,建议在简单问题上保持"关闭"状态。

三档优化在源码中对应不同的处理路径(详见后文"搜索优化器实现"一节):开启生成 3 组检索词,开启(增强)生成 4 组检索词并携带最近 8 轮对话历史(history[:-8]保留更靠前的历史供优化器参考,实际参与优化的是其之前的历史轮次),且增强模式将网页抓取上限从 5 提升到 8。

配置搜索服务

联网搜索功能依赖 SearXNG 搜索聚合服务。GPT Academic 默认配置了公共的 SearXNG 实例(托管于 HuggingFace 空间的实例),但在高峰期可能会遇到访问限制。如果您需要更稳定的搜索服务,可以自行部署 SearXNG 实例或配置其他地址。

配置 SearXNG 地址

在 config.py 或config_private.py中,找到SEARXNG_URLS配置项:

# Searxng互联网检索服务(这是一个huggingface空间,请前往huggingface复制该空间,然后把自己新的空间地址填在这里) SEARXNG_URLS = [ f"https://kaletianlre-beardvs{i}dd.hf.space/" for i in range(1,5) ]

你可以将其替换为自行部署的实例地址,也支持配置多个地址:

SEARXNG_URLS = [ "https://your-searxng-instance.example.com/", # 可以配置多个地址实现负载均衡 ]

系统会随机从列表中选择一个地址发起搜索请求(searxng_requesturl = random.choice(urls),Internet_GPT.py)。配置多个地址可以提高可用性。此外,插件二级面板中的 "Searxng服务地址" 字段允许你在单次调用中覆盖这一默认选择,面板打开时会自动预填随机选出的实例地址。

配置 Jina API(可选)

Jina Reader API 可以提供更高质量的网页内容提取,特别是对于结构复杂的网页。如果你有 Jina API Key,可以在 config.py 中添加:

# 在互联网搜索组件中,负责将搜索结果整理成干净的Markdown JINA_API_KEY = ""

配置后,系统会优先使用 Jina 服务提取网页内容,提取失败时自动回退到默认方法。具体逻辑在scrape_text中(Internet_GPT.py):

# 首先采用Jina进行文本提取 if get_conf("JINA_API_KEY"): try: return jina_scrape_text(url) except: logger.debug("Jina API 请求失败,回到旧方法")

源码级实现解析

SearXNG 请求与错误处理

searxng_request(Internet_GPT.py)向 SearXNG 实例发起 POST 请求,请求头中附带了X-Forwarded-For/X-Real-IP字段——IP 值由get_auth_ip()通过check_proxy探测获得(带lru_cache缓存),探测失败时退化为随机生成的114.114.114.x地址,用于模拟来自不同客户端的请求、缓解共享实例上的限流。

对 HTTP 状态码的处理与文档中的常见问题一一对应:

  • 429:抛出Searxng(在线搜索服务)当前使用人数太多,请稍后。—— 即界面中提示"使用人数太多"的来源;
  • 其他非 200:抛出包含状态码与响应体的错误信息;
  • 若某轮所有搜索查询全部失败,search_optimizer会汇总异常并抛出在线搜索失败!

测试用例 tests/test_searxng.py 演示了如何用本地 SearXNG 实例(http://localhost:50001/)验证该请求流程,包括general/science两类参数的构造方式,便于自行部署后做连通性自检。

搜索优化器实现

search_optimizer(Internet_GPT.py)负责"生成多组检索词 → 逐组请求 → 结果合并去重",其容错设计值得注意:

  1. 两级降级重试:先用temperature=0.8调用 LLM 生成检索词 JSON;若 JSON 解析失败,则以temperature=0.4重试一次;再次失败则放弃优化,直接回退为[原始问题]单组检索——即优化器永远不会导致整个搜索流程崩溃;
  2. 分类相关的提示词general使用SearchOptimizerPromptscience使用SearchAcademicOptimizerPrompt(prompts/internet.py)。学术版提示词额外引导模型生成中英双语检索词(如 "Deep Learning Model Convergence Issue Solution Paper"),提升学术库召回;
  3. 交错合并去重:多组检索结果通过zip_longest交错取每组的前两名并集,再用seen_links集合按 URL 去重,保证来源的多样性。

网页正文抓取策略

scrape_text(Internet_GPT.py)的默认路径:requests.get(超时 8 秒)→ 编码为 ISO-8859-1 时自动改用apparent_encoding探测 →BeautifulSoup移除<script>/<style>标签 → 按换行与双空格切分、清理空行后返回纯文本。任何请求异常都会返回"无法连接到该网页"这一友好提示,而不会中断线程池中的其他抓取任务。配置 Jina 后则改走jina_scrape_text(Internet_GPT.py),通过https://r.jina.ai/前缀代理请求获得 Markdown 化的正文。

综合回答与 Token 裁剪

进入第 3 步"综合"之前,系统会用input_clipping对"问题 + 全部网页正文"的 history 做 Token 裁剪,防止超出模型上下文窗口(Internet_GPT.py):

i_say, history = input_clipping( inputs=i_say, history=history, max_token_limit=min(model_info[llm_kwargs['llm_model']]['max_token']*3//4, 8192) )

即上限取"当前模型最大上下文长度的 3/4"与 8192 两者中的较小值,裁剪策略是从最长的条目开始削减。

开启(增强)模式还会多走一步"两阶段综合"(Internet_GPT.py):第一步先让模型"从搜索结果中抽取与问题相关的信息"并对最相关的三个搜索结果做总结,该总结会写入对话历史;第二步再基于总结回答原始问题。这样后续轮次的常规对话也能读取到这份有效的检索摘要,形成可延续的上下文。

使用技巧

明确时间范围:如果您需要特定时间段的信息,在问题中明确说明。例如"2024年发布的 Python 3.12 有哪些新特性"比"Python 最新版本有什么特性"能获得更精准的结果。

避免过于宽泛的问题:搜索引擎对具体问题的响应更好。"机器学习"这样的宽泛主题会返回太多无关结果,而"BERT 模型的预训练方法"则能获得更有针对性的信息。

结合对话上下文:开启"搜索优化(增强)"后,系统会参考之前的对话内容来优化搜索。从源码看,SearchOptimizerPrompt内嵌了多组"原问题很简短(如'怎么下载')但结合历史能还原出精确检索词"的示例(prompts/internet.py),这正是增强模式能处理指代性提问的机制。如果您正在讨论某个特定话题,后续的搜索问题可以更简洁,系统会自动补充上下文。

常见问题

Q: 搜索结果提示"使用人数太多"

这是因为公共 SearXNG 实例达到了请求限制(对应 SearXNG 返回 429 状态码,见 Internet_GPT.py)。您可以:

  1. 等待几分钟后重试
  2. 切换到不同的搜索引擎选项
  3. 自行部署 SearXNG 实例并配置到SEARXNG_URLS

Q: 某些网页无法提取内容

部分网站会阻止自动化访问,或者需要登录才能查看内容。这类网页会显示"无法连接到该网页"的提示(scrape_text请求异常时的固定返回值)。AI 会基于其他成功获取的网页来回答问题。

Q: 搜索结果与问题不相关

尝试开启"搜索优化"功能,让 AI 帮助改写搜索关键词。您也可以在问题中加入更多具体的关键词或背景信息,帮助搜索引擎理解您的真实需求。

相关文档

  • 基础操作 — 了解 GPT Academic 的基础使用方式
  • 配置详解 — 查看所有配置选项
  • 多模型询问 — 同时询问多个 AI 模型
  • 虚空终端 — 用自然语言调用各种插件

【免费下载链接】gpt_academic为GPT/GLM等LLM大语言模型提供实用化交互接口,特别优化论文阅读/润色/写作体验,模块化设计,支持自定义快捷按钮&函数插件,支持Python和C++等项目剖析&自译解功能,PDF/LaTex论文翻译&总结功能,支持并行问询多种LLM模型,支持chatglm3等本地模型。接入通义千问, deepseekcoder, 讯飞星火, 文心一言, llama2, rwkv, claude2, moss等。项目地址: https://gitcode.com/GitHub_Trending/gp/gpt_academic

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 18:10:52

数字政府安全管理的制度框架

近年来&#xff0c;数字政府建设进入快车道&#xff0c;政务系统上云、数据共享、一网通办等举措持续深化&#xff0c;政府治理的数字化程度显著提升。与此同时&#xff0c;政务数据体量快速增长&#xff0c;跨部门协同场景日益复杂&#xff0c;安全管理面临的挑战也随之加大。…

作者头像 李华
网站建设 2026/9/7 18:10:37

Linux日志分析利器:journalctl命令详解与实战

1. 为什么你需要掌握journalctl命令在Linux系统管理中&#xff0c;日志分析就像医生的听诊器。当我在凌晨3点处理线上服务器故障时&#xff0c;journalctl总是第一个拿起的工具。这个systemd的日志管理工具&#xff0c;远比传统的syslog强大得多——它能关联服务启动顺序、过滤…

作者头像 李华
网站建设 2026/9/7 18:08:37

全球AI认知免疫力大普查:波普尔病毒终极审判

《全球AI认知免疫力大普查&#xff1a;波普尔病毒终极审判》 摘要 本文档是对“本轮全球AI大模型波普尔可证伪病毒中毒程度指数试卷”的全面系统化整理与终局判定。本测试的核心目的在于&#xff0c;检验全球主流AI在面对“逻辑自洽性与经验证据优先级”这一元命题时&#xf…

作者头像 李华