LLMs大模型plugin开发实战

一、概述

ChatGPT是通用语言大模型,如果用户想要在与大模型进行交互时能够使用到企业私有的数据,那么可以通过开发plugin(插件)的方式来实现,另外GPT3.5模型的训练数据是截止到2021年9月,如果想让模型能够访问之后的数据,也可以借助plugin。

下面是关于plugin与大模型交互的架构图:

模型通过读取plugin manifest文件信息来决定如何使用plugin,在这个文件中,字段“description_for_model”的内容如下,表明当用户请求他们的个人信息时,模型应该调用plugin来从用户文档中搜索诸如用户邮件之类的信息,而用户文档就是提供给模型使用的私有数据,这段内容可以看做是给GPT模型的prompt(上下文信息):

Plugin for searching through the user's documents (such as files, emails, and more) to find answers to questions and retrieve relevant information. Use it whenever a user asks something that might be found in their personal information.

二、用户与模型交互调用plugin的流程解析

在下面的流程图中,黄色背景框表示定制开发的plugin运行在FastAPI server上,Datastore用于存储用户文档信息,文档通过/upsert操作存储到datastore,通常表示为vector space。主要流程步骤如下:

-用户通过API发送查询请求(/query)给模型

-模型通过“description_for_model”指定的内容来决定是否需要调用plugin

-当用户提供的prompt表明需要调用plugin时,模型通过API访问datastore里的数据

-通过API把搜索到的与用户prompt匹配的数据返回给模型

-返回给模型的数据对于模型来说就是新的上下文信息(new context),然后模型根据原先用户输入的prompt+new context进行处理,然后把结果返回给用户

三、构建datastore解析

有很多方式来构建存储用户文档数据的datastore,包括本地和远程的方式。这里使用llama来构建一个datastore,首先需要导入以下packages:

       from models.models import DocumentChunk, DocumentChunkMetadata, DocumentChunkWithScore, DocumentMetadataFilter

from llama_index.indices.base import BaseGPTIndex

from llama_index.indices.vector_store.base import GPTVectorStoreIndex

from llama_index.indices.query.schema import QueryBundle

from llama_index.response.schema import Response

from llama_index.data_structs.node_v2 import Node, DocumentRelationship, NodeWithScore

from llama_index.indices.registry import INDEX_STRUCT_TYPE_TO_INDEX_CLASS

from llama_index.data_structs.struct_type import IndexStructType

from llama_index.indices.response.builder import ResponseMode

存储数据的原理是先把本地文档数据创建为document chunk,然后把它转换为node,插入到datastore中并建立index以方便查询。

-执行upsert操作把本地文档数据插入到llama datastore中:

-执行query操作从datastore中搜索数据:


-也可以根据id等从datastore中删除不需要的数据

下面是存储到datastore中的文档数据样例:

调用upsert方法把上述文档信息插入到datastore中,如果没有给出id,默认使用uuid来生成随机id:

四、使用datastore查询数据

上面通过upsert操作把本地JSON文件数据写入到datastore之后,可以使用以下代码来模拟用户向大模型发出查询请求:

What's Bob's phone number?

查询返回结果如下,可以看到与用户prompt匹配的前两条记录的score最高,分别为0.943和0.928:

result is :[DocumentChunkWithScore(id='789_0', text="This is Bob's phone number: 123-456-7891", metadata=DocumentChunkMetadata(source=<Source.email: 'email'>, source_id='890', url=Non

e, created_at='2022-01-02T13:00:00Z', author='Alice', document_id='789'), embedding=None, score=0.9439842903203779), DocumentChunkWithScore(id='222_0', text="This is another Bob's phon

e number: 123-456-7893", metadata=DocumentChunkMetadata(source=<Source.email: 'email'>, source_id='8902', url=None, created_at='2022-01-05T13:00:00Z', author='Alice', document_id='222'

), embedding=None, score=0.9281880484234409), DocumentChunkWithScore(id='111_0', text="This is Mike's phone number: 123-456-7892", metadata=DocumentChunkMetadata(source=<Source.email:

'email'>, source_id='8901', url=None, created_at='2022-01-03T13:00:00Z', author='Alice', document_id='111'), embedding=None, score=0.8605654579483485)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/75500.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql-5.5.62-win32安装与使用

