langchain基础(一)
模型又可分为语言模型(擅长文本补全,输入和输出都是字符串)和聊天模型(擅长对话,输入时消息列表,输出是一个消息)两大类。
以调用openai的聊天模型为例,先安装langchain_openai库
1、基础调用
初始化模型——构建消息列表——调用模型并输出结果
# 导入openai的聊天模型类
from langchain_openai import ChatOpenAI# 初始化模型
model=ChatOpenAI(model="gpt-3.5-turbo",base_url="https://api.gptsapi.net/v1",temperature=1.2,max_tokens=300,model_kwargs={"frequency_penalty":1.5})from langchain.schema.messages import (SystemMessage,HumanMessage)#构建消息列表
messages=[SystemMessage(content="请你作为我的物理课助教,用通俗易懂的语言解释物理概念。"),HumanMessage(content="什么是波粒二象性?")
]#调用模型并输出结果
response=model.invoke(messages)
print(response)
print(response.content)
model_kwargs是一个用于向语言模型传递额外参数的字典,它的键是一些不常用的参数。它允许你在初始化模型(如ChatOpenAI)时,对模型的行为进行更细致的控制。- 注意:model,base_url,openai_api_key,max_tokens或max_completion_tokens,temperature,stream这些参数通常独立于model_kwargs。(为什么?因为这些参数非常基础,几乎所有模型都有。为了方便设置,就把他们作为更明显的独立参数。把常用参数放进model_kwargs时就会有警告)
- 多种消息类型:
SystemMessage,HumanMessage,AIMessage(表示模型生成的回复消息),FunctionCallMessage(当模型决定调用某个函数来完成任务时,会生成一个FunctionCallMessage消息,包含函数名和参数等信息)invoke:触发模型的响应,里面封装了和语言模型通信的复杂过程,包括构建请求、发送请求、处理响应等。print(response):打印整个响应对象,这个对象包含了模型返回的所有信息,如消息内容、元数据等。print(response.content):打印响应对象中的content属性,即模型生成的文本内容
2、提示模板
可以动态构建给模型的消息,效率更高。
针对系统消息、人类消息和AI消息都有相应的模板类。

对于如何填充变量,有隐式识别变量和显式指定 input_variables 两种方式。
from langchain.schema import SystemMessage
from langchain.prompts import SystemMessagePromptTemplate# 定义模板
template = "你是一名 {role},在 {scene} 中,需要 {task}。"# 方法一:隐式识别变量
# 直接使用 from_template 并传入变量值
system_message_implicit = SystemMessage.from_template(template,role="消防员",scene="火灾现场",task="扑灭大火并营救被困人员"
)print("隐式识别变量生成的系统消息:")
print(system_message_implicit.content)# 方法二:显式指定 input_variables
# 创建 SystemMessagePromptTemplate 对象,显式指定 input_variables
system_message_prompt = SystemMessagePromptTemplate.from_template(template,input_variables=["role", "scene", "task"] #可省
)
# 根据模板和具体变量值生成 SystemMessage
system_message_explicit = system_message_prompt.format_messages(role="消防员",scene="火灾现场",task="扑灭大火并营救被困人员"
)[0]print("\n显式指定 input_variables 生成的系统消息:")
print(system_message_explicit.content)

显式解析:
先用模板类的from_template方法:从一个模板(template)字符串来创建提示模板对象。
后用提示模板对象的format_messages方法:对消息进行格式化处理,即将模板中的占位符填充为实际的值。
SystemMessagePromptTemplate类的实例调用 format_messages 方法,传入具体的变量值,该方法会根据模板和变量值生成一个 SystemMessage 对象列表。(即调用者是提示模板对象,返回值是消息对象的列表)
返回消息列表的原因:

