AI 助手开发:调用联网搜索 API 与 RAG 知识库

B站影视 电影资讯 2025-03-10 18:19 1

摘要:点击模型 ID 下拉框选择 deepseek-r1:online(这里的免费模型经常会更新,没事可以刷新一下)。这个是 DeepSeek R1 高速满血版,并且已经开启了联网搜索功能,效果非常好。

免费的 AI 智能体或者搜索应用,虽然使用门槛低、页面效果华丽,但说实话如果要完全释放其能力,调用 API 是更好的选择。

一、使用模型自带 AI 搜索

这方面做得比较好的服务商有火山方舟以及 openrouter 。

可以通过 ImTip 提供的公益接口免费体验火山方舟的 AI 搜索效果,在 ImTip 的 AI 助手中指定接口地址:

API key 指定为:

\0\1\96

点击模型 ID 下拉框选择 deepseek-r1:online (这里的免费模型经常会更新,没事可以刷新一下)。这个是 DeepSeek R1 高速满血版,并且已经开启了联网搜索功能,效果非常好。

火山方舟现在搞活动,可打开下面的链接注册并领取赠金:

然后在火山方舟中点【在线推理】添加 DeepSeek R1 【接入点】,再点【我的应用】并且点击【创建应用】创建一个智能体应用,启用【联网内容搜件】就搞定了,非常方便。

API 用法以 ImTip 为例:

接口地址指定为:

模型 ID 指定为智能体的应用 ID ,然后输入火山方舟的 API key 就可以了。

openrouter 开启 AI 搜索则更为简单,只要在模型 ID 后面添加 :online 后缀就可以了。

以 ImTip 为例,接口地址选择:

然后输入 API key 就可以了。

openrouter 上 Perplexity 提供的一些模型不需要 :online 后缀,例如基于 DeepSeek R1 的推理 + 联网模型 Sonar Reasoning Pro 的模型 ID :

perplexity/sonar-reasoning-pro

这已经是专门做搜索的模型了,测试了一下速度非常快,搜索质量也是棒棒的。

下面演示如何在 aardio 代码中编程调用这些支持联网的 AI 接口:

import console.int; console.showLoading(" Thinking "); //创建 AI 客户端import web.rest.aiChat;var aiClient = web.rest.aiChat( key = '\0\1\96'; url = "https://ai.aardio.com/api/v1/"; model = "deepseek-r1:online";)//创建聊天上下文。var msg = web.rest.aiChat.message;//添加系统提示词。msg.system("你是桌面智能助手。");//添加用户提示词msg.prompt( "Gork3 最近有什么大新闻" );//发送请求,启动会话aiClient.messages(msg, function(deltaText,reasoning){ //显示思考过程 if(reasoning) { return console.writeColorText(reasoning,0xA); } //输出回复 console.writeText(deltaText) });

在 aardio 中调用这些 API 非常简单,如果要增加界面并渲染 Markdown 、数学公式这些也很简单,可查看 aardio 自带的相关范例。

二、调用联网搜索接口

如果接口提供的模型本身没有联网搜索功能,那我们就需要自行调用搜索接口。

这有两种方式,一种方式是利用模型的 function calling 功能让 AI 选择什么时候调用联网接口,还有一种方式是先调用联网搜索并将搜索结果添加到系统提示词,这两种方式各有利弊:

1. 不是所有大模型都支持 function calling ,而且 AI 会有选择地跳过搜索过程,好处是节省了 tokens 。

2. 先根据用户的提示词或历史消息搜索,再将搜索结果加入系统指令,然后再开始对话。适用于任何大模型 。

关于 function calling 可以参考 aardio 自带的范例,下面我们主要说第二种方式。

在 aardio 中我们一般用下面的代码创建聊天消息队列:

var msg = web.rest.aiChat.message;

而 上面的 msg 对象提供一个 msg.url 函数可以直接输入联网搜索返回的数据作为参数,并自动添加相应的系统提示词。

例如调用 Tavily 搜索接口:

