如何把自有数据接入GPT大模型?

ChatGPT引发了AI革命,大家都想探究如何让它发挥更大价值。

以它为代表的大模型并未完全掌握所有专业知识,这也正是我们创业的契机。

我们应该思考如何让AI在专业领域中释放更大的价值潜能。
就像开发者挖掘出某个鲜为人知的资源一样,我们可以开发出AI在特定领域的潜力,从而在市场上脱颖而出。

以OpenAI的API为例,让大模型支持自己专业领域的知识,有两种方式:微调模型和封装到Prompt。

 

一、微调(Fine-tuning)注入专业领域知识

微调是在基础大模型训练成熟之后,通过Fine-tuning模式,利用标注数据调整模型参数以适应不同任务需求。

传统的微调需要做调整损失函数、增加额外层等工作,但自2018年以来,随着预训练模型的体量不断增大,预训练模型Fine-tune所需的硬件和数据需求也在不断增长。此外,下游任务的丰富多样性使得预训练和微调阶段的设计更为复杂。

如今,像GTP-4这样的模型已经采用了一种新的训练模式,即单向语言模型预训练+zero shot prompt/Instruct,它不需要在预训练后进行任务Fine-tuning,而是通过自然语言指令来解决下游任务,这为模型的优化提供了全新的可能性。

OpenAI在GPT-4上花了6个月的时间才放出来,是为了使其更安全、更一致,而不是新的专业领域知识的注入,新专业领域知识的注入耗时非常短的,也就根据数据量,几分钟到几小时。

从OpenAI的微调文档 https://platform.openai.com/docs/guides/fine-tuning 可以看出,要准备的数据包含prompt(输入文本)和completion(输出文本)两部分:

  • prompt是我们给模型的输入文本,它可以是任何文本,例如一个问题、一个描述、一个开头、一个例子等。prompt的作用是告诉模型我们想要完成什么样的任务,并给出一些上下文或模式。

  • completion是模型根据prompt生成的输出文本,它可以是任何文本,例如一个答案、一个续写、一个列表、一段代码等。completion的作用是尽可能地满足prompt的要求,并保持语义和逻辑的连贯性。

下面是一些数据例子:

{"prompt": "对以下商品进行夸赞:彩妆中的口红品类,卖点为颜色是正红色,能提升气色 ->", "completion": " 这口红正红色太好看了,完美提升气色,日常使用特别棒\\n"
}

更多的例子可以看如下链接:

  • GPT-for-E-Commerce/test-v1.1.jsonl at b6dd9d018dce670efd28448dbd0dde0edecb3e42 · Royce17/GPT-for-E-Commerce · GitHub
  • finetune-with-openai/faq.jsonl at 334a69224d7e87a92de09b0d627f616be4ffa43a · A-baoYang/finetune-with-openai · GitHub

要微调的效果好,就要使用更多高质量的示例进行Fine-tuning,我们应该如上面链接例子一样,提供至少几百个高质量的示例,而且最好由专家审查过。

二、在Prompt中带入知识

只需设计恰当的输入,就能让ChatGPT在上下文中生成有价值的答案,而无需修改模型的结构或参数。

输入问题时,还可以引入相关知识,使问题更加全面。这种方法的局限性在于每次输入的长度有限。

下面是一些例子:

例1:作为专业DBA,回答SQL相关问题

这里在输入问题时,引入了我们的数据库表结构这个专业知识。

问:

我要你扮演一个专业DBA。我将提供给你数据表结构以及我的需求,你的目标是告知我性能最优的可执行的SQL语句,并尽可能的向我解释这段SQL语句,如果有更好的优化建议也可以提出来。

我的数据表结构为:

CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET  utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名字',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';

我的需求为:根据用户的名字查询用户的id

回答

好的,根据您提供的数据表结构和需求,可以使用以下SQL语句来查询用户的id:

SELECT id FROM user WHERE name = '用户的名字';

这条SQL语句将会在用户表中查找指定名字的用户,然后返回该用户的id。为了进一步优化查询性能,您可以在name字段上创建索引,这将会使查询更快速地匹配到所需的记录。

您可以使用以下SQL语句来为name字段创建索引:

ALTER TABLE user ADD INDEX name_index (name);

此外,为了保证查询的效率,您需要注意以下几点:

  1. 数据表的数据量过大时,查询的速度可能会变慢。如果您的数据表中包含大量的数据,可以考虑对表进行分区或分表。

  2. 如果您的查询需求经常变化,您可能需要对数据库进行优化。可以通过监控数据库的性能指标,识别哪些查询最耗时,然后对其进行优化。

