使用 Embedchain 和 databutton 构建在线 AI 学习助理

简介: 使用 Embedchain 和 databutton 构建在线 AI 学习助理

image.png

之前探索使用 OpenAI、LangChain 和 LlamaIndex 构建 Knowledge,需要自己整理文档数据集,本文来探索另一种实现方式,将数据集换成输入一个 URL (嵌入在线资源),通过使用 Embedchaindatabutton 来构建 Knowledge 聊天机器人。

什么是 Embedchain

Embedchain  是一个多功能框架,可以轻松地在任何数据集上创建强大的 LLM 支持的聊天机器人。框架负责处理复杂的任务,例如从网页、PDF 和博客文章等各种来源加载数据。然后将数据分成有意义的块,生成嵌入 embeddings 以进行高效查询,并将这些块存储在矢量数据库中以便快速检索。

image.png

简而来说,使用基于  Embedchain 的聊天机器人的简单工作流程:当用户与聊天机器人交互并发送查询信息时,用户的查询将转换为嵌入 embedding 表示(为查询创建嵌入)。同时 Embedchain 搜索向量数据库以查找与用户查询相关的相似文档(查找相似文档)。最后,将类似的文档作为上下文提供给语言模型 (LLM),以生成最佳答案(将上下文传递给 LLM)。

什么是 databutton

Databutton 是人工智能驱动的工作区,用于构建和共享数据应用程序。

使用 Streamlit 构建

创建一个简单的 Web 应用程序,允许用户使用 Embedchain 强大的自然语言处理功能与在线资源进行交互,为给定的查询信息提供相关且准确的响应。

项目开始的基本流程:

  1. 创建项目目录
  2. 创建虚拟环境
  3. 激活虚拟环境
  4. 安装项目需要的依赖库
  5. 开始创建代码文件导库开始代码

创建项目目录,然后打开终端在项目目录下创建虚拟环境:


python -m venv venv

激活虚拟环境 venv


source venv/bin/activate  #for mac
venv\Scripts\activate     #for windows users

安装项目需要的依赖库,逐行执行以下命令:


pip install --upgrade pip
pip install databutton streamlit embedchain

创建 python 文件 main.py ,从导库开启代码之旅:


import databutton as db
import streamlit as st
from embedchain import App
import os
import time

其中 os 用于与操作系统交互并设置环境变量。下面使用简单的 Streamlit API 添加应用程序相关信息:


st.subheader("Embedchain AI Knowledge 🤖 ")
st.markdown(
    "Repo : [AI-DevSecOps](https://github.com/QuintionTang/AI-DevSecOps)")

接下来,创建一个函数 initBot,函数将 URL 作为输入,即通过嵌入在线资源。


@st.cache_resource
def initBot(URL):
    # 创建一个机器人实例
    devsec_bot = App()
    # 这里支持嵌入多个在线资源
    devsec_bot.add("web_page", URL)
    # devsec_bot.add("youtube_video", "")
    # devsec_bot.add("pdf_file", "")
    # devsec_bot.add("web_page", "")
    return devsec_bot

函数 initBot 使用装饰器 @st.cache_resource 定义的,装饰器主要缓存资源,以避免在用户重新加载 Web 应用程序时重复初始化。而返回值是初始化的 ChatBot 对象,在这里将实例化的机器人命名为 devsec_bot

接下来实现通过 URL 输入并初始化 ChatBot:


prompt = st.text_input(
    "请输入一个内容URL",
    placeholder="请输入一个内容URL",
)
btn = st.button("初始化机器人")
if btn or st.session_state.btn_state:
    st.session_state.btn_state = True
    devsec_bot = initBot(prompt)
    st.success("机器人已就绪🤖")

st.text_input() 创建一个输入框,提示用户输入 URL。st.button("初始化机器人") 创建一个 初始化机器人 按钮。如果单击初始化机器人 按钮或聊天机器人已初始化(即 st.session_state.btn_stateTrue),则使用已经获取的 URL 初始化 ChatBot,并显示 机器人已就绪🤖 的消息。

接下来将使用 Streamlit 的 Chat 元素st.chat_messagest.chat_input

从这里开始将介绍如何使用 embedchain 实现查询方法逻辑,然后将 LLM 的响应转储并将回复内容显示在 UI 中。为了保持聊天对话的连续性,消息将通过 Streamlit 的会话状态 API 进行处理。


# 初始化聊天记录
if "messages" not in st.session_state:
    st.session_state.messages = []
# 在应用程序重新运行时显示历史记录中的聊天消息
for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

聊天查询内容通过 st.chat_input 来获取,其功能和 st.text_input 非常相似。一旦聊天内容已发送,它就会被保存在会话状态中,以便后续在聊天界面中延续使用。


# 接收聊天内容
if prompt := st.chat_input("有什么可以帮忙?"):
    # 增加聊天历史记录
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)
    with st.chat_message("assistant"):
        message_placeholder = st.empty()
        full_response = ""

下面这行代码是整个机器人的核心代码:


assistant_response = devsec_bot.query(prompt)

