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

python调用langchain实现RAG

一、安装langchain

        安装依赖

python -m venv env.\env\Scripts\activatepip3 install langchainpip3 install langchain-corepip3 install langchain-openaipip3 install langchain-communitypip3 install  dashscopepip3 install  langchain_postgrespip3 install "psycopg[binary]"

       导入库函数

from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import HumanMessage,SystemMessage
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_core.documents import Document

二、知识库转换向量

      使用通义千问的向量模型将私域知识库的数据转化为制定维度的向量,并将向量存入向量数据库pgvector中

COLLECTION_NAME = "t_rag"
CONNECTION = "postgresql+psycopg://postgres:12346@server200:5432/postgres_db"#实例化千问的向量模型
embedding = DashScopeEmbeddings(model="text-embedding-v3",dashscope_api_key="sk-xxx")#**创建向量数据库
vector_store = PGVector(connection = CONNECTION,collection_name = COLLECTION_NAME,embeddings = embedding
)

         准备文本转化向量存储

def save_vector():print("save_vector  start .....")documents = [Document(page_content="段一凡出生东川县一个农民工家庭,毕业于江南大学,成绩优异",metadata={"source":"brief"},id=1),Document(page_content="现任吉南市环保局局长,曾任市共青团副书记,此前还担任过回龙乡乡长、党委书记等职务",metadata={"source":"brief"},id=2),Document(page_content="肖素素、王雪莹、吴晓恙、刘淼淼这四个大美女与他都有着千丝万缕的关系",metadata={"source":"brief"},id=3),Document(page_content="肖素素某国开国将军的曾孙女,美丽智慧,某国企总经理,与段一凡生死患难,互生情愫,但二人身份差距悬殊",metadata={"source":"brief"},id=4),Document(page_content="王雪莹省战略策划室副主任王庆支之女,段一凡学妹,喜欢段一凡",metadata={"source":"brief"},id=5),Document(page_content="吴晓恙商人之家,典型富二代,喜欢段一凡",metadata={"source":"brief"},id=6),Document(page_content="刘淼淼冰冷美女,前县委书记刘海龙之女,刘海龙整治过段一凡,刘淼淼自杀,被段一凡救过,对段一凡产生爱意",metadata={"source":"brief"},id=7),]uuids = [str(uuid4()) for _ in range(len(documents))]try:vector_store.add_documents(documents=documents, ids=uuids)print("save_vector successful.")except Exception as e:print(f"save_vector failed: {e}")

def main():    save_vector()

    

 

      文本数据库成功存入向量数据库 

三、检索增强

        将提示词和匹配向量一起发给大模型进行提问

def rag_vector(query):print("query_vector  start .....")#results = vector_store.similarity_search(query = query,k=5,filter={"source": "brief"})#通过向量生成检索器retriever = vector_store.as_retriever(search_type="mmr", search_kwargs={"k": 5})prompt = hub.pull("rlm/rag-prompt")messages = prompt.invoke({"question": query,"context": retriever.invoke(query)})llm =  ChatTongyi(streaming = False,model = "qwen-plus",api_key = "sk-xxxx",)ai_message =  llm.invoke(messages)print("AI answer :----------",ai_message)
def main():    rag_vector("段一凡是谁?")

       大模型的回答基于上下文向量信息进行学习

     

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

相关文章:

  • Qt 中的 d-pointer 与 p-pointer小结
  • 冷库耗电高的一种重要原因分析,以及一种降低冷库电费≥20%的方法
  • 理解 Redis 事务-21(使用事务实现原子操)
  • 神经网络加上注意力机制,精度反而下降,为什么会这样呢?注意力机制的本质是什么?如何正确使用注意力机制?注意力机制 | 深度学习
  • 触控精灵 ADB运行模式填写电脑端IP教程
  • uniapp|实现多端图片上传、拍照上传自定义插入水印内容及拖拽自定义水印位置,实现水印相机、图片下载保存等功能
  • linux有效裁剪视频的方式(基于ffmpeg,不改变分辨率,帧率,视频质量,不需要三方软件)
  • 服务器密码安全运维解决新思路:凭据管理SMS+双因素SLA认证结合的方案
  • 论文阅读笔记——In-Context Edit
  • Debian 系统 Python 开发全解析:从环境搭建到项目实战
  • Next.js 15 与 Apollo Client 的现代集成及性能优化
  • 【后端高阶面经:MongoDB篇】41、MongoDB 是怎么做到高可用的?
  • IO Vs NIO
  • offset 家族和 client 家族
  • DMBOK对比知识点整理(4)
  • day12 leetcode-hot100-21(矩阵4)
  • Java基础 Day24
  • 提问:鲜羊奶是解决育儿Bug的补丁吗?
  • 关于数据仓库、数据湖、数据平台、数据中台和湖仓一体的概念和区别
  • Hive 分桶(Bucketing)深度解析:原理、实战与核心概念对比
  • 网络协议DHCP
  • 什么是可重组机器人?
  • 4、docker compose
  • Node.js全局对象详解:console、process与核心功能
  • 测试策略:AI模型接口的单元测试与稳定性测试
  • SQL里几种JOIN连接
  • 基于通义千问的儿童陪伴学习和成长的智能应用架构。
  • 生产环境Mysql推荐配置参数
  • LVS-DR 负载均衡群集
  • 理解并解决高丢包率问题,构建清晰流畅的实时音视频通话