例2:智能客服

比如我们要做智能客服,有一些客服准则(ChatGPT做智能客服的十条服务准则 ),对于OpenAI的API来说,要注入的知识如下链接:

lanying-connector/openai-xiaolan.json at master · maxim-top/lanying-connector · GitHub

下面代码通过消息对象的数组注入了一些上下文知识。


# Note: you need to be using OpenAI Python v0.27.0 for the code below to work
import openaiopenai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Who won the world series in 2020?"},{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},{"role": "user", "content": "Where was it played?"}]
)

其中

  • 系统消息(system)有助于设置助手的行为。在上面的例子中,prompt被指示“You are a helpful assistant.”。
  • 用户消息(user)有助于指导助手。它们可以由应用程序的最终用户生成,也可以由开发人员设置为指令。在上面的例子中,用户的最后一个问题是“在哪里比赛的?” 就是通过提前设置的对话消息来帮助回答。由于模型没有过去请求的记忆,因此所有相关信息必须通过对话提供。如果对话无法满足模型的token限制,则需要以某种方式缩短。
  • 助理消息(assistant)有助于存储之前的回复。它们也可以由开发人员编写,以帮助提供所需行为的示例。

通过上面的方式就可以完成专业领域知识的注入。

例3:通过外部链接把内容带入

下面只包含我们发起的对话部分,会话结果比较长,省略了:

User : 您是一个金融专家,我会向您发送微软的年度报告,并在我向您发送链接后反馈给我微软10个利好和10个消极因素。你明白吗?
...
User : Microsoft 2022 Annual Report
...
User : 我会把Nvidia最近的财报链接发给你,你能反馈我和上面微软类似的答案吗,你明白吗?
...
User: NVIDIA Announces Financial Results for Fourth Quarter and Fiscal 2023 | NVIDIA Newsroom
...
User: 您能否从Nvidia的报告中提供更多财务见解?
...
User: 我会把戴尔最近的财务报告的链接发给你,你能反馈我和上面微软类似的答案吗,你明白吗?
....

User: 比较微软、英伟达和戴尔,用表格对比下他们的资本支出、运营支出、收入、利润率和利润率百分比。
...
User:预测下戴尔未来12个月的现金流。

这种方式要确保链接可以被GPT访问到,外部链接持续稳定的可访问是必须考虑的问题。

适用场景对比

价格对比

OpenAI的相关报价看: Pricing

对话类:GPT4远远高于GTP3.5。

 

目前提供的可微调的这几个模型:Ada、Babbage、Curie、Davinci 均是原始的 GPT-3 基本模型,其中,Davinci 是最强大的模型,成本也最高,而 Curie 又比 Babbage 功能更强大(且成本更高),依此类推,这些名称是相对的。

 

GPT3.5 和 GTP4 由于目前没有 fine-tune,所以成本就只有每次问答的成本,但由于大部分时候需要带大量的 prompts,其实隐性的成本是挺高的,我们经常可以看到一个简短的问题会带有上千个字符的 prompts。

而 Davinci 的 fine-tune 模型的训练成本是较高的,但一旦获得专属模型后,后续的聊天中就不再需要做预检索和背景知识的 prompts 了,可以直接进行关于该领域的知识问答。不仅 token 消耗会变小,而且速度也会更快。

所以目前阶段还是用在Prompt中带入知识方案比较合适,后续等对应的微调模型出来后,可以切换过去。

长度问题

ChatGPT的API当前是无状态的,需要自己维护会话状态和保存上下文。这可能会导致请求内容越来越大,带来高昂的费用。