由于这里只有一个消息,所以取列表的第一个元素。
提示模板对象=提示模板类.from_template(模板字符串)
消息列表=提示模板对象.format_messages(变量赋值)
from langchain.schema import SystemMessage
from langchain.prompts import SystemMessagePromptTemplateprompt_template="你是一名{role},在{scene}中,需要{task}。"# 由模板字符串 构建模板实例
system_message_prompt_template=SystemMessagePromptTemplate.from_template(prompt_template)# 填充模板实例 得到消息列表
system_messages=system_message_prompt_template.format_messages(role="消防员",scene="火灾现场",task="扑灭大火并营救被困人员"
)
print(system_messages)
print(system_messages[0])
print(system_messages[0].content)
#[SystemMessage(content='你是一名消防员,在火灾现场中,需要扑灭大火并营救被困人员。', additional_kwargs={}, response_metadata={})]
#content='你是一名消防员,在火灾现场中,需要扑灭大火并营救被困人员。' additional_kwargs={} response_metadata={}
#你是一名消防员,在火灾现场中,需要扑灭大火并营救被困人员。
集成版本:

from_messages:接受一个参数,该参数是一个由元组组成的列表。每个元组包含两个元素,第一个元素表示消息的角色,第二个元素是消息内容模板,其中可以包含占位符。

print(prompt_value)后可以发现,它是消息列表被包装后的形态。
它也可以直接作为参数传给模型。


