原文:towardsdatascience.com/integrating-llm-agents-with-langchain-into-vica-d18a5c8583c6?source=collection_archive---------7-----------------------#2024-08-20

了解我们如何使用 LLM 代理来改进和定制聊天机器人的交易过程!

https://medium.com/@weichengac2?source=post_page---byline--d18a5c8583c6--------------------------------https://towardsdatascience.com/?source=post_page---byline--d18a5c8583c6-------------------------------- Ng Wei Cheng

·发布于Towards Data Science ·阅读时长:14 分钟·2024 年 8 月 20 日

贡献者: Nicole Ren (GovTech), Ng Wei Cheng (GovTech)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1fb86611219fcf4022200f541e0b5d2d.png

VICA 标志,图片由作者提供

VICA(虚拟智能聊天助手)是 GovTech 的虚拟助手平台,利用人工智能(AI)使用户能够在其网站上创建、训练和部署聊天机器人。截止目前,VICA 支持超过 100 个聊天机器人,每月处理超过 70 万个用户查询。

在后台,VICA 的自然语言处理(NLP)引擎使用了从传统的意图匹配系统到生成式 AI 框架(如检索增强生成(RAG))等各种技术和框架。通过保持与最前沿技术的同步,我们的引擎在不断发展,确保每个公民的查询都能匹配到最佳答案。

除了简单的问答(Q&A)功能,VICA 旨在通过对话交易来增强聊天机器人。我们的目标是告别聊天机器人中机械而笨拙的表单体验,迎接具有类人辅助的个性化对话。

本文是两篇系列文章中的第一篇,旨在分享我们在 VICA 中构建的生成式 AI 解决方案。在本文中,我们将重点讨论 LLM 代理如何通过使用 LangChain 的 Agent 框架来帮助改进聊天机器人中的交易过程。

目录

  1. 简介

  2. 关于 LangChain 的所有信息

  3. LangChain 在生产环境中的应用

  4. LangChain 上线挑战

  5. LLM 代理的应用案例

  6. 结论

  7. 了解更多关于 VICA 的信息

  8. 致谢

  9. 参考文献

介绍

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7582b660359d7ace3309b965ab0356aa.png

示例交易聊天机器人对话,图像由作者提供

基于交易的聊天机器人是旨在为用户促进并执行特定交易的对话代理。这些聊天机器人超越了简单的问答交互,允许用户直接在聊天机器人界面中完成诸如预订、购买或表单提交等任务。

为了执行交易,聊天机器人需要在后端进行定制,以处理额外的用户流程并进行 API 调用。

随着大规模语言模型(LLMs)的兴起,它为简化和增强聊天机器人功能的开发开辟了新的途径。LLMs 能显著提升聊天机器人理解并响应各种查询的能力,从而更有效地管理复杂的交易。

尽管已经存在意图匹配聊天机器人系统,能够引导用户通过预定义的交易流程,但 LLM 提供了显著的优势,通过在多轮交互中保持上下文并处理各种输入和语言变化。此前的交互常常显得尴尬和生硬,因为用户必须从预设的卡片中选择选项或输入特定的短语才能触发交易流程。例如,从“我可以付款吗?”到“请让我支付”这种微小的变化可能会导致交易流程无法触发。相反,LLMs 可以适应各种沟通风格,允许它们解读那些不完全符合预定义意图的用户输入。

认识到这一潜力后,我们的团队决定利用 LLM 进行交易处理,通过拆解并理解用户的意图,使用户能够以更自然、灵活的方式进入交易流程。鉴于 LangChain 提供了一个实现代理工作流的框架,我们选择利用其代理框架创建一个智能系统来处理交易。

在本文中,我们还将分享我们开发的两个使用 LLM 代理的案例,即统计部门(DOS)统计表格生成器和自然对话设施预订聊天机器人。

关于 LangChain 的一切

在我们讨论如何使用 LLM 代理进行交易之前,我们首先会介绍什么是 LangChain,以及为什么我们选择尝试这个框架。

什么是 LangChain?

LangChain 是一个开源的 Python 框架,旨在帮助开发者构建利用 LLM 的 AI 驱动应用程序。

为什么使用 LangChain?

该框架通过提供抽象和模板,简化了开发过程,使得快速应用构建成为可能,节省了时间,并减少了我们的开发团队需要从零开始编写所有代码的需求。这使我们能够专注于更高层次的功能和业务逻辑,而不是低层次的编码细节。一个例子是,LangChain 如何帮助简化与 MongoDB、OpenAI 和 AWS 等流行服务提供商的第三方集成,促进了更快速的原型设计,并降低了集成各种服务的复杂性。这些抽象不仅加快了开发进程,还通过提供一致的结构提高了协作效率,使我们的团队能够高效地构建、测试和部署 AI 应用程序。

