LangChain+LLM实战---LangChain中的6大核心模块
模型(Models)
- LLMs
大型语言模型,将文本字符串作为输入,并返回文本字符串作为输出。
- 聊天模型
聊天模型通常由语言模型支持,但它们的API更加结构化。这些模型将聊天消息列表作为输入,并返回聊天消息。
- 文本嵌入模型
文本嵌入模型将文本作为输入,并返回一个浮点数列表,常见的嵌入集成:OpenAI。
LLM从语言模型中获取预测,LangChain最基本的构建块是对某些输入调用LLM。
- 首先导入LLM包装器:
from langchain.llms import OpenAI
- 然后用参数初始化包装器,如果希望输出更加随机,初始化温度(temperature)即可:
llm = OpenAI(temperature=0.9)
- 最后可以根据输入来调用它:
text = "What would be a good company name for a company that makes colorful socks?" print(llm(text))
提示工程(Prompts)
提示模板(PromptTemplate):管理LLM的提示
from langchain.prompts import PromptTemplateprompt = PromptTemplate(input_variables=["product"],template="What is a good name for a company that makes {product}?",
)print(prompt.format(product="colorful socks"))What is a good name for a company that makes colorful socks?
链(Chains)
- 在多步骤的工作流中组合LLM和提示
- 在LangChain中,链是由链组成的,可以是LLM这样的原始链,也可以是其他链。
- 最核心的链类型是
LLMChain,它由PromptTemplate和LLM组成。- 接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化后的响应传递给
LLM。
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAIllm = OpenAI(temperature=0.9)
prompt = PromptTemplate(input_variables=["product"],template="What is a good name for a company that makes {product}?",
)
现在可以创建一个简单的链,它接受用户输入,用它格式化提示符,然后将它发送到 LLM:
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)chain.run("colorful socks")
# -> '\n\nSocktastic!'
代理(Agents)
基于用户输入的动态调用链,通常链运行在一个预先确定的顺序,但是代理使用LLM来确定要执行哪些操作以及按照什么顺序执行。操作可以使用工具并观察其输出,也可以返回给用户。
代理相关基本概念:
- 工具(tools):执行特定任务的功能。可以是:Google 搜索、数据库查找、Python REPL、其他链等。工具的接口目前是一个函数,预计将有一个字符串作为输入,一个字符串作为输出。
- 大语言模型(LLM):为代理提供动力的语言模型。
- 代理(agents):要使用的代理,是引用支持代理类的字符串。
安装SerpAPI Python包:pip install google-search-results
设置适当的环境变量:import osos.environ["SERPAPI_API_KEY"] = "..."
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI# First, let's load the language model we're going to use to control the agent.
llm = OpenAI(temperature=0)# Next, let's load some tools to use. Note that the `llm-math` tool uses an LLM, so we need to pass that in.
tools = load_tools(["serpapi", "llm-math"], llm=llm)# Finally, let's initialize an agent with the tools, the language model, and the type of agent we want to use.
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)# Now let's test it out!
agent.run("What was the high temperature in SF yesterday in Fahrenheit? What is that number raised to the .023 power?")
记忆存储(Memory)
向链和代理添加状态:
- 通常所有工具和代理都是无状态的。
- 如果链或代理具有某种“内存”概念,以便它可以记住关于其以前的交互的信息,这样它就可以利用这些消息的上下文来进行更好的对话,这是一种“短期记忆”。
- 如果链条/代理随着时间的推移记住关键信息,这将是一种形式的“长期记忆”。
- LangChain提供了链(
ConversationChain)和两种不同类型的内存来完成操作。
默认情况下,ConversationChain有个简单的内存类型,它记住所有以前的输入/输出,并将它们添加到传递的上下文中,(设置verbose=True,可以看到提示符)。
from langchain import OpenAI, ConversationChain
llm = OpenAI(temperature=0)
conversation = ConversationChain(llm=llm, verbose=True)
output = conversation.predict(input="Hi there!")
print(output)output = conversation.predict(input="I'm doing well! Just having a conversation with an AI.")
print(output)
索引(Indexes)
- 索引是指构造文档的方法,以便LLM可以最好地与它们交互。此模块包含用于处理文档的实用工具函数、不同类型的索引,以及在链中使用这些索引的示例。
- 在链中使用索引的最常见方式是“检索”步骤。接受用户的查询并返回最相关的文档。索引可以用于检索之外的其他事情,检索可以使用索引之外的其他逻辑来查找相关文档。
- 大多数时候,谈论索引和检索时,谈论的是索引和检索非结构化数据,如文本文档。
- LangChain支持的主要索引和检索类型目前主要集中在向量数据库上。
- 文档加载器(Document Loaders),文档加载程序,如何从各种源加载文档。
from langchain.document_loaders.csv_loader import CSVLoaderloader = CSVLoader(file_path='./example_data/mlb_teams_2012.csv')
data = loader.load()
- 文本分割器(Text Splitters),文字分割器,关于分割文本的抽象和实现的概述。
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter( separator = " ",chunk_size = 1000,chunk_overlap = 200,length_function = len,
)texts = text_splitter.create_documents([state_of_the_union])
- 向量存储(Vectorstores),概述Vector Stores和LangChain提供的许多集成。
import os
import getpassos.environ['OPENAI_API_KEY'] = getpass.getpass('OpenAI API Key:')from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Milvus
from langchain.document_loaders import TextLoaderfrom langchain.document_loaders import TextLoader
loader = TextLoader('../../../state_of_the_union.txt')
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)embeddings = OpenAIEmbeddings()vector_db = Milvus.from_documents(docs,embeddings,connection_args={"host": "127.0.0.1", "port": "19530"},
)docs = vector_db.similarity_search(query)
- 检索器(Retrievers),检索器概述和LangChain提供的实现。
from langchain.retrievers import ChatGPTPluginRetrieverretriever = ChatGPTPluginRetriever(url="http://0.0.0.0:8000", bearer_token="foo")
retriever.get_relevant_documents("alice's phone number")
相关文章:
LangChain+LLM实战---LangChain中的6大核心模块
模型(Models) LLMs 大型语言模型,将文本字符串作为输入,并返回文本字符串作为输出。 聊天模型 聊天模型通常由语言模型支持,但它们的API更加结构化。这些模型将聊天消息列表作为输入,并返回聊天消息。 文本…...
【Android】Android Framework系列---CarPower电源管理
Android Framework系列—CarPower电源管理 智能座舱通常包括中控系统、仪表系统、IVI系统 、后排娱乐、HUD、车联网等。这些系统需要由汽车电源进行供电。由于汽车自身的特殊供电环境(相比手机方便的充电环境,汽车的蓄电池如果没有电是需要专业人士操作…...
io测试【FPGA】
按钮: 按钮是区分输入输出的, LED配置成输入,是不会亮的。 //timescale 1s/1ns // 【】是预编译,类似C语言的#include // 这是FPGA原语 //晶振时钟 1ns//类型声明 module LED //跟PLC的FB功能块一样,使用前需要实…...
vue项目中页面跳转传参的方法
在Vue项目中,你可以使用路由(vue-router)来实现页面跳转并传递参数。下面是一些常用的方法: 使用路由的params属性: 在目标页面的路由配置中,设置props: true来启用参数传递。在源页面中,使用th…...
论文速递 TMC 2023 | RoSeFi: 一种利用商用WiFi设备进行稳健的久坐行为监测系统
注1:本文系“最新论文速览”系列之一,致力于简洁清晰地介绍、解读最新的顶会/顶刊论文 TMC 2023 | RoSeFi: 一种利用商用WiFi设备进行稳健的久坐行为监测系统 原文链接:https://ieeexplore.ieee.org/abstract/document/10269067 本文提出了一种稳健的久坐行为监测系统RoSeFi。…...
Day 12 python学习笔记
模块 内置模块 sys模块 概述:Python 的 sys 模块提供访问解释器使用或维护的变量,和与解释器进行交互的函数。通俗来讲,sys 模块为程序与 Python 解释器的交互,提供了一系列的函数和变量,用于操控 Python 运行时的环境…...
DBA笔记(1)
目录 1、rpm yum 命令的使用,参数的含义 rpm命令: yum命令: 2、上传镜像至虚拟机搭建本地yum源 3、chown chomd 命令每一个参数的含义 chown命令: chmod命令: 4、fdisk partd 硬盘分区命令用法 fdisk命令&am…...
C++设计模式_15_Proxy 代理模式
Proxy 代理模式也是属于“接口隔离”模式,通过增加一层间接层来解决问题的模式。 文章目录 1. 动机( Motivation)2. 模式定义3. 结构( Structure )4. 代码演示Proxy 代理模式4.1 常规方法4.2 Proxy 代理模式 5. 要点总结6. 其他参考 1. 动机( Motivation) 在面向对…...
Go学习第十四章——Gin请求与响应
Go web框架——Gin请求与响应 1 响应1.1 String1.2 JSON(*)1.3 HTML(*)1.4 XML1.5 文件(*) 2 请求2.1 请求参数查询参数 (Query)动态参数 (Param)表单参数 (PostForm)原始参数 (GetRawData) 2.2 请求头2.3 …...
【多线程面试题十】、说一说notify()、notifyAll()的区别
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:说一说notify()、notify…...
【Element UI】解决 el-button 禁用状态下,el-tooltip 提示不生效问题
文章目录 问题描述解决方法 问题描述 关键代码: <el-tooltipcontent"一段提示内容"placement"bottom"effect"light":disabled"count > 100" ><el-buttontype"text"class"dl-button":dis…...
C++单元测试GoogleTest和GoogleMock十分钟快速上手(gtestgmock)
C单元测试GoogleTest和GoogleMock(gtest&gmock) 环境准备 下载 git clone https://github.com/google/googletest.git # 或者 wget https://github.com/google/googletest/releases/tag/release-1.11.0安装 cd googletest cmake CMakeLists.txt make sudo make instal…...
Starknet的去中心化路线图
1. 引言 StarkWare正以2条路线在迈向去中心化: planningimplementation 以让Starknet协议 走向 去中心化proof-of-stake协议。 Starknet向以太坊发送STARK proofs来验证其状态变更。 一年前Starknet就在做去中心化规划,相关提案见: Sim…...
python基础语法(十二)
目录 标准库认识标准库使用 import 导入模块代码示例: 字符串操作剑指offer 58, 翻转单词顺序题目题目做法代码 leetcode 796, 旋转字符串题目题目做法 leetcode 2255, 统计是给定字符串前缀的字符串数目题目题目做法 代码示例: 文件查找工具 感谢各位大佬对我的支持,如果我的文…...
【开源】基于SpringBoot的农村物流配送系统的设计和实现
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理:2.2.2 位置信息管理:2.2.3 配送人员分配:2.2.4 路线规划:2.2.5 个人中心:2.2.6 退换快递处理:…...
【2024秋招】2023-9-16 贝壳后端开发一面
1 秒杀系统 1.1 如何抗住高并发 1.2 数据一致性你是怎么处理,根据场景来说明你的设计思路 1.3 你们当时系统的架构是怎么样的 秒杀表做节点隔离, 1.4 为了保证数据一致性,引入了redission的锁,你是为了抗住高并发而去为了引入…...
BI是什么?想要了解BI需要从哪些方面入手?
企业为了执行数字化战略,实行数字化转型,实现数据价值,除了需要相关数字化技术及理念、人才等,还需要借助数字化相关应用,例如商业世界中广受企业欢迎的ERP、OA、CRM等业务信息系统,以及上升势头非常迅猛的…...
软件测试---等价类划分(功能测试)
能对穷举场景设计测试点-----等价类划分 等价类划分 说明:在所有测试数据中,具有某种共同特征的数据集合进行划分分类: 1)有效等价类 2)无效等价类步骤:1)明确需求 2)确定有效和无…...
javascript原生态xhr上传多个图片,可预览和修改上传图片为固定尺寸比例,防恶意代码,加后端php处理图片
//前端上传文件 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml" lang"UTF-8"></html> <html><head><meta http-equiv"Content-Type" content"text/html;charsetUTF-8;"/><title…...
【Java】Map集合中常用方法
Map集合的常用方法 方法名称作用V put(Key k,V value)添加元素V remove(K key, V value)根据键值删除对应的值void clear()清除所有键值元素boolean containsKey(Object key)判断集合中是否包含指定的键boolean containsValue(Object value)判断集合中是否包含指定的值boolean …...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
【前端实战】如何让用户回到上次阅读的位置?
目录 【前端实战】如何让用户回到上次阅读的位置? 一、总体思路 1、核心目标 2、涉及到的技术 二、实现方案详解 1、基础方法:监听滚动,记录 scrollTop(不推荐) 2、Intersection Observer 插入探针元素 3、基…...
安全领域新突破:可视化让隐患无处遁形
在安全领域,隐患就像暗处的 “幽灵”,随时可能引发严重事故。传统安全排查手段,常常难以将它们一网打尽。你是否好奇,究竟是什么神奇力量,能让这些潜藏的隐患无所遁形?没错,就是可视化技术。它如…...
设计模式-3 行为型模式
一、观察者模式 1、定义 定义对象之间的一对多的依赖关系,这样当一个对象改变状态时,它的所有依赖项都会自动得到通知和更新。 描述复杂的流程控制 描述多个类或者对象之间怎样互相协作共同完成单个对象都无法单独度完成的任务 它涉及算法与对象间职责…...
