17-1 向量数据库之野望1 – 使用 Local LLM、VectorDB 和 Pydantic 构建 AI Slack Bot

17-1 向量数据库之野望1 - 使用 Local LLM、VectorDB 和 Pydantic 构建 AI Slack Bot

跨组织集中知识库

⛰ 知识集中化的挑战

在快节奏的科技世界中,跟踪内部技术就像试图放牧猫一样。快速扩张的科技公司经常会面临文档过时或分散的问题。

17-1 向量数据库之野望1 - 使用 Local LLM、VectorDB 和 Pydantic 构建 AI Slack Bot

“救命!我被 Slack 频道淹没了!”😫

问题的根源是什么?有价值的见解和解决方案分散在各种内部平台、工具和渠道中,因此很难追踪和共享知识。

🔍 解决方案?得放弃这个流行词 — ✨ AI ✨

但事实上……如果可以使用人工智能来构建和总结这些分散的知识,将它们转换成一个集中的、易于访问的存储库,那会怎样呢?

🙄 呃!当然,即使是 2023 年最基本的 LLM 也已经可以相对准确地整合和总结几个复杂的主题。我们只需要编写 API 来获取数据,然后让 LLM 将其整合到我们指定的模式中。

我在工作时就像

但你可能会问,

“但是dATUUUH piVACEYY不一致的 LLM 输出怎么办?”

不用担心,我们为这两种情况都提供了解决方案。关于数据隐私问题,您可以简单地部署像localGPT这样的 LLM 模型,数据永远不会离开您的服务器。而为了验证 LLM 的输出,我们可以使用Pydantic 。对于这样的用例来说,这是一个天赐的Python 库。

为了让您能够集中注意力读完本文,我们将范围缩小到一个简单的 slack 机器人,它会抓取所有消息,将回复汇总为一个简单的 FAQ 数据结构并将其存储到 Vector DB 中以便快速进行语义搜索。然后可以轻松将其插入到集中支持栏或 slack 频道。

🕳 深入探究:打开工具箱

📚 大型语言模型 (LLM)

ChatGPT、LocalGPT 等大型语言模型是经过大量数据集训练的复杂 AI 算法。它们就像班上那些什么都读的书呆子,只不过他们还能记住每一个单词。它们擅长“理解”、解释和生成类似人类的文本。

如何在我们的环境中使用 LLM?

  • 我们使用 LLM 来解释复杂的 Slack 线程讨论,将其转换为清晰、简洁的常见问题解答条目。
  • 实际实施涉及使用Hugging Face Transformers等库进行模型集成。您可以使用默认设置运行它,也可以下载并插入localGPT 以进一步增强结果。

🗃 矢量数据库

矢量数据库以矢量的形式存储和检索数据,从而能够根据单词和句子背后的含义进行搜索,这与依赖精确匹配的传统数据库不同。

老实说,可以把它想象成一个数据库,但拥有语言学博士学位。(也许现在的学历水平是高中水平,但你明白我的意思)它不仅仅是匹配单词,还了解你查询的本质。

我们如何使用矢量数据库?

  • 在我们的解决方案中,向量数据库用于存储 AI 生成的常见问题解答。这有助于快速、根据上下文为用户查询提供相关答案。
  • 示例包括ElasticsearchWeaviate

🐍 Pydantic

Pydantic是一个使用 Python 类型注释进行数据验证和设置管理的 Python 库。它确保输入到系统中的数据(尤其是来自人工生成的文本等非结构化来源的数据)遵循预定义的模式,从而保持一致性和可靠性。

Pydantic 与此有何关系?

  • 它将确保我们的 LLM 数据输出符合规则,使常见问题解答像日本公交车站的队伍一样有序。
  • 它确保了我们数据库中每个条目的一致性和准确性。

🚀 实现由 AI 驱动的 Slack FAQ 机器人

概述

欢迎来到 DIY 研讨会,创建您自己的 Slack FAQ Bot — 这是您成为 MVP 企业 wagie 的门票!本教程将指导您设置一个 Slack Bot,该 Bot 使用大型语言模型来处理和汇总信息,使用 Pydantic 来构造数据,使用矢量数据库来存储和检索 FAQ 条目。

先决条件

17-1 向量数据库之野望1 - 使用 Local LLM、VectorDB 和 Pydantic 构建 AI Slack Bot

