AI-知识库搭建(二)GPT-Embedding模型使用

上一篇:AI-知识库搭建(一)腾讯云向量数据库使用-CSDN博客

一、Embedding模型

Embedding模型是一种将高维度的离散数据(如文本、图像、音频等)映射到低维度的连续向量空间的技术。这种技术广泛应用于自然语言处理(NLP)、推荐系统、搜索引擎、问答系统等领域,能够显著提高数据处理的效率和准确性。

二、模型text-embedding-ada-002

openai官方: https://platform.openai.com/ (需要注册,充值)

"Text-Embedding-Ada-002" 是OpenAIAP|中的一个预训练文本嵌入模型,它属于"Ada" 系列的-个变种。Ada系列的模型专注于文本分类和语言理解任务,它在理解语义和推断方面有较好的性能。

这个模型可以用于各种自然语言处理任务,例如文本分类、情感分析、语义理解等。相较于一般的

通用语言模型,"Text-Embedding-Ada-002"可能更适合于需要较高语义理解和推断能力的任务。

三、引用依赖

Chatgpt-Java | Unfbx | Chatgpt-Java

复制代码
        <dependency>
            <groupId>com.unfbx</groupId>
            <artifactId>chatgpt-java</artifactId>
            <version>1.1.5</version>
        </dependency>

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.2</version>
        </dependency>

四、application.properties配置

复制代码
#GPT代理地址IP/域名
proxy.hostname=${PROXY_HOSTNAME:xxxxxxx.com}
proxy.hostport=${PROXY_HOSTPORT:123456}
#GPT密钥
openai.sessonkey=${OPENAI_SESSONKEY:sk-123456}
#GPT语言模型
openai.model=${OPENAI_MODEL:text-embedding-ada-002}

五、初始化客户端

复制代码
import com.unfbx.chatgpt.OpenAiClient;
import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;

@Component
public class InitOpenAiClient {

    @Value("${proxy.hostname:}")
    private String proxyHostname;

    @Value("${proxy.hostport:}")
    private Integer proxyHostport;

    @Value("${openai.sessonkey:}")
    private String  openaiSessionKey;

    @Bean
    public OpenAiClient openAiClient(){
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHostname, proxyHostport));//代理ip,端口
        OkHttpClient okHttpClient = new OkHttpClient
                .Builder()
                //自定义代理
                .proxy(proxy)
                .connectTimeout(30, TimeUnit.SECONDS)//自定义超时时间
                .writeTimeout(30, TimeUnit.SECONDS)//自定义超时时间
                .readTimeout(30, TimeUnit.SECONDS)//自定义超时时间
                .build();

        OpenAiClient client = OpenAiClient.builder()
                //支持多key传入,请求时候随机选择
                .apiKey(Arrays.asList(openaiSessionKey))
                .okHttpClient(okHttpClient)
                .build();
        return client;
    }

}

六、封装接口类

复制代码
import cn.hutool.core.collection.CollectionUtil;
import com.unfbx.chatgpt.OpenAiClient;
import com.unfbx.chatgpt.entity.embeddings.Embedding;
import com.unfbx.chatgpt.entity.embeddings.EmbeddingResponse;
import com.unfbx.chatgpt.entity.embeddings.Item;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.LinkedList;
import java.util.List;

/**
 * 获取Ai模型能力
 * 接口文档 https://chatgpt-java.unfbx.com/
 * 源码、demo https://github.com/Grt1228/chatgpt-java
 * @Date 2024/3/6 13:49
 */
@Component
@Slf4j
public class AiManager {

    @Resource
    OpenAiClient openAiClient;

    @Value("${openai.model:}")
    private String openAiModel;

    /**
     * 该接口获取可能不会非常快,有一定的时延性
     * 获取文本的embedding(向量)
     * @param input
     * @return 返回数组,排列顺序对应传入的数组参数
     */
    public List<Item> getEmbedding(List<String> input) {
        try {
            Embedding embedding = Embedding.builder().input(input).model(openAiModel).build();
            EmbeddingResponse embeddings = openAiClient.embeddings(embedding);
            if (CollectionUtil.isEmpty(embeddings.getData())) {
                return new LinkedList<>();
            }
            List<Item> data = embeddings.getData();
            return data;
        } catch (Exception ex) {
            log.error("调用AI模型报错",ex);
            throw new RuntimeException(ex.getMessage());
        }

    }
}

GPT的引用,在这里我们只使用到了它的embeddings接口,对我们的原始数据做向量化处理。处理后的向量就可以直接存入向量数据库,为最后的问题答案匹配准备。

相关推荐
信也科技布道师FTE7 分钟前
当AMIS遇见AI智能体:如何为低代码开发装上“智慧大脑”?
人工智能·低代码·llm
青瓷程序设计8 分钟前
植物识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·python·深度学习
AI即插即用31 分钟前
即插即用系列 | CVPR 2025 WPFormer:用于表面缺陷检测的查询式Transformer
人工智能·深度学习·yolo·目标检测·cnn·视觉检测·transformer
唐兴通个人41 分钟前
数字化AI大客户营销TOB营销客户开发专业销售技巧培训讲师培训师唐兴通老师分享AI销冠人工智能销售AI赋能销售医药金融工业品制造业
人工智能·金融
人机与认知实验室1 小时前
国内主流大语言模型之比较
人工智能·语言模型·自然语言处理
T0uken1 小时前
【Python】UV:境内的深度学习环境搭建
人工智能·深度学习·uv
七宝大爷1 小时前
基于人类反馈的强化学习(RLHF):ChatGPT“对齐”人类的秘密武器
人工智能·chatgpt
shayudiandian1 小时前
ChatGPT风格对话机器人搭建教程
人工智能·chatgpt·机器人
腾讯云开发者1 小时前
TVP首场香港活动重磅启幕,AI出海变革风向如何把握?
人工智能
wasp5201 小时前
Spring AI 代码分析(十)--Spring Boot集成
人工智能·spring boot·spring