在大模型RAG对话系统中集成网络搜索功能,可将实时联网搜索结果传递给大语言模型进行推理,搭建具备联网搜索能力的AI智能问答系统,提升信息检索的准确性。
前提条件
已部署RAG服务,其中关键配置说明如下,具体操作,请参见大模型RAG对话系统(v0.3.x)。
版本选择:选择LLM一体化部署。如果您已单独部署大语言模型LLM服务,也可以选择LLM分离式部署,并在RAG服务的WebUI页面完成LLM相关配置。
RAG版本:选择pai-rag:0.3.4。
模型类别:根据需求选择。
专有网络:EAS服务默认无法访问公网,若使用联网搜索功能,需配置能访问公网的专有网络,详情请参见让EAS服务访问公网。
步骤一:为RAG服务配置网络搜索
开通网络搜索服务
支持阿里云通用搜索服务和Bing搜索,根据需求任选其一开通。
阿里云通用搜索服务
按照以下流程开通阿里云通用搜索服务:
Bing搜索
请单击azure链接,并按照界面操作指引申请Bing API Key。Bing搜索提供免费版和付费版,请根据需要选择合适的版本。
配置网络搜索
在模型在线服务(EAS)页面,单击目标服务调用/日志/监控列的
按钮,进入WebUI页面。然后在WebUI页面的应用页签中的联网搜索Tab页,配置搜索引擎。
配置阿里云通用搜索服务
参数
描述
搜索引擎
选择aliyun。
搜索数量
当QPS限制为1时,搜索数量的最大值不能超过10。
Endpoint
支持通过公网(
iqs.cn-zhangjiakou.aliyuncs.com)发起调用:请确保RAG服务已绑定具有公网访问能力的专有网络,详情请参见EAS访问公网或内网资源。以下地域也支持通过阿里云VPC地址发起调用:
华北2(北京):
iqs-vpc.cn-beijing.aliyuncs.com华东2(上海):
iqs-vpc.cn-shanghai.aliyuncs.com华北3(张家口):
iqs-vpc.cn-zhangjiakou.aliyuncs.com
Access Key ID
请填写已获取的AccessKey。
Access Key Secret
在顶部导航栏单击应用标签,进入联网搜索配置页面。右侧调整提示词模板区域可编辑联网搜索问答的角色模板(默认为"你是一个知识问答小助手,乐于解答用户的问题。")和提示词模板。配置完成后,单击页面底部的检查并保存配置。
配置Bing搜索
重要请确保RAG服务已绑定具有公网访问能力的专有网络,详情请参见EAS访问公网或内网资源。
参数
描述
搜索引擎
选择bing。
Bing API Key
配置为已申请的API Key。
其他可选配置项:
搜索数量:通过滑块设置,范围 5~50,默认值为 10。
语言:可选
zh-CN或en-US。联网搜索问答角色模板和联网搜索问答的提示词模板:在右侧「调整提示词模板」区域自定义。
完成配置后单击检查并保存配置。
步骤二:WebUI页面调试
配置搜索引擎后,在WebUI页面的对话页签中进行问答测试。当返回结果无误后,您可以参考步骤三:API调用进行标准化调用。
在 PAI-RAG 对话页面使用 Bing 搜索功能的操作流程:
在底部使用更多工具区域,勾选大模型和联网搜索。
在文本输入框中输入问题,例如"浙江杭州景点介绍"。
单击提交按钮,系统将结合联网搜索结果生成回答。
步骤三:API调用
PAI-RAG服务已兼容OpenAI接口协议,按以下方式调用。
获取RAG服务调用信息
在模型在线服务(EAS)页面,单击RAG服务名称,进入概览页面。
在基本信息区域,单击查看调用信息。
在调用信息对话框,获取服务访问地址和Token。
说明您可以选择使用公网地址或VPC内网地址:
使用公网调用地址:调用客户端需支持访问公网。
使用VPC调用地址:调用客户端必须与RAG服务位于同一个专有网络内。
HTTP调用
调用方式
调用方式 | |
调用地址 |
|
请求方式 | POST |
请求HEADERS |
|
HTTP Body | 其中:
|
调用方法
支持以下几种调用方法:
cURL
示例代码如下:
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。
在线调试
在模型在线服务(EAS)页面,单击RAG服务操作列下的在线调试,进入在线调试页面。
在调试页面的在线调试请求参数区域的Body处填写已准备好的请求体。并在请求URL文本编辑框中添加
/v1/chat/completions。配置请求参数:请求方式选择 POST,路径为
/v1/chat/completions。选择 Body 页签,格式设为 raw,在请求体中填写 JSON,主要参数包括:model:模型名称,例如"default"messages:多轮对话消息数组,每条消息包含role(user 或 assistant)和contentstream:是否流式返回,设为truesearch_web:是否联网搜索,设为trueindex_name:索引名称,例如"default_index"
单击发送请求。
Postman
按照以下示例发送服务请求
请求方式选择POST,并输入请求地址
<EAS_URL>/v1/chat/completions和请求体,其中<EAS_URL>需替换为RAG服务访问地址。示例如下:{ "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" }返回示例
流式输出
{"id": "6a67eab8f7354616b9a55ddc48c0354f", "choices": [{"delta": {"content": "", "function_call": null, "refusal": null, "role": "assistant", "tool_calls": ... {"id": "6a67eab8f7354616b9a55ddc48c0354f", "choices": [{"delta": {"content": "! ", "function_call": null, "refusal": null, "role": "assistant", "tool_calls"... {"id": "6a67eab8f7354616b9a55ddc48c0354f", "choices": [{"delta": {"content": "之旅", "function_call": null, "refusal": null, "role": "assistant", "tool_cal... {"id": "6a67eab8f7354616b9a55ddc48c0354f", "choices": [{"delta": {"content": "杭州", "function_call": null, "refusal": null, "role": "assistant", "tool_call... {"id": "6a67eab8f7354616b9a55ddc48c0354f", "choices": [{"delta": {"content": "愉快的", "function_call": null, "refusal": null, "role": "assistant", "tool_cal... {"id": "6a67eab8f7354616b9a55ddc48c0354f", "choices": [{"delta": {"content": "一次", "function_call": null, "refusal": null, "role": "assistant", "tool_call... {"id": "6a67eab8f7354616b9a55ddc48c0354f", "choices": [{"delta": {"content": "规划", "function_call": null, "refusal": null, "role": "assistant", "tool_call... {"id": "6a67eab8f7354616b9a55ddc48c0354f", "choices": [{"delta": {"content": "您", "function_call": null, "refusal": null, "role": "assistant", "tool_calls"... {"id": "6a67eab8f7354616b9a55ddc48c0354f", "choices": [{"delta": {"content": "帮助", "function_call": null, "refusal": null, "role": "assistant", "tool_call...非流式输出
{ "id": "74771b10e3xxx", "choices": [ { "finish_reason": "stop", "index": 0, "logprobs": null, "message": { "content": "2025年杭州及周边有许多值得一游的景点,以下是一些推荐:\n\n1. **西湖风景名胜区**\n 杭州的标志性景点,漫步苏堤、白堤,或乘船游湖,欣赏湖光山色。西湖十景如断桥残雪、雷峰夕照等都值得一看。\n\n2. **千岛湖风景区**\n 位于淳安县,湖中有1078个岛屿,湖水清澈,风景如画,可以乘船游览梅峰岛、猴岛等,还可以体验水上摩托、皮划艇等活动。\n\n3. **西溪国家湿地公园**\n 集城市湿地、农耕湿地、文化湿地于一体,乘坐摇橹船穿梭于水道之间,感受自然的宁静与和谐。主要景点包括烟水渔庄、深潭口等。\n\n4. **灵隐寺**\n 中国佛教著名古寺院,有着1600多年的历史。寺内建筑雄伟,梵音袅袅,香火鼎盛。周边的飞来峰也值得一游,峰上遍布佛教石窟造像。\n\n5. **良渚古城遗址公园**\n 2025年春节期间免费开放,这里是中华文明5000年历史的见证,拥有中国最早的水利系统,适合历史文化爱好者。\n\n6. **富春桃源**\n 位于富阳区,以天然溶洞和避暑胜地闻名。九霄碧云洞内景观神奇绚丽,夏季凉爽,适合避暑。\n\n7. **大明山风景旅游区**\n 以悬崖峰林、峡谷飞瀑、高山原野为特色,适合登山、观光和避暑。\n\n8. **七里扬帆景区**\n 位于建德市,以\"山青、水清、史悠、境幽\"著称,乘帆船游览,感受《富春山居图》般的美丽风光。\n\n9. **龙门古镇**\n 位于富阳区,有着千年历史,古镇保留了许多古建筑,适合喜欢历史文化的游客。\n\n10. **宋城**\n 中国最大的宋文化主题公园,可以观赏《宋城千古情》演出,体验宋朝市井风情。\n\n这些景点涵盖了自然风光、历史文化、宗教艺术等多种类型,适合不同兴趣的游客。希望这些推荐能帮助您规划一次愉快的杭州之旅!", "refusal": null, "role": "assistant", "audio": null, "function_call": null } } ] }
返回格式
非流式输出
示例结果如下:
{
"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 | 模型在生成文本时是否会参考互联网搜索结果。取值如下:
|