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

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 SystemMessagePromptTemplate

prompt_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={}
#你是一名消防员,在火灾现场中,需要扑灭大火并营救被困人员。

 集成版本:

print(prompt_value)后可以发现,它是消息列表被包装后的形态。

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

 


http://www.kler.cn/a/520534.html

相关文章:

  • 从 JIRA 数据到可视化洞察:使用 Python连接jira
  • 二次封装的方法
  • Django 多环境配置实战指南
  • Greenplum临时表未清除导致库龄过高处理
  • mysql数据库不允许远程链接时的解决办法
  • mapStruct 使用踩坑指南
  • C++ 自定义字面量
  • 小试牛刀调整Prompt,优化Token消耗
  • 电子应用设计方案104:智能家庭AI弹簧床系统设计
  • 「 机器人 」仿生扑翼飞行器中的“被动旋转机制”概述
  • Shotcut新版来袭,新增HSL滤镜、硬件编码,剪辑更流畅
  • 激光晶体材料行业深度分析
  • 大模型——增量预训练
  • ASP.NET Core WebAPI的异步及返回值
  • 自动化部署(二):Jenkins持续集成(CI/CD)
  • 自动化测试的学习路线
  • 4.flask-SQLAlchemy,表Model定义、增删查改操作
  • 2000-2020年各省第三产业增加值占GDP比重数据
  • 深入MapReduce——MRv1设计
  • 应用层协议 HTTP 讲解实战:从0实现HTTP 服务器