Advanced RAG with Data 360 and Agentforce — 构建 RAG 驱动的服务 Agent

Advanced RAG with Data 360 and Agentforce 模块手把手教你构建完整的 RAG 驱动服务 Agent:摄取并映射 Case 数据、创建混合搜索索引、构建检索器、编写提示模板,创建 Agent 动作与服务 Agent、测试并激活,最后总结 RAG 最佳实践——干净内容、ADL 与手动设置的选择、混合搜索、分块调优、检索窗口、长文本字段索引与明确提示指令。以烤面包机公司的案例贯穿全程。...

📅 2026/4/19 ✍️ ponybai 🏷️ headless-360, salesforce, data-360

一、开始在 Data 360 中落地 Agent

Data 360 与有据可依的 Agent

当 Agent 落地于 Data 360 的数据时,它们就能访问一个海量的、最新的、统一的客户数据知识库。有据可依的 Agent 能更智能、更有效地响应客户,用基于真实客户体验的个性化回答取代泛泛而谈。

在本徽章中,您实现一个落地于 Data 360 中 Case 数据的服务 Agent,构建一个 RAG 驱动的解决方案,包括:

  • 搜索索引(search index)——让非结构化数据可搜索;
  • 检索器(retriever)——获取相关数据块;
  • 提示模板(prompt template)——指示 LLM 如何响应。

该解决方案从 Case 记录中的非结构化自由文本字段提取相关信息,并让 Agent 的响应落地于这些数据。落地正是把「幻觉式聊天机器人」与「可信 Agent」区分开来的关键。

案例研究:烤面包机公司

您所在的公司是一家领先的烤面包机(toaster oven)供应商。随着客户群增长,服务团队被客户咨询压得喘不过气。您的任务是构建一个服务 Agent来缓解服务团队压力、解答客户问题。

该 Agent 的工作方式:

  • 过往客户案例(Case)来组织回答;
  • 通过 RAG 检索相关案例信息;
  • 让每个回答都落地于真实的 Case Subject 和 Description 字段;
  • 处理诸如「烤面包机有哪些常见问题?」「为什么我的烤面包机不启动?」「为什么我的吐司会烤焦?」等问题。

目标:一个个性化、数据落地的 Agent,在减轻支持负担的同时保持高质量服务。这个案例让抽象的 RAG 变得具体——您解决的是一真实业务问题。

注册包含 Data 360 的 Developer Edition

要完成本徽章,您需要一个包含 Data 360 和示例数据的、限时的自定义 Playground

  1. 点击 Create Playground
  2. 新的 org 会自动附加到您的 Trailhead 账户;
  3. 记下 org 的到期日期,并在此之前完成本徽章。

推荐先完成的前置内容:Data 360-Powered AgentforceRetrieval Augmented Generation: Quick Look、以及 Hybrid Search for RAG: Quick Look。Playground 预装了 Data 360 和示例 Case 数据,让您专注于构建 RAG 解决方案。

摄取并映射 Case 数据

第一步是摄取带自由文本字段的 Case 数据。通过创建数据流把 Case 数据带入 Data 360:

  1. 在 App Launcher 输入并选择 Data Cloud
  2. 选择 Data Streams 标签页;
  3. 点击 New,选择 Salesforce CRM,点击 Next
  4. 点击 View Objects,搜索并选择 Case,点击 Next
  5. Object Category 保持 Engagement,Event Time Field 保持 Created Date
  6. 在 Standard Fields 标签页取消全选,仅保留必需的 System Modstamp、Case ID 和 Created Date;
  7. 选择 SubjectDescription 字段(这些就是 RAG 所需的自由文本!);
  8. 保持 Custom Fields 标签页的选择,点击 Next
  9. 点击 Deploy(若出现必需字段提示可忽略);
  10. 点击 Case_Home 数据流;
  11. 若 Last Run Status 为 None,点击 Refresh NowIncremental RefreshRefresh Now
  12. 等待约 10 分钟后刷新页面,确认 Last Run Status 为 Success 且 Total Records 有数值后再继续。

