langchain进阶一:特殊的chain,轻松实现对话,与数据库操作,抽取数据,以及基于本地知识库的问答
特殊的chain
langchain中的Chain有很多,能够轻松实现部分需求,极致简化代码,但是实现效果与模型智慧程度有关
会话链
效果与LLMChain大致相同
javascript
复制代码
from langchain.chains import ConversationChain
from langchain_community.llms import OpenAI
conversation = ConversationChain(llm=OpenAI())
SQL链
顾名思义,跟数据库有关,可以使用自然语言进行数据库操作,他自动生成sql语句操作,并且进行归纳回答,速度比直接使用数据库链接工具更慢,智慧程度低对的模型进行理解自然语言时出现偏差可能会把数据库秒了.属于待开发功能
ini
复制代码# pip install -U langchain langchain-community langchain-openai
from langchain_openai import ChatOpenAI
from langchain.chains import create_sql_query_chain#查询链
from langchain_community.utilities import SQLDatabase
db = SQLDatabase.from_uri("mysql+pymysql://{数据库用户名}:{密码}@localhost/{数据库名}")
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
chain = create_sql_query_chain(llm, db)
response = chain.invoke({"question": "这个数据库中有多少数据"})
ini
复制代码
#数据库crud都能操作,但是可能会秒数据库,在以后的版本可能会被移除
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv())
OPENAI_API_BASE=os.environ["OPENAI_API_BASE"]
OPENAI_API_KEY=os.environ["OPENAI_API_KEY"]
os.environ["SERPAPI_API_KEY"]
from langchain_openai import ChatOpenAI
from langchain.utilities import SQLDatabase
from langchain_experimental.sql import SQLDatabaseChain
from langchain.memory import ConversationBufferMemory
db = SQLDatabase.from_uri("mysql+pymysql://{数据库用户名}:{密码}@localhost/{数据库名}")
llm=ChatOpenAI(api_key=OPENAI_API_KEY,base_url=OPENAI_API_BASE,temperature=0)#扩散度置为0,回答更准确
memory = ConversationBufferMemory(memory_key="chat_history")
db_chain = SQLDatabaseChain(llm=llm,database=db, verbose=False,use_query_checker=True, memory=memory)
text="表中有那些字段"
res=db_chain.run(text)
print(res)
抽取链
将人的自然语言转换成结构化语句,除了使用人力或者专门训练的模型似乎没有好的解决办法langchain中有个内置的抽取链,能够做到这件难事儿,实现抽取链有两种方式
使用langchain稳定版本中的抽取链
ini
复制代码
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv())
OPENAI_API_BASE=os.environ["OPENAI_API_BASE"]
OPENAI_API_KEY=os.environ["OPENAI_API_KEY"]
from langchain.chains import create_extraction_chain
from langchain_openai import ChatOpenAI
from langchain.prompts import (PromptTemplate,
)llm=ChatOpenAI(api_key=OPENAI_API_KEY,base_url=OPENAI_API_BASE,temperature=0)def extract(res:str):prompt = PromptTemplate(template="分析出\n{res}\n中的水果\n",#进行提示告诉它该怎么做input_variables=["res"],)# Schema定义结构化的数据模型schema = {"properties": {"reason": {"fruit": "string"},},"required": ["fruit"],}chain = create_extraction_chain(schema, llm, prompt,verbose=True)return chain.run(res)if __name__ == "__main__":res = "我喜欢吃苹果,它让我感到幸福"print(extract(res))
ini
复制代码
#pip install kor
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv())
OPENAI_API_BASE=os.environ["OPENAI_API_BASE"]
OPENAI_API_KEY=os.environ["OPENAI_API_KEY"]
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.schema.prompt_template import BasePromptTemplate
from kor.extraction import create_extraction_chain# %% 信息抽取链 %%
from kor.nodes import Object, Text, Number #%% 节点类型 %%
import jsondef json_dump(json_object): json_formatted_str = json.dumps(json_object, indent=2, ensure_ascii=False) print(json_formatted_str)llm=ChatOpenAI(api_key=OPENAI_API_KEY,base_url=OPENAI_API_BASE,temperature=0)res_schema = Object(id="成绩",description="关于成绩的信息",# %%描述信息 %%attributes=[#%% 属性text表示字符串字段,number表示数字字段 %%Text(id="name",description="这个人的名字."),Text(id="Results",description="关于这个人的成绩."),Number(id="ranking",description="关于这个人的排名.")],examples=[# 给模型的样本例子,将数据输出成例子一样的格式 ('''张山这次获得第一名,他考了100分, 而李四获得第五名,他考了80.''',[{"name": "张三", "Results": "100", "ranking": 1},{"name": "李四", "Results": "80", "ranking": 5},],)]
)
extraction_chain = create_extraction_chain(llm, res_schema)
text="王五比赵六多10分,赵六只考了60分排十名,赵六比他多三名"
output=extraction_chain.run(text)
json_dump(output)
根据使用,第三方的kor抽取效果要更好,但是会有警告,而且需要自己转换数据类型,官方也没有给出后续是否会移除这个kor
QA链
众所周知,大语言模型知道很多东西,知识很有广度,但我问他xx大学有什么选修课的时候,他可能就无法回答,如果他有这个大学的选修课知识库,就能回答了,所以QA链就是基于某个知识库进行问答的,这个知识库可以是txt,pdf,或者mongoDB,但必须是一个文档.
需要将文档进行加载,使用text_splitter进行向量存储,这里有一个向量数据库的概念就不过多描述了,有兴趣可以自行了解.
ini
复制代码
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv())
OPENAI_API_BASE=os.environ["OPENAI_API_BASE"]
OPENAI_API_KEY=os.environ["OPENAI_API_KEY"] from langchain_openai import ChatOpenAI,OpenAIEmbeddingsfrom langchain_community.document_loaders import PyMuPDFLoaderfrom langchain.chains.question_answering import load_qa_chain
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import ChromaPDF_NAME = 'xxx.pdf'##pdf的地址
docs = PyMuPDFLoader(PDF_NAME).load()##加载到docs中
#进行向量存储
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
split_docs = text_splitter.split_documents(docs)embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(split_docs, embeddings, collection_name="serverless_guide")llm=ChatOpenAI(api_key=OPENAI_API_KEY,base_url=OPENAI_API_BASE,temperature=0)
chain = load_qa_chain(llm, chain_type="stuff",verbose=True)def search_recommend(human_input):query = human_inputsimilar_docs = vectorstore.similarity_search(query, 3)res=chain.run(input_documents=similar_docs, question=query)#run方法后续将换成invokereturn restext="简单介绍一下主要内容"
res=search_recommend(text)
print(res)
langchain中还有更多其他的链,可在官方文档中查看,最好是英文文档,中文文档更新速度很慢
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


