跨组织集中知识库
⛰ 知识集中化的挑战
在快节奏的科技世界中,跟踪内部技术就像试图放牧猫一样。快速扩张的科技公司经常会面临文档过时或分散的问题。
“救命!我被 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 生成的常见问题解答。这有助于快速、根据上下文为用户查询提供相关答案。
- 示例包括Elasticsearch和Weaviate。
🐍 Pydantic
Pydantic是一个使用 Python 类型注释进行数据验证和设置管理的 Python 库。它确保输入到系统中的数据(尤其是来自人工生成的文本等非结构化来源的数据)遵循预定义的模式,从而保持一致性和可靠性。
Pydantic 与此有何关系?
- 它将确保我们的 LLM 数据输出符合规则,使常见问题解答像日本公交车站的队伍一样有序。
- 它确保了我们数据库中每个条目的一致性和准确性。
🚀 实现由 AI 驱动的 Slack FAQ 机器人
概述
欢迎来到 DIY 研讨会,创建您自己的 Slack FAQ Bot — 这是您成为 MVP 企业 wagie 的门票!本教程将指导您设置一个 Slack Bot,该 Bot 使用大型语言模型来处理和汇总信息,使用 Pydantic 来构造数据,使用矢量数据库来存储和检索 FAQ 条目。
先决条件
安装依赖项
- 安装必要的 Python 库:
slack_sdk
,transformers
(用于 LLM),,pydantic
和weaviate-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 集成,而是讨论一种利用新创建的常见问题解答数据库的更通用的方法:
- 通用机器人集成:这种方法不仅限于 Slack。您可以与任何支持机器人功能的平台集成 – 无论是 Discord、Microsoft Teams,还是定制的聊天应用程序。
- 事件监听器设置:无论使用哪个平台,在您的应用程序中设置事件监听器。此监听器将监视新问题或搜索查询。
- 检索逻辑:实现逻辑以使用传入的问题查询矢量数据库。数据库的语义搜索功能将有助于找到最相关的常见问题条目。
- 多种使用案例:数据库可用于多种用途 — 从支持内部知识库到为客户支持聊天机器人提供信息。它的多功能性在于它能够快速提供上下文相关信息。
- 超越常见问题解答:考虑扩展数据库以存储更多内容,而不仅仅是常见问题解答。它可以包括文档、教程或与您的组织相关的任何其他形式的结构化知识。这就是可以观察到 Pydantic 的真正价值的地方。
结论
好了,以上代码片段仅供参考。在考虑将这样的工具用于生产时,选择合适的 DB 和 LLM 就像选择盛大舞会的舞伴一样 — 您必须考虑那些流畅的动作和长期的节奏。
RA/SD 衍生者AI训练营。发布者:chris,转载请注明出处:https://www.shxcj.com/archives/3999