网站中英切换实例网站建设如何赚钱

张小明 2026/1/1 0:22:19
网站中英切换实例,网站建设如何赚钱,网站程序 wordpress 织梦 discuz,太原门户网站引言 想给公司做个智能客服#xff0c;查了一圈 RAG 教程#xff0c;要么讲理论云里雾里#xff0c;要么让你先租个 GPU、搭环境#xff0c;看着就头大。说实话#xff0c;我刚开始研究这块的时候也一样#xff0c;光是配置 LangChain 和向量数据库就折腾了两天#xf…引言想给公司做个智能客服查了一圈 RAG 教程要么讲理论云里雾里要么让你先租个 GPU、搭环境看着就头大。说实话我刚开始研究这块的时候也一样光是配置 LangChain 和向量数据库就折腾了两天还没跑起来。后来发现 Cloudflare 推出了一整套 AI 工具Workers AI Vectorize D1全托管的,免费额度还挺大方。我试着用它们搭了个笔记问答应用从零到能用真的不到 20 分钟代码也就百来行。这篇文章会手把手带你走一遍完整流程先讲清楚RAG 到底是什么不扔术语用大白话实战搭建一个能跑的知识库问答应用有完整代码优化技巧让检索更准确、成本更低部署上线真正用起来你只需要懂点 JavaScript有个 Cloudflare 账号免费跟着操作就能做出来。RAG 是个啥5 分钟看懂工作原理用考试来理解 RAG先说个直观的比喻。你考试的时候闭卷考试只能靠脑子里记的东西答题万一忘了就瞎编。开卷考试就不一样了不确定的时候翻书查资料答案准确多了。RAG检索增强生成就是给 AI 开卷考试的权限。传统 LLM 就像闭卷考试只能基于训练时见过的数据回答。问题是训练数据有时效性不知道最新动态没见过你公司的内部文档记不住所有细节容易瞎编行话叫幻觉RAG 的做法是先从你准备好的知识库里找相关资料然后把资料给 AI让它基于这些内容回答。这样答案既靠谱又能结合最新信息。RAG 的三个核心步骤StatsGrid stats{[{ value: “第1步”, label: “文档转向量存储”, description: “将知识转成数字表示” },{ value: “第2步”, label: “检索相似内容”, description: “找到语义最相关的片段” },{ value: “第3步”, label: “LLM生成答案”, description: “基于检索结果回答” }]} columns{3} /整个流程其实就三步第一步把知识变成向量存起来你有一堆文档对吧RAG 会把每段文字转成一串数字专业术语叫向量或Embedding这串数字代表了文字的语义。打个比方猫很可爱和小猫萌萌的虽然用词不同,但意思接近,转成向量后这两串数字也会很接近。这些向量会存到 Vectorize 这样的向量数据库里。第二步用户提问时,找出最相关的知识片段用户问怎么训练猫咪的时候系统会先把这个问题也转成向量,然后在数据库里找距离最近的那几段内容——也就是语义最相关的知识。这个过程叫相似度搜索速度很快几毫秒就能从几万条数据里找出最匹配的 3-5 条。第三步把检索到的内容喂给 LLM 生成答案找到相关内容后组装成一个 Prompt 发给 AI以下是相关资料 [检索到的内容1] [检索到的内容2] ... 用户问题怎么训练猫咪 请基于上述资料回答。AI 看到这些参考资料就能给出准确且有依据的答案了。为什么选 Cloudflare 全家桶市面上做 RAG 的方案挺多LangChain、LlamaIndex 啥的都行,但要自己配环境、挑向量数据库、管 GPU 资源,折腾起来挺累的。Cloudflare 这套方案的优势是Workers AI- 内置十几个开源模型Llama 3、Claude 等调 API 就能用不用租 GPU。免费层每天有固定的 Neurons 额度计量单位个人项目够用了。Vectorize- 托管的向量数据库不用自己搭 Milvus、Pinecone 那些。创建索引、插入向量、相似度搜索几行代码搞定。D1- Cloudflare 的 SQLite 数据库,存原始文本用。向量数据库只存向量,具体文字内容还是要从这里取。全托管- 这是最爽的地方。不用操心服务器、扩容、备份这些破事,专心写代码就行。而且 Cloudflare 的边缘网络,全球访问都快。2025 年 Cloudflare 还推出了 AutoRAG进一步简化了流程——上传文档到 R2后面的切分、向量化、检索、生成全自动。不过这篇文章咱们还是手动搭一遍这样能学到底层原理。说了这么多理论接下来动手做一个。动手实战 - 搭建你的第一个 RAG 应用咱们做个笔记问答应用用户可以添加笔记然后提问系统从所有笔记里找相关内容回答。项目初始化和环境准备先装 WranglerCloudflare 的 CLI 工具npminstall-g wrangler wrangler login# 登录你的 Cloudflare 账号创建项目npmcreate cloudflarelatest rag-notes-app# 选择 Hello World worker# 选择 TypeScriptcdrag-notes-app装个路由库 Hono比原生 Workers API 好用npminstallhono创建 D1 数据库和 Vectorize 索引# 创建 D1 数据库存原始笔记wrangler d1 create notes-db# 创建 Vectorize 索引768 维配合 bge-base-en-v1.5 模型wrangler vectorize create notes-index --dimensions768--metriccosine然后配置wrangler.jsonc或wrangler.toml{ name: rag-notes-app, main: src/index.ts, compatibility_date: 2024-01-01, node_compat: true, // AI 绑定 ai: { binding: AI }, // D1 数据库绑定 d1_databases: [ { binding: DB, database_name: notes-db, database_id: 你的数据库ID // 从上面创建命令的输出复制 } ], // Vectorize 索引绑定 vectorize: [ { binding: VECTORIZE, index_name: notes-index } ], // Workflow 绑定处理异步向量化任务 workflows: [ { binding: RAG_WORKFLOW, name: rag-workflow, class_name: RAGWorkflow } ] }初始化数据库表-- schema.sqlCREATETABLEIFNOTEXISTSnotes(idINTEGERPRIMARYKEYAUTOINCREMENT,textTEXTNOTNULL,created_atDATETIMEDEFAULTCURRENT_TIMESTAMP);运行wrangler d1 execute notes-db --file./schema.sql实现知识库录入功能这是整个 RAG 的核心——把用户的笔记转成向量存起来。创建src/workflow.tsWorkflow 处理异步任务import{WorkflowEntrypoint,WorkflowStep}fromcloudflare:workers;typeEnv{AI:Ai;DB:D1Database;VECTORIZE:VectorizeIndex;};typeParams{noteId:number;text:string;};exportclassRAGWorkflowextendsWorkflowEntrypointEnv,Params{asyncrun(event:WorkflowEventParams,step:WorkflowStep){const{noteId,text}event.payload;// 步骤1确认 D1 记录已创建由主路由完成// 步骤2生成向量constembeddingsawaitstep.do(generate embeddings,async(){constresponseawaitthis.env.AI.run(cf/baai/bge-base-en-v1.5,// 768维的 Embedding 模型{text:[text]});returnresponse.data[0];// 返回向量数组});// 步骤3插入 Vectorizeawaitstep.do(insert vector,async(){awaitthis.env.VECTORIZE.insert([{id:noteId.toString(),values:embeddings,metadata:{text}// 存一份文本方便调试}]);});}}主路由src/index.ts处理添加笔记import{Hono}fromhono;import{RAGWorkflow}from./workflow;typeBindings{AI:Ai;DB:D1Database;VECTORIZE:VectorizeIndex;RAG_WORKFLOW:Workflow;};constappnewHono{Bindings:Bindings}();// 添加笔记app.post(/notes,async(c){const{text}awaitc.req.json{text:string}();if(!text?.trim()){returnc.json({error:Text is required},400);}// 插入 D1constresultawaitc.env.DB.prepare(INSERT INTO notes (text) VALUES (?) RETURNING id).bind(text).first{id:number}();if(!result){returnc.json({error:Failed to create note},500);}// 触发 Workflow 异步生成向量awaitc.env.RAG_WORKFLOW.create({params:{noteId:result.id,text}});returnc.json({id:result.id,message:Note created, vectorization in progress});});exportdefaultapp;export{RAGWorkflow};这样一来用户发 POST 请求添加笔记时文本立即存到 D1后台 Workflow 慢慢生成向量、插入 Vectorize就算向量化要几秒钟也不会阻塞用户请求实现智能问答功能现在可以存笔记了接下来做查询。在src/index.ts添加// 查询问答app.get(/,async(c){constqueryc.req.query(q);if(!query){returnc.json({error:Query parameter q is required},400);}// 第一步把问题转成向量constqueryEmbeddingawaitc.env.AI.run(cf/baai/bge-base-en-v1.5,{text:[query]});// 第二步在 Vectorize 里找最相似的 3 条笔记constmatchesawaitc.env.VECTORIZE.query(queryEmbedding.data[0],{topK:3,returnMetadata:true});if(matches.count0){returnc.json({answer:没有找到相关笔记});}// 第三步从 D1 获取完整文本如果需要constnoteIdsmatches.matches.map(mm.id);constnotesawaitc.env.DB.prepare(SELECT text FROM notes WHERE id IN (${noteIds.map(()?).join(,)})).bind(...noteIds).all();// 第四步构造 Prompt调用 LLM 生成答案constcontextnotes.results.map((n:any)n.text).join(\n\n---\n\n);constprompt以下是相关的笔记内容${context}用户问题${query}请基于上述笔记内容回答用户问题。如果笔记中没有相关信息请说明。;constaiResponseawaitc.env.AI.run(cf/meta/llama-3-8b-instruct,// 或者用 claude-3-5-sonnet-latest{messages:[{role:system,content:你是一个智能笔记助手},{role:user,content:prompt}]});returnc.json({answer:aiResponse.response,sources:matches.matches.map(m({id:m.id,score:m.score,text:m.metadata?.text}))});});测试一下# 本地运行wrangler dev# 添加笔记curl-X POST http://localhost:8787/notes\-HContent-Type: application/json\-d{text: Cloudflare Workers AI 支持 Llama 3 和 Claude 模型}curl-X POST http://localhost:8787/notes\-HContent-Type: application/json\-d{text: Vectorize 使用余弦相似度进行向量检索}# 等几秒让 Workflow 完成向量化# 提问curlhttp://localhost:8787/?qWorkers%20AI%20有哪些模型如果一切正常你会收到基于笔记内容的回答。删除和更新功能删除笔记时记得同时删除 D1 和 Vectorize 的数据app.delete(/notes/:id,async(c){constidc.req.param(id);// 从 D1 删除awaitc.env.DB.prepare(DELETE FROM notes WHERE id ?).bind(id).run();// 从 Vectorize 删除awaitc.env.VECTORIZE.deleteByIds([id]);returnc.json({message:Note deleted});});更新的话最简单的方式是先删后加重新生成向量。完整代码可以参考 Cloudflare 官方示例。进阶优化 - 让你的 RAG 更聪明基础功能跑起来了但要真正用在实际项目里还有些细节值得优化。文本分块策略现在咱们是把整条笔记当一个单元存的。如果笔记很长比如一篇技术文档这样做会有问题检索时整篇文档的相似度可能不高只有部分段落相关Prompt 太长会超出 LLM 的上下文窗口限制更好的做法是把长文本切成小块chunk每块单独生成向量。简单的分块方法functionsplitText(text:string,chunkSize:number500,overlap:number50):string[]{constchunks:string[][];letstart0;while(starttext.length){constendMath.min(startchunkSize,text.length);chunks.push(text.slice(start,end));startend-overlap;// 重叠一点避免句子被切断}returnchunks;}更智能的方式是按段落或语义分割可以用 LangChain 的RecursiveCharacterTextSplitter不过对大部分场景来说固定长度重叠已经够用了。修改 Workflow给每个 chunk 分配唯一 IDconstchunkssplitText(text);for(leti0;ichunks.length;i){constchunkId${noteId}-${i};constembeddingsawaitthis.env.AI.run(cf/baai/bge-base-en-v1.5,{text:[chunks[i]]});awaitthis.env.VECTORIZE.insert([{id:chunkId,values:embeddings.data[0],metadata:{noteId,chunkIndex:i,text:chunks[i]}}]);}提升检索准确度调整 topK 和相似度阈值默认返回 top 3 可能不够也可能太多。试试调到 5 条同时过滤掉相似度太低的constmatchesawaitc.env.VECTORIZE.query(queryEmbedding.data[0],{topK:5,returnMetadata:true});// 只保留相似度 0.7 的结果constrelevantMatchesmatches.matches.filter(mm.score0.7);相似度分数范围是 0-1余弦相似度0.7 以上一般算比较相关。优化 Prompt别光把检索到的内容扔给 AI告诉它怎么用这些信息constprompt你是一个智能笔记助手。以下是从笔记库中检索到的相关内容按相关性排序${context}请严格基于上述内容回答用户问题。如果内容不足以回答问题明确说明笔记中没有找到相关信息不要编造答案。 用户问题${query};关键点明确告诉 AI 这是检索到的资料要求它只基于这些内容回答允许它承认不知道这样能减少 AI 瞎编的情况。成本控制和限流Workers AI 免费层每天有 Neurons 额度限制具体数值会变去 Pricing 页面 查最新的。监控用量在 Cloudflare Dashboard → Workers AI 里能看到每日消耗。不同模型消耗不同Embedding 模型便宜LLM 生成贵一些。降级策略如果担心超额可以限制每个用户的请求频率用 KV 或 Durable Objects 计数超出额度后改用更小的模型或返回缓存结果对于非关键请求直接返回检索到的原文不调 LLM// 简单限流示例constuserKeyc.req.header(X-User-ID)||anonymous;constrequestCountawaitc.env.KV.get(rate:${userKey})||0;if(requestCount100){returnc.json({error:Rate limit exceeded},429);}awaitc.env.KV.put(rate:${userKey},requestCount1,{expirationTtl:86400});切换更强的模型Llama 3 8B 已经挺不错了但如果想要更好的理解能力可以试试 Claude// 需要先在 Dashboard 绑定 Anthropic API keyconstaiResponseawaitc.env.AI.run(claude-3-5-sonnet-latest,{messages:[{role:system,content:你是一个智能笔记助手},{role:user,content:prompt}]});Claude 的理解能力和输出质量确实更好但消耗的 Neurons 也更多。根据实际需求选吧。我自己的经验是简单问答Llama 3 够用需要推理、总结Claude 明显好一些预算有限先用 Llama 测试确定需求后再升级部署上线和实际应用场景部署流程本地测试没问题后部署超简单wrangler deploy就这一行Cloudflare 会自动打包你的代码部署到全球边缘节点生成一个.workers.dev域名你会看到类似这样的输出Published rag-notes-app https://rag-notes-app.your-account.workers.dev这就是你的 API 地址了。绑定自定义域名可选如果你有域名托管在 Cloudflare可以绑定wrangler domainsaddapi.yourdomain.com或者在 Dashboard → Workers Pages → 你的 Worker → Settings → Domains 里添加。环境变量和 Secrets如果你用了 Anthropic API key 或其他敏感信息wrangler secret put ANTHROPIC_API_KEY# 输入你的 key代码里这样用constapiKeyc.env.ANTHROPIC_API_KEY;真实应用场景这套 RAG 架构能做的事挺多分享几个实际场景1. 企业知识库问答场景公司有几百页员工手册、技术文档、FAQ新员工找资料很麻烦。做法把所有文档上传按章节分块存入 Vectorize做个简单的 Web 界面或接入企业微信机器人员工直接问报销流程是什么系统自动检索相关章节回答好处24 小时在线比翻文档快多了。2. 智能客服场景电商网站有大量商品信息和售后政策客服重复回答相同问题。做法把常见问题、商品描述、退换货政策存进去用户咨询时先让 RAG 系统回答答不上来的再转人工效果某个开发者用这套方案把客服压力减少了 60%。3. 个人笔记助手场景你用 Notion 或 Obsidian 记了几年笔记想快速找到某个知识点。做法定期把笔记导出通过 API 添加到 RAG 系统需要时直接问上次看的那个 TypeScript 技巧是啥来着系统检索出相关笔记片段我自己就在用类似的工具找资料效率真的提升了不少。4. “Chat with PDF” 工具场景用户上传一份 PDF论文、合同、报告想快速提取信息。做法参考 Rohit Patil 的案例用户上传 PDF 到 R2Worker 读取 PDF提取文本分块向量化用户可以问这份合同的付款条款是什么这个场景特别实用很多法律、咨询行业的人需要。StatsGrid stats{[{ value: “24小时”, label: “企业知识库在线” },{ value: “60%”, label: “智能客服压力减少” },{ value: “10倍”, label: “个人笔记检索效率提升” }]} source“实际应用案例数据” /常见问题排查问题1向量维度不匹配错误dimension mismatch: expected 768, got 512原因Vectorize 索引创建时设的维度768和模型输出的维度不一致。解决确保索引维度和模型匹配。bge-base-en-v1.5是 768 维别用错模型。问题2D1 和 Vectorize 数据不一致现象查询返回的 note ID 在 D1 里不存在。原因可能删除 D1 记录时忘了删 Vectorize或者 Workflow 失败了。解决删除操作要么包在事务里要么用 Workflow 确保两边都删干净。问题3Workflow 超时错误workflow execution timeout原因向量化大量文本时超过 Workflow 的时间限制。解决把大文档拆成多个 Workflow 任务或者批量处理。// 分批处理constbatchSize10;for(leti0;ichunks.length;ibatchSize){constbatchchunks.slice(i,ibatchSize);awaitc.env.RAG_WORKFLOW.create({params:{noteId,chunks:batch,offset:i}});}结论说了这么多回顾一下咱们做了啥弄懂了 RAG 原理检索增强生成就是给 AI 开卷考试的权限先找资料再回答搭了个能跑的应用笔记问答系统从环境准备到代码实现完整走了一遍学了优化技巧文本分块、检索调优、成本控制这些细节让应用真正可用看了实际场景企业知识库、智能客服、个人助手、PDF 聊天都是可以落地的方向Cloudflare 这套方案最大的优势是门槛低。不用租 GPU、不用搭数据库、不用操心运维免费额度对个人项目来说绝对够用。就算是生产环境付费计划也比自建便宜多了。接下来你可以立即动手克隆 官方示例代码wrangler dev跑起来5 分钟就能看到效果接入真实数据把你的笔记、文档、FAQ 导进去看看检索质量如何做个前端界面用 React/Vue 做个简单的聊天界面或者直接用 Cloudflare Pages 部署探索更多可能试试多模态 RAG结合图片、表格、GraphRAG知识图谱增强等高级玩法RAG 是当前 AI 应用最实用的架构之一掌握它能让你做出很多有意思的东西。试下来Cloudflare 全家桶确实能解决不少实际问题。要是碰到问题可以去 Cloudflare Discord 或 Community 论坛 问社区挺活跃的。原文首发自个人博客
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做地方分类信息网站需要什么资质吗张家港手机网站建设

