经过前面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