四、AI大模型商业化落地方案

阶段1:AI大模型时代的基础理解
- 目标:了解AI大模型的基本概念、发展历程和核心原理。
- 内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践 - L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
- 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
- 内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例 - L2.2 Prompt框架
- L2.2.1 什么是Prompt
- L2.2.2 Prompt框架应用现状
- L2.2.3 基于GPTAS的Prompt框架
- L2.2.4 Prompt框架与Thought
- L2.2.5 Prompt框架与提示词 - L2.3 流水线工程
- L2.3.1 流水线工程的概念
- L2.3.2 流水线工程的优点
- L2.3.3 流水线工程的应用 - L2.4 总结与展望
- L2.1 API接口
阶段3:AI大模型应用架构实践
- 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
- 内容:
- L3.1 Agent模型框架
- L3.1.1 Agent模型框架的设计理念
- L3.1.2 Agent模型框架的核心组件
- L3.1.3 Agent模型框架的实现细节 - L3.2 MetaGPT
- L3.2.1 MetaGPT的基本概念
- L3.2.2 MetaGPT的工作原理
- L3.2.3 MetaGPT的应用场景 - L3.3 ChatGLM
- L3.3.1 ChatGLM的特点
- L3.3.2 ChatGLM的开发环境
- L3.3.3 ChatGLM的使用示例 - L3.4 LLAMA
- L3.4.1 LLAMA的特点
- L3.4.2 LLAMA的开发环境
- L3.4.3 LLAMA的使用示例 - L3.5 其他大模型介绍
- L3.1 Agent模型框架
阶段4:AI大模型私有化部署
- 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
- 内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
学习计划:
- 阶段1:1-2个月,建立AI大模型的基础知识体系。
- 阶段2:2-3个月,专注于API应用开发能力的提升。
- 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
- 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

