从 RAG 到财富:懂你支持栈的 AI

5 阅读7分钟

从 RAG 到财富:懂你支持栈的 AI

Kyle Hailey 2025 年 7 月 30 日 原文链接

随着大语言模型(Large Language Models, LLMs)彻底改变企业生产力,一个显著的局限性仍然存在:它们无法开箱即用地访问你公司的内部数据。这就是 Retrieval-Augmented Generation(检索增强生成,RAG)发挥作用的地方。

RAG 通过将 LLM 与包含领域特定知识的 向量数据库 配对,扩展了 LLM 的智能——比如你的支持工单、Slack 讨论串、工程 Runbook、Jira 问题等等。这使得 LLM 能够基于你自己的支持生态系统数据,提供有据可依、相关的响应。

在本文中,我们将逐步介绍如何使用 YugabyteDB 的全新向量功能 构建一个 RAG 流水线,以实现更智能、更具上下文感知能力的支持自动化。了解如何摄取内部文档、向量化它们、高效地存储在 YugabyteDB 中,最后如何使用 GPT-4 这样的 LLM 来回答内部问题——所有这些都基于你自己的支持栈数据。

设置:将 YugabyteDB 用作向量存储

在本文中,我们将向你展示如何将 YugabyteDB 用作向量存储。你可以按照 这些说明 在本地设置 YugabyteDB 数据库。请使用 v2.25 版本(如果有更新的可用版本,请使用更高版本)。

确保你具备 安装说明 中的所有先决条件。在 Mac 上,安装步骤如下:

brew install wget

wget https://software.yugabyte.com/releases/2.25.2.0/yugabyte-2.25.2.0-b359-darwin-arm64.tar.gz tar xvfz yugabyte-2.25.2.0-b359-darwin-arm64.tar.gz

cd yugabyte-2.25.2.0/

./bin/yugabyted start

一旦 YugabyteDB 启动并运行,你就可以使用你喜欢的工具连接到数据库。YugabyteDB 提供了 ysqlsh,它的使用方式与 psql 完全相同。

启动 YugabyteDB 后,在同一目录下,你可以通过运行以下命令连接到数据库:

./bin/ysqlsh -h hostname -p 5433 -U yugabyte

由于 YugabyteDB 兼容 Postgres,你可以使用 psql。在 Mac 上使用以下命令安装 psql:

brew install postgresql@15

然后通过以下命令连接:

psql -h hostname -p 5433 -U yugabyte

或者,在 EC2(例如)上设置 psql,使用以下命令安装:

sudo dnf install -y postgresql15-server postgresql15-contrib

连接到 YugabyteDB 后,设置向量扩展,创建向量表,并在其上创建索引。使用以下命令连接:

psql -h 127.0.0.1 -p 5433 -U yugabyte

然后设置向量扩展并创建向量表。

CREATE EXTENSION vector;

CREATE TABLE vectors (
id TEXT PRIMARY KEY,
article_text TEXT,
embedding VECTOR(1536)
);

CREATE INDEX NONCONCURRENTLY ON vectors USING ybhnsw (embedding vector_cosine_ops);

要运行 RAG 应用程序,请按照以下步骤操作,确保你使用的是 Python 3.9 环境:

git clone https://github.com/kyle-hailey/rag_support cd rag_support

python3.9 -m venv rag_support

source rag_support/bin/activate

pip install -r requirements.txt

export OPENAI_API_KEY='your openAI key'

你需要一个 OPENAI_API_KEY 才能运行本文中详细介绍的 Python 程序。确保在环境中设置 OPENAI_API_KEY。程序会从环境中读取 OPENAI_API_KEY。

export OPENAI_API_KEY='your openAI key'

rag_support 仓库具有如下结构:

rag_support/

├── data/
│ ├── github.txt
│ ├── zendesk.txt
│ ├── jira.txt
│ └── slack.txt
├── insert.py
├── question.py
└── requirements.txt

一旦 GitHub 仓库被克隆并设置好,有两个步骤需要遵循。

  1. 使用 insert.py 将 ./data 目录中的文件向量化并加载到 YugabyteDB 中,创建 RAG 数据
  2. 使用 question.py 向 LLM 提问,问题将补充 RAG 数据

insert.pyquestions.py 都已设置为连接到本地安装的 YugabyteDB 实例。

connection_string =
"postgresql://yugabyte:password@127.0.0.1:5433/yugabyte"

如果你在远程机器上设置了 YugabyteDB,那么需要将这一行修改为指向其他机器,将 127.0.0.1 替换为远程 IP。

步骤 1:插入向量化文档

第一步是使用 "insert.py" 向量化支持相关数据。Python 程序 insert.py 将获取 ./data 目录中的所有文件,向量化它们,并加载到 YugabyteDB 的向量表中。