//导入 Tavily 搜索接口import web.rest.JSONClient;var http = web.rest.jsonClient;http.setAuthToken("接口密钥");var tavily = http.api("https://api.tavily.com");//搜索,不建议指定 include_raw_content 参数( 返回的 raw_content 可能有乱码 ).var resp = tavily.search( query = "aardio 如何读写 JSON", max_results = 3, //限制返回结果数,默认值为 5。 //topic = "news", //限定返回最新数据,可用 days 字段限制天数(默认为 3 天内)。 include_domains = {"www.aardio.com"}, //可选用这个字段限定搜索的域名)//创建对话消息队列import web.rest.aiChat; var msg = web.rest.aiChat.message;//将搜索结果添加到系统提示词msg.url(resp[["results"]])//添加用户提示词msg.prompt( "DeepSeek 有哪些成就" );

Tavily 拥搜索效果不错,而且每月可以免费搜索 1000 次,个人使用基本上够用了。

下面是调用 exa.ai 的例子:

//导入 Exa 搜索接口import web.rest.jsonClient; var exaClient = web.rest.jsonClient; exaClient.setHeaders({ "x-api-key":"接口密钥"} )var exa = exaClient.api("https://api.exa.ai/");//搜索var searchData,err = exa.search({ query:"DeepSeek 有哪些成就", contents={text= true} numResults:2, includeDomains:{"www.aardio.com"},//可以在指定网站内搜索 type:"keyword" //一般 keyword 搜索就够了(价格低一些)})//创建对话消息队列import web.rest.aiChat; var msg = web.rest.aiChat.message;//将搜索结果添加到系统提示词msg.url(searchData[["data"]][["webPages"]][["value"]])//添加用户提示词msg.prompt( "DeepSeek 有哪些成就" );

openrouter 的联网功能就是调用 exa.ai ,这家搜索也很强,而且注册就送 14美元。

另外一个选择是使用免费开源的 SearXNG,可以自己搭建服务器。在 aardio 中调用 SearXNG 结合 AI 的例子:

import web.rest.jsonLiteClient;var http = web.rest.jsonLiteClient;var so = http.api("https://sousuo.emoe.top/");var resp = so.search( q = "aardio 如何解析 yaml site:www.aardio.com", format = "json"; language = "zh-CN"; enabled_engines = {"duckduckgo"})//创建对话消息队列import web.rest.aiChat; var msg = web.rest.aiChat.message;//将搜索结果添加到系统提示词msg.url(resp[["results"]])//添加用户提示词msg.prompt( "DeepSeek 有哪些成就" );

SearXNG 搜索次数一多可能就会被限制一段时间,自己单独部署一个服务器会好一些,但是这样折腾下来,可能花的钱比使用付费接口的成本还要高,而且还不稳定。

三、在 ImTip 或 aardio 中配置联网搜索

打开 ImTip 或 aardio 的 AI 助手,然点点击底部的联网搜索:

在联网搜索中勾选要使用的接口,输入置 API key 后点【保存】就可以了

四、调用 RAG 知识库

对于特定领域的知识,特定的 RAG 知识库是更好的选择。

下面提供一个 aardio 调用火山方舟知识库示例。注意火山方舟知识库有点贵(调用量小估计是用不起),但是效果好,省事方便。如果使用一些效果很差的免费知识库,那可能就会经常答非所问,胡说八道,一本正经地瞎编虚假信息,把用户气到吐血了。

import console.int;import web.rest.volcengine.client;//创建火山 API 客户端var http = web.rest.volcengine.client( accessKeyId = "ak"; secretAccessKey = "sk"; region = "cn-north-1"; service = "air"; accountId = "账号ID"//鼠标放到火山头像上显示的账号ID);//声明 API var air = http.api("https://api-knowledgebase.ml_platform.cn-beijing.volces.com/api/knowledge/collection/");//发送请求。参数训明: https://www.volcengine.com/docs/84313/1350012var resp,err = air.search_knowledge({ name="知识库名称"; project="default";//项目名称 dense_weight=0.5; limit=4; //限制最大返回结果数量 post_processing={ get_attachment_link=false; rerank_only_chunk=false; rerank_switch=false }; query="这里写需要搜索知识库的用户问题" })//获取数据var data = resp.data;//提取召回片段var result = table.map(data.result_list ,lambda(v,k) '# ' +v.chunk_title +'\r\n\r\n'+ v.content )//显示结果for(k,v in result){ console.log(v) console.more;}//消耗 token 数,计费规则: https://www.volcengine.com/docs/82379/1099320console.dumpJson(data.token_usage)

这个接口的好处是只负责召回知识库,可以更灵活地控制 AI 的处理流程。

来源:aardio

相关推荐