映射 Case 对象

数据流会自动创建 Case_Home 数据湖对象(DLO)。接下来,把 Case_Home DLO 映射到 Case 数据模型对象(DMO):

  1. Data Mapping 面板点击 Start
  2. 在 Data Model Entities 下点击 Select Objects
  1. 在 All Objects 面板搜索 Case,点击 Case 旁的 +,再点击 Done——DLO 和 DMO 字段会自动映射;
  2. 点击 Save & Close

最后在 Data Explorer 中查看 Case DMO 数据:进入 Data Explorer 标签页,Object 选择 Data Model Object 并搜索选择 Case,双击 Description 列排序,即可看到 Case 数据的自由文本。注意 Description 和 Subject 字段包含的正是自由文本——这就是 RAG 方案要搜索和检索的内容。

开启 Agentforce

在构建有据可依的 Agent 之前,必须在 org 中启用 Agentforce

  1. 点击齿轮图标 → Setup
  2. 在 Quick Find 框搜索并选择 Agentforce Agents
  3. 开启 Agentforce Agents

这是一个一次性的 org 级设置——开启后,本 org 中所有未来 Agent 都可用。至此,所有前置条件已就绪:✓ Data 360 已供应、✓ Case 数据已通过数据流摄取、✓ Case DLO 已映射到 Case DMO、✓ Agentforce 已启用。

接下来是什么

现在您的 Case 数据已就绪!单元一完成:

  • 理解了为何 Data 360 对落地 Agent 至关重要;
  • 设置了带 Data 360 和示例 Case 数据的 Developer Edition Playground;
  • 创建数据流摄取 Case 记录,选择了 Subject 和 Description 自由文本字段;
  • 把 Case_Home DLO 映射到 Case DMO,并在 Data Explorer 验证数据;
  • 在 org 中启用了 Agentforce。

接下来:构建 RAG 管道——创建搜索索引让 Case 数据可搜索、构建检索器获取相关分块、编写提示模板指示 LLM 如何使用检索到的数据。

二、创建搜索索引、检索器和提示模板

创建搜索索引

搜索索引让文本可搜索,使 RAG 方案能根据用户输入找到并检索相关文本分块。例如,客户问「吐司为什么会烤焦」,RAG 方案就能搜索过往案例、找到与「烤焦」相关的文本。

Data 360 支持两种搜索索引:向量搜索(vector search)混合搜索(hybrid search)。本例创建混合搜索索引,同时基于语义相似度和关键词查找相关内容:

  1. 从 App Launcher 启动 Data Cloud
  2. 选择 Search Indexes 标签页(可能需展开 More 下拉框);
  3. 点击 NewAdvanced SetupNext
  4. Search Type 选择 Hybrid Search
  5. Data Space 保持默认;
  6. Source Object 选择 Case,点击 Next
  7. 点击 Manage Fields,选择 DescriptionSubject,点击 Save(挑战无法检查字段选择,务必仔细);
  8. 连续点击 Next 接受其余默认值;
  9. 保持默认名称 Case;
  10. 点击 Save 创建索引;
  11. 等待约 20 分钟刷新页面,确认 Last Run Status 为 Ready 再继续。

会创建两个搜索索引文件:Case_chunk_dlm(文本分块)和 Case_index_dlm(混合索引)。排障提示:可在 Data Explorer 选择 Data Model Object → Case chunk 检查分块——分块能揭示 LLM 为何以意外方式响应。

构建检索器