相关文章:
langchain进阶一:特殊的chain,轻松实现对话,与数据库操作,抽取数据,以及基于本地知识库的问答
特殊的chain langchain中的Chain有很多,能够轻松实现部分需求,极致简化代码,但是实现效果与模型智慧程度有关 会话链 效果与LLMChain大致相同 javascript 复制代码 from langchain.chains import ConversationChain from langchain_community.llms import OpenAI conversat…...
【Spring Boot】响应式编程
响应式编程 1.WebFlux2.比较 MVC 和 WebFlux2.1 工作方式2.2 Spring MVC 与 Spring WebFlux 的区别2.3 使用 WebFlux 的好处 3.Mono 和 Flux3.1 Mono 和 Flux 是什么3.2 Mono 和 Flux 的区别 4.开发 WebFlux 的流程4.1 注解式开发流程4.2 响应式开发流程 5.用注解式开发实现 He…...
【C++练级之路】【Lv.21】C++11——列表初始化和声明
快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、列表初始化1.1 内置类型1.2 结构体或类1.3 容器 二、声明2.1 auto2.2 decltype2.3 nullptr 三、STL的…...
输入一串字符串,前中后都有*号,去掉字符串中间和后面的*号,保留前面的*号和字母
#include <stdio.h> void fun(char* a) {//***df**fr*fg***int i 0, j 0,n0,m0;char* p;p a;while (p[i] ! \0){i;//i是一共的字符的个数}printf("%d\n",i);while (a[n] *){n;//计算字母前的*的个数}printf("%d\n", n);m n;for (j n; j < …...
【机器学习与大模型】驱动下的应用图像识别与处理
摘要: 本文深入探讨了机器学习在图像识别与处理领域的应用,特别是在大模型的推动下所取得的巨大进展。详细阐述了图像识别与处理的基本原理、关键技术,以及机器学习算法和大模型如何提升其性能和准确性。通过实际案例分析了其在多个领域的广泛…...
24李林跌落神坛,880还刷吗?还是换1000、900、660?
“李林今年跌落神坛了!” “全是固定题型没新题,结果今年考的全是新题。” 880是“老真题的神”, 遇到24年,冷门考点多,计算量又大,就不灵了。 但“老真题”,还是得刷。就像往年真题是要刷的…...
数据库漫谈-sybase
sybase就是“system”加“database”,代表着信息系统的底层。Sybase公司很早就推出了关系数据库产品(1987年5月推出的Sybase SQLServer1.0)。Sybase也是第一个提出Client/Server 体系结构的思想,并率先在Sybase SQLServer 中实现。…...
Springboot开发 -- Postman 调试类型详解
引言 在 Spring Boot 应用开发过程中,接口测试是必不可少的一环。Postman 作为一款强大的 API 开发和测试工具,可以帮助开发者轻松构建、测试和管理 HTTP 请求。本文将为大家介绍如何在 Spring Boot 开发中使用 Postman 进行接口测试。 一、准备工作 安…...
Windows 后台启动jar并且输出日志到特定日志
Windows 后台启动jar并且输出日志到特定日志 javaw -Dfile.encodingutf-8 -jar xxx.jar >log.log 2>&1 &日志输出以年月日格式显示 javaw -Dfile.encodingutf-8 -jar xxx.jar >log_%DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2…...
垃圾回收机制及算法
文章目录 概要对象存活判断引用计数算法可达性分析算法对象是否存活各种引用 垃圾收集算法分代收集理论复制算法标记清除算法标记-整理算法 概要 垃圾收集(Garbage Collection, 下文简称GC),其优缺点如下: 优点&#…...
蓝桥杯-暴力搜索BFS+DFS
九九乘法表挂毯 问题描述: 在一个古老的城堡里,一位名为 Alex 的少年发现了一幅巨大的九九乘法表挂毯。挂毯被划分成了9x9的方格,每个方格上写着相应的乘积。Alex 想象自己站在数值为1的方格上,他的目标是到达数值为 81 的方格。…...
巧用count与count()
在C#中,talentInnoPfChains.Count() 和 talentInnoPfChains.Count 的性能差异主要取决于 talentInnoPfChains 的类型。这里有两种可能的情况: 如果 talentInnoPfChains 是一个实现了 ICollection<T> 接口的集合(如 List<T>, Hash…...
MongoDB 覆盖索引查询:提升性能的完整指南
MongoDB 覆盖索引查询是一种优化数据库查询性能的技术,它通过创建适当的索引,使查询可以直接从索引中获取所需的数据,而无需访问实际的文档数据。这种方式可以减少磁盘 I/O 和内存消耗,提高查询性能。 基本语法 在 MongoDB 中&a…...
ECMAScript详解
ECMAScript(简称ES)是一种由Ecma国际(前身为欧洲计算机制造商协会,European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。以下是对ECMAScript的详细说明: 1. 定义与起源 …...
如何在Windows 10上对硬盘进行碎片整理?这里提供步骤
随着时间的推移,由于文件系统中的碎片,硬盘驱动器可能会开始以较低的效率运行。为了加快驱动器的速度,你可以使用内置工具在Windows 10中对其进行碎片整理和优化。方法如下。 什么是碎片整理 随着时间的推移,组成文件的数据块&a…...
科学高效备考AMC8和AMC10竞赛,吃透2000-2024年1850道真题和解析
多做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一,通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。 今天我们继续…...
SQL——SELECT相关的题目
目录 197、上升的温度 577、员工奖金 586、订单最多的客户 596、超过5名学生的课 610、判断三角形 620、有趣的电影 181、超过经理收入的员工 1179、重新格式化部门表(行转列) 1280、学生参加各科测试的次数 1068、产品销售分析I 1075、项目员工I …...
etcd集群部署
1.etcd介绍 1.1 什么是etcd etcd的官方定义如下: A distributed, reliable key-value store for the most critical data of distributed systemetcd是一个Go语言编写的分布式、高可用的一致性键值存储系统,用于提供可靠的分布式键值(key value)存储、配置共享和服务发现等…...
VBA_MF系列技术资料1-615
MF系列VBA技术资料1-615 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧,我参考大量的资料,并结合自己的经验总结了这份MF系列VBA技术综合资料,而且开放源码(MF04除外),其中MF01-0…...
常用激活函数学习
常用激活函数及其应用 ReLU (Rectified Linear Unit) 公式: f ( x ) max ( 0 , x ) f(x) \max(0, x) f(x)max(0,x)理解: 当输入值为正时,输出等于输入值;否则输出为0。ReLU函数简单且计算效率高,能有效缓解梯度消失问题,促进…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