但是,你可以借助OpenAI的embedding模型(https://platform.openai.com/docs/guides/embeddings/what-are-embeddings)和本地数据库,以更智能的方式维护上下文,并且节省成本。

首先,将文本资料准备成易于处理的格式,并且分成小块(这是OpenAI embeddings模型的输入长度限制)。接着,利用程序调用OpenAI embedding的API将这些文本块转换成数字向量,并且将结果保存到本地数据库中。(注意,为了能够反向获得原始文本,需要将原始文本块和数字向量一起存储。)

当需要搜索的时候,将搜索关键字转换成数字向量,并且在本地数据库中进行检索。结果集将根据匹配相似度进行打分,分越高表示越匹配。这样,可以按照匹配度倒序返回相关结果。

聊天场景下,当用户提问后,需要先把提问内容关键字搜索到一个相关结果集(可以本地检索,也可以通过OpenAI embedding接口获得向量后比较相似度)。然后根据拿到的结果集,将结果集加入到请求ChatGPT的prompt中。

比如说用户提了一个问题:

“What's the makers's schedule?”

从数据库中检索到相关的文字段落是:

“What I worked on...”
"Taste for Makers..."

那么最终的prompt看起来就像这样:


[{role: "system",content: "You are a helpful assistant that accurately answers queries using Paul Graham's essays. Use the text provided to form your answer, but avoid copying word-for-word from the essays. Try to use your own words when possible. Keep your answer under 5 sentences. Be accurate, helpful, concise, and clear."},{role: "user",content: `Use the following passages to provide an answer
to the query: "What's the makers's schedule?"
1. What I worked on...
2. Taste for Makers...`}
]

这样ChatGPT在返回结果的时候,就会加上你的数据集。

具体实现看: GitHub - mckaywrigley/paul-graham-gpt: AI search & chat for all of Paul Graham’s essays.

总结

大模型的可能性真的非常多。想象一下,如果你将自己的思想和博客输入大模型,你可以训练出一个包含自己想法的模型。这个模型可以被定位为模仿人进行交流,最终创造出一个虚拟的你。对于专业领域的KOL(关键意见领袖)来说,这种方法非常有用,因为粉丝可以直接针对他的思想进行提问和交流。

而对于不善写作的人来说,也可以将自己的想法以简单的问答对的形式输出,训练出一个专属机器人,再利用大模型的语言和逻辑能力来撰写包含自己思想的文章。这种方法非常值得尝试。

参考

  • 如何用 ChatGPT 构建你的专属知识问答机器人 如何用 ChatGPT 构建你的专属知识问答机器人 - Frank 的个人博客

  • 搭建基于知识库内容的机器人 搭建基于知识库内容的机器人 | Learning Prompt

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5.Eclipse集成开发环境

5.Eclipse集成开发环境 Eclipse集成开发环境不仅可以编译裸机工程,还可以调试整个裸机工程,这样当程序异常的时候,可以更加有效的进行修改。接下来就是搭建整个eclipse集成环境:这个调试环境的框架如下图1-1: 图1-1 从…

[ChatGPT 勘误] 关于 CL_WB_PGEDITOR 的用途

ChatGPT 对于 SAP ABAP 里 CL_WB_PGEDITOR 这个工具类用途的回答: 在 ABAP 中,CL_WB_PGEDITOR 是一个用于管理 SAP Web Dynpro ABAP 页签编辑器(Page Editor)的类。 Page Editor 是一个用于设计和维护 Web Dynpro ABAP 应用程序页…

我的周刊(第070期)

我的信息周刊,记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 streamlit[1] 用 Python 快速构建数据应用&#x…

ChatGPT应用模板:英文视频转文章

正文共 800字,阅读大约需要 3 分钟 视频翻译、内容制作人群必备技巧,您将在3分钟后获得以下超能力: 1.高效英文字幕翻译校对 Beezy评级 :B级 * 经过简单的寻找, 大部分人能立刻掌握。主要节省时间。 推荐人 | 互联网…

chatgpt赋能python:Python调取摄像头:如何使用Python编程语言进行视频采集和分析?

Python调取摄像头:如何使用Python编程语言进行视频采集和分析? Python是一种广泛使用的编程语言,特别是在数据科学和人工智能方面。但是,很少有人知道Python也可以与摄像头通信,以便进行视频分析和处理。 在本文中&a…

AIGC+实时云渲染:开启3D内容生态的黄金时代

AIGC技术革命下,我们的3D内容生态将会迎来怎样的变化格局? 实时云渲染 / Cloud XR技术将在AIGC大潮中扮演什么样的角色? 作为云基础设施厂商,我们有哪些机会可以抓住? 这些问题已在XR产业、3D内容行业以及软件行业内…

用chatgpt设计调用chatgpt的api进行内容交互

chatgpt真是极大提高了开发的效率,现在完全离不开了,只要提出你要的需求,很快就生成你想要的代码,几乎不用修改。 比如提出“设你是python开发工程师,通过chapgpt的api实现在一个页面里输入内容并返回结果”&#xff…

前苹果工程师吐槽:“Siri” 代码过时且复杂,不可能变得像 ChatGPT 一样强大...

【CSDN 编者按】在将生成式人工智能引入 Siri 上,苹果的前工程师约翰伯基并不看好,他认为 Siri 不可能像 ChatGPT 一样强大。 原文链接:How Siri, Alexa and Google Assistant Lost the AI Race - The New York Times (nytimes.com) 未经授权…

【ChatGPT】《介绍和对比ChatGPT的两种扮演法指令模式》- 知识点目录

《介绍和对比ChatGPT的两种扮演法指令模式》 【扮演法】的两种常用指令模式 1\ 4A (网上常见): Actor (角色) – Aim (目标) – Ask (提要求) – Addition (补充) 2\ 4W (Up主提出): What (我的情况是) – Will(我想)-Who(你是谁) – Want(我要你) 测试两种句式 4A-hard…

不必依赖ChatGPT,这几款AI工具同样好用

近期,随着人工智能(AI)技术的普及和应用,在各个行业中AI的应用也越来越广泛。这一局面显然类似军备竞赛,各家企业纷纷入场,准备展现其AI技术的强大。然而,我们所看到的只是企业对外发布的结果&a…

《花雕学AI》Poe 一站式 AI 工具箱:ChatGPT4 体验邀请,亲,不要错过哦!

你有没有想过,如果你能在同一个平台上体验多种不同的 AI 模型,和他们进行有趣、有用、有深度的对话,甚至还能轻松地分享你的对话给其他人,那该有多好?如果你有这样的想法,那么你一定不能错过 Poe 一站式 AI…

ChatGP4 的体验 一站式 AI工具箱 -—Poe(使用教程)

最近由于人工智能聊天机器人的爆火(ChatGT),因此各种各样的AI助手流行与网络,各种各样的都有,不论是什么样的其实都是为了我们更方便的解决问题,今天介绍一款AI工具箱——Poe将多种AI集成与一个界面,大家可以一次感受&…

GPT-4 免费体验方法

POE 在Quora上非常受欢迎的手机聊天机器人Poe App已经集成ChatGPT助手!除了最初集成的三个聊天机器人Sage、Claude和Dragonfly外,Poe现在还加入了第四位ChatGPT。由于使用了ChatGPT API,因此Poe拥有真正的ChatGPT。 现在更是第一批集成了GP…

2023移动端技术探索

1. 行业背景 过去的2022年对大家来说都是困难的一年,难在疫情影响,难在宏观环境的增长放缓。没有增长带来的就是痛苦的体验,对于互联网行业,21年的主题是“反996”,到了22年风向就变成了“降本增效”、“业务搜索”以及…

一个让人类窒息的AI工具,或许未来人工智能真的能代替人类!

时隔几周,「神采PromeAI」又更新了 不仅页面做了小小的调整 又增加了「背景生成」功能 害怕各位小伙伴找不到使用位置 今天小编就给大家分享一个超全的使用教程 极速出图效率翻倍 让神采PromeAI在应用性设计方面更具优势 温馨提示:目前手机适配端无…

ChatGpt利用PHP实现PDF转成word的代码实现过程

1.前期准备,给chagpt一些数据认知的投喂,如图: 2.代码实现过程 PHP语言可以通过使用OpenOffice或LibreOffice处理PDF到Word文档的转换。 以下是实现代码过程: 1.安装OpenOffice或LibreOffice OpenOffice或LibreOffice是免费、…

零代码编程:用ChatGPT批量识别图片PDF中的文字

有些PDF页面是图片格式,要怎么批量把图片中的文字识别出来?借助ChatGPT可以轻松完成这个任务。 首先要安装一些相关的软件和Python库。 安装tesseract-ocr(OCR)软件,最新版的是tesseract-ocr-w64-setup-v5.3.0.20221…

android 调用短信,Android实现接收短信和发送短信功能

在学接收短信和发送短信之前,先简单介绍一下 SMS 短消息服务。 SMS(Short Message Service,短信息服务)是一种存储和转发服务。也就是说,短信息并不是直接从发信人发送到接收人,而是始终通过 SMS 中心进行转发。如果接收人处于未连接状态(可能电话已关闭),那么信息将在接收…

SMS发送接收流程

1.短信发送的起点是在短信编辑界面,点击发送按钮开始的 public class ComposeMessageActivity extends Activity ...{ ....public void sendMessage(boolean bCheckEcmMode) { ....//这里面准备发送的数据处理,比如生成PDU数据,存储到数据mWorkingMess…

android短信接收处理和发送

关于短信接收处理方面,当前已经有一些app做的比较好了,比如发给手机发验证码验证的问题,很多app在手机接收到验证码后,不需要输入,就直接可以跳过验证界面,这就是用到了对接收到的短信的处理。至于短信的发…