万普插件库

jQuery插件大全与特效教程

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

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

一、使用模型自带 AI 搜索

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

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

https://ai.aardio.com/api/v1/

API key 指定为:

\0\1\96

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

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

https://imtip.aardio.com/api-keys/

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

API 用法以 ImTip 为例:

接口地址指定为:

https://ark.cn-beijing.volces.com/api/v3/bots

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

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

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

https://openrouter.ai/api/v1

模型 ID 选择:

google/gemini-2.0-flash-001:online

然后输入 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/1350012
var 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/1099320
console.dumpJson(data.token_usage)

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

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言