引言:当前 AI 范畴的现状
2022.11.30,也就是大概半年前,OpenAI 发布文章 Introducing ChatGPT,标志着正式迈入大模型时代,经过半年时刻的发酵,ChatGPT 现已被大家熟知,其传播速度超越国内的 QQ 和微信。
今年2月,ChatGPT 也逐步被国内所知,国内各个公司也开始布局言语模型赛道,如百度的文心一言、阿里的通义千问、复旦大学的Moss、科大讯飞的星火等。
在调查近两个月的 GitHub Trending 榜,能够发现根本上每天都有关于 GPT 项目,如前段时刻的 LangChain、llama_index、Auto-GPT 等,GPTCache 也连续上榜四天,AI 范畴的论文也有许多。
现在能够看出的,关于 ChatGPT 相关的开发,大概能够分为以下几种:
- ChatGPT 模型平替,如 LLama、Dolly、Moss 等
- 模型 FineTune,如 LawGPT、BioGPT、Huatuo-Llama-Med-Chinese 等
- GPT 运用开发,包含桌面运用、反向代理在线 LLM 模型、依据 GPT 才能处理日常问题
- GPT 才能增强,如 LLM 流程编列、token 约束突破、给 ChatGPT 供给外部数据源等
GPTCache介绍
项目地址:github.com/zilliztech/…
GPTCache 由来
公司内部在进行 OSSChat 项目开发过程中,发现 ChatGPT 可能会成为阻止 OSSChat 提升功能的瓶颈。一,不稳定的 ChatGPT 服务会拉低 OSSChat 呼应速度;二,每次调用 ChatGPT 接口,都会产生新的费用,这导致 OSSChat 的运用本钱不断拉升。
GPTCache 是什么
ChatGPT 和其他大言语模型,能够被广泛运用于各种开发场景中。跟着运用处理恳求的添加,在固定资源的情况下将添加恳求延时,或许为了确保恳求延时满意用户需求,则需求添加计算资源,也将直接添加运用开发本钱。假如运用类似 ChatGPT 的在线服务,也会有恳求速率约束,一起恳求数量的添加也必定导致本钱的添加。
GPTCache 则是为了处理上述问题诞生的,主要是为 LLM 相关运用构建类似语义缓存,类似的问题恳求屡次,直接从缓存中获取,这样将削减恳求呼应时刻,一起也下降了 LLM 的运用本钱。
社区关于GPTCache反应怎么?
现在GPTCache现已在Github近一个月,也取得一个不错的热度。取得超越 3.2k star, 200 个 fork 数量,统计的被引用数量,近 300 个。
PyPi 累计发布25个版本:0.1.1~0.1.25,pip 累计下载数量:超 15w。
为什么要用GPTCache
GPTCache 效果是什么?
- 下降LLM运用费用;现在大多数LLM服务均经过恳求token数进行计费,当恳求运用缓存成果,自然下降恳求次数,则削减了LLM运用本钱;
- 功能优化;比较于大模型的推理时刻,从缓存数据中获取时刻将下降一个数量级;
- 兼容性强,多种运用场景:GPTCache 供给多种 LLM 的镜像接口,只需修正 import 路径,即可模型 LLM 恳求;
- 改善LLM服务的可扩展性和可用性;现在LLM服务都有恳求速率约束,到达这一约束则服务无法进行呼应。假如关于类似的问题运用缓存答案,将有用缓解服务无法呼应这一问题。
GPTCache 效果于哪些场景比较适宜?
- 某一笔直范畴的 LLM 相关运用,如法令、生物、医学等;
- 固定的 LLM 相关运用,如某公司内部或个人运用的 ChatBot;
- 开发的 LLM 运用在某些时刻内的恳求具有高度类似性,如节日祝福语模版等;
- 具有大用户集体的 LLM 运用,假如给用户集体进行分类,类似用户用同一缓存
项目结构
项目现在包含了七个核心组件,分别为:
- LLM Adapter
- Pre-Processor
- Embedding
- Cache Manager
- Similarity Evaluation
- Post-Processor
- GPTCache Server
LLM Adapter
LLM适配器旨在经过一致API和恳求协议来集成不同的LLM模型。GPTCache为此供给了标准化的接口,确保用户以最低的本钱、风险最小的方式接入 GPTCache。
Text-to-Text
- OpenAI
- Llama
- Dolly
- LangChain
MultiModel
- StableDiffusion
- Stability
- Replicate
- MiniGPT4 (VQA)
API
- put
- get
- init_similar_cache
- init_similar_cache_from_config
示例代码
from gptcache.adapter import openai
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "what's github"}],
)
更多比如:gptcache.readthedocs.io/en/latest/r…
Pre-Processor
预处理,处理 LLM 恳求的输入,如对输入信息进行删减,也可进行增加,或许进行信息修正等,处理后的成果将会交由 Embedding 组件转换为向量。
根底内置完成
- last_content
- last_content_without_prompt
- all_content
- nop
Context预处理
- ContextProcess Interface
- SummarizationContextProces
- SelectiveContextProcess
示例代码
from gptcache import cache
from gptcache.processor.pre import last_content
cache.init(pre_embedding_func=last_content)
from gptcache.processor.context.summarization_context import SummarizationContextProcess
context_process = SummarizationContextProcess()
cache.init(pre_embedding_func=context_process.pre_process)
更多比如:gptcache.readthedocs.io/en/latest/r…
Embedding
Embedding,为了从恳求中提取包含语义信息的向量以进行类似性搜索而创建的。GPTCache供给了一个通用接口,支撑多种嵌入式API,并供给了多种可供选择的处理方案。
文本 Embedding
- Onnx
- OpenAI
- Cohere
- SBERT
- FastText
图片 Embedding
- Timm
- ViT
音频 Embedding
- Data2VecAudio
第三方 Embedding
- Huggingface
- LangChain
示例代码
from gptcache import cache
from gptcache.embedding import Huggingface
huggingface = Huggingface(model="uer/albert-base-chinese-cluecorpussmall")
cache.init(
embedding_func=huggingface.to_embeddings,
)
更多比如:gptcache.readthedocs.io/en/latest/r…
注意事项
- 不同的言语有些模型是不适用的
- 更改模型后,需求将之前的缓存文件删除
- Embedding模型的维度注意与向量数据库进行关联
Cache Manager
办理缓存数据,包含了存储、搜索、整理。运用传统数据库存储结构化数据,即字符串、数字等;运用向量数据库存储非结构化数据,主要是文本、图片、音频等经过 Embedding 模型得到的向量;运用目标存储存储文件类型数据,即图片、音频等。
传统数据库
- SQLite
- DuckDB
- PostgreSQL
- MySQL
- MariaDB
- SQL Server
- Oracle
向量数据库
- Milvus
- Zilliz Cloud
- Faiss
- Hnswlib
- PGVector
- Chroma
- DocArray
目标存储
- Local Storage
- S3
示例代码
from gptcache import cache
from gptcache.embedding import Huggingface
from gptcache.manager import manager_factory
huggingface = Huggingface(model="uer/albert-base-chinese-cluecorpussmall")
m = manager_factory(
"sqlite,faiss,local",
data_dir="gptcache",
vector_params={"dimension": huggingface.dimension},
)
cache.init(
pre_embedding_func=huggingface.to_embeddings,
data_manager=m,
)
更多比如:gptcache.readthedocs.io/en/latest/r…
Similarity Evaluation
评价类似成果是否到达预期,将用户输入与从 cache 中类似搜索得到的成果进行类似评价,得到一个数值,然后与用户设定的类似阈值进行比较。这样能够有用确保缓存成果质量,以满意响运用户恳求的要求。
内置完成
- SearchDistanceEvaluation
- ExactMatchEvaluation
- NumpyNormEvaluation
- OnnxModelEvaluation
- KReciprocalEvaluation
代码示例
from gptcache import cache
from gptcache.similarity_evaluation.distance import SearchDistanceEvaluation
evaluation = SearchDistanceEvaluation()
cache.init(
similarity_evaluation=evaluation,
)
更多比如:gptcache.readthedocs.io/en/latest/r…
Post-Processor
对符合类似阈值的成果列表进行处理,假如想确保cache并不是每次都一样,则能够这个组件进行二次开发。
内置根底完成
- first
- random_one
- temperature_softmax
- nop
示例代码
from gptcache import cache
from gptcache.processor.post import first
cache.init(post_process_messages_func=first)
更多比如:gptcache.readthedocs.io/en/latest/r…
更多
GPTCache Server
Server发动
假如经过python现已安装了GPTCache库,能够直接履行以下指令发动服务:
gptcache_server
也可经过docker imager发动服务:
docker pull zilliz/gptcache:latest
docker run -p 8000:8000 -it zilliz/gptcache:latest
服务访问
curl -X PUT -d "receive a hello message" "http://localhost:8000?prompt=hello"
curl -X GET "http://localhost:8000?prompt=hello"
具体运用:github.com/zilliztech/…
Cache 初始化配置
- similarity_threshold
- log_time_func
- prompts
示例代码
from gptcache import Config, cache
config = Config(similarity_threshold=0.6)
cache.init(config=config)
更多比如:gptcache.readthedocs.io/en/latest/r…
Cache 恳求参数
- cache_obj
- cache_context
- cache_skip
- session
- temperature
运用比如
from gptcache import Cache
from gptcache.adapter import openai
one_cache = Cache()
one_cache.init()
openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": question}],
cache_obj=one_cache,
)
更多比如:gptcache.readthedocs.io/en/latest/u…
GPTCache根本运用
GPTCache 与内置集成 LLM 模型
运用 GPTCache,初始化后即可体会,其初始化过程中涉及到的各个组件可依据自身要求进行拼装,接入 LLM 则只需求直接替换包名即可,更多LLM比如
示例代码
from gptcache.adapter import openai
from gptcache.adapter.api import init_similar_cache
from gptcache.processor.pre import last_content
init_similar_cache(pre_func=last_content)
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": question}],
)
更具体运用,参阅:github.com/zilliztech/…
GPTCache 与自定义 LLM 模型
关于现在没有集成至 GPTCache 的大模型,能够经过 api 运用 GPTCache 的才能
示例代码
from gptcache.adapter.api import put, get, init_similar_cache
init_similar_cache()
put("hello", "foo")
print(get("hello"))
更多比如:gptcache.readthedocs.io/en/latest/r…
GPTCache 与 LangChain
LangChain 是旨在协助开发人员将大型言语模型与其他计算或常识源结合运用,具有强壮构建功能的 Python 库。供给了一套工具和资源,用于构建问答、聊天机器人和代理等 LLM 运用程序。
LangChain 供给了一个大局的 LLM_cache 目标,所以只需求将这个目标赋值成 GPTCache 目标即可,就能够运用 GPTCache 相关功能。
示例代码
from gptcache import Cache
from gptcache.adapter.api import init_similar_cache
from langchain.cache import GPTCache
import hashlib
def get_hashed_name(name):
return hashlib.sha256(name.encode()).hexdigest()
def init_gptcache(cache_obj: Cache, llm: str):
hashed_llm = get_hashed_name(llm)
init_similar_cache(cache_obj=cache_obj, data_dir=f"similar_cache_{hashed_llm}")
langchain.llm_cache = GPTCache(init_gptcache)
更多比如:python.langchain.com/en/latest/m…
GPTCache 与 LlamaIndex
LlamaIndex 是一种数据索引工具,用于将私有数据与预先练习好的 LLM 模型相结合,完成在特定上下文中学习。它供给数据连接器、索引和查询接口等工具,以便高效地将非结构化和结构化数据与 LLM 相结合,完成常识增强。
示例代码
from gptcache import Cache
from gptcache.adapter.api import init_similar_cache
from langchain.cache import GPTCache
from gpt_index.llm_predictor.structured import LLMPredictorfrom gpt_index.prompts.default_prompts import DEFAULT_SIMPLE_INPUT_PROMPT
def init_gptcache(cache_obj: Cache, llm str):
init_similar_cache(cache_obj=cache_obj, data_dir=f"similar_cache_{llm}")
predictor = LLMPredictor(llm, False, GPTCache(init_gptcache))
prompt = DEFAULT_SIMPLE_INPUT_PROMPT
llm_prediction, formatted_output = predictor.predict(
prompt, query_str="hello world"
)
完整实例:github.com/zilliztech/…
GPTCache运用场景
私有化模型
为什么需求私有化模型布置?
- 安全
虽然 ChatGPT 的效果很好,但是运用 ChatGPT 时,数据将会被发送给 OpenAI 公司,这些数据可能会被模型用于答复其他用户的问题,从而导致数据泄漏。这种情况 OpenAI 无法完全杜绝,因而为了确保数据安全,许多 LLM 运用者开始考虑运用开源大模型进行私有化布置。
- 本钱
现在各个在线 LLM 模型根本上都是经过 token 数进行收费,长时刻以往,关于个人和企业也将是额定一笔开支,假如进行私有化布置,也将必定程度下降运用本钱。
- 质量
现在 ChatGPT 其问题答复质量并不稳定,这与其练习数据相关,例如练习数据都是与日子,让其答复宇宙相关的问题,得到的答案则很有可能会胡乱伪造的。关于这部分,GitHub 上也有很多相关某一笔直范畴资源,如医学相关的华驼、法令相关的 LawGPT 等,当然也能够搭建本地常识库,如公司内问答人、客服机器人、文档帮手等。
为什么要运用GPTCache?
- 接入本钱极低。运用内置模型只需两步:初始化和替换模型 SDK 的 import。
- 下降 LLM 运用本钱。经过运用缓存获取类似问题的答案,能够削减 LLM 恳求次数,从而下降服务器资源压力。
- 削减呼应时延。类似问题的呼应时延只需毫秒级别。假如关于缓存返回的成果不满意,支撑绕过缓存重新生成。
- 高度定制化。能够依据业务场景拼装适宜的缓存,例如关于小数据量,只需求运用本地存储模型,例如SQLite + Faiss;关于大数据量场景,能够运用 MySQL/Oracle + Zilliz Cloud/Milvus。除了存储方面,其他模块也能够依据需求进行调整,例如预处理、Embedding、类似度评价和后处理等。
引荐Github资源
- privateGPT
- 开源模型列表
GPT运用
跟着 ChatGPT 的呈现,依据其 API 进行桌面运用、浏览器插件、服务代理等的开发也逐步增多,这些运用能够下降用户运用门槛,一起也提高了 ChatGPT的运用体会,例如经过定制化 UI、prompt 办理、数据导出等。
GPTCache 也适用于这种场景,它给个人用户带来的最直接优点是本钱下降和加快。假如缓存每次问答的成果,并到达必定的数据量,则能够离线处理使命。此外,关于运用服务供给者,依据用户画像对缓存数据进行精细化办理,能够使服务突破 LLM 模型的功能瓶颈,进一步改善服务的稳定性。
引荐资源列表
- awesome-chatgpt-zh
- awesome-open-gpt
多模态场景
跟着 ChatGPT 技术的不断遍及和运用拓展,AIGC(内容生成)成为了其间一个重要的方向,包含文本生成、图片生成和语音生成等多个范畴,这些技术的发展将进一步促进人工智能在各个范畴的运用。
最新版的 GPTCache 现已能够支撑多模态场景,包含了文本生成文本、文本生成图片、图文问答、文本生成语音等,更多比如参阅 Bootcamp。
将 GPTCache 运用于这一场景中,最具吸引力的是它能够显著下降时延。但是,这种方法也存在一些问题。例如,有时候即使输入类似,也不必定需求相同的答案。为了处理这个问题,能够越过缓存偏重新生成模型,或许在获取缓存答案后,运用小模型进行微调。与重新生成模型比较,小模型微调也能够有用下降呼应时刻。因而,在实践运用场景中,需求依据具体情况来判断 GPTCache 是否会带来收益,并决议怎么组合 GPTCache 的组件。