RAG集成联网搜索搭建AI智能问答最佳实践

更新时间:2025-03-21 05:39:14

本文为您介绍如何在大模型RAG对话系统中集成网络搜索功能,通过网络搜索获取内容,并将搜索结果传递给大语言模型进行推理,从而轻松搭建一个具备联网搜索能力的AI智能问答系统,提升用户体验和信息检索的准确性。

前提条件

步骤一:开通网络搜索服务

本文将以阿里云通用搜索服务和Bing搜索为例,介绍如何开通搜索服务。

阿里云通用搜索服务

按照以下流程开通阿里云通用搜索服务:

  1. 单击官网申请开通链接,按照界面操作指引开通信息查询服务-通用搜索功能,其中性能规格默认选择QPS30

    申请开通后,系统将自动开通免费测试接口,5分钟后可试用。默认限额为:5 QPS、1000次调用/天、15天有效期。您可以前往信息查询服务控制台查看服务开通情况,如下图所示,表明测试接口已开通。更多关于通用搜索产品的测试开通、正式开通流程说明,请参见联网搜索【测试/正式】开通说明image

  2. 获取AccessKey

  3. (可选)RAM子用户授权

Bing搜索

请单击azure链接,并按照界面操作指引申请Bing API Key。Bing搜索提供免费版和付费版,请根据需要选择合适的版本。

步骤二:配置RAG对话系统

模型在线服务(EAS)页面,单击RAG服务的服务方式列下的查看Web应用,进入WebUI页面。在该页面完成以下配置。

配置LLM大语言模型

如果您使用场景化部署-LLM一体化部署方式部署RAG服务和LLM服务,系统已默认在RAG服务上配置了LLM服务,您可以忽略以下操作步骤。如果您使用自定义部署方式部署RAG服务,则需要按照以下步骤配置LLM大语言模型。

  1. 获取调用信息。

    1. 模型在线服务(EAS)页面,单击大语言模型服务名称,进入服务详情页面。

    2. 基本信息区域,单击查看调用信息

    3. 调用信息对话框的VPC地址调用页签,获取服务访问地址和Token。

      说明
      • 通过公网地址访问LLM服务:需为RAG服务配置具备公网访问能力的VPC,详情请参见配置公网连接

      • 通过内网地址访问LLM服务:RAG服务和LLM服务需使用相同的专有网络。

      image

  2. WebUI页面的settings页签,配置Large Language Model为已部署的大语言模型服务。image

    参数

    描述

    参数

    描述

    LLM Base URL

    填入已部署的大语言模型服务的访问地址。例如http://****0327099****.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/quickstart_20250208_hnyx

    API Key

    填入已部署的大语言模型服务的Token。

    Model Name

    当使用加速部署-vLLM方式部署服务时,需填入相应的模型名称。使用其他方式部署服务时,直接填入default或保持默认配置。

配置网络搜索

WebUI页面的Chat页签中,根据您的需求进行以下任一网络搜索配置:

  • 配置阿里云通用搜索服务

    • Which query do you want to use:选择Chat(Web Search)

    • Search Engine:选择aliyun

    • Search Count:当QPS限制为1时,SearchCount的最大值不能超过10。

    • Endpoint服务Endpoint

      • 支持通过公网发起调用:iqs.cn-zhangjiakou.aliyuncs.com。请确保已开通公网NAT网关,详情请参见配置公网连接

      • 如下地域也支持通过阿里云VPC发起调用:

        • 北京Region:iqs-vpc.cn-beijing.aliyuncs.com

        • 上海Region:iqs-vpc.cn-shanghai.aliyuncs.com

        • 张家口Region:iqs-vpc.cn-zhangjiakou.aliyuncs.com

    • Access Key ID & Access Key Secret:请填写已获取的AccessKey。

    image

  • 配置Bing搜索

    • Which query do you want to use:选择Chat(Web Search)

    • Search Engine:选择bing

    • Bing API Key:配置为已申请的API Key。

    image

步骤三:WebUI页面调试

