四、使用langchain搭建RAG:金融问答机器人--构建web应用,问答链,带记忆功能

devtools/2024/12/23 17:07:01/
aidu_pl">

经过前面3节完成金融问答机器人基本流程,这章将使用Gradio构建web应用,同时加入memory令提示模板带有记忆的,使用LCEL构建问答链。

加载向量数据库

python">from ain>langchain.vectorstores import Chroma
from ain>langchain_huggingface import HuggingFaceEmbeddings
import os# 定义 Embeddings
embeddings = HuggingFaceEmbeddings(model_name="m3e-base")# 向量数据库持久化路径
persist_directory = 'data_base/chroma'# 加载数据库
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings
)
retriever=vectordb.as_retriever()

加载LLM

python">import os
os.environ["DASHSCOPE_API_KEY"] = 'sk-***'from ain>langchain_community.llms import Tongyi
llm = Tongyi()

创建memory

python">from ain>langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key="chat_history",  # 与 prompt 的输入变量保持一致。return_messages=True  # 将以消息列表的形式返回聊天记录,而不是单个字符串
)

构建新的问答链,使用带有记忆的提示模板

python"># 构建新的问答链,使用带有记忆的提示模板
from ain>langchain.chains import ConversationalRetrievalChain
def chatqwen_chat(message, history):#构建对话问答链qa = ConversationalRetrievalChain.from_llm(llm,retriever=retriever,memory=memory,verbose=True,)result = qa({"question": message})return result['answer']

定义gradio web app

python">import gradio as gr
def launch_gradio():iface = gr.ChatInterface(fn=chatqwen_chat,title="金融RAG问答机器人",chatbot=gr.Chatbot(height=400),)iface.launch(share=True, server_name="0.0.0.0")

启动 Gradio 服务

python"># 启动 Gradio 服务
launch_gradio()

测试

Gradio 服务启动成功后,可以使用浏览器f访问web应用: http://127.0.0.1:7861/
在这里插入图片描述
从上面第二个问题看出,有记忆到之前的问题。
下图是整个访问链条的LOG:
在这里插入图片描述

总结

使用Gradio构建web应用已完成,如果想独立部署项目,可以放到py文件中,然后使用下面代码启动

python">if __name__ == "__main__": # 启动 Gradio 服务launch_gradio()

启动脚本: python ***.py
如果是使用conda 虚拟环境则: **\envs\ain>langchain_qwen\python **.py (带上虚拟环境的目录)

项目源代码:https://gitee.com/ailianshuo/finance-bot


http://www.ppmy.cn/devtools/144746.html

相关文章

OpenSSL 心脏滴血漏洞(CVE-2014-0160)

OpenSSL 心脏滴血漏洞(CVE-2014-0160) Openssl简介: 该漏洞在国内被译为"OpenSSL心脏出血漏洞”,因其破坏性之大和影响的范围之广,堪称网络安全里程碑事件。 OpenSSL心脏滴血漏洞的大概原理是OpenSSL在2年前引入了心跳(hearbea0机制来维特TS链接的…

【老白学 Java】HashSet 应用 - 卡拉 OK(五)

HashSet 应用 - 卡拉 OK(五) 文章来源:《Head First Java》修炼感悟。 通过前几篇文章,老白也了解了基本排序方法,接下来要讨论的是数据重复问题。 ArrayList 不会阻止添加重复数据,那是 Set 集合类的职责…

React工具和库面试题目(二)

1. 使用 Webpack 打包 React 项目时,如何减小生成的 JavaScript 文件大小? 为了减小生成的 JavaScript 文件大小,可以采取以下几种策略: 1.1 代码分割(Code Splitting) Webpack 支持通过 动态导入 和 React.lazy 等…

#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍03-SQL注入联合查询注入(Union-Based SQL Injection)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

Web Dev Tools Android 项目常见问题解决方案

Web Dev Tools Android 项目常见问题解决方案 web-dev-tools-android Sample Android Application - MVVM, Clean Architecture, Modularization, Repository Pattern [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/we/web-dev-tools-android 项目基础介绍 Web…

C05S09-Keepalive服务架设

一、Keepalive 1. Keepalive概述 代理服务器和调度器都是单点模式,Keepalive是一种实现LVS调度器实现高可用集群的架设,以提高节点的冗余和容错。 Keepalive是一种基于VRRP协议实现的调度器高可用方案,为了实现LVS的集群而设计开发&#x…

计算机基础复习12.22

Redis实现分布式锁 set lock_key unique_value nx px 10000 lock_key: key键 unique_value:是唯一的标识 nx: 表示lock_key不存在,才对lock_key进行设置 px: 设置过期时间 Linux的排查命令 top 实时监控进程 显示CPU 内存 负载 交换区 netstat:查看网络连接…

Flutter组件————Scaffold

Scaffold Scaffold 是一个基础的可视化界面结构组件,它实现了基本的Material Design布局结构。使用 Scaffold 可以快速地搭建起包含应用栏(AppBar)、内容区域(body)、抽屉菜单(Drawer)、底部导…