Ollama:Web搜索API和MCP_oalib search
myzbx 2025-10-19 10:06 11 浏览
如果您曾经尝试过 LLM,您就会明白其中的痛点:模型在模式匹配方面非常出色,但往往会虚构一些东西。
如果你问起上周发生的事情,突然间,您得到的只是来自 2022 年的鬼故事。
这次更新改变了这一切。
基本上,Ollama 为他们的模型提供了一种访问互联网的途径。
它们无需产生幻觉,而是可以在回答之前提取真实的结果。
而且设置起来也很简单——你可以获得一个 REST API 以及一些简单的 Python 和 JavaScript 钩子函数。
此外,还有一个免费套餐,这总是一个不错的补充。
1、为什么这很酷
模型会冻结在时间中。
除非你输入数据,否则它们根本“不知道”昨天发生了什么。
所以,如果你想让你的机器人回答诸如“Ollama 引擎本月有什么新功能?”之类的问题,你要么花费数小时使用抓取的数据进行微调……要么干脆让它搜索网页。
现在有了这个 API:
- 你可以获取最新信息。
- 减少“嗯,实际上”的幻觉。
- 构建一个小型的研究助手,在回复之前进行搜索。
感觉就像把谷歌融入了你的聊天机器人的大脑。
2、首次测试:经典的 cURL
我从简单的 cURL 开始。刚刚从我的 Ollama 账户中获取了一个 API 密钥并导出:
export OLLAMA_API_KEY="your_api_key"
然后运行:
curl https://ollama.com/api/web_search \
--header "Authorization: Bearer $OLLAMA_API_KEY" \
-d '{
"query": "what is ollama?"
}'
输出 — JSON 结果:
{
"results": [
{
"title": "Ollama",
"url": "https://ollama.com/",
"content": "Cloud models are now available..."
},
{
"title": "What is Ollama? Introduction to the AI model management tool",
"url": "https://www.hostinger.com/tutorials/what-is-ollama",
"content": "6min read..."
}
]
}
对于一个命令来说还不错。
3、Python 版本
由于我大部分时间都用 Python,所以我切换到了 Python 库。安装方法如下:
pip install "ollama>=0.6.0"
然后:
import ollama
response = ollama.web_search("What is Ollama?")
print(response)
返回的结果基本上是一个简洁的结果列表:
results = [
{
"title": "Ollama",
"url": "https://ollama.com/",
"content": "Cloud models are now available..."
},
{
"title": "Complete Ollama Guide",
"url": "https://collabnix.com/complete-ollama-guide-installation-usage-code-examples",
"content": "Join our Discord Server..."
}
]
非常简洁——我将其集成到另一个总结内容的函数中。
4、JavaScript
如果你更喜欢 JS/Node,那么操作基本相同。
npm install "ollama@>=0.6.0"
然后:
import { Ollama } from "ollama";
const client = new Ollama();
const results = await client.webSearch({ query: "what is ollama?" });
console.log(JSON.stringify(results, null, 2));
同样,返回 JSON。很容易输入到代理甚至前端小部件中。
5、迷你搜索代理
接下来就是它的亮点了。Ollama 允许你将搜索插入到模型循环中,这样 LLM 就可以决定何时进行搜索。我用 Qwen 3 (4B) 测试了它。
以下是基本代码:
from ollama import chat, web_fetch, web_search
available_tools = {'web_search': web_search, 'web_fetch': web_fetch}
messages = [{'role': 'user', 'content': "what is ollama's new engine"}]
while True:
response = chat(
model='qwen3:4b',
messages=messages,
tools=[web_search, web_fetch],
think=True
)
if response.message.thinking:
print('Thinking: ', response.message.thinking)
if response.message.content:
print('Content: ', response.message.content)
messages.append(response.message)
if response.message.tool_calls:
print('Tool calls: ', response.message.tool_calls)
for tool_call in response.message.tool_calls:
function_to_call = available_tools.get(tool_call.function.name)
if function_to_call:
args = tool_call.function.arguments
result = function_to_call(**args)
print('Result: ', str(result)[:200]+'...')
# Result is truncated for limited context lengths
messages.append({'role': 'tool', 'content': str(result)[:2000 * 4], 'tool_name': tool_call.function.name})
else:
messages.append({'role': 'tool', 'content': f'Tool {tool_call.function.name} not found', 'tool_name': tool_call.function.name})
else:
break
会发生什么这里:
- 你提出一个问题。
- 模型思考后会说:“嗯,我应该搜索一下。”
- 访问网络,提取数据,然后据此做出回答。
感觉很像 ChatGPT 的浏览模式,只不过你可以控制每个部分。
6、抓取完整页面
有时你不只是想要片段,你想要的是整个页面。Ollama 为此添加了一个网页抓取功能。
在 Python中:
from ollama import web_fetch
page = web_fetch("https://ollama.com")
print(page)
在 JS 中:
const page = await client.webFetch({ url: "https://ollama.com" });
console.log(page);
您将获得标题、完整内容,甚至所有链接。非常适合摘要器或爬虫。
6、额外功能:MCP + Cline
如果您已经在使用 MCP 服务器(例如 Cline),Ollama 搜索功能将立即可用。请将以下内容添加到您的配置中:
管理 MCP 服务器 > 配置 MCP 服务器 > 添加以下配置:
{
"mcpServers": {
"web_search_and_fetch": {
"type": "stdio",
"command": "uv",
"args": ["run", "path/to/web-search-mcp.py"],
"env": { "OLLAMA_API_KEY": "your_api_key_here" }
}
}
}
现在,每个 MCP 客户端都可以访问实时网页搜索,非常方便。
您可以通过 Goose 的扩展程序连接 Ollama。
相关推荐
- 别再问Cookie了,再问就崩溃了!_别问 再问
-
作者:懿来自:Java极客技术说实话,之前面试都是直接去背诵的面试题,关于Cookie的一些内容,比如说,记录浏览器端的数据信息啦,Cookie的生命周期啦,这些内容,也从来没有研究过C...
- 5分钟学会物流轨迹地图API嵌入到页面中,实现物流轨迹可视化
-
前言在电子商务和在线购物日益普及的今天,为用户提供实时的物流信息已成为提升客户满意度的关键。本文将指导您如何在网页中嵌入物流轨迹地图API,以便用户能够直观地跟踪他们的包裹。1.申请接口、获取API密...
- Springboot项目中几种跨域的解决方法
-
环境:springboot2.3.9.RELEASE什么是跨源资源共享跨源资源共享(CORS)(或通俗地译为跨域资源共享)是一种基于HTTP头的机制,该机制通过允许服务器标示除了它自己以外的其它...
- 基于Java实现,支持在线发布API接口读取数据库,有哪些工具?
-
基于java实现,不需要编辑就能发布api接口的,有哪些工具、平台?还能一键发布、快速授权和开放提供给第三方请求调用接口的解决方案。架构方案设计:以下是一些基于Java实现的无需编辑或只需少量编辑...
- Axios VS Fetch, 用哪个更好?详细对比附案例
-
在JavaScript中进行HTTP请求时,最常用的两个工具是:原生fetchAPI流行的第三方库Axios我都在生产环境中使用过这两个工具。虽然两者都表现良好,但有时我会后悔选择了其中一个而非另一...
- Ollama:Web搜索API和MCP_oalib search
-
如果您曾经尝试过LLM,您就会明白其中的痛点:模型在模式匹配方面非常出色,但往往会虚构一些东西。如果你问起上周发生的事情,突然间,您得到的只是来自2022年的鬼故事。这次更新改变了这一切。基本上...
- 基于浏览器扩展 API Mock 工具开发探索|得物技术
-
一、前言在日常开发过程中,偶尔会遇到后端接口未完成或者某个环境出现问题需要根据接口返回来复现等等场景。刚好最近在学习浏览器插件的相关知识,并在此背景下开发了一款基于浏览器插件的Mock工具。该工...
- JavaScript动态注入的几种方法_js动态引入js
-
在现代的Web开发中,JavaScript动态注入是一个强大的技术,它允许开发者在网页运行时动态地修改网页内容和行为,方便进行调试和维护。动态注入通常涉及以下几个关键概念:DOM(文档对象模型)、和...
- 面试官:如何通过 MyBatis 查询千万数据并保证内存不溢出?
-
推荐学习真香警告!Alibaba珍藏版mybatis手写文档,刷起来牛掰!“基础-中级-高级”Java程序员面试集结,看完献出我的膝盖闭关28天,奉上[Java一线大厂高岗面试题解析合集],备战金九银...
- nextjs教程三:获取数据_nextcloud数据迁移
-
数据的获取数据获取是任何应用程序中最重要的部分,本文将介绍,如何在react,nextjs中获取数据主要有种方法可以获取数据在服务端,用fetch获取数据在客户端,通过路由处理器获取数据下面分别...
- Fetch API 教程_fetch_all
-
JavaScript初学者学完语法,进入实际的网页编程,一定有人告诉你,要掌握一个叫做XMLHttpRequest的东西。脚本都靠它发出HTTP请求,跟服务器通信。所谓的AJAX操作就是...
- Mozilla火狐39.0正式版增加Emoji支持
-
2015-07-0310:41:43作者:李熙Mozilla旗下浏览器火狐(Firefox)39.0正式版在今日发布,新版在性能上改进不大,着重于浏览器的功能和细节改进:新版提升了Firefox...
- 如何设计前端监控sdk,实现前端项目全链路监控
-
一、埋点系统设计与实现(文章最后有如何回答)1.埋点分类1.1手动埋点(代码埋点)//业务代码中主动调用tracker.track('button_click',{&nbs...
- 如何快速实现一套流程编排系统,前端开发组件都有哪些,一篇搞懂
-
早上9点,AI产品经理紧急拉会:“我们的客户明天要看到AI审批流程原型,传统开发至少要一周,有什么办法今天就能上线?”这时,你打开流程编排画布,拖拽几个节点,连接大模型API和服务,1小时后客户竖起...
- 2023金九银十必看前端面试题!2w字精品!
-
导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。答案:CSS的盒模型是用于布局和定位元素的概念。它由内容区域...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)