4、开源组合llama+langchain,蹭上ChatGPT几行代码轻松搭建个人知识库私人助理聊天机器人(测试发现质量不错)

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 跟着步骤走,稍微懂点代码的都可以来操作,两个开源组件封装的非常彻底可以说拿来即用。所以无论作为前端也是可以来玩玩的。

image.png


1、前言


我的ChatGPT 系列文章





跟着步骤走,稍微懂点代码的都可以来操作,两个开源组件封装的非常彻底可以说拿来即用。所以无论作为前端也是可以来玩玩的。


理想的状态就是,搭建好我的私人助理后,会将尽可能多的把数据投喂给它。


本示例先来个结果给你们看看效果。我最后测试中文的时候加了两句话


Interviewer:你每天睡多久?
Interviewee:大概8个小时左右.


来看看执行结果,我还掏出手机找到计算器 8*365=2920,还真是对的。对于这样的结果我真的非常满意,有时候准备投喂更多的数据来验证一下效果。


image.png


初步来看:


现代产品往往涉及很多来自不同渠道的用户调查数据,比如访谈、在线客服聊天记录、客户邮件、问卷调查和各种平台上的客户评价等。要整理和理解这些数据非常困难。通常,我们会把这些数据整理得井井有条,并用各种标签进行分类。


但如果我们有一个人工智能聊天机器人,它可以回答所有关于用户研究数据的问题,那该多好呀!这个机器人可以通过查找大量的历史用户研究数据,为我们的新项目、产品或者营销活动提供有价值的见解和建议。


那么接下来,我会用简单的代码,就可以实现这个简单的小目标,哪怕你没有技术背景也没关系。在这篇文章里,我会手把手教你如何去做。


2、定制知识库


首先我的想法是将我的个人数据作为研究数据,而不仅仅是互联网上的普通知识。


前几天一直在看fine-tunes微调是否可以?但是后来发现了一个问题,微调是通过提供提示-响应示例来训练模型以特定方式回答问题。


例如,微调有助于训练模型识别情感。要做到这一点,您需要在训练数据中提供句子-情感值对,就像下面的例子那样:


{"prompt":"ChatGPT发布的GPT-4令人兴奋! ->", "completion":" 积极"}
{"prompt":"湖人队连续第三晚让人失望! ->", "completion":" 消极"}


但是我香提供的数据是不可能有提示-响应这样的示例。我们只有想用来寻找相关答案的数据。所以,在这种情况下,微调是行不通的。


我想要的便是:


需要让模型了解上下文。我们可以通过在提示本身中提供上下文来实现这一点。


就像这样:


.....各种上下文信息
  .....各种上下文信息
  .....各种上下文信息
  .....各种上下文信息
  .....各种上下文信息
  回答问题: {用户输入的字符串}


不过,有一个问题。我们不能把所有的研究数据都放在一个提示里。这在计算上是不合理的,而且 GPT-3 模型在请求/响应方面有 2049 个“令牌”的硬限制,虽然现在已经有了GPT-3.5以及GPT-4 我现在研究的还是GPT-3,后面看看是否可以进行优化使用最新的模型。


我需要找到一种方法,只发送与问题相关的信息,以帮助我的私人助理回答问题,而不是将所有上下文相关都放在请求中,这样的花费实在太大了,也很不方便。


3、实现


好消息是,有一个名为 GPT Index 的开源库,由 Jerry Liu 创建,使用起来非常容易。github地址为:

github.com/jerryjliu/l…


以下便是它的工作原理:


  • 创建文本块索引
  • 找到最相关的文本块
  • 使用相关的文本块向 GPT-3 提问
  • 这个库为我们完成了所有繁重的工作,我们只需要编写几行代码。让我们开始吧!


代码只有两个函数:第一个函数从我们的数据中构建索引,第二个函数将请求发送到 GPT-3。以下是伪代码:


