WordPress RAG与GenAI应用工作流 - 智能聊天机器人模板
WordPress,RAG,GenAI,聊天机器人,AI应用,Supabase,OpenAI,n8n工作流

这是一个使用WordPress内容构建RAG/GenAI应用的模板版本。创建、分享和改进模板给我带来快乐😄,如果您有任何改进此模板的想法,请随时通过LinkedIn联系我!

工作原理

此模板包含三个工作流:

工作流1:为您的WordPress文章和页面生成嵌入,然后将其存储在Supabase向量存储中。
工作流2:在编辑WordPress内容时处理更新插入。
工作流3:通过对嵌入文档执行检索增强生成(RAG)来启用聊天功能。
为什么使用此模板?

此模板可应用于各种用例:

构建需要从您网站内容嵌入文档的GenAI应用程序。
在您的网站上嵌入或创建聊天机器人页面,以增强用户在搜索信息时的体验。
深入了解访问者在您网站上提出的问题类型。
通过向AI询问相关内容想法或检查是否已存在类似内容来简化内容管理。对于内部链接很有用。
先决条件
访问Supabase以存储嵌入。
Postgres和pgvector的基础知识。
具有要嵌入内容的WordPress网站。
OpenAI API密钥
确保您的n8n工作流、Supabase实例和WordPress网站设置为相同时区(或使用GMT)以确保一致性。
工作流1:初始嵌入

此工作流检索您的WordPress页面和文章,从内容生成嵌入,并使用pgvector将其存储在Supabase中。

步骤0:创建Supabase表

节点:

Postgres – Create Documents Table:此表结构支持具有1536维度的OpenAI嵌入模型
Postgres – Create Workflow Execution History Table

这两个节点在Supabase中创建表:

documents表,存储您网站内容的嵌入。
n8n_website_embedding_histories表,记录工作流执行以有效管理更新插入。此表跟踪工作流执行ID和执行时间戳。
步骤1:检索和合并WordPress页面和文章

节点:

WordPress – Get All Posts
WordPress – Get All Pages
Merge WordPress Posts and Pages

这三个节点检索您文章和页面的所有内容和元数据,并将其合并。
**重要:** 应用过滤器以避免为所有站点内容生成嵌入。

步骤2:设置字段、应用过滤器并将HTML转换为Markdown

节点:

Set Fields
Filter – Only Published & Unprotected Content
HTML to Markdown

这三个节点通过以下方式准备内容以进行嵌入:

设置内容嵌入和文档元数据所需的字段。
过滤以仅包括已发布和未受保护的内容(protected=false),确保私有或未发布的内容不会包含在您的GenAI应用程序中。
将HTML转换为Markdown,通过优化文档嵌入来提高检索增强生成(RAG)中的性能和相关性。
步骤3:生成嵌入、将文档存储在Supabase中并记录工作流执行

节点:

Supabase Vector Store
子节点:
Embeddings OpenAI
Default Data Loader
Token Splitter
Aggregate
Supabase – Store Workflow Execution

此步骤涉及为内容生成嵌入并将其存储在Supabase中,然后记录工作流执行详细信息。

生成嵌入:Embeddings OpenAI节点为内容生成向量嵌入。
加载数据:Default Data Loader准备内容以进行嵌入存储。存储的元数据包括内容标题、发布日期、修改日期、URL和ID,这对于管理更新插入至关重要。

⚠️ 重要说明:注意不要在元数据字段中存储任何敏感信息,因为此信息将可被AI访问,并可能出现在面向用户的答案中。

令牌管理:Token Splitter确保内容被分割为可管理的大小以符合令牌限制。
聚合:确保最后一个节点仅对1个项目运行。
存储执行详细信息:Supabase – Store Workflow Execution节点保存工作流执行ID和时间戳,从而能够跟踪每个内容更新的处理时间。

此设置确保内容嵌入存储在Supabase中,以供下游应用程序使用,同时记录工作流执行详细信息以确保一致性和版本跟踪。

此工作流应仅执行一次以进行初始嵌入。
下面描述的工作流2将处理所有未来的更新插入,确保根据需要嵌入新的或更新的内容。

