零基础入门AI大模型应用开发——第三天:使用python实现问答机器人

news2024/9/24 10:10:22

一、简介

问答机器人是一种能够理解用户提问并提供相关答案的程序。它可以用于各种场景,如客户支持、在线教育、信息检索等。用户通过自然语言输入问题,机器人则通过分析问题并检索相关信息来提供回答。

使用什么技术实现的?

  1. 自然语言处理(NLP)

    • 文本分析:使用库如 NLTK、spaCy 进行文本预处理和分析,提取关键词、句子结构等。
    • 意图识别:通过机器学习模型识别用户的意图,例如使用 TensorFlow 或 PyTorch 训练分类模型。
  2. 深度学习模型

    • 使用预训练模型,如 BERT、GPT 等进行文本生成和理解。可以利用 Hugging Face 的 Transformers 库来快速构建问答系统。
  3. API 调用

    • 利用 API 进行信息检索,比如调用外部知识库或搜索引擎获取答案。
  4. 数据库

    • 存储和管理问答数据,使用 SQLite、PostgreSQL 等数据库进行持久化存储。
  5. Web 框架

    • 使用 Flask 或 FastAPI 构建 Web 应用接口,使用户能够通过浏览器与机器人交互。

有什么意义?

  1. 提高效率

    • 自动化处理常见问题,减轻客服负担,提高响应速度和效率。
  2. 用户体验

    • 提供24/7服务,用户随时都能获取所需信息,提升客户满意度。
  3. 数据分析

    • 通过收集用户提问数据,分析用户需求和偏好,为业务决策提供支持。
  4. 个性化服务

    • 根据用户历史互动记录,提供个性化的回答和建议,提高用户粘性。
  5. 知识传播

    • 使知识更加可获取,尤其在教育和信息查询领域,帮助更多人获取所需知识。

二、对话机器人

import requests
import json

# 发送 API 请求获取回复
url = "http://localhost:11434/api/generate"

while True:
    # 从用户输入获取问题
    user_input = input("请输入你的问题(输入exit退出):")
    if user_input.lower() == 'exit':
        break

    payload = {"model": "llama3", "prompt": user_input+"请使用中文回答我"}
    
    response = requests.post(url, json=payload, stream=True)  # 确保使用 stream=True

    # 尝试解析流式 JSON 响应
    try:
        for line in response.iter_lines():
            if line:  # 确保行不为空
                try:
                    response_json = json.loads(line.decode('utf-8'))
                    if 'response' in response_json:
                        print(response_json['response'], end='', flush=True)
                    if 'done' in response_json and response_json['done']:
                        print("\nStream ended.")
                        break
                except json.JSONDecodeError as e:
                    print("\nJSON decode error:", e)
                    continue
    except json.JSONDecodeError:
        print("Initial JSON decode error: potentially non-stream response")

 

如果不存储对话历史,机器人在每次对话时都无法参考之前的内容,这就导致了几个问题:

  1. 上下文丧失:用户的提问可能与之前的对话相关,如果没有记忆,机器人无法理解这些关系,可能会给出不相关或无意义的回答。

  2. 交互体验差:用户可能希望进行连续的对话,例如追问或深入探讨某个主题。如果机器人每次都重置,它无法维持自然的对话流,可能会让用户感到沮丧。

  3. 学习与适应能力缺失:如果机器人不能记住用户的偏好或之前的互动,它无法适应用户的需求。长期互动中,记忆可以帮助机器人提供更加个性化的体验。

  4. 对话的连贯性:记忆可以帮助建立更连贯的对话,用户可能会希望回顾之前的讨论或者更详细地询问某个主题,而没有记忆的机器人难以做到这一点。

为了改善用户体验,存储对话历史是一种有效的方式。这不仅使对话更具连贯性,还能让机器人在处理复杂问题时更为智能。如果需要,可以根据对话的主题和用户的偏好,灵活管理历史记录的大小和内容。通过这样的方式,机器人能够更好地理解用户的需求,并在互动中表现得更为人性化。

 

三、有记忆的对话机器人

import requests
import json

# 发送 API 请求获取回复
url = "http://localhost:11434/api/generate"

# 存储对话历史
conversation_history = []

while True:
    # 从用户输入获取问题
    user_input = input("请输入你的问题(输入exit退出):")
    if user_input.lower() == 'exit':
        break

    # 将用户输入添加到对话历史
    conversation_history.append(f"用户: {user_input}")

    # 创建完整的提示,包括之前的对话历史
    full_prompt = "\n".join(conversation_history) + "\n助手: "

    payload = {"model": "llama3", "prompt": full_prompt + "请使用中文回答我"}
    
    response = requests.post(url, json=payload, stream=True)  # 确保使用 stream=True

    # 尝试解析流式 JSON 响应
    try:
        for line in response.iter_lines():
            if line:  # 确保行不为空
                try:
                    response_json = json.loads(line.decode('utf-8'))
                    if 'response' in response_json:
                        print(response_json['response'], end='', flush=True)
                        # 将助手的回复添加到对话历史
                        conversation_history.append(f"助手: {response_json['response']}")
                    if 'done' in response_json and response_json['done']:
                        print("\nStream ended.")
                        break
                except json.JSONDecodeError as e:
                    print("\nJSON decode error:", e)
                    continue
    except json.JSONDecodeError:
        print("Initial JSON decode error: potentially non-stream response")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode 合并区间

我们借助一个辅助链表(元素类型是一维数组)来进行结果统计。 这个算法解决了“合并区间”的问题,具体要求是给定一组区间(每个区间有开始和结束位置),如果两个区间有重叠,那么需要将它们合并成一个区间,并…

【Linux】ubuntu 16.04 搭建jdk 11 环境(亲测可用)