% python insert.py
✅ Successfully connected to the database.
📄 Loading documents...
📦 Loaded 4 documents.
🔍 Vectorizing documents...
✅ Vectorization complete.

步骤 2:带着上下文提问

一旦 ./data 中的文件被向量化并加载后,我们就可以开始提问了,问题将通过 question.py 补充上述信息。它执行以下步骤:

  • 你的问题被转换为向量
  • 该向量用于从数据库中检索相关的 RAG 数据块(chunks)
  • 这些数据块作为上下文传递给 GPT-4
  • GPT-4 使用该上下文回答你的问题

questions.py 展示了 LLM 在没有 RAG 数据和有 RAG 数据情况下的响应。这凸显了 RAG 数据的强大能力。

% python question.py
Ask me a question (press Ctrl+C to quit):
❓ Your question: Why is feature ABC-123 delayed
🔍 Retrieved context snippets:
- '### Source: Slack\n### Channel: #engineer' (distance: 0.1951)
- '### Source: Jira\n### Ticket ID: ABC-123\n' (distance: 0.2583)
- '### Source: Zendesk\n### Ticket ID: #789\n' (distance: 0.2948)
- '### Source: GitHub\n### PR: #456\n### Titl' (distance: 0.3059)
================================================================================
🤖 BASELINE ANSWER (without RAG context):
================================================================================
As an AI, I don't have specific information about a project or feature called ABC-123.
Delays in projects or features can be due to a variety of reasons such as technical
difficulties, changes in project scope, resource allocation, or unforeseen
circumstances. You may want to check with the project manager or team responsible for
more detailed information.
================================================================================
🧠 RAG-ENHANCED ANSWER (with context):
================================================================================
Feature ABC-123 is delayed because of two main issues. First, there is a missing OAuth
environment variable (`OAUTH_REDIRECT_URI`) on staging. Second, there is an unresolved
security review on the new login flow. The resolution of these issues is dependent on
the auth team and the security team.
================================================================================

你可以尝试的其他问题(按业务功能分类):

  • Engineering/Dev(工程/开发)
    • 为什么功能 ABC-123 被延迟了?
    • OAuth 集成的当前状态是什么?
    • 是否有任何与登录相关的未解决安全问题?
  • Developer Operations/SRE(开发者运维/SRE)
    • 上周是否有与认证相关的部署失败?
    • 谁最后处理了登录系统?
  • Support and Customer Context(支持与客户上下文)
    • Acme Corp 最近是否有任何与登录相关的问题?
    • Acme 的 SSO 问题的解决方案是什么?
  • Documentation and Knowledge Base(文档与知识库)
    • 如何接入新的 OAuth 提供商?
    • 上周的认证讨论线程中发生了什么?
  • Meta Questions(元问题)
    • 总结目前阻碍认证功能的所有事项。

为什么 RAG 对支持团队很重要

传统的 LLM 很聪明,但它们不了解你的公司。RAG 允许你控制知识库,解锁强大的用例:

  • 即时内部支持,无需在旧的 Slack 讨论串中翻找
  • 自动化入职,可访问团队特定的文档
  • 更智能的事件回顾,基于真实的历史工件

借助 YugabyteDB 的分布式向量存储,你的 RAG 设置不仅可扩展,而且快速且具备生产就绪能力。

下一步

你刚刚构建了一个针对内部支持栈优化的 RAG 流水线。想要扩展它吗?

  • 定期更新向量
    • 定期用新文档替换 ./data 中的文档,新文档来自
      • Zendesk
      • Jira
      • Slack
      • Github
    • 并使用 insert.py 加载这些文档,以持续丰富 RAG 数据
  • 集成到你的 Slack 机器人或支持工作流中
  • 添加分块(chunking)和元数据标签
  • 用本地 LLM(如使用 Ollama)替换 OPENAI,以确保所有公司数据都保留在公司防火墙内

结论

使用 YugabyteDB 构建由 RAG 驱动的支持系统,彻底改变了你的团队访问和利用内部知识的方式。你的团队不再需要在分散的 Slack 讨论串、过时的 Wiki 和深埋的 Jira 工单中搜寻,现在可以提出自然语言问题,并获得基于你实际支持历史的即时、上下文相关的答案。

YugabyteDB 的向量功能与现代 LLM 的结合,创造了一个可扩展的强大基础,能够随你的组织一起成长。随着你的支持数据不断增长,系统将变得更智能、更有价值,将你们的集体机构知识转化为一个随时可用的 AI 助手。

准备好将你的支持栈转化为你的竞争优势了吗?从上面的示例实现开始,然后将其扩展到你的整个支持生态系统。未来的你自己——以及你的支持团队——会感谢你的!

想要了解(更)多? 探索 YugabyteDB 如何为 RAG 流水线的检索层 提供动力——提供可扩展性、弹性和对语义丰富数据的低延迟访问。