当前位置: 首页 > news >正文

三、使用langchain搭建RAG:金融问答机器人--检索增强生成

经过前面2节数据准备后,现在来构建检索

加载向量数据库

from langchain.vectorstores import Chroma
from 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
)

定义提示词模板

要求模型使用上下文来回答问题,这个上下文就是context,也就是从向量数据检索到相关的文本片段后,回答最后的问题question

from langchain.prompts import PromptTemplate# 我们所构造的 Prompt 模板
template = """使用以下上下文来回答最后的问题。如果你不知道答案,就说你不知道,不要试图编造答案。尽量使答案简明扼要。”。
{context}
问题: {question}
有用的回答:"""# 调用 LangChain 的方法来实例化一个 Template 对象,该对象包含了 context 和 question 两个变量,在实际调用时,这两个变量会被检索到的文档片段和用户提问填充
QA_CHAIN_PROMPT = PromptTemplate(input_variables=["context","question"],template=template)

定义大模型LLM

需要先到阿里通义千问申请账户,具体操作指引在 这里

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

定义检索问答链

from langchain.chains import RetrievalQA
qa_chain = RetrievalQA.from_chain_type(llm,retriever=vectordb.as_retriever(),return_source_documents=True,chain_type_kwargs={"prompt":QA_CHAIN_PROMPT})

对比大模型和检索生成的结果

大模型:

question = "上海华铭智能终端设备股份有限公司的股东有哪些人?"
# 仅 LLM 回答效果
result = llm(question)
print("大模型回答 question 的结果:")
print(result)

在这里插入图片描述
检索:

result = qa_chain({"query": question})
print("检索问答链回答 question 的结果:")
print(result["result"])

在这里插入图片描述
检索详情:

print(result)

在这里插入图片描述
项目源代码:https://gitee.com/ailianshuo/finance-bot

http://www.lryc.cn/news/507937.html

相关文章:

  • Day13 用Excel表体验梯度下降法
  • 计算机组成原理的学习笔记(5)--数据的表示与运算·其四 浮点数的储存和加减/内存对齐/大端小端
  • 华为IPD流程6大阶段370个流程活动详解_第二阶段:计划阶段 — 86个活动
  • 如何使用 Flask 框架创建简单的 Web 应用?
  • 将Minio设置为Django的默认Storage(django-storages)
  • sed | 一些关于 sed 的笔记
  • wtforms+flask_sqlalchemy在flask-admin视图下实现日期的修改与更新
  • AI的进阶之路:从机器学习到深度学习的演变(三)
  • thinkphp 多选框
  • 机器学习《西瓜书》学习笔记《待续》
  • STM32HAL I2C函数
  • 洛谷 P1644 跳马问题 C语言
  • 每天40分玩转Django:实操在线商城
  • Bug解决!ImportError: cannot import name MutableMapping from collections
  • 【Rust自学】4.5. 切片(Slice)
  • 医学图像 三维重建,原图与灰度图叠加,原图与多图叠加显示;多图像融合显示,彩色灰度图像融合
  • 递归实现指数型枚举(递归)
  • Unity实现Root Motion动画的Navigation自动导航
  • [react]不能将类型“string | undefined”分配给类型“To”。 不能将类型“undefined”分配给类型“To”
  • python实现基于RPC协议的接口自动化测试
  • 如何使用PSQL Tool还原pg数据库(sql格式)
  • uni-app商品搜索页面
  • 【深度学习】零基础介绍循环神经网络(RNN)
  • 青少年编程与数学 02-004 Go语言Web编程 13课题、模板引擎
  • 如何优雅的关闭GoWeb服务器
  • AI程序员,开源的Devin,OpenHands 如何使用HuggingFace Inference API
  • 【动手学运动规划】 5.2 数值优化基础:梯度下降法,牛顿法
  • 电子应用设计方案66:智能打印机系统设计
  • iClient3D for Cesium 实现限高分析
  • AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python