使用Redis构架你自己的私有大模型
--楼兰 Redis你通常用来做什么?缓存?分布式锁?数据过滤器?不够不够,这远远不够。之前给大家分享过基于Redis Stack提供的一系列插件,完全可以把Redis作为一个类似于Elastic Search的JSON数据库使用。不光可以存储并操作JSON格式的数据,而且可以实现各种复杂的检索。
而现在到了大模型时代,Redis又有了一个更加重要的用途: 向量数据库。基于向量数据库,可以实现一系列更贴近自然语言的检索功能。这也成了AI大模型应用落地的基石。
一、大模型如何理解“语言”
AI大模型最为颠覆性的影响在于他的输入和输出都是人类的自然语言。大模型学习的是基于自然语言整理的预料,你向大模型问问题,也是直接用自然语言提问。感觉一切都非常自然,你有没有想过,这种自然背后,我们到底是怎么和计算机交互的呢?
大家都知道,计算机本质上,只能进行0和1的二进制计算。所以,计算机要想和人进行自然语言的交互,就必须要把自然语言转换成计算机能理解的二进制语言。而这一切的基础,就是 词向量。
你可能经常听说过词向量这个概念,因为他是现在火爆的这些AI大模型产品的及时。但是,词向量到底是什么呢?一堆数字到底怎么表达自然语言当中那些千奇百怪的表达呢?先通过一个例子带你来看下什么是词向量。
下面案例使用LangChain4j框架,调用通义千问的API实现。
从上面的例子可以看出,阿里的通义千问大模型,是用一个1024维度的向量来表示一句话。但是,这个向量和原始语句要表达的意思有什么关系呢?我们接下来看。
import com.roy.ModelUtil;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.model.dashscope.QwenEmbeddingModel;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.openai.OpenAiEmbeddingModel;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.zhipu.ZhipuAiEmbeddingModel;
import dev.langchain4j.store.embedding.redis.RedisEmbeddingStore;
import org.apache.commons.math3.linear.ArrayRealVector;
import org.apache.commons.math3.linear.RealVector;
import java.util.Arrays;
/**
* Author: roy
* Description:
**/
public class VectorCheckDemo {
public static void main(String[] args) {
EmbeddingModel embeddingModel = QwenEmbeddingModel.builder()
.apiKey(ModelUtil.API_KEY_TONGYI)
.modelName("text-embedding-v3")
.build();
String q1 = "你好,我是楼兰";
String q2 = "我的名字叫楼兰"