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

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)后可以发现,它是消息列表被包装后的形态。

它也可以直接作为参数传给模型。

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

相关文章:

  • 【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例
  • RabbitMQ 架构分析
  • Qt Enter和HoverEnter事件
  • 大语言模型之prompt工程
  • WPF基础 | WPF 常用控件实战:Button、TextBox 等的基础应用
  • [笔记] 极狐GitLab实例 : 手动备份步骤总结
  • 随笔十七、eth0单网卡绑定双ip的问题
  • 逻辑复制parallel并发参数测试
  • Cursor 帮你写一个小程序
  • WordPress免费证书插件
  • Linux:多线程[2] 线程控制
  • C++——list的了解和使用
  • Agent群舞,在亚马逊云科技搭建数字营销多代理(Multi-Agent)(下篇)
  • DBeaver连接MySQL数据库
  • Leetcode40: 组合总和 II
  • win32汇编环境,对话框程序中使用进度条控件
  • AIGC时代下的Vue组件开发深度探索
  • 在Kubernets Cluster中部署LVM类型的StorageClass - 上
  • 一次StarRocks分析的经历
  • Django网站搭建流程
  • Vue-day2
  • Day44:列表元素的修改
  • 在 AMD GPU 上使用 vLLM 的 Triton 推理服务器
  • day7手机拍照装备
  • HarmonyOS:创建应用静态快捷方式
  • [SUCTF 2018]MultiSQL1
  • kafka-部署安装
  • VUE3 使用路由守卫函数实现类型服务器端中间件效果
  • |Python新手小白中级教程|第二十九章:面向对象编程(Python类的拓展延伸与10道实操题目)(5)
  • 项目概述与规划 (I)