基于知识库构建自己的ChatGPT(简明指南)

一份介绍如何快速使用OpenAI API 构建专属知识库 AI的指南

现代产品通常拥有来自不同来源的大量用户研究数据:用户研究采访、对话记录、客户电子邮件、调查、各种平台上的客户评论等。

理解所有这些数据是一项具有挑战性的任务。传统的方法是维护一个有序的数据库,配备各种相应的标签。

但如果我们可以拥有自己的个人 ChatGPT,它可以回答关于我们的用户研究数据的任何问题呢?

现在,只需要几行代码就可以实现这一点,即使没有技术背景也可以做到。接下来,我将逐步解释如何实现这一点。

1. OpenAI API

OpenAI提供了一个API来发送请求。我们需要这个API来将相关的上下文发送给模型,并保持信息的私密性。

在开始使用API之前,可以尝试通过GPT-3 Playground中的用户界面与GPT-3模型进行交互。

2. 定制知识库

我们想让ChatGPT使用我们的数据,而不仅仅是来自互联网的一般知识。我们该怎么做呢?

2.1 是否可以使用Fine-Tuning对模型进行微调?

在初步接触这个问题时,我认为可以使用我们的数据集对模型进行微调。结果发现微调是通过提供提示-响应示例来训练模型以特定方式回答问题。

微调可以有助于训练模型识别情感,例如,在训练数据中提供句子-情感值对,就像这个例子中:

{"prompt":"我的新手机到了! ->", "completion":"积极"}
{"prompt":"今天考试很差让人失望 ->", "completion":"消极"}

但在训练自己的ChatGPT情况下,我们没有类似的提示-响应。我们只是想要用来找到答案的数据。因此,在这种情况下微调无法起作用。

2.2 将上下文信息作为 Prompt 发送

我们都知道,如果我们需要让GPT模型知道内容上下文信息。我们可以通过在提示本身中提供上下文信息来实现这一点。举个例子:

上下文信息如下。
{内容}
基于上下文信息而不是原有知识,回答问题:{用户提问}

不过,有一个限制。我们不能在一个提示中发送所有的研究数据。因为OpenAI模型的请求/响应硬限制为 2049 个“Token”(GPT3.5)。这大约是对应8K英文字符,对应到中文就更少了。

我们需要找到一种方法,只发送有助于我们的AI助手回答问题的相关信息,而不是在请求中发送所有数据。

2.2.1 使用专有的库

使用GPT Index 的开源库(由 Jerry Liu 创建)可以轻松实现这一点。

具体操作如下:

1. 创建文本块的向量索引
2. 找到最相关的文本块
3. 使用最相关的文本块向 GPT-3 提出问题

该库会为我们处理所有复杂的工作,我们只需要编写几行代码。

2.2.2 开始动手实践

下面是伪代码,代码只有两个函数:第一个函数从我们的数据中构建索引,第二个函数向 GPT模型 发送请求。

def construct_index:
    1. 设置使用 LLM 的参数
    2. 构建索引
    3. 将索引保存到文件中

def ask_ai:
    1. 获取用户查询
    2. 发送具有相关上下文的查询
    3. 显示响应

a.构建索引

首先,我们需要构建一个索引。索引就像一个数据库,以使它们易于查找的方式存储文本片段。

为此,我们需要将所有数据收集到一个文件夹中。然后,我们要求 GPT Index 获取文件夹中的所有文件,并将每个文件拆分成小的、连续的片段。然后将这些片段以可搜索的格式存储。

下面代码以GPT3为例子

def construct_index(directory_path):
    # 设置最大输入大小
    max_input_size = 4096
    # 设置输出标记数量
    num_outputs = 256
    # 设置最大块重叠
    max_chunk_overlap = 20
    # 设置块大小限制
    chunk_size_limit = 600 

    # 定义LLM
    llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name="text-davinci-003", max_tokens=num_outputs))
    prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit)
 
    # 从目录中加载数据
    documents = SimpleDirectoryReader(directory_path).load_data()
    
    # 构建索引
    index = GPTSimpleVectorIndex(
        documents, llm_predictor=llm_predictor, prompt_helper=prompt_helper
    )

    # 保存索引
    index.save_to_disk('index.json')

    return index

当我们运行这个函数时,它会创建一个名为index.json的文件,其中包含我们的数据分成的小块,转换为易于搜索的格式。

请注意,运行此代码将消耗OpenAPI账户的信用额度(每1,000个token为$0.02,所有账户刚创建的时候时,都有18美元的免费信用额度)。

b. 询问问题

  1. GPT Index 会找到与问题最相关的索引部分
  2. 将它们与问题组合在一起,并发送到 GPT-3
  3. 输出响应
def ask_ai():
    index = GPTSimpleVectorIndex.load_from_disk('index.json')
    while True: 
        query = input("输入你想问的问题? ")
        response = index.query(query, response_mode="compact")
        display(Markdown(f"返回的响应: <b>{response.response}</b>"))

c.简单测试

# 创建索引
index = construct_index("知识库文件路径")

# 询问问题
question = "你的问题?"
response = ask_ai(index, question)

# 打印响应
print(response)

3. 未来应用场景

上面我们简单展示了下,如何使用GPT-Index+OpenAPI模型快速搭建属于自己的ChatGPT,只需几行代码就可以实现。
想象一下我们只用几分钟的时间就能够构建一个用于搜索我们自己知识库的ChatGPT。同样的技术可以用于数十种不同的用例。

  • 医疗保健聊天机器人
    可以根据用户的健康历史和症状提供医疗建议
  • AI法律顾问
    上传相关法律文件,就能够浏览法律文件并提供有意义信息
  • 财务金融顾问
    给定企业财务报表,做金融股票推荐分析

以上只是这GPT技术探索的一小部分。随着大型语言模型的发展,现在比以往任何时候都更容易创建可以满足特定需求的自定义AI。
面对这次AI发展变革,每个普通人都无法置身之外,都需要去学习利用好这些技术,来探索发现其中的机会和发展。

  • 4
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
《UML精粹:标准对象建模语言简明指南》是一本介绍UML(Unified Modeling Language,统一建模语言)的精华指南。UML是一种通用的建模语言,用于软件开发过程中的需求分析、系统设计、系统实现等阶段。该书的目的是帮助读者快速理解和掌握UML的核心概念和基本语法。 这本书的核心内容包括UML的基本概念、UML的主要图表和符号、UML的建模过程,以及常用的UML建模工具。通过简洁明了的语言和丰富的示例,读者可以轻松地理解UML的基本思想和应用方法。 在书中,作者首先介绍了UML的起源和发展历程,然后详细解释了UML的三个主要视图:结构视图、行为视图和交互视图。结构视图主要描述系统的静态结构,如类图、对象图等;行为视图主要描述系统的动态行为,如活动图、状态图等;交互视图主要描述系统的交互过程,如时序图、通信图等。读者可以根据不同需求选择合适的图表进行建模。 此外,本书还重点介绍了UML建模过程中的重要概念和技巧,如模型元素的定义和关系的建立,以及如何有效地利用UML进行系统设计和分析。同时,书中还提供了大量的实例,帮助读者更好地理解和应用UML。 总之,这本《UML精粹:标准对象建模语言简明指南》是一本简洁明了、实用性强的UML指南书籍,适合软件开发人员以及对UML感兴趣的读者阅读。通过学习本书,读者可以快速掌握UML的基本知识,并应用于实际的软件开发过程中。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值