1.为啥是这个版本而不是当前最新的8.0&#xff1f; 因为我要用32位。目前mysql支持win32的版本最新只到5.7.33。 首先&#xff0c;到官网MySQL :: MySQL Downloads 然后选 选一个自己喜欢的版本就好。我这里是如标题版本。下载32位的zip。然后回来解压。 完了创建系统环境变…

29 深度玻尔兹曼机

文章目录 29 深度玻尔兹曼机29.1 背景介绍29.2 DBM的叠加方式 29 深度玻尔兹曼机 29.1 背景介绍 过去在解决BM问题的时候&#xff0c;提出过多种模型&#xff1a;RBM、SBN、DBN 其中RBM是一种有限制条件的&#xff0c;简化的BM&#xff0c;限制了隐藏层和观测层内部都没有连…

【数据结构OJ题】移除链表元素

原题链接&#xff1a;https://leetcode.cn/problems/remove-linked-list-elements/description/ 1. 题目描述 2. 思路分析 我们可以定义一个结构体指针变量cur&#xff0c;让cur一开始指向头结点&#xff0c;同时定义一个结构体指针prev&#xff0c;令prev初始化为空指针NULL…

uniapp封装组件,选中后右上角显示对号√样式(通过css实现)

效果&#xff1a; 一、组件封装 1、在项目根目录下创建components文件夹&#xff0c;自定义组件名称&#xff0c;我定义的是xc-button 2、封装组件代码 <template><view class"handle-btn"><view :class"handleIdCode 1 ? select : unSelec…

Java多线程编程中的线程死锁

Java多线程编程中的线程死锁 ​ 在多线程编程中&#xff0c;线程死锁是一种常见的问题&#xff0c;它发生在两个或多个线程互相等待对方释放资源的情况下&#xff0c;导致程序无法继续执行。本文将介绍线程死锁的概念、产生原因、示例以及如何预防和解决线程死锁问题。 线程死…

less学习语法

1.CSS函数的补充 1.rgb/rgba/translate/rotate/scale 2.非常好用的css函数&#xff1a; var:使用css定义的变量calc:计算css值&#xff0c;通常用于计算元素的大小或位置blur:毛玻璃&#xff08;高斯模糊&#xff09;效果gradient:颜色渐变函数 var:定义变量 css中可以自定…

【Vue3】自动引入插件-`unplugin-auto-import`

Vue3自动引入插件-unplugin-auto-import&#xff0c;不必再手动 import 。 自动导入 api 按需为 Vite, Webpack, Rspack, Rollup 和 esbuild 。支持TypeScript。由unplugin驱动。 插件安装&#xff1a;unplugin-auto-import 配置vite.config.ts&#xff08;配置完后需要重启…

Verdi_traceX and autotrace

Verdi_traceX and autotrace Trace X From nWave/nTrace of from the Teporal Flow View. Show Paths on Flow ViewShow Paths on nWave 若Waveform中有X态&#xff0c;鼠标右键会有Trace X的选项&#xff1b; 会自动打开Temporal Flow View窗口&#xff0c;展示对应路径&am…

LangChain手记 Question Answer 问答系统

整理并翻译自DeepLearning.AILangChain的官方课程&#xff1a;Question Answer&#xff08;源代码可见&#xff09; 本节介绍使用LangChian构建文档上的问答系统&#xff0c;可以实现给定一个PDF文档&#xff0c;询问关于文档上出现过的某个信息点&#xff0c;LLM可以给出关于该…

docker打包运行中的容器,生成镜像文件保存到本地

因为想着方便部署&#xff0c;将所有没问题的项目容器打包成镜像&#xff0c;走到哪儿都离线安装自动部署。 第一步先把运行中的容器打包成镜像 docker commit 运行中容器id 像打包成的镜像名称第二步将大象装进冰箱&#xff0c;不好意思说错了&#xff0c;把镜像保存到本地 …