什么是 LangChain 的代理框架?

使用 LangChain 的主要特点之一是它们的代理框架。该框架允许管理与 LLM 和其他工具交互的智能代理,以执行复杂任务。

该框架的三个主要组件是

  • 代理

代理充当推理引擎,它们决定执行的适当动作及其顺序。它们利用 LLM 来为自己做出决策。代理有一个AgentExecutor,它调用代理并执行代理选择的工具。它还获取动作的输出并将其传递给代理,直到最终结果达成。

  • 工具

工具是代理可以使用的接口。为了创建一个工具,需要提供名称和描述。工具的名称和描述很重要,因为它们会被添加到代理的提示中。这意味着代理会根据提供的名称和描述来决定使用哪个工具。

链接是指一系列调用。链可以是编码步骤,或者只是对 LLM 或工具的调用。链可以根据 LangChain 提供的内容定制或直接使用。一个简单的链示例是LLMChain,这是一个对 LLM 进行查询的链。

LangChain 在生产环境中的应用

我们如何在 VICA 中使用 LangChain?

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/34e72ebaa9b5b4b0f9757bef59ae8d5a.png

示例高层次微服务架构图,图片来源:作者

在 VICA 中,我们通过 REST API 设置了一个微服务来调用 LangChain。这有助于通过允许 VICA 的不同组件独立与 LangChain 通信,从而促进集成。因此,我们可以高效地构建我们的 LLM 代理,而不会受到系统其他组件变化或开发的影响。

LangChain 作为一个框架,在 LLM 领域相当广泛,涵盖了检索方法、代理和 LLM 评估。以下是我们在开发 LLM 代理时使用的组件。

ReAct 代理

在 VICA 中,我们使用了单一代理系统。该代理利用 ReAct 逻辑来决定执行的动作顺序(Yao 等,2022)。这种提示工程技术有助于生成以下内容:

  • 思考(在选择行动之前进行的推理)

  • 动作(执行的操作,通常是一个工具)

  • 动作输入(动作的输入)

  • 观察(来自工具输出的观察结果)

  • 最终答案(代理返回的生成性最终答案)

> Entering new AgentExecutor chain…
The user wants to know the weather today
Action: Weather Tool
Action Input: "Weather today"
Observation: Answer: "31 Degrees Celsius, Sunny"
Thought: I now know the final answer.
Final Answer: The weather today is sunny at 31 degrees celsius.
> Finished chain.

在上面的示例中,代理能够在选择使用的工具之前理解用户的意图。同时,生成了言语推理,帮助模型规划执行的行动顺序。如果观察结果不足以回答给定问题,代理可以转到不同的行动,从而更接近最终答案。

在 VICA 中,我们编辑了代理提示,使其更适合我们的用例。LangChain 提供的基础提示(链接在这里)通常对于大多数常见的用例已经足够,作为有效的起点。然而,可以通过修改它来增强性能并确保更高的相关性,以适应特定应用。这可以通过在将其作为参数传递给create_react_agent(根据你使用的 LangChain 版本可能有所不同)之前,使用自定义提示来实现。

为了确定我们的自定义提示是否有改进,我们采用了迭代式的提示工程方法:编写、评估和完善更多细节请见这里)。这一过程确保了提示能够在广泛的测试案例中有效地泛化。此外,我们还使用了 LangChain 提供的基础提示作为基准,评估我们的自定义提示,使我们能够在各种交易场景中根据不同的附加上下文评估其表现。

自定义工具与链式提示(Prompt Chaining)

对于本文中的两个自定义聊天机器人功能,我们利用了代理可以使用的自定义工具来执行交易。我们的自定义工具利用提示链式技术,在决定使用某一特定工具之前,先拆解并理解用户的请求。

提示链式(Prompt chaining)是一种技术,多个提示按顺序使用以处理复杂的任务或查询。它从初始提示开始,利用其输出作为后续提示的输入,允许进行迭代优化和上下文延续。这种方法增强了处理复杂查询的能力,提高了准确性,并通过逐步缩小焦点来保持连贯性。

对于每个交易用例,我们将过程拆解为多个步骤,这样可以在每个阶段为 LLM 提供更清晰的指令。这种方法通过使任务更具体、易于管理来提高准确性。我们还可以将本地化上下文注入到提示中,进一步明确目标并增强 LLM 的理解。根据 LLM 的推理,我们的自定义链会向外部 API 发出请求以获取数据,从而执行交易。

