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年正式开源,…...
蓝牙抓包不求人:从HCI日志里‘挖’出Link Key的两种实用方法(附安卓路径)
蓝牙安全逆向实战:从HCI日志中提取Link Key的深度解析在蓝牙协议安全研究领域,Link Key作为设备配对认证的核心凭证,其获取方式一直是逆向工程师关注的焦点。许多安全审计场景下,我们往往只能获得加密后的HCI通信日志,…...
【CP-05】RTE运行时环境 - SWC的操作系统接口
CP-05_RTE运行时环境【CP-05】RTE运行时环境 - SWC的“操作系统接口”前言在AUTOSAR架构中,RTE(Runtime Environment,运行时环境)是一个常被提及却难以理解的概念。它像是应用层软件组件(SW-C)与底层基础软…...
别再死记硬背SMO公式了!用Python手写一个SVM分类器,带你一步步拆解SMO核心逻辑
用Python手写SVM分类器:代码驱动理解SMO算法核心在机器学习领域,支持向量机(SVM)以其优秀的分类性能和坚实的数学基础著称。然而,许多学习者在理解其核心算法——序列最小优化(SMO)时,往往被复杂的数学推导所困扰。本文将采用一种…...
ARM架构CONSTRAINED UNPREDICTABLE行为解析与应对
1. ARM架构中的CONSTRAINED UNPREDICTABLE行为解析在处理器架构设计中,UNPREDICTABLE行为通常指架构规范未明确定义的执行结果,可能导致不可预期的系统状态。ARM架构通过引入CONSTRAINED UNPREDICTABLE机制,将这类行为限制在特定范围内&#…...
贵阳婚礼西服定制攻略:面料、工艺、版型避坑指南
婚礼西装是男士婚礼造型的核心,区别于日常商务正装,婚礼西服更看重版型精致度、面料质感、上身挺拔感以及镜头适配度。在贵阳备婚的新人,大多会放弃成品西装,选择专属定制服务。但本地婚礼西服定制市场参差不齐,很多新…...
从BUG()到panic:深入Linux 5.4内核,看异常处理如何层层递进
从BUG()到panic:Linux内核异常处理的防御体系全解析当你在深夜调试一个内核模块时,突然屏幕刷出一串红色警告——这可能是每个Linux内核开发者都经历过的噩梦时刻。但你是否想过,从第一行警告出现到系统完全崩溃,内核究竟经历了怎…...
轻量化部署,异地机房快速接入,多机房管理不用再大动干戈
随着业务拓展,不少企业、单位陆续建起异地分部机房、多区域节点机房。传统资产管理系统部署复杂、对接困难,异地机房接入成本高、周期长,改造繁琐,让很多运维团队望而却步,只能继续沿用分散人工管理,资产混…...
股票买卖最佳时机:LeetCode121题解
题目LeetCode121给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取…...
DragonBones与Godot集成:骨骼动画的可编程化实践
1. 为什么在Godot里用DragonBones不是“锦上添花”,而是“绕不开的刚需” 去年上线一个横版动作手游Demo时,美术团队交来一套20个角色、每个角色含8套动画(待机/跑动/跳跃/攻击/受击/死亡/闪避/必杀)的Spine资源。我兴冲冲导入God…...
3步快速解密中兴光猫配置:ZET工具终极实战指南
3步快速解密中兴光猫配置:ZET工具终极实战指南 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 中兴光猫配置解密工具是每个网络管理员必备的神器!Z…...