第一章:Open-AutoGLM与零样本迁移的前沿探索Open-AutoGLM 是近年来在自然语言处理领域中备受关注的开源框架,专注于实现高效的零样本迁移能力。该模型通过自适应生成机制,在无需微调的前提下,直接应用于下游任务,展现出…

张小明 2025/12/30 20:02:35 网站建设

个人网站名称大全网站设置的参数

TouchGAL快速部署终极指南:打造专属Galgame社区全流程解析 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next 还在为搭建Gal…

张小明 2025/12/30 22:19:57 网站建设

惠州建站平台大麦网的网站建设

5个AvaloniaUI绘图技巧:让你的跨平台应用视觉升级 【免费下载链接】Avalonia AvaloniaUI/Avalonia: 是一个用于 .NET 平台的跨平台 UI 框架,支持 Windows、macOS 和 Linux。适合对 .NET 开发、跨平台开发以及想要使用现代的 UI 框架的开发者。 项目地址…

张小明 2025/12/30 22:20:53 网站建设

属于c2c的网站有哪些坪山网站建设流程

在人工智能编程工具快速发展的背景下,Cursor作为一款功能卓越的AI编程助手,其免费试用机制成为开发者关注的焦点。本文将从技术原理、操作实践到风险防范,为您提供一套完整的解决方案。 【免费下载链接】go-cursor-help 解决Cursor在免费订阅…

张小明 2025/12/30 22:47:31 网站建设

软件公司网站素材成都app开发

ollama下载gpt-oss-20b模型的完整步骤与常见问题解决 在本地运行大语言模型正从“极客实验”走向日常开发实践。随着硬件性能提升和工具链成熟,像 gpt-oss-20b 这类高性能轻量级模型已能在普通笔记本上流畅运行,而 Ollama 的出现更是让部署过程变得如同…

张小明 2025/12/30 22:08:31 网站建设

网站开发职责字体设计作品赏析

启点影剧院票管理系统是专为影剧院行业数字化运营打造的全流程票务管理解决方案,核心定位为“打通票务链路、优化观演体验、赋能精准运营”。系统深度整合线上线下票务场景,依托数字化技术破解传统票务管理中购票渠道单一、选座信息不透明、退票流程繁琐…

张小明 2025/12/30 22:49:25 网站建设