在每一步提示链条中,实现错误处理至关重要,因为 LLM 有时可能会产生幻觉或不准确的响应。通过引入错误处理机制,如验证检查,我们能够识别并解决输出中的不一致或错误。这使得我们能够为用户生成后备响应,解释 LLM 在推理过程中未能理解的部分。

最后,在我们的自定义工具中,我们避免直接使用 LLM 生成的输出作为最终响应,因为存在幻觉的风险。作为面对用户的聊天机器人,防止我们的聊天机器人传播任何误导性或不准确的信息至关重要。因此,我们确保所有对用户查询的响应都来源于通过我们的自定义链条提取的实际数据点。然后,我们将这些数据点格式化为预定义的响应,确保用户不会看到任何 LLM 直接生成的输出。

将 LangChain 投产的挑战

使用大语言模型(LLM)的挑战

挑战 #1:提示链条导致推理时间变慢

LLM 的一个挑战是推理时间。由于 LLM 拥有大量参数,并且需要反复调用以进行实时处理,因此其计算需求很高,导致推理时间相对较慢(每次提示需要几秒钟)。VICA 是一个每月接收 70 万次查询的聊天机器人。为了确保良好的用户体验,我们致力于在确保准确性的同时尽可能快速地提供回应。

提示链条增加了 LLM 输出的一致性、可控性和可靠性。然而,每增加一个链条就会显著降低我们的解决方案效率,因为这需要额外发起一次 LLM 请求。为了平衡简洁性和效率,我们对链条的数量设置了硬性限制,以防止用户等待时间过长。我们也选择不使用表现更好的 LLM 模型(如 GPT-4),因为它们的速度较慢,而选择了速度较快但通常表现良好的 LLM。

挑战 #2:幻觉

正如最近 Google 的功能“AI 概览”中所见,使用 LLM 生成输出可能导致不准确或非事实的细节。尽管对 LLM 进行基础知识绑定可以提高其一致性并减少幻觉的产生,但它并不能消除幻觉。

如上所述,我们利用提示链条将交易推理任务分解为更小、更易理解的任务。通过链式调用 LLM,我们能够提取处理复杂查询所需的信息。然而,对于最终的输出,我们从 LLM 执行的推理任务中构建了非生成性消息作为最终响应。这意味着在 VICA 中,我们的用户不会看到 LLM 代理生成的响应。

使用 LangChain 的挑战

挑战 #1:过度抽象

LangChain 的第一个问题是该框架抽象了太多细节,这使得很难针对特定的实际使用场景定制应用。

为了克服这些限制,我们不得不深入包内并自定义某些类,以更好地适应我们的应用场景。例如,我们修改了AgentExecutor类,将 ReAct 代理的操作输入路由到所选择的工具。这为我们的自定义工具提供了额外的上下文,有助于从用户查询中提取信息。

挑战 #2:文档的缺乏

第二个问题是文档的缺乏以及框架的不断演进。这使得开发变得困难,因为需要通过查看包的代码来理解框架的工作原理。同时,工作方式缺乏一致性,这使得在开发过程中很难顺利进行。此外,由于现有类的持续更新,版本升级可能导致之前正常工作的代码突然失效。

如果你计划在生产环境中使用 LangChain,建议固定生产版本并在升级前进行测试。

LLM 代理的应用案例

应用案例 #1:统计局(DOS)表格生成器

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/599487529b46087faa5618a5da93b965.png

DOS 聊天机器人的示例输出(示例仅供说明),图像由作者提供

在查看有关新加坡的统计数据时,用户可能会发现很难找到并分析他们所需的信息。为了解决这个问题,我们提出了一个 POC,旨在提取并以表格形式展示统计数据,作为我们聊天机器人的一个功能。

由于 DOS 的 API 对公众开放,我们利用了其官网提供的 API 文档。借助 LLM 的自然语言理解能力,我们将 API 文档输入到提示中。LLM 被指派根据用户请求的统计数据选择正确的 API 端点。这意味着用户可以请求特定时间范围内的年度/半年度/季度/月度的百分比变化/绝对值等统计信息。例如,我们能够查询特定信息,如“2022 年建筑业 GDP”或“过去 3 年第一季度的 CPI”。

然后,我们进行了进一步的提示链式处理,将任务分解得更细致,从而使最终输出更加一致。然后处理查询以生成表格中提供的统计数据。由于所有信息都来自 API,显示的数字都不是由 LLMs 生成的,从而避免了传播不实信息的风险。

应用案例 #2:自然对话式设施预定聊天机器人

在今天的数字时代,大多数预定都是通过在线网站进行的。根据用户界面,这可能是一个需要筛选多个日期以确保获得可用时段的过程,这使得查找可用的预定时段变得麻烦,因为你可能需要查看多个日期才能找到空闲时段。

