QQ开放平台搭建和优化个人本地LLM群机器人(二):联网搜索
前言
- # QQ开放平台搭建和优化个人本地LLM群机器人(一)
上期我们搭建了QQ机器人并且使用本地的LLM来进行信息的回复,并添加了记忆功能
这一期我们简单加强一下,添加联网搜索的功能
代码在github
添加指令
首先打开QQ开放平台,登入机器人
左侧栏位找到开发-发布设置-功能配置-指令

创建指令**/联网搜索**,简单设置介绍和权限
底下的是否传参主要是上线的时候给审核看的,不用开
创建好了保存一下就行,这个指令会出现在@机器人之后
联网搜索API
适合大模型的检索引擎也是一个技术方向,自从大模型火了之后有了一些专门做这方面的初创公司。例如,Tavily,一个用的比较多的大模型搜索引擎,不过每人每月只有1000次搜索,我们这次就不用了,我们用Exa,因为没有限制
点下面的USE OUR API,注册登录一下
进去了可以直接从右边的代码里面看到自己的api_key,可以在左边输入问题,运行查看一下结果

我们输入什么是大模型,下面以字典形式返回结果效果好像比较一般里面的比较重要的参数是
- type是针对输入问题的匹配结果的方式
- use_autoprompt是否通过提示词的形式来优化问题
- num_results是一次搜索返回的结果的个数
这些组合可以自己尝试一下,得到适合自己的任务参数设置

接入大模型
先安装一下包pip install exa-py
首先我们使用一个函数来标准化搜索到的内容为字符串,方便输入大模型
注意填入自己的api_key,我们这里添加了一个当前的日期来方便大模型理解
def exa_search(query):
print('搜索:' + query)
exa = Exa(api_key="your_api_key")
result = exa.search_and_contents(query,
type="keyword",
num_results=10,
text=True)
content = '今天日期是:' + str(date.today()) + '\n' + '---' + '\n'
for i in result.results:
content += '信息来源:' + i.title + '\n'
content += '信息内容:' + i.text[:200] + '\n'
content += '---' + '\n'
return content
接下来我们编写提示词,把上面的函数加入调用大模型的过程中
注意我们这里使用的api是http://localhost:11434/api/generate,而非chat,当然chat应该也没有问题
def web_search_reply(query):
content = exa_search(query)
prompt = f'''你是一名信息整理助手。\n
根据接下来提供的搜索结果,回答用户的问题。\n
问题:{query}\n
搜索结果:{content}\n
回答:'''
url = 'http://localhost:11434/api/generate'
data = {"model": "darkidol:latest",
"prompt": prompt,
"stream": False}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers, stream=False)
if response.status_code == 200:
return response.json()['response']
else:
return f"Request failed with status {response.status_code}"
最后在bot的主运行文件里面添加就行了
注意这里我们是把传入字符串的前面“/联网搜索”截断了再输入的
if '/联网搜索' in message.content:
query = message.content[7:]
ai_message = web_search_reply(query)
messageResult = await message._api.post_group_message(
group_openid=message.group_openid,
msg_type=0,
msg_id=message.id,
content=ai_message)
_log.info(messageResult)
总结
这期简单添加了联网搜索的功能,最终的结果不但要看搜索引擎的效果,还要考虑大模型的理解能力
我们在消费级PC/笔记本上部署的大模型,单次搜索任务还好,但是如果把搜索也加入记忆,是难以达到理想的效果的(连续询问,依据历史信息的问题),所以就不添加了。如果你的大模型性能足够强,可以考虑使用tool calling的方法来运用,可以从llama3.1的模板来看是怎么用tool的
源代码
QQ机器人联网搜索功能
331

被折叠的 条评论
为什么被折叠?



