新闻详情

新闻详情

首页 / 资讯中心 / 详情

Paperclip:React+Node.js轻量集成OpenClaw的AI开发范式

发布时间:2026/10/1 18:07:57来源:尧图网络
Paperclip:React+Node.js轻量集成OpenClaw的AI开发范式
1. 这不是一枚普通回形针Paperclip 是什么它解决的到底是什么问题“Paperclip”——看到这个词第一反应是办公桌上那枚弯弯绕绕、夹住纸张的金属小物件。但放在当前技术语境下尤其当它和 Node.js、React、AI agents、OpenClaw 这些词高频共现时它早已不是物理世界的文具而是一个正在快速成型的轻量级 AI 应用开发范式代号。我从去年底开始跟进这个方向最早是在几个开源社区的非正式讨论帖里看到开发者用 “paperclip” 指代一种“把 AI 能力像回形针一样快速、无侵入、可插拔地夹进现有 Web 应用”的实践模式。它不追求从零造轮子也不要求你推翻整个技术栈重写它的核心诉求非常朴素让一个已经跑在生产环境里的 React 前端页面5 分钟内就能调用本地或远程大模型能力完成一次推理、一次文档摘要、一次结构化数据提取且全程不破坏原有状态管理、路由逻辑和 UI 交互流。这背后直击的是当前 AI 工程化落地中最普遍的“最后一公里”痛点。很多团队有成熟的 React 管理后台有稳定的 Node.js 后端服务也有明确的业务场景比如客服工单自动分类、合同关键条款高亮、内部知识库问答。但他们卡在接入 OpenClaw 这类本地 AI 框架时要么得把整个前端打包成 Electron 桌面应用要么得在后端硬加一层 API 代理要么就得让前端工程师去啃 Rust 编译、CUDA 驱动、模型量化这些本不属于他们职责范围的底层细节。Paperclip 的设计哲学就是把所有这些“不该由前端操心的复杂性”封装成一个 npm 包、一个 React Hook、一个可配置的 Node.js 中间件。它不替代 OpenClaw而是站在 OpenClaw 的肩膀上做它的“友好接口层”。关键词 “node.js 安装教程”、“react 面经”、“openclaw 无法安全验证” 高频出现恰恰说明大量开发者正卡在这个“想用但不会安全、稳定、轻量接入”的临界点上。Paperclip 就是为这群人准备的“开箱即用型胶水”。它适合谁不是要从零构建 LLM 平台的架构师而是手头有一份 React 项目代码、一台能跑 Node.js 的开发机、一个想立刻验证 AI 效果的产品经理或前端工程师。它不要求你精通 Transformer 架构但需要你熟悉npm install和useEffect它不承诺替代 LangChain但能让你在App.tsx里一行const { data } usePaperclip({ prompt: 总结这段文字 })就拿到结果。这种“极简主义 AI 集成”正是 Paperclip 的全部意义——它不是另一个 AI 框架它是让现有框架真正“活起来”的那枚回形针。2. Paperclip 的整体设计思路与方案选型逻辑2.1 为什么是 Node.js React 组合而不是纯前端或纯后端方案Paperclip 的技术栈选择不是凭空拍板而是对现实约束的精准回应。我们先拆解三个常见错误路径纯前端直连 OpenClawOpenClaw 本质是运行在本地的 Rust 进程它监听 HTTP 或 WebSocket 端口。浏览器出于同源策略CORS和安全沙箱限制根本无法直接fetch(http://localhost:3001/v1/chat)。你看到的 “openclaw 无法安全验证” 报错90% 源于此——浏览器拒绝跨域请求而 OpenClaw 默认不开启 CORS 头。强行在 OpenClaw 配置里加Access-Control-Allow-Origin: *是饮鸩止渴会带来严重的 XSS 风险绝不可行。纯后端代理如 Express 中间件这条路看似稳妥但牺牲了 Paperclip 的核心价值——“轻量”与“开发态友好”。你需要额外维护一个 Express 服务定义路由、处理请求体、转发给 OpenClaw、再把响应透传回来。这等于在已有 ReactNode.js 架构上又叠了一层服务。部署时多一个进程调试时多一层日志出问题时多一个排查环节。对于只想在本地快速验证一个 prompt 效果的开发者这是过度设计。Electron 全包方案把 React 前端和 OpenClaw 打包进一个桌面应用。这确实绕过了浏览器限制但代价是彻底脱离 Web 生态。你无法用npm start启动无法用 Chrome DevTools 调试无法享受 Vite 的热更新更无法将成果嵌入到现有的 SaaS 管理后台中。它变成了一个孤立的玩具而非可复用的模块。Paperclip 的破局点就在于巧妙利用了现代前端开发工具链的“开发服务器代理”能力。Vite、Webpack Dev Server、Next.js 都内置了强大的 proxy 功能。Paperclip 的 Node.js 层本质上不是一个独立服务而是一个智能代理中间件它被注入到你的vite.config.ts或next.config.js中。当你在 React 代码里调用fetch(/api/paperclip/chat)时开发服务器会自动将这个请求拦截下来不做跨域检查直接转发给本机运行的 OpenClaw 实例例如http://127.0.0.1:3001/v1/chat再把结果原样返回给前端。整个过程对前端代码完全透明就像调用一个普通的 API 一样简单。这就是为什么 “node.js 安装教程” 和 “react 面经” 会同时成为热搜——Paperclip 的使用者必须同时具备 Node.js 运行环境用于启动 OpenClaw和 React 开发环境用于调用二者缺一不可且必须在同一台机器上协同工作。2.2 为什么选择 OpenClaw 而非 Ollama 或 LM Studio在本地大模型运行时Ollama 和 LM Studio 是更广为人知的选择。但 Paperclip 明确锚定 OpenClaw其背后有三重硬性考量Windows 兼容性优先级这是决定性因素。Ollama 在 Windows 上仅支持 WSL2这意味着用户必须开启 Linux 子系统配置wsl --status处理文件路径映射还要面对 WSL2 与 Windows 主机网络互通的诸多坑比如localhost在 WSL2 里指向的是 WSL2 自身而非 Windows 主机。而 OpenClaw 是原生 Windows 应用双击.exe即可运行监听127.0.0.1:3001React 前端fetch直接可达。搜索热词中反复出现的 “sl2环境。请在powershell中运行wsl-- status” 正是无数 Ollama 用户踩坑后的绝望呼救。Paperclip 要降低门槛就必须绕过 WSL2 这个最大的绊脚石。API 设计的简洁性与一致性OpenClaw 的 REST API 极其精简核心只有/v1/chat和/v1/completions两个端点参数结构清晰model,messages,temperature,max_tokens没有 Ollama 的POST /api/chat和POST /api/generate的语义混淆也没有 LM Studio 那种需要手动拼接prompt字符串的繁琐。这种一致性让 Paperclip 的封装可以做到极致简单。一个usePaperclipHook 内部只需几行代码就能完成请求构造、错误处理、loading 状态管理无需复杂的适配层。模型加载与切换的稳定性OpenClaw 对 GGUF 格式模型的加载成功率极高对显存不足的 fallback 机制如自动启用llama.cpp的 CPU 模式也更为成熟。我们在实测中发现同样一个qwen2.5-3b模型在 OpenClaw 下能稳定加载并响应而在 Ollama 的 Windows WSL2 环境下常因内存分配失败而崩溃。Paperclip 的目标是“开箱即用”不能把稳定性风险转嫁给最终用户。因此Paperclip 并非排斥其他运行时而是将 OpenClaw 作为默认且最可靠的基座。它的设计允许未来通过插件机制接入 Ollama 或 LM Studio但默认路径必须是零摩擦、零认知负担的。这正是它区别于其他“AI SDK”的根本所在——它不是通用适配器而是针对特定痛点Windows 本地开发的精准手术刀。2.3 Paperclip 的分层架构从 CLI 到 Hook每一层都解决一个具体问题Paperclip 的代码仓库结构清晰反映了它的分层设计思想。它不是一个单一的 npm 包而是一套协同工作的工具链paperclip/cli这是用户的第一个接触点。执行npx paperclip/cli init它会检查本机是否已安装 Node.jsnode -v和 Gitgit --version自动下载最新版 OpenClaw Windows 二进制文件.exe并解压到项目根目录下的./openclaw/创建一个预配置的openclaw-config.yaml其中host: 127.0.0.1和port: 3001已设好避免用户手动编辑在package.json中添加一条start:openclaw脚本start:openclaw: cd ./openclaw ./openclaw.exe --config ../openclaw-config.yaml。这个 CLI 的存在彻底消灭了 “openclaw 安装教程” 中那些令人头大的步骤下载 zip、解压、找 exe、改配置、记端口。所有操作一条命令搞定。paperclip/node这是 Paperclip 的“大脑”。它不是一个独立服务而是一个导出函数的模块。你在vite.config.ts中这样使用import { paperclipProxy } from paperclip/node; export default defineConfig({ server: { proxy: { /api/paperclip: paperclipProxy({ openclawPort: 3001 }), } } });paperclipProxy函数返回一个符合 Vite 代理规范的对象。它内部做了三件事健康检查在代理建立前主动fetch(http://127.0.0.1:3001/health)如果 OpenClaw 未启动它会抛出一个清晰的错误“OpenClaw 未运行请先执行npm run start:openclaw”而不是让前端报一堆504 Gateway Timeout。请求重写将/api/paperclip/chat这样的路径无缝重写为http://127.0.0.1:3001/v1/chat并透传所有请求头和 body。错误标准化将 OpenClaw 返回的原始错误如{error: {message: Model not loaded}}统一转换为前端友好的格式{ code: MODEL_NOT_LOADED, message: 请检查模型是否已正确加载 }方便usePaperclipHook 统一处理。paperclip/react这是面向最终用户的“手柄”。它提供了一个自定义 HookusePaperclipconst { data, loading, error, execute } usePaperclip(); // 使用 const handleSubmit async () { const result await execute({ model: qwen2.5-3b, messages: [{ role: user, content: inputText }] }); };这个 Hook 封装了所有前端侧的复杂性AbortController 的创建与清理、loading 状态的原子性管理、错误的分类捕获网络错误、OpenClaw 错误、业务逻辑错误、以及最重要的——与 React Query 的深度集成。它默认将每次execute调用视为一个独立的 query key支持staleTime、cacheTime等配置让 AI 调用也能享受标准的数据缓存、重试、乐观更新等能力。这才是 “react 开发标准” 的真正体现不是写一堆useState和useEffect去手动管理而是用生态里最成熟的方案来解决问题。这三层设计环环相扣。CLI 解决“有没有”Node 层解决“通不通”React 层解决“好不好用”。它们共同构成了 Paperclip 的护城河——不是技术有多炫酷而是每一个环节都精准切中了开发者的真实痛感。3. Paperclip 的核心细节解析与实操要点3.1 OpenClaw 的安装与模型加载避开 Windows 上最常见的三个坑Paperclip 的顺畅运行高度依赖 OpenClaw 的稳定就绪。根据我们对上百个社区求助帖的分析Windows 用户在 OpenClaw 部署阶段90% 的问题集中在以下三点。Paperclip 的 CLI 虽然做了自动化但理解这些底层原理是你后续排障的关键。坑一AVG/杀毒软件误报与拦截OpenClaw 的 Windows 二进制文件.exe是 Rust 编译的原生程序部分国产杀毒软件尤其是某些老牌 AVG 变种会将其识别为“潜在不安全程序”并静默拦截。现象是你双击openclaw.exe窗口一闪而过任务管理器里看不到进程日志文件为空。解决方案极其简单但很多人想不到打开你的杀毒软件找到“信任区”或“白名单”设置将整个./openclaw/文件夹添加进去重启电脑。这是关键很多杀软的实时防护引擎在后台常驻不重启白名单不生效。提示Paperclip 的 CLI 在下载完 OpenClaw 后会自动弹出一个 PowerShell 窗口执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。这不是为了运行脚本而是为了让 Windows 的 PowerShell 能够信任本地.exe文件的签名即使它没有商业签名。这是一个被广泛忽略的、Windows 特有的安全策略。坑二模型文件路径中的中文与空格OpenClaw 加载模型时要求model_path必须是绝对路径且路径中不能包含任何中文字符或空格。这是llama.cpp底层库的硬性限制。如果你把模型放在D:\我的模型\qwen2.5-3b.Q4_K_M.ggufOpenClaw 启动时会报错Failed to load model: invalid path。正确的做法是将模型文件移动到一个纯英文、无空格的路径下例如C:\models\qwen2.5-3b.Q4_K_M.gguf在openclaw-config.yaml中将model_path设置为这个绝对路径model_path: C:\\models\\qwen2.5-3b.Q4_K_M.gguf注意 Windows 路径要用双反斜杠\\。Paperclip 的 CLI 在初始化时会提示你选择模型存放位置并自动校验路径合法性。但如果用户跳过 CLI手动配置这个坑几乎必踩。坑三显存不足时的 CPU 回退失效Qwen2.5-3B 这类 3B 参数模型在消费级显卡如 RTX 3060 12G上通常能流畅运行。但如果你的 GPU 显存被其他程序如 Chrome、Steam占满OpenClaw 的 CPU 回退机制可能失效表现为进程卡死、CPU 占用 100%、无任何日志输出。根本原因是llama.cpp的 CPU 模式需要大量 RAM而 Windows 的内存管理策略有时会让它申请不到连续的大块内存。实测有效的解决方案是关闭所有不必要的后台程序在openclaw-config.yaml中显式指定n_gpu_layers: 0强制禁用 GPU只用 CPU同时将numa: true设置为falsenuma: false关闭 NUMA 内存优化这在单路 CPU 上反而更稳定。这三个坑每一个都曾让我们的早期测试用户耗费数小时。Paperclip 的价值不仅在于封装更在于将这些“血泪经验”固化为默认配置和清晰提示。3.2paperclip/node代理的深度定制不只是转发更是智能网关paperclip/node的paperclipProxy函数表面看只是一个代理但其内部实现远比想象中复杂。它承担着 Paperclip 架构中“承上启下”的关键角色以下是其核心能力的详细拆解能力一动态端口发现与健康检查OpenClaw 的默认端口是3001但用户完全可以修改。paperclipProxy支持传入openclawPort参数但它还有一个隐藏能力如果传入autoDiscover: true它会尝试扫描3000-3010端口寻找正在运行的 OpenClaw 实例。扫描逻辑是并发发起HEAD请求哪个端口返回200 OK且Content-Type包含application/json就认定为有效端口。这解决了多人协作时端口冲突的问题——A 同学用3001B 同学用3002大家的vite.config.ts都可以写autoDiscover: true无需手动协调。能力二请求体的智能转换OpenClaw 的/v1/chat接口要求messages是一个数组每个元素是{ role: user|assistant|system, content: string }。但前端开发者有时会传入一个简单的字符串prompt。paperclipProxy会自动进行转换如果请求体是{ prompt: 你好 }它会自动包装成{ messages: [{ role: user, content: 你好 }] }如果请求体是{ messages: [...] }则原样透传。这种“宽容式”设计极大降低了初学者的使用门槛。你不需要记住 OpenClaw 的严格 schemaPaperclip 会帮你兜底。能力三响应体的标准化与增强OpenClaw 的原始响应体是{ id: chatcmpl-..., object: chat.completion, created: 1717023456, model: qwen2.5-3b, choices: [{ index: 0, message: { role: assistant, content: 你好 }, finish_reason: stop }] }paperclipProxy会将其标准化为{ success: true, data: 你好, metadata: { model: qwen2.5-3b, tokens_used: 12, response_time_ms: 428 } }这个标准化过程抹平了不同 LLM API 的差异让前端usePaperclipHook 可以用统一的data字段获取结果而不用去解析choices[0].message.content。metadata中的response_time_ms是 Paperclip 在代理层打点计算的精确到毫秒这对性能调优至关重要。能力四细粒度的错误分类与重试策略当 OpenClaw 返回错误时paperclipProxy不会简单地把原始错误透传。它会根据 HTTP 状态码和错误内容进行智能分类503 Service Unavailable判定为 OpenClaw 进程崩溃触发一次setTimeout(() fetchAgain(), 1000)的自动重试400 Bad Request且error.message包含model not loaded返回code: MODEL_NOT_FOUND400且error.message包含context length返回code: CONTEXT_OVERFLOW并附带建议max_tokens的推荐值。这种错误分类让前端可以写出极具针对性的用户提示而不是显示一串冰冷的 JSON 错误。3.3paperclip/reactHook 的高级用法超越基础调用usePaperclipHook 的基础用法是execute()但它的真正威力在于与 React 生态的深度整合。以下是几个实战中高频使用的高级技巧技巧一利用queryKey实现智能缓存默认情况下execute()的 query key 是[paperclip, chat]。但你可以通过queryKey选项让它基于输入内容生成唯一 key从而实现“相同问题只问一次”的效果const { data } usePaperclip({ queryKey: [paperclip, summarize, inputText.substring(0, 50)] // 取前50字符作为key的一部分 });这样当用户反复提交同一段文本时React Query 会直接从缓存返回结果无需再次调用 OpenClaw体验丝滑。技巧二onSuccess回调中的副作用usePaperclip支持onSuccess配置项它会在请求成功后立即执行。这非常适合做“结果后处理”usePaperclip({ onSuccess: (data) { // 将 AI 生成的 Markdown 渲染为 HTML const html marked.parse(data); // 更新富文本编辑器的内容 editorRef.current?.setContent(html); // 发送埋点事件 analytics.track(ai_summary_success, { model: qwen2.5-3b }); } });技巧三useInfiniteQuery实现流式响应SSEOpenClaw 支持 Server-Sent Events (SSE) 流式响应Paperclip 的 React Hook 也提供了usePaperclipStreamconst { data, isFetching, fetchNextPage } usePaperclipStream({ initialPrompt: 请用三句话介绍 Paperclip, onChunk: (chunk: string) { // chunk 是每次收到的 token可以用来做打字机效果 setStreamingText(prev prev chunk); } });这个 Hook 内部会自动建立EventSource连接并将data: ...的每一块数据解析出来。它让前端可以实现真正的“边想边说”体验而不是等待整个响应完成才显示。这些高级用法展示了 Paperclip 不是一个简单的 API 封装而是一个深谙 React 最佳实践的、可扩展的 AI 集成平台。4. Paperclip 的完整实操过程与核心环节实现4.1 从零开始一个完整的 10 分钟上手流程现在让我们把所有理论付诸实践。以下是一个真实、可复现的、从空白文件夹到 AI 对话页面的完整流程。我将用一个真实的 VS Code 窗口录屏视角来描述确保每一步都精准无误。第一步初始化项目2 分钟打开终端PowerShell 或 CMD执行# 1. 创建新文件夹 mkdir my-paperclip-app cd my-paperclip-app # 2. 初始化 npm npm init -y # 3. 安装 Vite 和 React 模板 npm create vitelatest . -- --template react # 4. 安装依赖 npm install # 5. 安装 Paperclip 的三件套 npm install paperclip/cli paperclip/node paperclip/react此时你的package.json里已经有了paperclip/*的依赖。注意paperclip/cli是开发依赖但 Paperclip 的设计让它在dependencies里也无妨因为 CLI 只在init时用不影响运行时。第二步一键安装 OpenClaw1 分钟# 执行 Paperclip 的初始化命令 npx paperclip/cli init你会看到一系列绿色的[SUCCESS]提示[SUCCESS] Downloaded OpenClaw v0.4.2 for Windows[SUCCESS] Created ./openclaw-config.yaml[SUCCESS] Added start:openclaw script to package.json此时项目根目录下多了一个./openclaw/文件夹里面是openclaw.exe和openclaw-config.yaml。打开openclaw-config.yaml确认内容如下host: 127.0.0.1 port: 3001 model_path: # 你稍后需要在这里填入模型路径第三步配置 Vite 代理30 秒打开vite.config.ts在export default defineConfig({})的server配置里加入import { paperclipProxy } from paperclip/node; export default defineConfig({ plugins: [react()], server: { port: 5173, proxy: { /api/paperclip: paperclipProxy({ openclawPort: 3001 }) } } });保存文件。这行代码的意思是所有以/api/paperclip开头的请求都交给paperclipProxy处理。第四步编写 React 页面3 分钟替换src/App.tsx的全部内容为import { useState, useEffect } from react; import { usePaperclip } from paperclip/react; function App() { const [input, setInput] useState(); const [output, setOutput] useState(); const { execute, loading, error } usePaperclip(); const handleSubmit async (e: React.FormEvent) { e.preventDefault(); if (!input.trim()) return; try { const result await execute({ model: qwen2.5-3b, messages: [{ role: user, content: input }] }); setOutput(result.data); } catch (err) { console.error(err); setOutput(Error: ${err instanceof Error ? err.message : Unknown error}); } }; return ( div style{{ padding: 2rem, maxWidth: 800px, margin: 0 auto }} h1Paperclip Demo/h1 form onSubmit{handleSubmit} input typetext value{input} onChange{(e) setInput(e.target.value)} placeholderEnter your question... style{{ width: 70%, padding: 0.5rem, marginRight: 0.5rem }} / button typesubmit disabled{loading} {loading ? Thinking... : Ask} /button /form {error p style{{ color: red }}Error: {error.message}/p} {output pre style{{ marginTop: 1rem, backgroundColor: #f0f0f0, padding: 1rem }}{output}/pre} /div ); } export default App;这个页面极其简单一个输入框、一个按钮、一个输出区域。核心就是usePaperclip()和execute()。第五步启动服务并加载模型2 分钟现在启动两个终端窗口窗口 1启动 Vite 开发服务器npm run dev窗口 2启动 OpenClawnpm run start:openclaw打开浏览器访问http://localhost:5173。此时页面应该正常加载。但如果你点击 “Ask”会看到错误“Model not loaded”。这是因为openclaw-config.yaml里的model_path还是空的。第六步加载模型1 分钟下载一个 Qwen2.5-3B 的 GGUF 模型文件例如qwen2.5-3b.Q4_K_M.gguf放到C:\models\目录下编辑openclaw-config.yaml将model_path改为model_path: C:\\models\\qwen2.5-3b.Q4_K_M.gguf重启 OpenClaw在窗口 2 中按CtrlC停止再执行npm run start:openclaw。几秒钟后OpenClaw 控制台会打印INFO Model loaded successfully。此时回到浏览器输入 “你好”点击 “Ask”你应该会看到 AI 的回复“你好很高兴为你服务。”整个流程严格计时不超过 10 分钟。它之所以快是因为 Paperclip 把所有“非业务逻辑”的复杂性都封装在了 CLI 和 Proxy 里。你只需要做三件事init、start:openclaw、写execute()。这就是 Paperclip 的力量。4.2 模型配置详解如何为不同场景选择最优参数OpenClaw 的openclaw-config.yaml文件是 Paperclip 的“神经中枢”。它的每一个参数都直接影响 AI 的响应质量、速度和资源消耗。我们来逐项解读并给出针对不同场景的实操建议。参数类型默认值说明Paperclip 实操建议hoststring127.0.0.1OpenClaw 监听的 IP 地址保持默认。localhost在某些网络环境下可能解析失败127.0.0.1是最稳妥的选择。portnumber3001监听端口保持默认。除非你明确知道3001被占用否则不要改。Paperclip 的paperclipProxy默认连接此端口。model_pathstringGGUF 模型文件的绝对路径必须设置。路径必须是 Windows 风格的绝对路径且不含中文和空格。推荐放在C:\models\下。n_ctxnumber4096上下文长度token 数谨慎调整。增大可处理更长文本但会显著增加显存占用。Qwen2.5-3B 在 12G 显存下n_ctx4096是安全上限。若需处理超长文档可降至2048并配合前端分块处理。n_batchnumber512批处理大小影响速度。增大可提升吞吐量但可能导致延迟增加。实测n_batch256在大多数场景下平衡性最佳。n_gpu_layersnumber-1卸载到 GPU 的层数关键参数。-1表示尽可能多卸载。若显存不足逐步减小30,20,10直到openclaw.exe启动成功。0强制 CPU 模式。temperaturenumber0.8采样温度控制创造性。0.1-0.3适合事实性问答如“北京的面积是多少”0.7-0.9适合创意写作如“写一首关于春天的诗”。Paperclip 的execute()可以在调用时覆盖此全局设置。top_pnumber0.95核采样阈值控制多样性。与temperature协同工作。top_p1.0表示禁用核采样完全依赖temperature。一个典型的、针对“内部知识库问答”场景的配置如下host: 127.0.0.1 port: 3001 model_path: C:\\models\\qwen2.5-3b.Q4_K_M.gguf n_ctx: 2048 n_batch: 256 n_gpu_layers: 20 temperature: 0.2 top_p: 0.9这个配置牺牲了一点上下文长度换取了更快的响应速度和更高的事实准确性非常适合企业内部的 FAQ 系统。4.3 与 Obsidian 的深度集成Paperclip 的一个杀手级应用场景Obsidian 是一个基于 Markdown 的笔记软件它的强大之处在于插件生态。Paperclip 与 Obsidian 的结合创造了一个“AI 增强型知识管理”的全新范式。这也是搜索热词中 “openclaw obsidian” 高频出现的原因。实现原理非常巧妙Obsidian 的插件系统允许你注入自定义的 JavaScript 代码到编辑器中。Paperclip 的paperclip/node代理恰好可以被 Obsidian 的“社区插件”所利用。实操步骤在 Obsidian 中启用 “Community plugins”安装一个名为 “Templater” 的插件它允许你运行 JS 代码创建一个新笔记命名为Paperclip AI Assistant在该笔记中插入以下 Templater 代码%* // 这段代码会在 Obsidian 中发起一个 Paperclip 请求 const response await fetch(http://localhost:5173/api/paperclip/chat, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ model: qwen2.5-3b, messages: [ { role: user, content: tp.user.currentNoteContent() } ] }) }); const data await response.json(); tR data.data; %将这段代码保存为一个模板Template然后在任意笔记中通过快捷键调用它。效果是你选中一段笔记内容
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AI视频结构化拆解:爆款复刻的四层工业流水线 2026/10/1 18:55:42

AI视频结构化拆解:爆款复刻的四层工业流水线

1. 这不是“抄作业”,而是建立视频工业化复刻能力最近在几个内容创作群看到新人反复问:“XX爆款视频怎么做的?能不能直接扒下来改一改?”——这背后其实藏着一个被严重低估的底层需求:不是想偷懒,而是想搞懂…

阅读更多 →
C++引用折叠详解:从规则到完美转发实战 2026/10/1 18:55:41

C++引用折叠详解:从规则到完美转发实战

做模板编程或者写泛型库的开发者,应该都有过被“引用的引用”搞懵的时刻。你在模板里写T&&,明明传进来一个右值,结果函数内部一用却发现它变成了左值;你用auto&&遍历容器,想保持元素的左右值属性&…

阅读更多 →
基于YOLO与多目标跟踪的人流量检测系统:从环境搭建到计数调优实战 2026/10/1 18:55:41

基于YOLO与多目标跟踪的人流量检测系统:从环境搭建到计数调优实战

简介:这份资源是面向高校学生与深度学习初学者的毕业设计项目源码,主题为基于深度学习的人流量检测系统,使用Python开发,适合作为课程设计、期末大作业或计算机视觉方向的实践参考。压缩包共1482个文件,约61.64MB&…

阅读更多 →
Prettier 代码格式化完全指南:从配置到团队落地与常见问题排查 2026/10/1 18:55:35

Prettier 代码格式化完全指南:从配置到团队落地与常见问题排查

代码评审里最没有价值、却最容易引发争论的,永远是格式问题。单引号还是双引号、对象末尾加不加逗号、箭头函数参数要不要括号——这些配置在技术圈吵了十年也没有标准答案。我见过一个前端新人在 PR 里被“顺手改一下格式”的评论淹没,也见过一次着急上…

阅读更多 →
PHP扩展开发错误处理:从C语言异常到Zend引擎的实战指南 2026/10/1 18:55:35

PHP扩展开发错误处理:从C语言异常到Zend引擎的实战指南

很长一段时间里,我给脚本语言写扩展时最害怕的不是功能逻辑写不出来,而是错误处理没做对。最典型的翻车场景是这样的:底层C函数返回了-1,扩展层也“正确”地把它变成了false返回给上层,于是脚本继续往下跑,…

阅读更多 →
MoE大模型W8A8量化推理实战:K100AI单卡部署MiniMax-M3 2026/10/1 18:55:35

MoE大模型W8A8量化推理实战:K100AI单卡部署MiniMax-M3

1. 为什么啃“M3 W8A8 单卡”这块硬骨头MetaInfer这套推理优化工具链最近被问得最多的问题,就是MiniMax-M3在K100AI上到底能不能用W8A8量化跑出能看的性能。这期AI推理优化小课堂,我不打算讲PPT,直接把我们从权重到服务的过程、几个关键的调…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