目录 0.环境 1.题外话 2.详细 0.环境 windows11 主机 Virtual Box 7.0 ubuntu 16.04系统 想搭建个 jdk11的环境,用于项目 1.题外话 因为虚拟机与主机传输文件不方便,所以可以尝试用共享文件夹的方式传输,亲测可用,参考以下博…

JAVA并发编程系列(10)Condition条件队列-并发协作者

一线大厂面试真题,模拟消费者-生产者场景。 同样今天的分享,我们不纸上谈兵,也不空谈八股文。以实际面经、工作实战经验进行开题,然后再剖析核心源码原理。 按常见面经要求,生产者生产完指定数量产品后,才能…

计算机毕业设计 校运会管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

函数模板进阶 - 为什么函数模板不要特化?

本文参考文章2001 年 7 月的 C/C++ Users Journal,第 19 卷第 7 期:Why Not Specialize Function Templates? 大家有兴趣可以看看原文。 文章目录 一、 重载和特化1. 重载2. 特化二、特化和重载的调用优先级1. 第一份代码2. 第二份代码3. 原因三、函数模板特化的书写格式1. …

防护装备穿戴与否检测系统源码分享

防护装备穿戴与否检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

【机器学习】生成对抗网络(GAN)——生成新数据的神经网络

生成对抗网络(Generative Adversarial Networks,简称GAN)是一种创新的神经网络结构,近年来在机器学习和人工智能领域引起了广泛的关注。GAN的核心思想是通过两个神经网络的对抗性训练,生成高质量的、与真实数据相似的新…

webview2加载本地页面

加载方式 通过导航到文件 URL 加载本地内容 使用方式: webView->Navigate( L"file:///C:/Users/username/Documents/GitHub/Demos/demo-to-do/index.html"); 但是这种方式存在一些问题,比如: 存在跨域问题(我加载…

邮件发送高级功能详解:HTML格式、附件添加与SSL/TLS加密连接

目录 一、邮件HTML格式设置 1.1 HTML邮件的优势 1.2 HTML邮件的编写 二、添加附件 2.1 附件的重要性 2.2 添加附件的代码示例 2.3 注意事项 三、使用SSL/TLS加密连接 3.1 SSL/TLS加密的重要性 3.2 SSL/TLS加密的工作原理 3.3 在邮件发送中启用SSL/TLS 3.3.1 邮件客…

计算机毕业设计 校园志愿者管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

【关联规则Apriori】【算法】【商务智能方法与应用】课程

探索Apriori算法:数据挖掘中的频繁项集与关联规则 在当今数据驱动的世界中,数据挖掘技术正变得越来越重要。今天,我们将通过一个实际案例,了解并应用Apriori算法,这是一种广泛用于发现频繁项集及其关联规则的算法&…

使用k8s部署RainLoop-Webmail

说明 * rainloop最新源码官方下载地址:https://www.rainloop.net/downloads/ * 系统要求:https://www.rainloop.net/docs/system-requirements/ * 安装文档:https://www.rainloop.net/docs/installation/ * 更多详细资料请查看官方文档 * do…

CentOS Linux教程(7)--目录文件的创建、删除、移动、复制、重命名

文章目录 1. 创建目录、文件2. 删除目录、文件3. 移动目录、文件4. 复制目录、文件5. 重命名目录、文件 1. 创建目录、文件 使用mkdir创建目录: 使用touch创建文件: 2. 删除目录、文件 使用rm可以删除文件: 使用rm -f可以强制删除文件,…

状态机设计模式

1. 订单管理中存在的问题 订单管理中,订单存在未支付,派单中,服务中,已完成等等状态,所以在业务代码中,都是首先判断订单的状态,然后根据不同状态执行不同的逻辑。 在业务代码中对订单状态进行…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第九集:制作小骑士基本的攻击行为Attack以及为敌人制作生命系统和受伤系统

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、制作小骑士基本的攻击行为Attack 1.制作动画以及使用UNITY编辑器编辑2.使用代码实现扩展新的落地行为和重落地行为3.使用状态机实现击中敌人造成伤害机制二…

移动端列表筛选封装

适合场景&#xff1a;Vue2vant 移动端项目&#xff0c;数据填充添加全部选项及相关逻辑处理&#xff0c;支持多选、单选以及筛选状态返回 效果图 选中交互 使用说明 <filter-box ref"filterBox" :isMultiple"true" //是否多选:params"waitData&q…

ant design vue实现表格序号递增展示~

1、代码实例 //current当前页数 //pageSize每页记录数 const columns [{title: 序号,width: 100,customRender: ({ index }) > ${index (current.value - 1) * pageSize.value 1},align: center,fixed: left,} ] 2、效果图

虚拟机:4、配置12.5的cuda和gromacs

前言&#xff1a;本机环境是win11&#xff0c;通过wsl2安装了ubuntu实例并已实现gpu直通&#xff0c;现在需要下载12.5的cuda 一、查看是否有gpu和合适的cuda版本 在ubuntu实例中输入 nvidia-smi输出如下&#xff1a; 说明该实例上存在gpu驱动&#xff0c;且适合的CUDA版本…

解决银河麒麟操作系统在单用户模式下根分区只读的问题

解决银河麒麟操作系统在单用户模式下根分区只读的问题 1、问题描述2、问题解决方法 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在使用银河麒麟操作系统时&#xff0c;有时我们可能需要进入单用户模式来进行系统维护或修复。然而&#x…

软考高级:中台相关知识 AI 解读

中台&#xff08;Middle Platform&#xff09;是近年来在软件开发和企业架构中兴起的一种理念和架构模式&#xff0c;尤其在中国的互联网企业中得到了广泛应用。中台的核心思想是通过构建一个共享的服务和能力平台&#xff0c;支持前端业务的快速迭代和创新&#xff0c;从而提升…