简化的人工智能代理:人工智能代理如何利用领域知识回答问题
揭秘企业AI代理如何利用领域知识定制回答客户问题,并严格限制答案在领域知识范围内。
背景
你是否曾想过,今天最先进平台上的尖端 AI 代理是如何运作的?例如,在上面的截图中,我向 wealthsimple.com 的 AI 代理询问利率问题,它提供了特定于 Wealthsimple 产品的答案,并将其限制在 Wealthsimple 产品范围内。它没有告诉我美国银行的现金账户利率。
它是如何工作的?你可能会说,这很简单,LLM(大型语言模型)!没错,但不仅仅是 LLM。强大的 AI 代理,至少是好的那些,都是由大型语言模型驱动的,因此它们能够理解语言,并能够以对话格式进行支持会话,就像 ChatGPT 一样。但是,有一点很重要,它们还具备两个超出一般 ChatGPT 的特殊功能:
- AI 代理搜索领域知识库并提供最新数据以回答你的问题。 领域知识库可以是 私有企业数据,这些数据在网上无法搜索。例如,你可以向你的医疗服务提供者询问你账户下的具体保障细节,这些信息可能嵌入在某些 PDF 文档的福利合同中,无法在网上搜索。与 ChatGPT 相比,后者的知识库是通用的,可能已经过时。例如,使用 chatgpt.com 的免费账户,模型本身是更新的模型(ChatGPT-4),但知识库最后一次更新是在 2023 年 1 月,也就是在本文撰写时的 2025 年 1 月,已经是两年前的事情。
2. AI 代理仅限于领域知识库提供答案。 这意味着它们只会回答与其服务或产品相关的问题,而不会基于通用知识库提供回应。例如,当我询问 Wealthsimple AI 代理特斯拉 Model 3 在加拿大的价格时,这是一条公开可用的信息,并且应该也是通用知识库的一部分,但 AI 代理表示该信息超出了 Wealthsimple 产品和服务的范围。这是完美的,因为出于商业原因,显然也出于法律原因,Wealthsimple 不应该回答此类问题。
目标
在本文中,我们将讨论如何实现上述功能。目标是从技术的高层次理解这些 AI 代理是如何工作的。
免责声明:请注意,来自 Wealthsimple AI 代理的屏幕截图仅用于演示目的。本文并不一定涵盖 Wealthsimple AI 代理的具体工作方式,且不应视为 Wealthsimple 的工程博客。
为了支持 AI 代理,我们需要至少三个主要组件:
-
理解用户问题。这可以通过像 OpenAI 的 GPT-4o 这样的语言模型来实现。这使我们能够理解用户的问题并提取用户的意图。例如,在上面的屏幕截图中,我问“现金账户的利率是多少”,我的意图应该是类似“现金账户的利率”。这就是“用户意图”,后面会用到。
-
可搜索的领域知识。领域知识库可以是内部企业文档和政策,或者是公司自己网站上的公共信息(这样我们知道它是真实的而不是垃圾信息)。我们需要这个知识库是可搜索的。如果你有数据库背景,你可能已经熟悉“索引”这个术语,数据被索引并存储在磁盘上以支持搜索查询。为了使领域知识可搜索,可以采取类似的方法在领域知识上创建索引。这个索引可以支持关键字搜索,以支持通过关键字及其拼写变体查找数据,向量搜索以支持通过相似性查找数据,或两者的混合。创建索引的方法有很多。一种方法是将内部文档存储在 Azure Blob Storage 或 AWS S3 这样的存储中,并在存储文件夹上构建搜索索引。另一种方法是为每个可搜索内容创建内容向量并将向量存储在向量数据库中。内容向量只是一个浮点数组,以数学格式表示内容,因此你可以通过相似性搜索内容。例如,OpenAI 提供的 text-embedding-ada-002 嵌入模型 将根据内容计算向量。我们不会深入讨论索引的实现细节,但如果你感兴趣,可以阅读我在 Towards Data Science 上发表的文章 搜索数据的三大策略。
-
根据在领域知识库中找到的数据准备响应。如果找到相关信息,则以对话格式准备响应。如果在领域知识库中未找到相关信息,则说我不知道或我无法回答这个问题。请注意,大型语言模型本身可能知道答案,但我们需要指示它不要根据其知识准备响应,因为我们不想支持那样的情况。
让我们从一个对话轮次的高层工作流开始,只是为了理解数据的端到端流动。
在上面的图中,对话始于用户提问。让我们看一下每个单独的步骤。
-
用户发送问题。这是在 AI 代理的用户体验端完成的,通常是在网站或移动应用程序上。问题可能是“现金账户的利率是多少”,这是自然语言格式。
-
用户体验接收问题并调用后端,后端负责所有与搜索数据、组织数据和准备响应相关的业务逻辑。
-
提取用户意图,以便我们知道使用什么术语作为搜索查询。用户问题过于冗长,因为它包含“什么”、“是”、“对于”等词,这些词可能不需要从领域知识库中检索相关信息。我们如何将用户的自然语言问题转换为搜索查询?这通过提示工程来完成。例如,我们将以下提示和用户问题提供给 LLM,并提取用户意图以生成搜索查询。值得注意的是,提示工程更像是一门艺术而不是科学。通常需要多次迭代才能为特定的 LLM 模型设计出成功的提示。以下提示是一个良好的起点。
private const string questionToQueryPrompt = "
Below is a chat history and a new question asked by the user.
The new user question needs to be answered by searching in a knowledge base.
Generate a search query based on the conversation and the new question.
#Requirements#
- If the question is not in English, translate the question to English before generating the search query.
#Chat history#
{{$chat_history}}
#Question#
{{$question}}
";
通过这个提示,用户问题“现金账户的利率是多少”可能被转换为搜索查询,如“现金账户的利率”。
-
搜索查询被路由到搜索服务。搜索服务是与 LLM 模型分开的一个组件,其唯一目的是提供搜索构成领域知识的企业数据的能力。搜索服务应该能够索引存储在云(AWS S3、Azure Blob Storage)或本地的企业数据,这使企业数据可搜索。搜索服务还应支持不同的搜索方法,如关键字搜索和向量搜索。亚马逊网络服务(AWS)提供 Amazon Kendra,微软提供 Azure AI Search,两者都是用于此目的的认知搜索服务。搜索服务的质量直接影响 AI 代理响应的相关性质量,所以我个人认为这是使 AI 代理卓越与平淡无奇之间的关键组件。
-
搜索服务执行搜索以查询包含企业数据(内部文档)的索引。搜索结果可能包含与搜索查询最相关的文档。例如,搜索结果可能如下所示,这是来自文档的原始文本。
-
搜索结果返回给 LLM,以便 LLM 可以将其用作准备响应的数据源。原始文本文档是引用,但这不是用户所期望的响应,因为用户期望的是直接答案,而不是完整的引用。用户不想通读完整文档来找出利率。他们期望得到几个百分点的数字。
-
LLM 生成响应。LLM 必须依赖于从搜索服务返回的搜索结果作为数据源,仅使用该数据生成答案。如果搜索结果为空,LLM 模型应被指示说类似“我不知道”的话,而不是尝试根据 LLM 模型的通用基础知识生成答案。我们如何实现这一点?好吧,再次通过提示工程。例如,以下提示指示 LLM 使用数据源并基于提供的事实生成适当的响应。请注意,特定要求“不要生成不使用下面来源的答案”将指示 LLM 模型不根据其自身的通用知识库生成答案,即用于训练模型的数据集。
private const string answerPrompt = "
You are a professional chat assistant.
Your role is to help users with their questions about our products.
You will be given the chat history and facts.
Your task is to generate an answer.
- Answer ONLY with the facts listed in the sources provided below.
- Do not generate answers that don't use the sources below.
- If there isn't enough information in the sources, say you don't know.
#Sources#
{{$sources}}
#Chat history#
{{$chat_history}}
";
上面第 5 步的原始文本搜索结果和这个提示提供给 LLM,然后生成的答案可能如下所示:
The interest rate for a Wealthsimple Cash account
varies depending on your client status and qualifying deposits.
As of December 18, 2024, the standard rate is 2.25% for all clients.
Premium clients or Core clients with eligible direct deposits
can earn 2.75%. Generation clients or Premium clients with eligible
direct deposits can earn up to 3.25%.
These rates are annualized, calculated daily,
and paid monthly. Keep in mind that rates are subject to change.
-
用户体验接收来自后端的响应。用户体验可能会进一步美化,使其在设备上看起来更好。
-
用户收到响应。好极了!!
上述模式实际上被称为检索增强生成(RAG),这是一种利用信息检索系统(如搜索服务)提供基础数据,并增强大型语言模型(LLM)如 ChatGPT 能力的架构。有关 RAG 的更多信息,请参见 Microsoft 文档 检索增强生成(RAG)在 Azure AI Search 中,或 AWS 文档 什么是检索增强生成。
彩蛋 — 你怎么知道自己是在与真人聊天还是机器人聊天?
感谢你与我一起阅读!希望你喜欢这篇文章!!如果你喜欢这篇文章,以下一些相关的文章可能会引起你的兴趣:
- Towards Data Science: 搜索数据的三大策略