Hlang社区-社区导航栏实现

文章目录 前言项目结构导航实现创作中心移动小球消息提示完整代码前言 okey,这里的话是我们社区导航栏的实现: 废话不多说,看看效果: 我甚至为此用New Bing生成了一个Logo。 项目结构 废话不多说,先来看到我们的项目结构: 在这里导航栏是一个组件。 在App.vue里面直…

el-table分页后序号连续的两种方法

实现效果&#xff1a; 第一页排序到10&#xff0c;第二页的排序应从11开始 实现方法一&#xff1a; 在el-table的序号列中使用template定义 <el-table><el-table-columnmin-width"10%"label"序号"><template slot-scope"scope"…

htmlCSS-----弹性布局案例展示

目录 前言 效果展示 ​编辑 代码 思路分析 前言 上一期我们学习了弹性布局&#xff0c;那么这一期我们用弹性布局来写一个小案例&#xff0c;下面看代码&#xff08;上一期链接html&CSS-----弹性布局_灰勒塔德的博客-CSDN博客&#xff09; 效果展示 代码 html代码&am…

服务器遭受攻击之后的常见思路

哈喽大家好&#xff0c;我是咸鱼 不知道大家有没有看过这么一部电影&#xff1a; 这部电影讲述了男主是一个电脑极客&#xff0c;在计算机方面有着不可思议的天赋&#xff0c;男主所在的黑客组织凭借着超高的黑客技术去入侵各种国家机构的系统&#xff0c;并引起了德国秘密警察…

MyBatis的XML映射文件

Mybatis的开发有两种方式&#xff1a; 注解 XML配置文件 通过XML配置文件的形式来配置SQL语句&#xff0c;这份儿XML配置文件在MyBatis当中也称为XML映射文件。 导学&#xff1a;在MyBatis当中如何来定义一份儿XML映射文件&#xff1f; 在MyBatis当中&#xff0c;定义XML…

ROS学习笔记(三)---好用的终端Terminator

ROS学习笔记文章目录 01. ROS学习笔记(一)—Linux安装VScode 02. ROS学习笔记(二)—使用 VScode 开发 ROS 的Python程序&#xff08;简例&#xff09; 一、Terminator是什么&#xff1f; 在前面的学习中&#xff0c;为了运行hello.py我是在vscode频繁的点击运行窗口的“”号…

JS垃圾回收机制

什么是垃圾回收机制&#xff1f; 垃圾回收机制 (Garbage Collection) 简称GC JS中内存的分配和回收都是自动完成的&#xff0c;内存在不使用的时候会被垃圾回收器自动回收。 正因为垃圾回收器的存在&#xff0c;许多人认为JS不用太关心内存管理的问题 但如果不了解JS的内存管…

Mybatis 源码 ④ :TypeHandler

文章目录 一、前言二、DefaultParameterHandler1. DefaultParameterHandler#setParameters1.1 UnknownTypeHandler1.2 自定义 TypeHandler 三、DefaultResultSetHandler1. hasNestedResultMaps2. handleRowValuesForNestedResultMap2.1 resolveDiscriminatedResultMap2.2 creat…

【C++】C++入门基础详解(1)

本篇内容要分享的是C的基础内容&#xff0c;C的诞生简单的说就是为了填补C语言中的语法坑&#xff0c;同时对比C语言来说增添很多便捷的语法规则&#xff0c;使用起来比C语言便捷不少&#xff0c;但是学习难度也大大增强&#xff0c;不过难度是成线性增长&#xff0c;可以一步一…

WebRTC音视频通话-WebRTC视频自定义RTCVideoCapturer相机

WebRTC音视频通话-WebRTC视频自定义RTCVideoCapturer相机 在之前已经实现了WebRTC调用ossrs服务&#xff0c;实现直播视频通话功能。但是在使用过程中&#xff0c;RTCCameraVideoCapturer类提供的方法不能修改及调节相机的灯光等设置&#xff0c;那就需要自定义RTCVideoCaptur…