检索器(retriever)是 Einstein Search 操作的封装。您在 AI Models 中创建自定义检索器来细化搜索,让检索到的内容更贴合您的用例。单个检索器只能从一个搜索索引获取数据,而一个搜索索引只能索引一个 DMO;若需从多个数据源落地,则用集成检索器(ensemble retriever)。本例只需 Case 搜索索引,因此用单个检索器即可:

  1. 在 Data Cloud 选择 AI Models 标签页;
  2. 点击 Retrievers 标签页 → New Retriever
  3. 选择 Individual RetrieverNext
  4. 选择 Data Cloud,数据空间保持默认;
  5. 选择 Case DMO 和 Case 搜索索引配置,点击 Next
  6. 过滤器保持 All Documents,点击 Next
  7. 返回结果数保持 20;
  8. 配置返回字段:Subject(DirectAttributes > Case > Subject)、Description(DirectAttributes > Case > Description)、Chunk(RelatedAttributes > Case chunk > Chunk);
  1. 点击 NextSave,命名为 Case Retriever
  2. 记下检索器的 API 名称(后面要用);
  3. 点击 Activate → 再次 Activate

创建提示模板并添加检索器

提示模板定义发送给 LLM 的提示结构。您可以添加文本指令和资源(如检索器、Flow、客户输入等)。提示模板继承自一个提示模板类型,该类型包含影响运行时如何使用已解析提示的隐藏前/后处理指令。本例基于 Answer Questions with Knowledge 提示模板创建新模板:

  1. 在 Setup 的 Quick Find 框搜索并选择 Prompt Builder
  2. 点击 New Prompt Template
  3. Prompt Template Type 选择 Knowledge Answers
  4. 命名为 Answer Questions with Case Data(API 名 Answer_Questions_with_Case_Data);
  5. 点击 Next
  6. 在工作区粘贴提供的模板文本;
  7. 删除 [Insert Retriever Here],把光标留在该处;
  8. 点击 Insert Resource → Actions → RetrieversConfigure Retrievers
  9. 在 Resources 标签页点击 Case Retriever:Search Text 选 Query,Output Fields 选 Chunk,Number of Results 输入 5,点击 Apply and Insert
  10. 点击 SaveActivate

负面护栏:模板明确告诉模型,在找不到相关信息时可以回答「我不知道」——这是防止幻觉的关键。

测试提示模板

在围绕提示模板构建 Agent 之前,先测试它是好习惯:

  1. 点击 Preview
  2. 在 Preview Settings 中展开 Inputs
  3. 在 Query 中输入测试问题,如 What are some common issues with the toaster oven product?
  • Resolved Prompt 显示发送给 LLM 的已解析提示——其中包含检索器获取的数据分块,这就是 RAG 的实际运作,您能确切看到模型收到了什么上下文!
  • Generated Response 显示提示模板的输出,即可呈现给客户的响应。

排障:若之前没记下检索器 ID,可到 AI Models 的检索器详情页复制 API 名称,粘贴到 Prompt Builder 的 Retriever ID 字段。测试能确认检索和生成都正确,再投入 Agent 配置。

接下来是什么

做得好!现在您有了一个使用检索器查找相关 Case 信息并响应客户问题的提示模板。单元二完成:

  • 在 Case DMO 上创建了混合搜索索引,索引 Subject 和 Description 字段;
  • 构建了从 Case 搜索索引获取相关分块的单个检索器
  • 编写了指示 LLM 使用检索到的 Case 数据、并在不知道答案时坦白的提示模板
  • 在 Preview 中测试了提示模板,验证检索与生成正确。

接下来:构建使用该提示模板的服务 Agent——创建 Agent 动作、在 Agentforce Studio 配置 Agent、用真实问题测试并激活部署。

三、构建有据可依的服务 Agent

子代理与动作

用「家庭装修工」的比喻来理解 子代理(subagents)动作(actions):装修工有多种活(jobs),每样活又有不同任务(tasks)。对 Agent 而言,活就是子代理,任务就是动作

  • 装修工:活 = 设计厨房布局;任务 = 量尺寸、画蓝图、与客户审核修改;
  • Agent:活(子代理)= 用 Case 信息回答问题;任务(动作)= Answer Questions with Case Data 工具。