通过自然对话进行预定可以简化这一过程。只需输入一句话,例如“我想在早上 9 点 30 分预定丰山的羽毛球场”,你就可以通过虚拟助手获得预定或推荐。

在进行设施预定时,我们需要用户提供三个信息:

  • 设施类型(例如,羽毛球,会议室,足球)

  • 位置(例如,宏茂桥,枫树商业中心,Hive)

  • 日期(本周,2 月 26 日,今天)

一旦我们能够从自然语言中检测到这些信息,我们就可以创建一个可复用的定制预定聊天机器人,适用于多个用例(例如,热桌预定、体育设施预定等)。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/87cd6daab7effb6bb9e91c7f2ca94033.png

来自设施预定聊天机器人的输出示例(示例仅用于说明),图片由作者提供

上面的例子展示了一个用户询问下午 2:30 足球场的空闲情况。然而,用户缺少一个必需的信息——日期。因此,聊天机器人会提出澄清问题以获取缺失的日期。一旦用户提供日期,聊天机器人将处理这个多轮对话,并尝试找到符合用户请求的可用预定时间段。由于有一个预定时间段符合用户的描述,聊天机器人将以表格的形式展示此信息。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9c876aa8a00cea581526b6f85651e700.png

来自设施预定聊天机器人的推荐输出示例(示例仅用于说明),图片由作者提供

如果没有可用的预定时间段,我们的设施预定聊天机器人会扩展搜索,探索不同的时间段或增加搜索的日期范围。如果查询结果没有可用的预定,聊天机器人还会尝试根据用户的先前查询推荐可用的预定时间段。这旨在通过消除用户在预定时筛选不可用日期的需求,从而节省时间和精力,提升用户体验。

因为我们使用大型语言模型(LLMs)作为推理引擎,一个额外的好处是它们的多语言能力,使得它们能够推理并响应用户用不同语言写作的内容。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c01629ca78972ae31c7d9a581922a6bc.png

来自设施预定聊天机器人的多语言输出示例(示例仅用于说明),图片由作者提供

上面的例子展示了聊天机器人能够准确处理来自用户信息的设施、日期和位置,即使用户的消息是用韩语写的,且在所提供的日期范围内没有可用的时间段,聊天机器人仍能给出适当的非生成性响应。

我们展示的只是一个简短的示例,说明我们的 LLM 代理如何处理设施预订交易。实际上,实际解决方案要复杂得多,能够为多个位置提供多个可用的预订,处理邮政编码,处理距离指定位置过远的地点等。尽管我们需要对该包进行一些修改以适应我们的特定用例,但 LangChain 的代理框架在帮助我们将多个提示串联在一起并在 ReAct 代理中使用它们的输出方面非常有用。

此外,我们设计了这个定制化解决方案,使其可以轻松扩展到任何需要通过自然语言进行预订的类似预订系统。

结论

在我们系列的第一部分中,我们探讨了 GovTech 的虚拟智能聊天助手(VICA)如何利用 LLM 代理来增强聊天机器人功能,特别是面向基于交易的聊天机器人。

通过将 LangChain 的代理框架集成到 VICA 的架构中,我们通过统计局(DOS)表格构建器和设施预订聊天机器人用例展示了它的潜力。这些示例突显了 LangChain 如何简化复杂的交易交互,使聊天机器人能够通过自然对话处理与交易相关的任务,如数据检索和预订。

LangChain 提供了快速开发和原型设计复杂聊天机器人功能的解决方案,使开发者能够高效地利用大型语言模型的力量。然而,像文档不足和过度抽象等挑战,可能会导致维护工作量增加,因为将框架自定义以适应特定需求可能需要大量时间和资源。因此,评估内部解决方案可能提供更好的长期可定制性和稳定性。

在下一篇文章中,我们将讨论如何通过理解多轮对话来改进聊天机器人引擎。

了解更多关于 VICA 的信息

对 AI 聊天机器人的潜力感到好奇吗?如果您是新加坡公共服务部门的工作人员,您可以访问我们的网站 www.vica.gov.sg/,创建您自己的定制聊天机器人并了解更多信息!

致谢

特别感谢 Wei Jie Kong 为设施预订聊天机器人设定的需求。我们还要感谢 Justin Wang 和 Samantha Yom,我们辛勤的实习生,感谢他们在 DOS 表格构建器方面的初步工作。

参考文献

Yao, S., Zhao, J., Yu, D., Du, N., Shafran, I., Narasimhan, K., & Cao, Y. (2022). React: Synergizing reasoning and acting in language models. arXiv 预印本 arXiv:2210.03629

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