跳过导航
跳过mega-menu

人力资源聊天机器人与LangChain和Chainlit

在这个故事中,我们将看到如何使用 LangChainChainlit. 这个聊天机器人回答有关员工相关政策的问题,比如e.g. 产假、危险报告或培训政策、行为准则等等.

因为这个项目是作为POC创建的, 我们决定通过劫持这个工具中使用的提示符来尝试一下, 这样聊天机器人就会在回答问题的同时偶尔讲一些笑话. 所以这个聊天机器人应该有幽默感和某种“个性”。.

 十大网博靠谱平台Chainlit

Chainlit 是一个开源的Python / Typescript库,允许开发人员快速创建类似chatgpt的用户界面. 它允许你创建一个想法链,然后添加一个预先构建的, 可配置聊天用户界面. 它非常适合基于网络的聊天机器人.

Chainlit 更适合这个任务,而不是 Streamlit 这需要更多的工作来配置UI组件.

Chainlit库的代码可以在这里找到:

Chainlit -构建Python LLM应用程序在几分钟⚡️

Chainlit 有两个主要组成部分:

  • 后端:它允许与库进行交互,比如 LangChain, 骆驼指数LangFlow 是基于python的.
  • 前端它是一个基于typescript的React应用,使用材质UI组件.

快速浏览我们的人力资源聊天机器人

我们的聊天机器人有一个UI,最初看起来像这样的光模式:

初始聊天机器人界面

然后你可以输入你的问题,结果如下所示(使用暗模式):

有关正常工作时间的问题

 

UI不仅显示问题和答案,还显示源文件. 如果找到了文本,pdf文件也可以点击,您可以查看其内容.

如果你展开LangChain链的步骤,你会看到:

思维链表示

用户界面(UI)也有一个可搜索的历史:

搜索历史

你也可以很容易地在明暗模式之间切换:

打开设置

暗模式开关

会讲笑话的人力资源聊天机器人

我们操纵聊天机器人讲笑话, 特别是当他无法根据现有的知识库回答问题时. 所以你可能会看到这样的回应:

笑话找不到出处

链工作流

在这个应用程序中有两个工作流:

  • setup workflow—用于设置表示文本文档集合的矢量数据库(在本例中为做)
  • 用户界面工作流——思想链交互

设置工作流程

你可以使用下面的BPMN图来可视化设置:

设置工作流程

以下是设置工作流程的步骤:

  • 该代码首先列出一个文件夹中的所有PDF文档.
  • 提取文件每页的文本.
  • 文本发送到 开放AI嵌入API.
  • 检索嵌入的集合.
  • 结果累积在内存中.
  • 累积嵌入的集合被持久化到磁盘.

用户界面工作流

这是用户界面工作流:

用户界面工作流

以下是用户工作流步骤:

  • 用户问一个问题
  • 对向量数据库执行相似度搜索查询(在我们的示例中) ——Facebook人工智能相似度搜索)
  • 向量数据库通常最多返回4个文档.
  • 返回的文档作为上下文发送到ChatGPT (model: gpt-3).5涡轮-16k)和问题一起.
  • ChatGPT返回答案
  • 答案将显示在UI上.

聊天机器人代码安装和演练

整个聊天机器人代码可以在这个Github存储库中找到:

http://github.com/onepointconsulting/hr-chatbot

聊天机器人代码演练

配置 应用程序的大多数参数都在文件中:

http://github.com/onepointconsulting/hr-chatbot/blob/main/config.py

在这个文件中,我们设置了做持久性目录, 嵌入的类型(" text- embeddings -ada-002 "), 默认选项)和模型(“gpt-3”).5-turbo-16k”)

提取文本并对嵌入进行处理 在这个文件中:

http://github.com/onepointconsulting/hr-chatbot/blob/main/generate_embeddings.py

每页提取PDF文本的函数(load_pdfs),可以通过此链接找到源文件和页面元数据:

http://github.com/onepointconsulting/hr-chatbot/blob/main/generate_embeddings.py#L22

生成嵌入的函数(generate_embeddings)可以在第57行找到:

http://github.com/onepointconsulting/hr-chatbot/blob/main/generate_embeddings.py#L57

这个文件 初始化vector存储库 并创建了一个LangChain问答链:

http://github.com/onepointconsulting/hr-chatbot/blob/main/chain_factory.py

这个函数 load_embeddings 最重要的功能之一是 chain_factory.py.

此函数加载PDF文档以支持Chainlit UI中的文本提取. 如果没有持久的嵌入,则生成嵌入. 如果嵌入是持久化的,那么它们将从文件系统加载.

这种策略避免了过于频繁地调用嵌入API,从而节省了资金.

另一个重要的函数是 chain_factory.py   是 函数create_retrieval_chain 加载QA链(问答链)的函数:

这个函数创建带有内存的QA链. 如果幽默参数为真, 然后使用一个被操纵的提示——在某些场合往往会制造笑话.

我们必须继承 ConversationSummaryBufferMemory 内存类,使内存不会抛出与未找到键相关的错误.

以下是我们在QA链中使用的提示文本摘录:

给定下列一份长文件的摘录部分和一个问题, 用参考(“来源”)创建最终答案. 如果你知道一个十大网博靠谱平台这个话题的笑话,一定要把它写进回复里.

如果你不知道答案,就说你不知道,然后编一些十大网博靠谱平台这个话题的笑话. 不要试图编造答案.

总是在你的答案中返回“来源”部分.

实际的部分 与ChainLit相关的代码 在这个文件中:

http://github.com/onepointconsulting/hr-chatbot/blob/main/hr_chatbot_chainlit.py

Chainlit图书馆与 Python修饰符. LangChain QA链的初始化是在一个修饰函数中完成的,你可以在这里找到:

http://github.com/onepointconsulting/hr-chatbot/blob/main/hr_chatbot_chainlit.py#L56

这个函数使用 load_embeddinges (). 然后由函数初始化QA链 create_retrieval_chain 并返回.

最后一个函数  process_response  将LangChain结果字典转换为Chainlit 消息 object. 此方法中的大多数代码都试图提取文本中有时以意外格式出现的源. 代码如下:

http://github.com/onepointconsulting/hr-chatbot/blob/main/hr_chatbot_chainlit.py#L127

关键的外卖

Chainlit 是不断增长的LangChain生态系统的一部分,它可以让你快速地开发出漂亮的基于web的聊天应用程序. 它有一些自定义选项,比如e.g. 允许快速集成 身份验证平台保存数据.

然而,我们发现要去掉这个有点困难。”用Chainlit建造的脚注,并以一种相当“hacky”的方式结束,这可能不是很干净. 目前还不清楚如何在不创建分支或使用肮脏hack的情况下完成深度UI定制.

我们面临的另一个问题是 如何可靠地解释LLM输出 -特别是如何从回复中提取来源. 尽管提示告诉LLM:

用参考(“来源”)创建最终答案

它并不是一直都这样. 这会导致一些不可靠的资源提取.  然而,这个问题可以通过 OpenAI的函数调用功能 使用它可以指定输出格式,但在编写代码时还不可用.

往好的方面想, LLM允许你创建一个有味道的聊天机器人,如果你愿意以创造性的方式改变提示. 人力资源助理讲的笑话不太好, 然而,它们证明了你可以创造“有味道的”人工智能助手, 这最终会更吸引终端用户,也更有趣.

澳门十大正规赌博娱乐平台

在这里注册