WebUI页面的Chat页签中进行问答测试。image

当返回结果无误后,您可以参考步骤四:API调用进行标准化调用。当您在WebUI页面的Chat页签中选中Default Search Web时,API调用将默认启用网络搜索功能(适用于配置兼容OpenAI协议的网页或客户端)。image

步骤四:API调用

PAI-RAG服务已兼容OpenAI接口协议,您可以按照下列方式进行标准化调用。

1.获取调用信息

  1. 单击RAG服务名称,进入服务详情页面。

  2. 基本信息区域,单击查看调用信息

  3. 调用信息对话框的公网地址调用页签,获取服务访问地址和Token。

2.调用服务

支持通过HTTPPython SDK进行调用。

HTTP调用

  • 调用地址<eas_url>/v1/chat/completions

  • 请求方式:POST

  • 请求HEADERS:'Authorization: EAS_TOKEN' # EAS调用Token

  • HTTP Body(请求体)

    • 示例配置

      {
          "model": "default",
          "messages": [
              {"role": "user","content": "你好"},
              {"role": "assistant","content": "你好,有什么能帮到您?"},
              {"role": "user", "content": "浙江省会是哪里"},
              {"role": "assistant", "content": "杭州是浙江的省会。"},
              {"role": "user","content": "有哪些好玩的"}
          ],
          "stream": true,
          "search_web": true,
          "index_name": "default_index"
      }
    • 参数说明如下:

      参数

      描述

      参数

      描述

      model

      模型名称,默认为default。

      stream

      配置为true,表示使用流式输出。

      index_name

      索引名称,如果不传将使用默认索引default_index。具体使用方法,请参见如何使用RAG服务进行知识库数据隔离?

      search_web

      模型在生成文本时是否会参考互联网搜索结果。取值如下:

      • True:启用互联网搜索,模型会将搜索结果作为文本生成过程中的参考信息,但模型会基于其内部逻辑判断是否使用互联网搜索结果。如果模型没有进行互联网搜索,建议优化Prompt。此外,启用互联网搜索功能可能会增加Token的消耗。

      • False(默认值):关闭互联网搜索,搜索本地知识库。

      messages

      历史对话信息和当前查询内容。

  • 调用方法

    支持以下几种调用方法:

    cURL
    在线调试
    Postman

    示例代码如下:

    curl -X POST <eas_url>/v1/chat/completions -H 'Authorization: <eas_token>' -H 'Content-Type: application/json' -d '{"model": "default", "search_web": true, "index_name": "default_index", "messages": [{"role": "user","content": "你好"}, {"role": "assistant","content": "你好,有什么能帮到您?"}, {"role": "user", "content": "浙江省会是哪里"}, {"role": "assistant", "content": "杭州是浙江的省会。"}, {"role": "user","content": "有哪些好玩的"}], "stream": false}' 

    其中:

    • <eas_url>:替换为RAG服务访问地址。

    • <eas_token>:替换为RAG服务Token。

    1. 模型在线服务(EAS)页面,单击目标服务操作列下的在线调试,进入在线调试页面。

    2. 在调试页面的在线调试请求参数区域的Body处填写已准备好的请求体。并在请求URL文本编辑框中添加/v1/chat/completionsimage

    3. 单击发送请求

    • 按照下图示例发送服务请求

      请求方式选择POST,并输入请求地址<eas_url>/v1/chat/completions和请求体,其中<eas_url>需替换为RAG服务访问地址。示例如下:image

    • 返回示例

      • 流式输出image

      • 非流式输出image

  • 返回格式

    非流式输出
    流式输出

    示例结果如下:

    {
        "id": "8df97a998f29485fb6b8f0fa1d65****",
        "choices": [
            {
                "finish_reason": "stop",
                "index": 0,
                "logprobs": null,
                "message": {
                    "content": "杭州有很多好玩的地方,以下是一些推荐的景点:\n\n1. **西湖** - 首批国家5A级旅游景区,中国十大风景名胜之一,以自然与人文景观著称。\n2. **西溪国家湿地公园** - 适合亲近自然,感受湿地的魅力。\n3. **灵隐寺** - 杭州最古老的寺庙之一,具有深厚的文化底蕴。\n4. **六和塔** - 杭州的标志性建筑之一,可以登塔俯瞰江景。\n5. **宋城** - 可以体验宋朝的历史文化。\n6. **雷峰塔** - “雷峰夕照”是杭州一大美景,可以欣赏夕阳下的西湖。\n7. **湘湖** - 湖光山色、古桥流水,适合休闲活动。\n8. **钱塘江大桥** - 不仅实用,还是观赏钱塘江壮丽景色的好地方。\n9. **京杭大运河** - 体验古代水运文化的绝佳地点。\n10. **太子湾公园** - 自然与人文景观结合的美丽公园。\n\n此外,还有其他一些免费景点也非常值得一去,比如杭州植物园、法喜寺、胡雪岩故居等。",
                    "refusal": null,
                    "role": "assistant",
                    "audio": null,
                    "function_call": null,
                    "tool_calls": null
                }
            }
        ],
        "created": 1739450868,
        "model": "qwen-turbo",
        "object": "chat.completion",
        "service_tier": null,
        "system_fingerprint": null,
        "usage": {
            "completion_tokens": 0,
            "prompt_tokens": 0,
            "total_tokens": 0,
            "completion_tokens_details": null,
            "prompt_tokens_details": null
        }
    }

    SSE格式,示例结果如下:

    {
        "id": "7eb65e8cbc62428ca7ae22782addc****",
        "choices": [
            {
                "delta": {
                    "content": "坊",
                    "function_call": null,
                    "refusal": null,
                    "role": "assistant",
                    "tool_calls": null
                },
                "finish_reason": null,
                "index": 240,
                "logprobs": null
            }
        ],
        "created": 1739451105,
        "model": "DeepSeek-R1-Distill-Qwen-32B",
        "object": "chat.completion.chunk",
        "service_tier": null,
        "system_fingerprint": null,
        "usage": null
    }