安装依赖项

  • 安装必要的 Python 库:slack_sdktransformers(用于 LLM),,pydanticweaviate-client(用于矢量数据库)。
# Install necessary Python libraries: slack_sdk, transformers (for LLMs), pydantic, and weaviate-client (for Vector Database).

pip install slack_sdk transformers pydantic weaviate-client

设置客户端

  • Slack:创建Slack 应用程序并获取 API 令牌。(指南
  • Weaviate:使用 docker 在本地设置Vector DB。(指南
  • LocalGPT:(可选)LLM 增强总结能力。(指南

源代码(示例)

  • 非常不言自明…我们从特定的松弛频道抓取消息,使用 LLM 将消息和回复解析为 FAQEntry,然后将记录推送到本地部署的 VectorDB 中。

import os
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError # Slack API
from transformers import pipeline # LLM
from weaviate import Client, ObjectsBatchRequest # Vector DB
from pydantic import BaseModel # Pydantic

# This model ensures all data entries are consistent and
# adhere to the format required by your application.
class FAQEntry(BaseModel):
question: str
answer: str

# You can extend this class to read from multiple sources
class FAQGenerator:
def __init__(self, slack_client, db_client, channel_id):
self.slack_client = slack_client
self.db_client = db_client
self.channel_id = channel_id

def fetch_and_summarize_threads(self):
try:
messages = self.slack_client.conversations_history(channel=self.channel_id)["messages"]
print(f"Extracted {len(messages)} messages from channel {self.channel_id}")
except SlackApiError as e:
print(f"Oops, hit a Slack snag: {e}")
return

summarizer = pipeline("summarization") # (optional localGPT) model="local-gpt-model-path")
for msg in messages:
if 'thread_ts' in msg:
replies = self.slack_client.conversations_replies(channel=self.channel_id, ts=msg['thread_ts'])['messages']
answers = " ".join([reply['text'] for reply in replies if reply['ts'] != msg['thread_ts']])
summary = summarizer(answers, max_length=250)[0]['summary_text']
faq_entry = FAQEntry(question=msg['text'], answer=summary)
self._store_faq(faq_entry)

def _store_faq(self, faq_entry):
self.db_client.data_object.create(
data_object=faq_entry.dict(),
class_name="FAQ"
)

# Example usage
slack_client = WebClient(token=os.environ.get("SLACK_BOT_TOKEN"))
channel_id = "Your-Channel-ID"
db_client = Client("http://localhost:8080")
faq_bot = FAQGenerator(slack_client, db_client, channel_id)
faq_bot.fetch_and_summarize_threads()

多功能数据库集成和使用

我们不必专门与 Slack 集成,而是讨论一种利用新创建的常见问题解答数据库的更通用的方法:

  1. 通用机器人集成:这种方法不仅限于 Slack。您可以与任何支持机器人功能的平台集成 – 无论是 Discord、Microsoft Teams,还是定制的聊天应用程序。
  2. 事件监听器设置:无论使用哪个平台,在您的应用程序中设置事件监听器。此监听器将监视新问题或搜索查询。
  3. 检索逻辑:实现逻辑以使用传入的问题查询矢量数据库。数据库的语义搜索功能将有助于找到最相关的常见问题条目。
  4. 多种使用案例:数据库可用于多种用途 — 从支持内部知识库到为客户支持聊天机器人提供信息。它的多功能性在于它能够快速提供上下文相关信息。
  5. 超越常见问题解答:考虑扩展数据库以存储更多内容,而不仅仅是常见问题解答。它可以包括文档、教程或与您的组织相关的任何其他形式的结构化知识。这就是可以观察到 Pydantic 的真正价值的地方。
17-1 向量数据库之野望1 - 使用 Local LLM、VectorDB 和 Pydantic 构建 AI Slack Bot

结论

好了,以上代码片段仅供参考。在考虑将这样的工具用于生产时,选择合适的 DB 和 LLM 就像选择盛大舞会的舞伴一样 — 您必须考虑那些流畅的动作和长期的节奏。

RA/SD 衍生者AI训练营。发布者:chris,转载请注明出处:https://www.shxcj.com/archives/3999

Like (0)
Previous 2024-07-14 1:45 上午
Next 2024-07-15 2:20 下午

相关推荐

发表回复

Please Login to Comment
本文授权以下站点有原版访问授权 https://www.shxcj.com https://www.2img.ai https://www.2video.cn