注意:从 2026 年 4 月起,agent topics 改名为 subagents,功能不变——过渡期文档和 UI 中可能混用新旧术语。子代理定义 Agent 做什么,动作定义怎么做;一个子代理可包含多个动作。

创建 Agent 动作

首先创建包含 Answer Questions with Case Data 提示模板的 Agent 动作

  1. Setup → Quick Find → Agentforce Assets
  2. 点击 Actions 标签页 → New Agent Action
  3. Reference Action Type 选择 Prompt Template
  4. Reference Action 选择 Answer Questions with Case Data 提示模板(确保其已激活);
  5. 确认 Label = Answer Questions With Case Data、API Name = Answer_Questions_with_Case_Data,点击 Next
  6. Description 输入:Answer questions that customers have about product issues. Use the provided customer cases...
  7. 启用 Show loading text for this action
  8. Loading Text 输入 Getting an answer…
  9. Inputs 下:RetrieverIdOrName Description 填「使用硬编码在提示模板中的检索器」;Query 启用 Collect data from user;Citation Mode Description 填「不生成引用」;
  10. Outputs 下:对 Prompt Response 启用 Show in conversation
  11. 其余默认,点击 Finish

创建服务 Agent

接下来创建一个包含 Answer Questions with Case Data 工具的服务 Agent

  1. 从 App Launcher 搜索选择 Agentforce Studio
  2. 点击 New Agent
  3. 在「What do you want your agent to do?」输入:This AI agent works for a company that sells toaster ovens. The agent's job is to answer questions...
  4. 点击发送图标;
  5. Agent Name 输入 Toaster Service Agent,Developer Name 为 Toaster_Service_Agent
  6. 保持 New User 选中,点击 Let's Go

为新用户授予权限(在另一个浏览器标签页):Setup → Users → 点击 EinsteinServiceAgent UserPermission Set AssignmentsEdit Assignments → 添加 Agentforce Service Agent Secure BaseSave。没有该权限集,Agent 无法访问 Data 360 数据或调用提示模板(会静默失败)。

配置子代理与动作

Agent 创建后,配置其子代理与动作以连接提示模板:

  1. 点击 Skip Ahead 跳过引导设置;
  2. 在 Explorer 标签页悬停 Subagents,点击 +
  3. 点击 New Subagent
  4. 名称与描述输入 Answer Questions with Case information
  5. 点击 Create and Open
  6. Instructions 输入 Answer questions about toaster ovens
  7. 在 Actions Available for Reasoning 下点击 Select Action
  8. 点击 Add from Asset Library,在 Answer Questions with Case Data 上点击 Select(注意选对同名动作);
  9. 点击 Add to Agent
  10. 点击 Preview 打开聊天窗口。

至此完整的 RAG 链路已连通:子代理 → 动作 → 提示模板 → 检索器 → 搜索索引 → Case 数据。

测试 Agent

在聊天窗口用真实问题测试 Agent,验证落地效果与防幻觉能力:

用范围内问题测试:

  • What are some common product issues with toaster ovens?
  • Why does my toaster oven not start?
  • Why does my toast burn in the toaster?

注意答案并非泛泛而谈——它反映了 Case Subject 和 Description 字段中的信息,LLM 响应明显落地于您摄取的数据。您可在 Interaction Details 窗口查看推理过程。

用范围外问题测试:「去年卖了多少台烤面包机?」「先有鸡还是先有蛋?」——Agent 应重定向客户而非编造幻觉答案,说明提示模板中的「我不知道」负面护栏在起作用。

同时测试范围内和范围外问题,可验证落地有效、幻觉被阻止。

激活 Agent

测试完成后,提交并激活 Agent 以便部署到渠道:

  1. 点击 Commit Version → 再次 Commit Version
  2. 点击 Activate → 再次 Activate