from llama_index import SimpleDirectoryReader, GPTListIndex, readers, GPTSimpleVectorIndex, LLMPredictor, PromptHelper
from langchain import OpenAI
import sys
import os
from IPython.display import Markdown, display
def construct_index(directory_path):
    # set maximum input size
    max_input_size = 4096
    # set number of output tokens
    num_outputs = 2000
    # set maximum chunk overlap
    max_chunk_overlap = 20
    # set chunk size limit
    chunk_size_limit = 600 
    # define LLM
    llm_predictor = LLMPredictor(llm=OpenAI(temperature=0.5, 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
def ask_ai():
    index = GPTSimpleVectorIndex.load_from_disk('index.json')
    while True: 
        query = input("来,有问题先问我的AI助理吧? ")
        response = index.query(query, response_mode="compact")
        display(Markdown(f"Response: <b>{response.response}</b>"))
if __name__ == "__main__":
    # 初始化OpenAI API KEY 
    os.environ["OPENAI_API_KEY"]="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"


上面主要实现也就是两个函数的事情,一个是初始化数据的索引,另外一个函数便是输入字符串输出结果的问答模式


调试


这里发现了谷歌一个非常强大的工具,谷歌云盘,可以直接在上面调试运行代码,而且可以分步骤,真的不错。这是我在上面创建的测试项目,大家有兴趣的话都可以进行查看,还可以直接创建一个副本项目,根据自己的需求随便修改了,感觉这个云环境还是非常的方便,我这个项目的链接是:colab.research.google.com/drive/1yX4q…


这里相当于重新创建了一个项目文件夹,然后在里面操作,相当于你的云系统只不过应该是linux的


  • 下载github项目,主要是下载我里面的模拟测试数据,安装python依赖


  • 准备代码,这个我上面实现的代码里拷贝过来就可以了


  • 设置一下自己的openai的api-key


image.png


  • 将准备的数据进行构建索引


  • 开启询问模式


image.png


你还可以问不相关的问题,如果这样,他应该给不了你正确的答案的,所以语料你准备的越充足,那么在一定程度上是可以替代我的。


image.png


我又问了一下 月薪是多少? 结果回复我与访问无关,没办法回复。也就是如果我加进去。


现在我在data中添加如下信息


Interviewer:What is your monthly salary?
Interviewee:My monthly salary is $250.


然后重新加载数据,再次去查询相关问题,我还是变相查询的,访谈中说的是月薪,这里我提问的是日薪,就是这么牛逼啊,这里你用中文来问也会得到同样的效果,文章开头我也添加了两行中文,然后去提问效果也非常不错。


image.png


4、总结


整体上这两个开源的类库,真的牛逼哄哄,简单的几行代码就可以让我们轻易的搭建起来这样一个本地的知识库,然后配合ChatGPT,可以再通过一个比较大的数据集来验证数据的质量。


本文所有代码都在我的go代码仓库: github.com/aehyok/go-a…


我的个人博客:vue.tuokecat.com/blog


我的个人github:github.com/aehyok


我的前端项目:pnpm + monorepo + qiankun + vue3 + vite3 + 工具库、组件库 + 工程化 + 自动化


不断完善中,整体框架都有了


在线预览:vue.tuokecat.com


github源码:github.com/aehyok/vue-…

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
2月前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
71 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
28天前
|
测试技术 持续交付 UED
软件测试的艺术:确保质量的实战策略
在软件开发的舞台上,测试是那把确保每个功能如交响乐般和谐奏响的指挥棒。本文将深入探讨软件测试的重要性、基本类型以及如何设计高效的测试策略。我们将通过一个实际的代码示例,展示如何运用这些策略来提升软件质量和用户体验。
|
1月前
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成:提升效率与质量的关键
在快节奏的软件开发环境中,自动化测试和持续集成已经成为不可或缺的部分。本文将探讨自动化测试和持续集成的重要性,以及它们如何协同工作以提高软件开发的效率和质量。通过分析自动化测试的策略、工具选择以及持续集成的实践,我们将揭示这些技术如何帮助开发团队快速响应变化,减少错误,并加速产品上市时间。
|
1月前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
2月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
3天前
|
传感器 人工智能 自然语言处理
RDT:清华开源全球最大的双臂机器人操作任务扩散基础模型、代码与训练集,基于模仿能力机器人能够自主完成复杂任务
RDT(Robotics Diffusion Transformer)是由清华大学AI研究院TSAIL团队推出的全球最大的双臂机器人操作任务扩散基础模型。RDT具备十亿参数量,能够在无需人类操控的情况下自主完成复杂任务,如调酒和遛狗。
44 22
RDT:清华开源全球最大的双臂机器人操作任务扩散基础模型、代码与训练集,基于模仿能力机器人能够自主完成复杂任务
|
20天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
49 1
|
25天前
|
敏捷开发 监控 测试技术
软件测试中的自动化策略:提升效率与质量
在软件开发过程中,测试是确保产品质量的关键环节。随着敏捷开发模式的普及,自动化测试成为提升测试效率和质量的重要手段。本文将介绍自动化测试的基本概念、实施步骤以及如何通过自动化测试提高软件测试的效率和质量,同时分享一些实用的自动化测试工具和技巧。
56 3
|
25天前
|
人工智能 机器人 Shell
AI语音机器人安装方法 AI机器人安装代码
AI语音机器人安装方法 AI机器人安装代码
28 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的新篇章:利用AI提升软件质量
【10月更文挑战第35天】在软件开发的海洋中,自动化测试犹如一艘救生艇,它帮助团队确保产品质量,同时减少人为错误。本文将探索如何通过集成人工智能(AI)技术,使自动化测试更加智能化,从而提升软件测试的效率和准确性。我们将从AI在测试用例生成、测试执行和结果分析中的应用出发,深入讨论AI如何重塑软件测试领域,并配以实际代码示例来说明这些概念。
58 3

热门文章

最新文章