2026-09-30 · 原文发布日
用GPT-5加Qdrant搭英文网站问答机器人
n8n付费模板,卖的是一个带鉴权webhook的网站客服机器人骨架:收到消息后先用OpenAI把意图分成闲聊、知识检索或拒答三类;检索类去Qdrant向量库查站点内容(可叠加Cohere重排),把去重后的标题、URL、摘要拼成上下文,再由带严格JSON schema的agent输出最多五条结果和可选追问,最后按前端约定的JSON格式返回。拒答走固定安全文案。
原文要点
这是Paolo Ronco的付费n8n模板:暴露一个带header鉴权的webhook,把请求归一化为消息和会话ID;用OpenAI把意图分为smalltalk、search、reject三路;reject返回固定安全文案JSON,smalltalk生成简短英文回复;search去Qdrant向量集合检索(可选Cohere重排),把去重后的标题、URL、摘要拼成上下文,再由带严格JSON schema的agent产出最多五条结果和可选追问,最终按前端约定的JSON结构返回。
这次做成什么
理解并复刻这个网站客服机器人的骨架逻辑。注意:原模板需付费购买,本节是本站独立设计的等价练习方案,不是原工作流文件,界面与参数细节需以购买后的原模板核对;OpenAI、Qdrant、Cohere各自可能另行收费。
准备什么
- 一个可用的n8n实例(云端或自托管)
- OpenAI API key(分类、闲聊、回答三处共用)
- 一个Qdrant实例及已灌入站点内容的集合(含url、title元数据)
- 可选:Cohere API key(启用重排才需要)
具体怎么做
建鉴权webhook入口
新建Webhook节点,POST方法,在认证里选Header Auth并新建凭据(如X-Chat-Token: 一串自定的长随机串)。跟随一个Code节点把入参归一化成两个字段:message(用户文本)和sessionId(会话标识),缺失时给默认值。
意图分类与三路分支
接OpenAI Chat节点,用下方提示词把message分类为smalltalk、search或reject,只输出一个词。后面用Switch节点按该词分三路:reject直接返回固定安全文案JSON;smalltalk让模型生成一两句英文寒暄;search进入检索分支。
Qdrant检索与上下文拼装
search分支接Qdrant向量检索节点,指到你的集合(如website_knowledge),取top 5;可选在后面接Cohere重排。用Code节点按URL去重,把每条的title、url、snippet拼成编号列表作为上下文。
结构化回答与返回
接OpenAI节点并启用严格JSON schema输出(见下方schema artifact),要求基于上下文产出最多五条结果加可选follow_up_question;解析清洗后用Respond to Webhook节点按前端约定的JSON结构(text或search_results)返回。
可直接复制的材料
意图分类提示词
本站独立编写的练习提示词,非原模板原文;占位符语法按n8n表达式调整。
You are an intent classifier for an English website support chatbot.
Classify the user message into exactly one of: smalltalk, search, reject.
- smalltalk: greetings, thanks, casual chit-chat.
- search: questions answerable from the website's content (products, docs, pricing, policies).
- reject: requests for harmful, illegal, or clearly out-of-scope content.
Reply with only the single label word, nothing else.
User message: {{ $json.message }}回答agent的JSON schema
本站按原文描述(最多五条结果、可选追问)独立编写的schema示例,原模板的具体schema以购买后文件为准。
{
"type": "object",
"properties": {
"results": {
"type": "array",
"maxItems": 5,
"items": {
"type": "object",
"properties": {
"title": { "type": "string" },
"url": { "type": "string" },
"summary": { "type": "string" }
},
"required": ["title", "url", "summary"]
}
},
"follow_up_question": { "type": "string" }
},
"required": ["results"]
}前端调用测试报文
本站虚构的测试请求。token为占位值,替换为你在Header Auth凭据里设的串;sessionId格式可与前端自行约定。
{
"headers": {
"X-Chat-Token": "demo-token-replace-me"
},
"body": {
"message": "How do I reset my password?",
"sessionId": "sess-demo-0001"
}
}输入与输出示例
本站虚构演示输出,未实际运行;真实字段名以你前端与原模板约定为准。
输入
POST测试报文:{"message": "How do I reset my password?", "sessionId": "sess-demo-0001"},Qdrant集合里有两条相关文档:Password Reset Guide和Account Security FAQ。对应输出
{"type":"search_results","sessionId":"sess-demo-0001","results":[{"title":"Password Reset Guide","url":"https://example.test/docs/reset","summary":"Open Settings > Security and choose Reset password; a reset link is emailed within minutes."},{"title":"Account Security FAQ","url":"https://example.test/docs/security","summary":"Covers reset links, two-factor setup and locked accounts."}],"follow_up_question":"Are you locked out of your account right now?"}做完检查这些
- 无token或token错误的请求被webhook直接拒绝,不进入后续节点
- 发hello类消息走smalltalk分支,返回简短英文text类型JSON
- 发站点内容问题走search分支,返回的results不超过5条且URL互不重复
- 发明显越界请求走reject分支,返回固定安全文案且不调用Qdrant
容易卡住的地方
- 原模板是付费商品,本方案是等价练习,节点命名和schema细节需购买后核对
- Qdrant集合必须预先灌入站点内容并带url/title元数据,空集合会让search分支返回空
- OpenAI的JSON schema输出需要模型和节点版本支持,旧节点可能只有JSON mode,需自行验证
- Cohere重排是可选增强,不配凭据时不要启用对应开关,否则流程报错
- OpenAI、Qdrant托管、Cohere均可能单独计费,原文未给出具体费用
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Run an English website chatbot with OpenAI GPT-5 and Qdrant
- 原作者
- Paolo Ronco
- 原始发布日期
- 2026-09-30T12:06:42.859Z
- 来源
- https://n8n.io/workflows/20208