工作流2:处理文档更新插入

网站上的内容遵循生命周期——它可能会被更新,可能会添加新内容,或者有时内容可能会被删除。

在此模板的第一个版本中,更新插入工作流管理:

新添加的内容
更新的内容
步骤1:使用常规CRON检索WordPress内容

节点:

CRON – Every 30 Seconds
Postgres – Get Last Workflow Execution
WordPress – Get Posts Modified After Last Workflow Execution
WordPress – Get Pages Modified After Last Workflow Execution
Merge Retrieved WordPress Posts and Pages

CRON作业(在此模板中设置为每30秒运行一次,但您可以根据需要调整它)启动工作流。对n8n_website_embedding_histories表的Postgres SQL查询检索最新工作流执行的时间戳。

接下来,HTTP节点使用WordPress API(在模板中更新示例URL为您自己网站的URL并添加您的WordPress凭据)请求自上次工作流执行日期以来修改的所有文章和页面。此过程捕获新添加和最近更新的内容。然后合并检索到的内容以进行进一步处理。

步骤2:设置字段,使用过滤器

节点:

Set fields2
Filter – Only published and unprotected content

与工作流1中的步骤2相同,除了HTML To Markdown在进一步的步骤中使用。

步骤3:循环项目以识别和路由已更新与新添加的内容

在这里,我最初旨在使用’update documents’而不是delete + insert方法,但遇到了挑战,尤其是在同时更新内容和元数据列时。欢迎任何帮助或建议!:)

节点:

Loop Over Items

Postgres – Filter on Existing Documents

Switch

路由existing_documents(如果在元数据中找到具有匹配ID的文档):

Supabase – Delete Row if Document Exists:删除文档的任何现有条目,准备更新。
Aggregate2:用于在Supabase上聚合具有ID的文档,以确保Set Fields3仅对每个WordPress内容执行一次,以避免重复执行。
Set Fields3:设置嵌入更新所需的字段。

路由new_documents(如果在元数据中未找到具有ID的匹配文档):

Set Fields4:配置新添加内容的嵌入字段。

在此步骤中,循环处理每个项目,根据文档是否已存在来定向它。Aggregate2节点充当控制,确保Set Fields3仅对每个WordPress内容运行一次,有效避免重复执行并优化更新过程。

步骤4:HTML to Markdown、Supabase Vector Store、更新工作流执行表

HTML to Markdown节点镜像工作流1 – 步骤2。有关HTML内容如何转换为Markdown以提高嵌入性能和相关性的详细说明,请参阅该部分。

接下来,内容存储在Supabase向量存储中以有效管理嵌入。最后,**工作流执行表被更新。这些节点镜像工作流1 – 步骤3节点。

工作流3:使用WordPress内容的GenAI应用示例:可嵌入到您网站的聊天机器人
步骤1:在聊天输入后检索Supabase文档、聚合和设置字段

节点:

When Chat Message Received
Supabase – Retrieve Documents from Chat Input
Embeddings OpenAI1
Aggregate Documents
Set Fields

当用户向聊天发送消息时,提示(用户问题)被发送到Supabase向量存储检索器。RPC函数match_documents(在工作流1 – 步骤0中创建)检索与用户问题相关的文档,从而实现更准确和相关的响应。

在此步骤中:

Supabase向量存储检索器获取与用户问题匹配的文档,包括元数据。
Aggregate Documents节点合并检索到的数据。
最后,Set Fields组织数据以为AI代理创建更易读的输入。

直接使用AI代理而不使用这些节点将阻止元数据被发送到语言模型(LLM),但元数据对于增强AI响应的上下文和准确性至关重要。通过包括元数据,AI的答案可以引用相关文档详细信息,使交互更具信息性。

步骤2:调用AI代理、响应用户并存储聊天对话历史

节点:

AI Agent
子节点:
OpenAI Chat Model
Postgres Chat Memories
Respond to Webhook

此步骤涉及调用AI代理以生成答案、响应用户并存储对话历史。使用的模型是gpt4-o-mini,选择它是为了成本效益。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。