Python SDK调用

在本地终端中执行Python代码调用服务,代码示例如下:

from openai import OpenAI

##### API 配置 #####
openai_api_key = "EAS_TOKEN"
openai_api_base = "EAS_URL/v1"
client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)

#### Chat ####


def chat():
    stream = True
    chat_completion = client.chat.completions.create(
        model="default",
        stream=stream,
        messages=[
          {"role": "user","content": "你好"},
          {"role": "assistant","content": "你好,有什么能帮到您?"},
          {"role": "user", "content": "浙江省会是哪里"},
          {"role": "assistant", "content": "杭州是浙江的省会。"},
          {"role": "user","content": "有哪些好玩的"}
        ],
        extra_body={
            "search_web": True,
        }
    )

    if stream:
        for chunk in chat_completion:
            print(chunk.choices[0].delta.content, end="")
    else:
        result = chat_completion.choices[0].message.content
        print(result)

chat()

其中关键配置说明如下:

参数

描述

参数

描述

openai_api_key

EAS_TOKEN替换为RAG服务的Token。

openai_api_base

EAS_URL替换为RAG服务的访问地址。

extra_body

search_web

模型在生成文本时是否会参考互联网搜索结果。取值如下:

  • True:启用互联网搜索,模型会将搜索结果作为文本生成过程中的参考信息,但模型会基于其内部逻辑判断是否使用互联网搜索结果。如果模型没有进行互联网搜索,建议优化Prompt。此外,启用互联网搜索功能可能会增加Token的消耗。

  • False(默认值):关闭互联网搜索。

  • 本页导读 (1)
  • 前提条件
  • 步骤一:开通网络搜索服务
  • 阿里云通用搜索服务
  • Bing搜索
  • 步骤二:配置RAG对话系统
  • 配置LLM大语言模型
  • 配置网络搜索
  • 步骤三:WebUI页面调试
  • 步骤四:API调用
  • 1.获取调用信息
  • 2.调用服务