现在 Agent 已上线,可部署到 Web 聊天、消息应用或嵌入式服务控制台等渠道。

激活清单:✓ Case 数据已摄取映射、✓ 搜索索引已构建就绪、✓ 检索器已创建激活、✓ 提示模板已保存激活、✓ Agent 动作已创建、✓ 服务 Agent 已配置子代理与动作、✓ Agent 已用范围内/外问题测试、✓ Agent 已提交激活。您的 RAG 驱动服务 Agent 完成了!

接下来是什么

您的服务 Agent 已构建、测试并激活!单元三完成:

  • 用装修工比喻理解了子代理与动作模型;
  • 创建了包装提示模板的 Agent 动作(含输入/输出配置);
  • 在 Agentforce Studio 用自然语言描述构建了服务 Agent
  • 配置了子代理并通过资产库连接 Agent 动作;
  • 用真实问题测试——验证范围内落地、范围外防幻觉;
  • 提交并激活 Agent 以待部署。

接下来:了解 RAG 最佳实践——回顾您做的每个决策背后的「为什么」(干净内容、检索策略、提示设计),从而把这些模式应用到您自己的 RAG 方案中。

四、了解 RAG 最佳实践

使用干净内容

垃圾进,垃圾出。您的 RAG 方案有多好,取决于落地它的数据有多好。虽然本徽章用的是干净的样本数据,但真实世界的非结构化内容需要整理。成功的 RAG 始于一个精心策划、高质量的知识库,内容需准确、完整、最新、有组织、一致(无矛盾信息)。

内容准备的最佳实践:

  • 只包含近期、相关、完整、一致的数据;
  • 一致且明确地组织与格式化内容(用标题层级表示结构、给表格和图片用描述性标题、一致使用关键词和术语);
  • 添加元数据:来源、创建/更新日期、文档类型、产品/版本、地区/语言。

优化检索知识后,可期待更准确、更相关的响应。再好的搜索索引、检索器和提示模板,也弥补不了糟糕的数据。

选择最佳方法:ADL 还是手动设置

Salesforce 平台上有两条 RAG 实现路径,根据数据源选择:

  • Agentforce Data Library(ADL):面向 Knowledge 文章和文件上传的开箱即用 RAG,快速、声明式,但仅支持非结构化数据、每个库一个源、无实时能力;
  • Data 360 手动设置(本徽章所用):对每个 RAG 组件完全掌控,支持 Data 360 中任何数据(DLO/DMO、结构化+非结构化),支持实时数据、零拷贝、数据图谱、集成检索器。

为什么本徽章用手动设置:场景依赖 Case DMO——而非 Knowledge 文章或文件上传,ADL 无法支持。当落地数据位于 DMO 中时,手动 Data 360 设置是唯一路径。

决策框架:数据在 Knowledge/文章/文件?→ 用 ADL(快);数据在 DLO/DMO/自定义对象?→ 手动设置;需要实时/混合搜索/多源?→ 手动设置。

使用混合搜索

创建搜索索引时,您选择了混合搜索而非向量搜索。对比:

  • 向量搜索:检索语义相似的分块,适合寻找一般信息的长文本查询,但可能漏掉精确术语
  • 混合搜索:把向量搜索与关键词搜索、排序相结合,同时检索语义相似的分块和精确术语,最适合带特定搜索词的长查询

您的用例:Agent 回答具体烤面包机问题(如「为什么我的吐司会烤焦?」),既含特定术语(burn、toast、toaster),又含语义概念(烹饪问题、过热)。混合搜索能捕捉两个维度

决策规则:若查询包含具体产品名、错误码或技术术语,选混合;若查询开放且探索性,向量搜索可能够用。

调优并丰富内容分块

您的分块策略(chunking strategy)影响方案检索相关知识的效果。关键考虑:

  • 嵌入模型:确保模型适合您的内容类型和语言;
  • 分块大小:太小会丢失上下文,太大则稀释相关性。