相关文章:
langchain基础(一)
模型又可分为语言模型(擅长文本补全,输入和输出都是字符串)和聊天模型(擅长对话,输入时消息列表,输出是一个消息)两大类。 以调用openai的聊天模型为例,先安装langchain_openai库 1…...
【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例
目录 说明举例 说明 简单来说,android:layout_weight为当前控件按比例分配剩余空间。且单个控件该属性的具体数值不重要,而是多个控件的属性值之比发挥作用,例如有2个控件,各自的android:layout_weight的值设为0.5和0.5࿰…...
RabbitMQ 架构分析
文章目录 前言一、RabbitMQ架构分析1、Broker2、Vhost3、Producer4、Messages5、Connections6、Channel7、Exchange7、Queue8、Consumer 二、消息路由机制1、Direct Exchange2、Topic Exchange3、Fanout Exchange4、Headers Exchange5、notice5.1、备用交换机(Alter…...
Qt Enter和HoverEnter事件
介绍 做PC开发的过程中或多或少都会接触到鼠标的悬停事件,Qt中处理鼠标悬停有Enter和HoverEnter两种事件 相同点 QEvent::Enter对应QEnterEvent,描述的是鼠标进入控件坐标范围之内的行为,QEnterEvent可以抓取鼠标的位置;QEvent…...
大语言模型之prompt工程
前言 随着人工智能的快速发展,我们正慢慢进入AIGC的新时代,其中对自然语言的处理成为了智能化的关键一环,在这个大背景下,“Prompt工程”由此产生,并且正逐渐成为有力的工具... LLM (Large Language Mode…...
WPF基础 | WPF 常用控件实战:Button、TextBox 等的基础应用
WPF基础 | WPF 常用控件实战:Button、TextBox 等的基础应用 一、前言二、Button 控件基础2.1 Button 的基本定义与显示2.2 按钮样式设置2.3 按钮大小与布局 三、Button 的交互功能3.1 点击事件处理3.2 鼠标悬停与离开效果3.3 按钮禁用与启用 四、TextBox 控件基础4.…...
[笔记] 极狐GitLab实例 : 手动备份步骤总结
官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复,请确保您系统已安装 Rsync。 如果您安装了极狐GitLab: 如果您使用 Omnibus 软件包,则无需额外操作。如果您使用源代码安装,您需要确定是否安装了 rsync。…...
随笔十七、eth0单网卡绑定双ip的问题
在调试语音对讲过程中遇到过一个“奇怪”问题:泰山派作为一端,可以收到对方发来的语音,而对方不能收到泰山派发出的语音。 用wireshark抓包UDP发现,泰山派发送的地址是192.168.1.30,而给泰山派实际设置的静态地址是19…...
逻辑复制parallel并发参数测试
逻辑复制parallel并发参数测试 一、测试结果、测试环境描述 1.1、测试结果 cpu表中有1000万条数据,大小为1652MB,当更新的数据量多于10万条的时候有明显变化,多余30万条的时候相差2倍。 更新的数据量较多时,逻辑复制使用并发参数相比于使用…...
Cursor 帮你写一个小程序
Cursor注册地址 首先下载客户端 点击链接下载 1 打开微信开发者工具创建一个小程序项目 选择TS-基础模版 官方 2 然后使用Cursor打开小程序创建的项目 3 在CHAT聊天框输入自己的需求 比如 小程序功能描述:吃什么助手 项目名称: 吃什么小程序 功能目标…...
WordPress免费证书插件
为了在您的网站上启用HTTPS,您可以使用本插件快速获取Let’s Encrypt免费证书。 主要功能: 支持快速申请Let’s Encrypt免费证书支持通配符证书申请,每个证书最多可以绑定100个域名支持自动续期证书支持重颁发证书,证书过期或失…...
Linux:多线程[2] 线程控制
了解: Linux底层提供创建轻量级进程/进程的接口clone,通过选择是否共享资源创建。 vfork和fork都调用的clone进行实现,vfork和父进程共享地址空间-轻量级进程。 库函数pthread_create调用的也是底层的clone。 POSIX线程库 与线程有关的函数构…...
C++——list的了解和使用
目录 引言 forward_list与list 标准库中的list 一、list的常用接口 1.list的迭代器 2.list的初始化 3.list的容量操作 4.list的访问操作 5.list的修改操作 6.list的其他操作 二、list与vector的对比 结束语 引言 本篇博客要介绍的是STL中的list。 求点赞收藏评论…...
Agent群舞,在亚马逊云科技搭建数字营销多代理(Multi-Agent)(下篇)
在本系列的上篇中,小李哥为大家介绍了如何在亚马逊云科技上给社交数字营销场景创建AI代理的方案,用于社交动态的生成和对文章进行推广曝光。在本篇中小李哥将继续本系列的介绍,为大家介绍如何创建主代理,将多个子代理挂载到主代理…...
DBeaver连接MySQL数据库
打开DBeaver,点击“新建数据库连接”选项。 点击“测试连接”,首次连接mysql会提示下载对应的JDBC驱动,点击下载即可。 填写服务器地址(这里是本地测试)、mysql的用户名(root)和密码ÿ…...
Leetcode40: 组合总和 II
题目描述: 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 代码思路ÿ…...
win32汇编环境,对话框程序中使用进度条控件
;运行效果 ;win32汇编环境,对话框程序中使用进度条控件 ;进度条控件主要涉及的是长度单位,每步步长,推进的时间。 ;比如你的长度是1000,步长是100,每秒走1次,则10秒走完全程 ;比如你的长度是1000,步长是10,每秒走1次,则100秒走完全程,但每格格子的长度与上面一样 ;以下…...
AIGC时代下的Vue组件开发深度探索
文章目录 一、AIGC时代对Vue组件开发的深远影响二、Vue组件开发基础与最佳实践三、AIGC技术在Vue组件开发中的具体应用四、结论与展望 随着人工智能技术的飞速发展,AIGC(人工智能生成内容)时代已经悄然来临。在这个时代背景下,软件…...
在Kubernets Cluster中部署LVM类型的StorageClass - 上
适用场景 看到B站技术部门的文章,是关于如何在k8s集群部署Elastic Search和Click House等IO密集型数据库应用的。 因为要充分利用NvME SSD盘的IOPS,所有数据库应用都直接调用本地SSD盘做为stateful application的 Persistent Volumes。为了可用动态的分…...
一次StarRocks分析的经历
起因 有人反馈说SR,在系统资源还有空闲的时候,被操作系统杀掉了。没有日志,怀疑是bug,如果要解决这个bug。据说在网上查到要升级。请我准备一下升级。 质疑 StarRocks是一款分析型数据库,2021年正式开源,…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...



