提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
基于大模型的在线搜索平台——prepare
前言
为了解决大模型不够“聪明”的问题,业界出现了很多方法来让大模型更加满足我们特定需求,很多技术也都是围绕这方面展开的,比如Prompt、RAG、fine-tuning私有模型,这些技术都是从不同的角度去增加大模型的能力(满足企业或个人需求的能力)。
随着大模型自身越来越强大,他本身的能力可以满足我们很多需求。个人见解,相对于预训练、微调等技术,Prompt调优和RAG增强搜索是其中最易操作且最易出现事半功倍效果的技术。
一、大模型赋能
给大模型赋予在线搜索的能力,可以理解为是RAG,当大模型遇到处理不了的问题,去搜索引擎进行搜索,将搜索结果再次返回给大模型进行处理,将处理后的结果返回出来。当然也可以更复杂,同时赋予大模型知识库和在线搜索两种能力。
二、垂直领域的搜索引擎
本篇(系列)文章实现一个垂直领域的搜索引擎——对于IT人员的搜索引擎
为什么不是通用搜索引擎?
因为通用搜索引擎,数据量太庞大,爬取不同网站的数据对于爬虫代码也有很高的要求,而且获取过多的数据交给大模型处理,会超过大模型上下文长度,需要进行分割,最主要的是使用在线大模型开发时,过长的token也会产生大量的费用。感兴趣的朋友可以自己研究着写一个通用搜索引擎的项目,可以封装成产品,现在来说也是个不错创业产品。
三、方案设计
红色数字标记的步骤是运用大模型原生能力,如果大模型可以解答用户的问题则直接返回结果。
蓝色数字标记的步骤是运用大模型+在线搜索的能力,如果用户询问的问题大模型无法回答,则大模型通过function calling去调用我们自己封装好的工具,也就是Google搜索,Google搜索的能力Google已经通过api提供给我们,所以最重要的是爬虫,对搜索到结果网站进行爬取,获取网站内容。最后,将爬取到的信息交给大模型处理,返回答案。
四、基于Google API的搜索功能
要实现在线搜索的功能只能通过Google api来实现
我们需要先开通Google的api,再创建一个Google的可编程搜索引擎cx**
【需要kx上网、google帐号】
创建Google API 并获取key
地址:https://console.cloud.google.com/
用google帐号登录,然后创建一个Project
进入刚刚创建的Project,点击Library
搜索框搜索Google Search,找到放大镜图片这个库,点击进去Enable
启动之后进入Credentials,创建API key
创建完成后保存自己的API key
创建可编程的搜索引擎
网址:https://programmablesearchengine.google.com/about/
进入点击Get start,创建搜索引擎
创建完成后生成一段js代码,其实就是一个搜索框,可以嵌入任何网页中。其中最主要的是cx
字段,这是你创建的这个搜索引擎的标识,自行保存,后面实现搜索功能需要用到。
到这里准备工作完成,已经获取了一个key一个搜索引擎(cx标识)
另外还需要一个Google api地址:https://www.googleapis.com/customsearch/v1
测试搜索引擎
import requests
import os
from dotenv import load_dotenv
load_dotenv()
GoogleSearch_API_KEY = os.getenv("GoogleSearch_API_KEY")
CX_ID = os.getenv("CX_ID")
GoogleSearch_API = "https://www.googleapis.com/customsearch/v1"
params = {
'q': "Pytorch", # 搜索的内容
'key': GoogleSearch_API_KEY, # 谷歌搜索api key
'cx': CX_ID # 搜索引擎id
}
response = requests.get(url=GoogleSearch_API,params=params)
data = response.json() # 解析数据
print(data)
print(data['items'][0])
其中items
字段就是检索到内容,后面爬取就是这部分内容。
请求参数有很多,常用的如下:
Name | Description |
---|---|
c2coff | 是否开启中文搜索模式默认0表示开启,1表示停止 |
cr | 在指定的国家地区进行搜索,即搜索返回结果只源于该地区 |
dateRestrict | 只搜索某特定时间段内的内容 |
Ir | 搜索特定语言内容的内容 |
num | 搜索返回的结果个数,默认为10个,有效数值为1-10 |
siteSearch | 搜索结果必须包含某网址 |
siteSearchFilter | 搜索结果必须排除某网址 |
搜过功能封装函数
将上面调用Google api实现的搜索功能封装成函数,方便我们后面去使用。
def google_search(query, num_results=10, site_url=None):
GoogleSearch_API_KEY = os.getenv("GoogleSearch_API_KEY")
CX_ID = os.getenv("CX_ID")
GoogleSearch_API = "https://www.googleapis.com/customsearch/v1"
# API 请求参数
if site_url == None:
params = {
'q': query,
'key': GoogleSearch_API_KEY,
'cx': CX_ID,
'num': num_results
}
else:
params = {
'q': query,
'key': GoogleSearch_API_KEY,
'cx': CX_ID,
'num': num_results,
'siteSearch': site_url
}
# 发送请求
response = requests.get(GoogleSearch_API, params=params)
response.raise_for_status()
# 解析响应
search_results = response.json().get('items', [])
# 提取所需信息,这里选择了三个字段,将搜索的信息以json格式保存,后面根据这个信息进行爬取
results = [{
'title': item.get('title', None),
'link': item.get('link', None),
'snippet': item.get('snippet', None),
} for item in search_results]
return results
测试