在 AI 应用开发中,为大模型添加联网搜索能力可以显著提升其实时信息处理能力。本文将介绍一种极简实现方案,让你的大模型瞬间拥有获取最新信息的能力。

【如果你对人工智能的学习有兴趣可以看看我的其他博客,对新手很友好!!!】

【本猿定期无偿分享学习成果,欢迎关注一起学习!!!】

一.核心原理

大模型联网搜索的核心在于:

  1. 判断问题是否需要实时信息

  2. 对需要实时信息的问题进行网络搜索

  3. 将搜索结果作为上下文提供给大模型

  4. 基于搜索结果生成最终回答

二.实现代码

(1)以下是你需要的两个 API 的获取网址:

  1. Serper API:https://serper.dev/这是提供搜索引擎 API 服务的平台,注册后可获取 API 密钥,用于实现代码中的网络搜索功能。

  2. 阿里云通义千问 API:大模型服务平台百炼控制台这是阿里云提供的大模型服务平台,在这里可以申请通义千问(Qwen)的 API 密钥,用于调用代码中的大模型能力。

使用时,只需在这两个平台注册账号并按照指引获取 API 密钥,然后替换代码中对应的密钥即可使用。

(2)以下是完整实现代码,仅需几行核心逻辑即可实现功能:

import os
import json
import requests
from openai import OpenAI

# 配置API密钥
SERPER_API_KEY = "你的Serper API密钥"
QWEN_API_KEY = "你的Qwen API密钥"

def web_search(query):
    """使用Serper API进行网络搜索"""
    url = "https://google.serper.dev/search"
    payload = json.dumps({"q": query})
    headers = {
        'X-API-KEY': SERPER_API_KEY,
        'Content-Type': 'application/json'
    }
    try:
        response = requests.post(url, headers=headers, data=payload)
        response.raise_for_status()
        return parse_results(response.json())
    except Exception as e:
        print(f"搜索出错: {e}")
        return []

def parse_results(results):
    """解析搜索结果,提取关键信息"""
    parsed = []
    for item in results.get("organic", [])[:3]:  # 取前3条结果
        parsed.append({
            "title": item.get("title", "无标题"),
            "link": item.get("link", "无链接"),
            "snippet": item.get("snippet", "无摘要")
        })
    return parsed

def need_search(query):
    """判断是否需要进行搜索"""
    need_search_keywords = ["最新", "今天", "现在", "2025", "最近", "多少", "何时", "哪里"]
    return any(keyword in query for keyword in need_search_keywords)

def get_qwen_response(messages):
    """调用Qwen模型获取响应"""
    client = OpenAI(
        api_key=QWEN_API_KEY,
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    )
    completion = client.chat.completions.create(
        model="qwen-plus",
        messages=messages
    )
    return completion.choices[0].message.content

# 主逻辑
user_query = "查询一下今天的最新最热的新闻?"

if need_search(user_query):
    search_results = web_search(user_query)
    if search_results:
        system_prompt = "基于以下搜索信息回答问题,确保准确引用最新内容:"
        search_info = "\n".join([f"标题: {i['title']}\n摘要: {i['snippet']}\n" for i in search_results])
        messages = [
            {'role': 'system', 'content': f"{system_prompt}\n{search_info}"},
            {'role': 'user', 'content': user_query}
        ]
    else:
        messages = [{'role': 'system', 'content': 'You are a helpful assistant.'},
                   {'role': 'user', 'content': user_query}]
else:
    messages = [{'role': 'system', 'content': 'You are a helpful assistant.'},
               {'role': 'user', 'content': user_query}]

response = get_qwen_response(messages)
print("回答:", response)

三.关键模块解析

  1. 搜索判断模块:通过关键词匹配,快速判断问题是否需要联网搜索

  2. 网络搜索模块:利用 Serper API 获取搜索结果,简洁高效

  3. 结果解析模块:提取搜索结果中的核心信息,减少冗余

  4. 大模型调用模块:将搜索结果作为上下文传入模型,生成精准回答

四.使用说明

  1. 替换代码中的 API 密钥(Serper 和 Qwen)

  2. 根据需求调整 need_search 函数中的关键词列表

  3. 运行程序,输入问题即可获得结合最新网络信息的回答

这种实现方式兼顾了开发效率和功能完整性,适合快速为你的大模型应用添加联网能力。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