大语言模型

方案概述

大语言模型(Large Language Models,简称 LLMs)是一种人工智能技术,利用深度学习算法训练大型神经网络,以理解和生成自然语言文本。这些模型通常基于 Transformer 架构,能够处理和理解大量语言数据。近年来,虽然大语言模型取得了显著进展,但也面临偏见、误解及生成不准确信息等挑战。

RAG(检索增强生成,Retrieval-Augmented Generation)是一种结合信息检索(Retrieval)与文本生成(Generation)的自然语言处理技术。它通过从大规模数据源中检索相关信息,来增强大型语言模型(如 GPT、BERT 等)在处理特定任务时的性能和准确性。

ProtonBase 具备强大的向量检索能力,在 RAG 系统中提供高效的向量存储和检索解决方案,使 RAG 系统能够快速从大规模数据中检索相关信息并提升生成模型的表现。通过这一方案,企业在大语言模型应用场景中可显著提高数据管理与检索效率,为 AI 业务发展奠定坚实基础。

业务挑战

数据时效性差

大模型训练的数据基于特定时间点前,导致知识库受限,无法利用最新数据。

无法访问私有数据 & 缺少专业数据

训练过程中无法使用本地私有数据,且数据可能缺乏特定领域的专业知识。

幻觉

数据过时或缺少相关信息时,生成的内容质量降低。

融合检索

为提升生成质量,可能需要使用多种检索方式召回数据并重排序。若单独部署该流程,系统维护复杂度将增加。

产品能力

强大的向量数据存储与检索功能

ProtonBase 数据库提供高效的向量数据存储与检索能力,Embedding 服务处理的内容向量可无缝更新至数据库。此直接更新机制简化了数据流程管理,提高了效率,尤其适用于快速匹配相似项的应用场景。

融合检索

ProtonBase 支持完整的 SQL 表达能力,可在单一 SQL 查询中进行多种召回计算与汇总,并对多路结果重排序,充分利用引擎性能,简化架构,提升执行效率。

服务能力的横向扩展

ProtonBase 允许一个主实例绑定多个只读从实例,共享同一数据存储但具备独立计算资源。此设计支持快速扩缩容以应对业务波动,提升系统吞吐率,且系统响应速度不受数据复制和移动操作影响。

多功能数据处理能力

ProtonBase 可同时存储向量与标量数据,满足多样化的数据存储需求。标量数据存储能力支持精确数值计算场景,并通过数据同步工具实现与现有 RDS 系统的低延迟同步,保证数据实时性。统一检索简化查询流程,便于用户在复杂场景中获取所需数据。

方案优势

向量标量统一存储,减少冗余

ProtonBase 集成数据库、数据仓库、搜索引擎和向量引擎,提供卓越的查询与分析性能,满足多业务场景需求,避免扩缩容中的不稳定和冗余存储。

极致弹性,秒级扩容

支持秒级在线扩容,且扩容过程服务不中断,性能随计算节点扩展呈线性增长,有效应对流量洪峰。

云上全托管,简化运维

ProtonBase 以全托管形式提供,简化流程、降低运维负担,提高系统稳定性,助力用户专注业务开发。

方案步骤

仅需 4 步即可使用 ProtonBase 实现 RAG:

  1. 导入:使用 ProtonBase 的数据同步工具,将 RDS 数据、非结构化数据、日志等导入数据库
  2. 嵌入:将数据预处理为向量,以便进行高效的向量检索。
  3. 检索:将用户输入向量化并在数据库中查询,召回相关数据记录。
  4. 生成:将用户输入及召回文档传递给大语言模型,以生成更准确的答案。

嵌入

  1. 数据管道,进行旁路订阅,向量与处理服务,负责更新向量,参考以下代码;
import psycopg2

it = load_data() # 加载训练数据


with psycopg2.connect('host=... user=... password=... dbname=rag') as conn:# 连接protonbase向量数据库
    with conn.cursor() as cursor:
    for row in it:
        emb = get_embedding(it['content']) # 通过调用embedding API,将数据向量化
        row_id = row['id']
        cursor.update('UPDATE table_name SET emb=%s WHERE id = %s', (emb, row_id)) # 更新已同步的数据记录
        conn.commit() # commit写入

检索 & 生成

import psycopg2


def handle_request(req):
    level = req.data['level'] # 标量过滤条件
    user_input = req.data['user_input']
    emb = get_embedding(user_input) # 将用户输入向量化
    with psycopg2.connect('') as conn: # 连接向量数据库
        with conn.cursor() as cursor:
            sql = f'''select content from table_name
WHERE level = %s /*根据标量过滤数据*/
ORDER BY emb <=> %s /*进行向量排序*/
limit 100 /*召回TOP 100结果*/
'''
            cursor.execute(sql, (level, emb)) # 执行向量、标量联合检索查询
            relative_contents = [row[0] for row in cursor] # 根据向量,召回所有相关的数据内容
            response = llm_generate(user_input, relative_contents) # 调用大语言模型,生成回复
            return response