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

server/2024/12/20 5:33:10/
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/server/151628.html

相关文章

基于Spring Boot的水果蔬菜商城系统

一、系统概述 该系统主要适用于实体店的线上销售,旨在打造线上线下一体化的销售模式,带动水果蔬菜的销售量,提高店铺的销售额。系统前台主要面向用户,提供登录注册、首页展示、分类搜索、购物车、地址信息、个人信息、订单信息等…

路由器WAN口与LAN口的区别

1. WAN口和LAN口 路由器的WAN口和LAN口是两种最常见的接口,看起来相似(尤其在有线路由器上),但功能上有区别。 WAN口(Wide Area Network,广域网口) 功能: WAN口用于连接外部网络&a…

解决node.js的req.body为空的问题

从昨晚一直在试,明明之前用的封装的axios发送请求给其他的后端(springboot)是可以的,但昨天用了新项目的后端(node.js)就不行。 之前用了代理,所以浏览器发送的post请求不会被拦截,…

arcGIS使用笔记(无人机tif合并、导出、去除黑边、重采样)

无人机航拍建图之后,通过大疆智图软件可以对所飞行的区域的进行拼图,但是如果需要对拼好的图再次合并,则需要利用到arcGIS软件。下面介绍arcGIS软件在这个过程中常用的操作。 1.导入tif文件并显示的方法:点击“”图标进行导入操作…

PHP利用header跳转失效的解决方法

本文实例讲述了PHP利用header跳转失效的解决方法,分享给大家供大家参考。具体方法分析如下: 一、问题: 今天header(\"Location: $url\"),以往跳转总是可以的,今天却不动,只是输出结果,以往自己要确认检查,$url的值获取…

Scratch节日 | 快乐圣诞节——用编程传递节日祝福! ✨

今天为大家推荐一款充满节日气氛的Scratch项目——《快乐圣诞节》!这款圣诞主题动画贺卡项目不仅让小朋友们学习编程知识,还提供了一种用创意传递祝福的方式。通过编程打造星星闪烁的圣诞树,播放经典圣诞音乐,制作一张属于自己的节…

C 语言动态爱心代码

C 语言动态爱心代码 代码 #include <stdio.h> #include <math.h> #include <windows.h> #include <tchar.h> float f(float x, float y, float z) {float a x * x 9.0f / 4.0f * y * y z * z - 1;return a * a * a - x * x * z * z * z - 9.0f / …

API接口性能优化:提升电商数据处理速度的关键

在当今的电子商务领域&#xff0c;数据处理速度是决定企业竞争力的关键因素之一。API&#xff08;应用程序编程接口&#xff0c;Application Programming Interface&#xff09;接口作为电商系统与外部服务或内部模块进行数据交换的桥梁&#xff0c;其性能直接影响数据处理的速…