开源扩展集成本地LLM能力,可作为学习浏览器AI集成和本地推理部署的实战参考。
一款用于浏览网页的 RAG LLM 副驾驶,由本地 LLM 驱动。
这款 Chrome 扩展由 Ollama 驱动。推理完全在本地计算机上进行,无需任何远程服务器支持。不过,受 Chrome 扩展平台安全限制的影响,应用仍需依赖本地服务器来运行 LLM。该应用的灵感来自 Web LLM 项目提供的 Chrome 扩展示例,以及 LangChain 提供的本地 LLM 示例。
Lumos。Nox。Lumos。Nox。
总结问题跟踪网站、论坛和社交媒体网站上的长篇讨论串。
总结新闻文章。
针对商家和产品页面中的评论提问。
针对篇幅较长的技术文档提问。
嵌入数据库和 LLM 推理需要使用本地 Ollama 服务器。请下载并安装 Ollama 与 CLI。
ollama pull llama2
OLLAMA_ORIGINS=chrome-extension://* ollama serve
2023/11/19 20:55:16 images.go:799: total blobs: 6
2023/11/19 20:55:16 images.go:806: total unused blobs removed: 0
2023/11/19 20:55:16 routes.go:777: Listening on 127.0.0.1:11434 (version 0.1.10)
注意:必须将环境变量 OLLAMA_ORIGINS 设置为 chrome-extension://*,才能允许来自 Chrome 扩展的请求。如果未正确设置 OLLAMA_ORIGINS,Chrome 扩展中将出现以下错误。
Access to fetch at 'http://localhost:11434/api/tags' from origin 'chrome-extension://<extension_id>' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
运行 launchctl setenv 来设置 OLLAMA_ORIGINS。
launchctl setenv OLLAMA_ORIGINS "chrome-extension://*"
Ollama 服务器也可以在 Docker 容器中运行。容器应将 OLLAMA_ORIGINS 环境变量设置为 chrome-extension://*。
运行 docker run,并通过 -e 参数设置 OLLAMA_ORIGINS 环境变量:
docker run -e OLLAMA_ORIGINS="chrome-extension://*" -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
在项目目录中,你可以运行:
以交互式 watch 模式启动测试运行器。更多信息请参阅运行测试相关章节。
对 src 和 tests 文件运行 eslint 和 prettier。
将应用的生产版本构建到 dist 文件夹。它会以生产模式正确打包 React,并对构建产物进行优化,以获得最佳性能。
构建产物会被压缩,文件名中会包含哈希值。你的应用已经可以部署了!
更多信息请参阅部署相关章节。
参阅 Chrome 扩展文档中的“加载未打包的扩展程序”。
创建键盘快捷键,以便快速访问 Lumos。
前往 chrome://extensions/shortcuts。
为 Lumos 配置快捷键(激活扩展程序)。例如,⌘L(Command 键 + L)。
如果尚未安装 npm,可以从 Releases 页面下载预构建的扩展程序包。
右键单击扩展程序图标并选择 Options,即可访问扩展程序的 Options 页面。
Ollama Model:选择所需的模型,例如 llama2。
Ollama Embedding Model:选择所需的嵌入模型,例如 nomic-embed-text。启动 Ollama 服务器时,请指定 OLLAMA_MAX_LOADED_MODELS=2 环境变量,以允许同时将多个模型加载到内存中。
Ollama Host:选择所需的主机,默认为 http://localhost:11434。
Vector Store TTL(分钟):URL 内容在 vector store 缓存中保存的分钟数。
Content Parser Config:Lumos 默认的内容解析器会提取页面 <body></body> 标签之间的所有文本内容。如需自定义内容解析器,请在配置中添加一项。
Enable/Disable Tools:启用或禁用各个 Tool。如果启用了某个 Tool,可以指定自定义前缀触发词(例如 “calc:”),以覆盖应用内部的 prompt 分类机制。
Enable/Disable Dark Arts:😈
每个 URL 路径都可以拥有自己的内容解析器。匹配时,将采用 URL 路径最长的内容解析器配置。
chunkSize:为了将页面内容索引到 RAG vectorstore 中,每个分块包含的字符数。
chunkOverlap:为了将页面内容索引到 RAG vectorstore 中,相邻分块之间重叠的字符数。
selectors:用于获取页面内容的 document.querySelector() 查询。
selectorsAll:用于获取页面内容的 document.querySelectorAll() 查询。
例如,使用以下配置时,如果当前标签页的 URL 路径是 domain.com/path1/subpath1/subsubpath1,就会采用 domain.com/path1/subpath1 的配置,也就是 chunkSize=600。
{
"domain.com/path1/subpath1": {
"chunkSize": 600,
"chunkOverlap": 200,
"selectors": [
"#id"
],
"selectorsAll": []
},
"domain.com/path1": {
"chunkSize": 500,
"chunkOverlap": 0,
"selectors": [
".className"
],
"selectorsAll": []
}
}
有关如何创建自定义内容解析器,请参阅相关文档。要确认所有可用的查询能力,请参阅 querySelector() 和 querySelectorAll() 的文档。
{
"default": {
"chunkSize": 500,
"chunkOverlap": 0,
"selectors": [
"body"
],
"selectorsAll": []
},
"medium.com": {
"chunkSize": 500,
"chunkOverlap": 0,
"selectors": [
"article"
],
"selectorsAll": []
},
"reddit.com": {
"chunkSize": 500,
"chunkOverlap": 0,
"selectors": [],
"selectorsAll": [
"shreddit-comment"
]
},
"stackoverflow.com": {
"chunkSize": 500,
"chunkOverlap": 0,
"selectors": [
"#question-header",
"#mainbar"
],
"selectorsAll": []
},
"wikipedia.org": {
"chunkSize": 2000,
"chunkOverlap": 500,
"selectors": [
"#bodyContent"
],
"selectorsAll": []
},
"yelp.com": {
"chunkSize": 500,
"chunkOverlap": 0,
"selectors": [
"#location-and-hours",
"#reviews"
],
"selectorsAll": []
}
}
此外,如果页面上存在高亮内容(例如选中的文本),系统将解析这些内容,而不是解析 Content Parser Config 生成的内容。
注意:高亮内容不会被缓存在 vector store 缓存中。之后每次提交包含高亮内容的 prompt 时,都会生成新的 embeddings。
cmd + c:将最后一条消息复制到剪贴板。
cmd + b:将剪贴板文本作为文件附件加载。
cmd + j:切换 Disable content parsing 复选框的状态。
cmd + k:清除所有消息。
cmd + s:将聊天保存到 Chat History。
cmd + ;:打开或关闭 Chat History 面板。
ctrl + c:取消请求(LLM 请求、流式传输或 embeddings 生成)。
ctrl + x:移除文件附件。
ctrl + r:重新生成最后一条 LLM 回复。
注意:在 Windows PC 上,请使用 alt 键代替 cmd 键。
将聊天保存到 Chat History(cmd + s)。打开 Chat History(cmd + ;),然后加载此前保存的聊天。
Lumos 支持多模态模型!系统会下载当前页面中的图片,并将其绑定到模型,供 prompt 使用。请参阅相关文档和示例。
可以将文件附件上传到 Lumos。文件内容会被解析,并通过 Lumos 的 RAG 工作流进行处理,与处理页面内容的方式类似。默认情况下,如果文件扩展名没有在下方明确列出,系统会解析文件中的文本内容。
支持的扩展名类型:
注意:如果存在附件,系统将不会解析页面内容。移除文件附件后,才会恢复对页面内容的解析。
图片文件将通过 Lumos 的多模态工作流进行处理,这需要使用多模态模型。
支持的图片类型:
剪贴板内容可以作为文件附件上传。使用 cmd + b 快捷键,即可将剪贴板文本作为文件附件加载。
Lumos 会根据给定的 prompt 自动调用 Tools。请参阅相关文档和示例。
浏览器中的本地 LLM,由 Ollama 驱动
浏览器中的本地 LLM,由 Ollama 驱动(第 2 部分)
让我们规范在线、内存式 RAG!(第 3 部分)
使用 Ollama 和 LangChain 的 prompt 分类增强 If 语句(第 4 部分)
通过关键词搜索增强 LangChain 的 MemoryVectorStore(第 5 部分)
Chrome 扩展中 LangChain Document Loaders 常见陷阱指南(第 6 部分)