可在搜索索引中配置的增强特性:

  • 分节感知分块(section-aware chunking):在分块边界保留文档结构(标题、章节);
  • 前置分块(prepended chunks):每个分块包含前一分块的一部分以保证连续性。

适当调优后,检索到的内容更自包含、上下文完整,从而产生更连贯的 LLM 响应。默认设置在多数场景够用,观察到检索质量问题再调优。

设置足够的检索窗口

检索窗口(retrieval window)是检索器为 LLM 呈现的结果数。本徽章在提示模板中把检索结果数设为 5,对聚焦用例通常够用。

检索窗口的权衡:

  • 太窄(如 2 条):遗漏排名靠后的文档 → 缺失重要上下文;
  • 太宽(如 20+ 条):纳入无关内容 → 稀释提示、可能困惑 LLM;
  • 刚好(5-10 条):足够上下文又无噪声。

调优:若方案信息不足或遗漏相关细节,加宽窗口;若响应不聚焦或含无关信息,收窄。注意检索窗口在提示模板(配置检索器资源时)设置,而非检索器本身——检索器默认 20 是安全上限,提示模板才定义实际窗口。

只索引长文本字段

只索引至少包含一个语义连贯完整句子的长文本字段,不要索引 Status 这类只有一个词的短字段。本徽章索引了 Case 对象中的 Subject 和 Description:

  • Subject:「Power cord caught fire.」(描述问题的完整句子);
  • Description:「The power cord caught fire the first time I tried to use my toaster oven to cook a pizza.」(丰富、详细的自由文本)。

为什么重要:短字段(如 Status = Closed)不给搜索结果增加语义价值,索引它们浪费存储、拖慢查询,还可能用无关匹配污染检索结果;长字段提供了 RAG 生成有意义响应所需的语义丰富度

字段选择规则:若某字段不能单独回答客户问题,就不要索引它。预期收益:检索结果更直接相关、查询更快、成本更低。

在提示模板中给出明确指令

提示模板被策略性地编写以通过明确指令防止幻觉。两个关键提示设计模式:

  1. 明确的落地指令:提示明确指示模型只用检索到的上下文回答——不用训练数据、不猜、不假设;
  2. 负面护栏——「可以说不」:提示明确告诉模型,找不到相关信息时可以回答「我不知道」,防止模型对跑题问题编造回答。

为什么有效:LLM 被训练成「乐于助人」,即使不确定也倾向回答;没有明确允许说「不知道」,模型就会——产生幻觉。落地指令把模型约束到只使用提供的上下文,建立了信息边界。

预期收益:更少幻觉、更多清晰可解释的、植根于真实数据的答案。这是 RAG 中性价比最高的防幻觉技术,且无需任何成本实现。

总结

恭喜!您创建了一个基于 Case 信息回答客户问题的有据可依的服务 Agent。您构建了:

  • 让 Case 数据可搜索的搜索索引;
  • 获取相关分块的检索器;
  • 带明确落地指令和负面护栏的提示模板;
  • 包装提示模板的 Agent 动作;
  • 带子代理与动作的服务 Agent;
  • 用范围内/外问题测试;
  • 激活并待部署。

您学到的 RAG 最佳实践:从干净、精心策划的内容开始;根据数据源选择 ADL 或手动设置;对含特定术语的查询用混合搜索;为内容类型调优分块;设置足够的检索窗口(5-10 条);只索引长文本字段;给出明确指令和负面护栏

您为公司的服务团队节省了数小时,同时保持高质量、个性化的客户体验。把这些模式应用到您自己的 RAG 方案中吧——「摄取 → 索引 → 检索 → 提示 → Agent → 测试 → 激活」是任何落地 Agent 方案都可复用的模式。


文章来源:Trailhead - Advanced RAG with Data 360 and Agentforce