到此整个聊天机器人核心的代码已经完成了,其余代码主要在 streaming 传输响应中发挥关键作用,类似 ChatGPT 风格!

运行代码:


streamlit run main.py

image.png

下面来看下增加的个人博客连接资源的学习效果:

image.png

从结果来看,效果还不错。

总结

Embedchain 提供了一个非常强大的功能,只需几行代码即可轻松构建在线聊天机器人。本文完成的聊天机器人还存在不足,输入的 URL 内容为中文,机器人回复的内容为英文。这里只是介绍了一个简单的应用场景,没有提供主题隔离,如果加载的资源比较混乱,机器人的回答也是混乱的,算是开拓了一种新的实现AI聊天机器人思路。


相关文章
|
14天前
|
机器学习/深度学习 数据采集 人工智能
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】随着人工智能的发展,深度学习技术正逐步应用于教育领域,特别是个性化学习系统中。通过分析学生的学习数据,深度学习模型能够精准预测学生的学习表现,并为其推荐合适的学习资源和规划学习路径,从而提供更加高效、有趣和个性化的学习体验。
70 9
|
13天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
12天前
|
人工智能 运维 NoSQL
云栖大会|多模+一体化,构建更高效的AI应用
在2024年云栖大会「NoSQL数据库」专场,多位知名企业和阿里云瑶池数据库团队的技术专家,共同分享了阿里云Lindorm、Tair、MongoDB和MyBase的最新进展与实践。Tair推出Serverless KV服务,解决性能瓶颈和运维难题;Lindorm助力AI和具身智能时代的多模数据处理;MongoDB云原生化提升开发效率;MyBase One打破云边界,提供云边端一体化服务。这些技术进展和最佳实践,展示了阿里云在NoSQL数据库领域的创新能力和广泛应用前景。
|
8天前
|
人工智能 自然语言处理 搜索推荐
AI辅助教育:个性化学习的新纪元
【10月更文挑战第31天】随着人工智能(AI)技术的发展,教育领域迎来了一场前所未有的变革。AI辅助教育通过智能推荐、语音助手、评估系统和虚拟助教等应用,实现了个性化学习,提升了教学效率。本文探讨了AI如何重塑教育模式,以及个性化学习在新时代教育中的重要性。
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI驱动的个性化学习平台构建###
【10月更文挑战第29天】 本文将深入探讨如何利用人工智能技术,特别是机器学习与大数据分析,构建一个能够提供高度个性化学习体验的在线平台。我们将分析当前在线教育的挑战,提出通过智能算法实现内容定制、学习路径优化及实时反馈机制的技术方案,以期为不同背景和需求的学习者创造更加高效、互动的学习环境。 ###
32 3
|
19天前
|
人工智能 API 决策智能
swarm Agent框架入门指南:构建与编排多智能体系统的利器 | AI应用开发
Swarm是OpenAI在2024年10月12日宣布开源的一个实验性质的多智能体编排框架。其核心目标是让智能体之间的协调和执行变得更轻量级、更容易控制和测试。Swarm框架的主要特性包括轻量化、易于使用和高度可定制性,非常适合处理大量独立的功能和指令。【10月更文挑战第15天】
129 6
|
14天前
|
安全 搜索推荐 机器学习/深度学习
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】在人工智能的推动下,个性化学习系统逐渐成为教育领域的重要趋势。深度学习作为AI的核心技术,在构建个性化学习系统中发挥关键作用。本文探讨了深度学习在个性化推荐系统、智能辅导系统和学习行为分析中的应用,并提供了代码示例,展示了如何使用Keras构建模型预测学生对课程的兴趣。尽管面临数据隐私和模型可解释性等挑战,深度学习仍有望为教育带来更个性化和高效的学习体验。
40 0
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
当前AI大模型在软件开发中的创新应用与挑战
2024年,AI大模型在软件开发领域的应用正重塑传统流程,从自动化编码、智能协作到代码审查和测试,显著提升了开发效率和代码质量。然而,技术挑战、伦理安全及模型可解释性等问题仍需解决。未来,AI将继续推动软件开发向更高效、智能化方向发展。
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
AI在医疗领域的应用及其挑战
【10月更文挑战第34天】本文将探讨人工智能(AI)在医疗领域的应用及其面临的挑战。我们将从AI技术的基本概念入手,然后详细介绍其在医疗领域的各种应用,如疾病诊断、药物研发、患者护理等。最后,我们将讨论AI在医疗领域面临的主要挑战,包括数据隐私、算法偏见、法规合规等问题。
19 1
|
4天前
|
机器学习/深度学习 人工智能 算法
AI在医疗领域的应用与挑战
本文探讨了人工智能(AI)在医疗领域的应用,包括其在疾病诊断、治疗方案制定、患者管理等方面的优势和潜力。同时,也分析了AI在医疗领域面临的挑战,如数据隐私、伦理问题以及技术局限性等。通过对这些内容的深入分析,旨在为读者提供一个全面了解AI在医疗领域现状和未来发展的视角。
24 10

热门文章

最新文章