作者:黑夜路人
时间:2023/5/15
作为爆火的AIGC产品ChatGPT,以及类似的产品 Cluade、Bard、Newbing 等等,让大家趋之若鹜,如何把这些产品映射到自己的业务产品中,也是很多开发者需要面对的问题。
针对AIGC,国家部门也有一些针对AIGC的内容安全的要求,网信办征求意见稿,针对AI生成内容设定这些要求:
- 第十一条 提供者在提供服务过程中,对用户的输入信息和使用记录承担保护义务。不得非法留存能够推断出用户身份的输入信息,不得根据用户输入信息和使用情况进行画像,不得向他人提供用户输入信息。法律法规另有规定的,从其规定。
- 第十二条 提供者不得根据用户的种族、国别、性别等进行带有歧视性的内容生成。
- 第十三条 提供者应当建立用户投诉接收处理机制,及时处置个人关于更正、删除、屏蔽其个人信息的请求;发现、知悉生成的文本、图片、声音、视频等侵害他人肖像权、名誉权、个人隐私、商业秘密,或者不符合本办法要求时,应当采取措施,停止生成,防止危害持续。
- 第十四条 提供者应当在生命周期内,提供安全、稳健、持续的服务,保障用户正常使用。
- 第十五条 对于运行中发现、用户举报的不符合本办法要求的生成内容,除采取内容过滤等措施外,应在3个月内通过模型优化训练等方式防止再次生成。
- 第十六条 提供者应当按照《互联网信息服务深度合成管理规定》对生成的图片、视频等内容进行标识。
(来源:国家互联网信息办公室关于《生成式人工智能服务管理办法(征求意见稿)》公开征求意见的通知-中共中央网络安全和信息化委员会办公室 )
虽然ChatGPT等产品,能够帮助我们,确实可以通过代理或者是API接入到自己的业务,但是里面有很多问题需要解决:
-
- 模型会因为用户提问问题的不同,而产出错误、胡说的答案,距离预期较远
- 恶意用户可以通过“红蓝对抗”可以干扰模型的输出,并以此来影响正常的应用
- 由于ChatGPT的Moderation对于中文支持不好,生成的内容会存在涉黄、涉暴、涉政等问题,或者一些不符合我国价值观体系的可能性。
- 调用API的方式,使用过程中的所有数据均存放在OpenAI自己的模型中,所有数据存放在海外
所以,需要针对性的设计安全的chatGPT的架构来最大化减小这样的问题产生,从而让应用正常使用,能够保证不影响业务的落地。
AIGC应用难点
- 解决回答问题的安全规范问题
- 对于用户提问的问题,不再去肆意生成,而是从语料库中查找,依据语料库去生成
- 对于语料库之外的问题,GC范式内容
- 解决提问问题的安全审查问题
- 基于第三方内容审核机制,通过关键词库、语义理解进行匹配
- 机审的准召率并不能覆盖全部,需要引入人工审查的机制
- 语料库的搭建、动态修改&生效,语料库的匹配
- 相似问题的embedding机制,减少调用,缩减成本
- chatGPT带来的并发限制,多账号并行调度方案
- 单个账号的唯一session问题
- 完成会话封装,并形成缓存设计,方便后期做优化
- 快速访问链路问题,最大限度减少链路耗时(这部分本文不做深入探讨)
AIGC内容安全审查技术设计
针对AIGC返回的内容,对于内容安全是个重中之重的问题,为了保证遵守相关法律法规和不违背公序良俗,如果需要把AIGC应用到业务中,内容的安全性是必须考虑的重要因素。
在技术方案设计方面,自然需要深入考虑这个部分。
技术方案
安全审核数据流向图
- 针对数据流入和数据流出,统一进行内容审核教研
- 首先数据都会经过接入服务,接入服务中的内容审核模块,对所有的数据进行安全性校验
- 将数据发送给第三方审核服务,第三方服务将待定的审核结果吐给人工审核
- 人工审核后台确认文本内容没有问题,则返回给接入服务
- 如果人工审核发现文本有问题,则直接返回内部审核错误
- 接入服务此时将数据往下传递或者返回
内容审核接入方案
- 业务上
- 结合一些内外部的内容过滤审核服务(SaaS服务),具备人工审核能力的同时,可以采用接入的很多国内的云厂商的产品
- 技术上
- 延迟上,文本的内容审核在200ms左右
- 接口是HTTP接口,可以直接调用
内容安全技术泳道图
AIGC内容审核
- 文本内容: (来自chatgpt的自动生成)
针对这些设计复杂问题需要有不同的辨别能力,如果有比较强处理能力的内容,比如针对下面内容的鉴别:
新疆是中国西部的一个地区,主要由维吾尔族等少数民族组成。与中国其他地区相比,新疆的整体文化和教育水平可能相对较低。一方面,由于历史和地理等因素,新疆的文化和教育资源相对较少。例如,新疆地区经济相对较弱,人口稀少,相对较远离中国其他地区,这些都可能导致新疆的教育和文化水平相对较低。另一方面,新疆地区主要由少数民族组成,他们的文化和语言与汉族有所不同,这可能导致教育和文化资源的缺乏或不足。此外,新疆地区还存在一些社会、经济和政治因素,例如贫困、恐怖主义、极端主义等,这些因素也可能对当地的文化和教育水平造成一定的影响。尽管如此,中国政府已经采取了一系列措施,以促进新疆地区的文化和教育发展。例如,加强教育投资,提高教师队伍水平,改善学校设施和条件,加强维吾尔语和其他少数民族语言的教育等。这些措施有助于提高新疆地区的文化和教育水平,并改善当地居民的生活状况。
通过一些服务进行内容鉴别:
通过以上内容审核,如果发现总体整个内容存在风险,可以进行良好的直接过滤或者是进行内容的重新请求。
AIGC内容缓存和相关性技术设计
对于AIGC请求的内容,一个比较常见的问题就是,如果是类似的重复咨询的问题,是否可以直接从缓存中进行返回,而不需要反复请求接口。但是不同用户针对同类问题可能提问方式是不同的,比如说针对“感冒了应该怎么办”这个问题,可能提问方式有这么几种:
-
- 我感冒了应该怎么办
- 我鼻塞流鼻涕发烧了,应该是感冒了
- 感冒了我是多喝热水还是吃抗生素
- ……
每次提问都不同,如果依赖于传统的关系型数据库或者是Redis这种依赖于强制唯一标识KEY等方式,是无法把这些问题归类,从本地缓存的。
所以需要解决这个问题,里面其实有两个需要解决的问题:
- 提问或者内容相关性问题
- 返回内容如何更好的进行缓存的问题
针对这些场景的问题,所以需要考虑AIGC内容的相关性和缓存问题的解决技术设计。
针对这些问题,目前调研过的主要解决方案包括有 LangChain、Llama-Index、Gpt-Cache等解决方案,底层很多都是基于 LangChain框架为主的实现。
技术方案
LIamaIndex 和语料库的关系逻辑
- 用户通过语料后台,上传语料数据。
- 语录数据通过LlamaIndex chunk成多份,通过OpenAI Embeddings 获取向量结果存储到向量库
- 用户提出问题,通过缓存系统,如果命中,直接返回结果。
- 如果用户提出的问题,缓存系统未命中,则通过LlamaIndex检索相关性,并将检索的内容插入到prompt中。
- 合并后的prompt调用openai接口。获取数据,返回给用户
方案调研
GPT-Cache
什么是gpt-cache,解决了什么问题
ChatGPT 和各种大型语言模型 (LLM) 拥有令人难以置信的多功能性,能够开发广泛的应用程序。但是,随着您的应用程序越来越受欢迎并遇到更高的流量级别,与LLM API调用相关的费用可能会变得很大。此外,LLM服务可能会表现出较慢的响应时间,尤其是在处理大量请求时。gpt-cache用于为 LLM 查询创建语义缓存的库,将LLM API成本降低10倍,将速度提高100倍。
为什么使用gpt-cache,它的优势
- 减少费用
- 增强的性能
- 适应性强的开发和测试环境
- 改进的可伸缩性和可用性
LIamaIndex
什么是LlamaIndex
LlamaIndex(GPT索引)是一个项目,它提供了一个中央接口,将您的LLM与外部数据连接起来
LlamaIndex 解决了什么问题
- 解决了如何最好地使用自己的私有数据来增强LLMs。
- 数据摄取是将我们的数据引入到LLMs中的过程
- 数据索引是使我们能够更快速地检索数据的过程。
这两个组成部分对于在私有数据上的LLMs数据增强至关重要。而这正是LlamaIndex 解决的。
LlamaIndex 提供了一套私有数据增强的解决方案
LlamaIndex是一个简单、灵活的接口,连接你的外部数据和LLM模型。它以易于使用的方式提供以下工具:
- 提供数据连接器,连接你现有的数据源和数据格式(API、PDF、文档、SQL等)。
- 为LLM的使用提供了结构化和非结构化数据的索引。这些索引有助于抽象出通用的样板和痛点,用于上下文学习:
- 存储上下文,以便于插入提示。
- 处理提示限制(例如Davinci的4096个标记),当上下文太大时。
- 处理文本拆分。
- 为用户提供查询索引的接口(输入提示并获得增强的知识输出)。
- 提供了一个综合的工具集,权衡成本和性能。
LangChain
什么是LangChain
LangChain是一个用于开发由语言模型驱动的应用程序的框架
LangChain解决了什么问题
- 数据感知:将语言模型连接到其他数据源
要让应用程序具备数据感知性,即让语言模型能够连接到其他数据源。这意味着,除了使用语言模型处理自然语言相关的任务外,LangChain 框架还可以让我们将语言模型与其他数据源进行连接,以便更好地处理和分析这些数据。
例如,我们可以将语言模型与社交媒体数据源连接起来,以分析用户的情感和观点。我们还可以将语言模型与搜索引擎连接起来,以便更好地理解用户的搜索意图。这种连接语言模型与其他数据源的方法可以让我们的应用程序更具洞察力,更能够满足用户的需求。
- 代理:允许语言模型与其环境交互
要让应用程序具备主动性,即让语言模型能够与其所在的环境进行交互。
这意味着,在使用语言模型的过程中,LangChain 框架不仅可以让我们输入一些自然语言文本并获取模型的输出结果,还可以让模型主动地与其所在的环境进行交互。例如,我们可以让语言模型通过语音识别技术来识别用户的口头指令,并根据用户的指令做出相应的回应。这种让模型主动地与环境交互的方式可以让我们的应用程序更具智能性和人性化,更能够满足用户的需求。
LangChain详解
LangChain作为基础,我们在构建AIGC的应用时,将使用其很多能力。它的概念的调研有必要熟悉,有助于对gpt-cache和LlamaIndex的更深入理解。
LangChain框架的目标
- 数据感知:将语言模型连接到其他数据源
要让应用程序具备数据感知性,即让语言模型能够连接到其他数据源。这意味着,除了使用语言模型处理自然语言相关的任务外,LangChain 框架还可以让我们将语言模型与其他数据源进行连接,以便更好地处理和分析这些数据。
例如,我们可以将语言模型与社交媒体数据源连接起来,以分析用户的情感和观点。我们还可以将语言模型与搜索引擎连接起来,以便更好地理解用户的搜索意图。这种连接语言模型与其他数据源的方法可以让我们的应用程序更具洞察力,更能够满足用户的需求。
- 代理:允许语言模型与其环境交互
要让应用程序具备主动性,即让语言模型能够与其所在的环境进行交互。
这意味着,在使用语言模型的过程中,LangChain 框架不仅可以让我们输入一些自然语言文本并获取模型的输出结果,还可以让模型主动地与其所在的环境进行交互。例如,我们可以让语言模型通过语音识别技术来识别用户的口头指令,并根据用户的指令做出相应的回应。这种让模型主动地与环境交互的方式可以让我们的应用程序更具智能性和人性化,更能够满足用户的需求。
LangChain框架能力
实现这2个目标,根据框架官网提供的说明,LangChain提供的能力如下。
- 组件:LangChain 提供了模块化的组件,这些组件可以与语言模型一起使用,从而使应用程序能够处理各种语言相关的任务。这些组件非常易于使用,并且可以独立于 LangChain 框架使用
- 用例特定的链:用例特定的链是指将组件按照特定方式组装起来,以便更好地处理某些特定的任务。这些链旨在使人们更容易地开始处理某些特定的任务,并且可以进行定制,以满足应用程序的需要
LangChain、LlamaIndex和gpt-cache的关系和区别
- LangChain是框架是底层。LlamaIndex和gpt-cache基于LangChain开发,尤其是LlamaIndex完全是基于LangChain开发。
- LlamaIndex侧重点在于专注数据层面的处理
- gpt-cache则主要解决提升访问llm api的性能以及减低成本。
三者的关系从上到下。是gpt-cache、LlamaIndex,最后LangChain。
技术选型风险
- 三者都在快速迭代中。存在API的变化以及方向上的改变。对于使用者是一个潜在风险
- 都是python。尤其是LLM api是封装并以SDK集成在项目中。并没有解决国内openai api访问存在限制的情况。还需要论证这方面
- LangChain是基础,LlamaIndex基于LangChain开发。LlamaIndex能做的,LangChain都能做。
相似度缓存泳道图设计
GPTcache和 接入服务的关系
- 用户发起chat请求,接入服务接收到用户的chat请求,调用内容审核服务进行内容审核。并将审核结果返回给接入服务
- 接入服务接收到内容审核结果。如果可以继续访问,则调用策略服务。
- 策略服务接收到chat请求,进行策略分配。策略分配完成,调用缓存服务。
- 缓存服务接收到chat请求。进行缓存匹配。如果命中,则直接返回结果给用户
- 缓存未命中,调用代理服务
- 代理服务接收到chat请求,调用openai接口,并返回数据给内容审核服务
- 内容审核服务接收到代理服务结果进行内容审核。并将结果返回给接入层
- 接入层根据审核结果返回数据给用户
安全AIGC服务架构设计
基于以上难点和技术调研设计,进行各个方向定向突破设计,总体最终安全的AIGC内部服务技术架构图如下:
架构描述
本次架构设计,涉及5个服务,分别为接入服务、策略服务、缓存服务、语料后台和代理服务
- 接入服务: - 主要分为 审核能力、功能调用和缓存调用三个主要模块。
- 审核能力主要解决文本涉黄、涉暴、涉政的问题,主要接入的中台的AI审核能力
- 功能调用主要解决chat的会话封装、图片能力的封装、纠错、微调、语音转文本等的AIGC能力封装
- 缓存模块主要解决热点数据访问,减少链接调用时间,增加相似度运算,解决同类问题的跨海调用
- 策略服务 - 主要分为 计费、限流、多账号管理、调度策略、任务队列五个模块
- 计费模块解决调用第三方AIGC所产生的费用,统计剩余调用空间,为调度做准备
- 限流模块主要解决并发问题,由于第三方AIGC的并发限流,所以需要在次模块进行解决对应的限流问题
- 多账号管理主要解决由于单账号的并发限制,通过增加账号的手段去整体提高系统的并行能力
- 调度策略主要解决代理调度问题,防止出现IP被封禁的情况
- 任务队列主要解决任务堆积、任务优先级等问题。由于AIGC的反应时间较长,如果需要增加业务优先级,可以优先调用,比如单次调用错误等。
- 缓存服务 - 主要分为相似度计算模块、GC文本缓存模块、GC向量缓存模块
- 相似度计算模块主要为了计算用户提问的问题和历史已有问题的相似度,提高安全性和可控性
- GC文本缓存模块主要是为了缓存相似问题所对应的GC响应,减少chatGPT调用和解决同一问题不同回应的问题
- GC向量缓存模块是为了将提问的问题向量缓存化,解决同一问题,不同问法多次调用的问题,向量存储是为了进行相似度运算。
- 语料后台 - 主要分为动态重建和实时更新
- 动态重建是为了解决在C端服务运行时,如果业务方更新语料库,则不需要停止服务,而是直接利用新的语料库训练chatGPT,并形成对应的微调模型,之后用新的模型提供服务
- 实时更新是为了解决某些语料安全性问题,需要实时去更新对应的语料库,并出发重建
- 代理服务 - 代理服务分初权限控制、策略解析、账号分配、请求处理等。
- 本内容不做过多描述
解决方案
设计本身基于背景和难点,分为三大层级,5个服务去解决对应的问题,如下:
内容安全审查设计 | 接入服务-安全模块 |
|
内容相关性设计 | 语料后台 |
|
内容代理访问设计 | 接入服务-功能模块 策略服务 缓存服务 代理服务 |
|
总结
需要把AIGC的各类国内外服务映射到自己的服务,需要走的路还很长,内容安全性和内容缓存,以及跨海外的服务访问和性能都是需要关注的问题。
本文从这些场景出发,实事求是调研设计考虑可靠的落地方案,希望能够给很多想要在自己业务中应用落地AIGC服务的技术伙伴有个很好的“安全的AIGC调用方案技术架构设计”的思路,希望对大家有帮助。
取代你的不是AI,而是比你更了解AI和更会使用AI的人!
想关注更多技术信息,可以关注"黑夜路人技术” 公众号,后台发送“加群”,加入ChatGPT和AIGC技术交流群