LangChain学习一:模型-实战

news2025/2/23 20:13:35

文章目录

  • 上一节内容
  • 学习目标:模型(models)
  • 学习内容一:模型分类
  • 学习内容二:不同模型实战
    • 3.1 Chat-聊天模型
      • 3.1.1 声明
      • 3.1.2 Chat-聊天类型实战
        • 3.1.2.1 AIMessage(AI 消息)
        • 3.1.2.2 HumanMessage(用户消息)
        • 3.1.2.3 SystemMessage(系统消息)
        • 3.1.2.4 ChatMessage(聊天消息)
  • 流处理
  • 关于我-一个默默打工小孩

上一节内容

LangChain学习一:入门-本地化部署-接入大模型
http://t.csdnimg.cn/aqx9W

学习目标:模型(models)


LangChain 支持的各种模型类型和模型集成。

学习内容一:模型分类

  • LLMs(大语言模型)
  • Chat 聊天模型
  • 文本嵌入模型

LLMs:这些模型将文本字符串作为输入,并返回文本字符串作为输出

聊天模型:这些模型通常由语言模型支持,但它们的API更加结构化。 具体来说,这些模型将聊天消息列表作为输入,并返回聊天消息。

文本嵌入模型:这些模型将文本作为输入,并返回一个浮点数列表

学习内容二:不同模型实战

3.1 Chat-聊天模型

3.1.1 声明

from langchain.chat_models import ChatOpenAI
from langchain import PromptTemplate, LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)
 
 

在这里插入图片描述
这个警告是应为PromptTemplate和LLMChain现在弃用了可以使用如下导入

from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

3.1.2 Chat-聊天类型实战

# ChatOpenAI默认是chatGTP3.5的模型
# chat = ChatOpenAI(temperature=0)
# 我们在上一节内容部署了自己的模型

chat = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)

LangChain目前支持的消息类型

  1. AIMessage
  2. HumanMessage
  3. SystemMessage
  4. ChatMessage
    前面三个常用,后面ChatMessage接受任意角色的参数,大多数情况下只需要处理前三个。
3.1.2.1 AIMessage(AI 消息)

由人工智能生成和发送的消息。这些消息可能包含自动生成的回复、建议或信息。

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

from langchain.chat_models import ChatOpenAI

from langchain.schema import HumanMessage

chat = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)


out=AIMessage(content="你好,我是代码浪人", additional_kwargs={})
print("==========")
print(out)

在这里插入图片描述

这里的content就相当于大模型机器回答,干啥用呢,为了以后的多轮对话做准备。

3.1.2.2 HumanMessage(用户消息)

由真实用户生成和发送的消息。这些消息来自人类用户,包括文本、图片或其他形式的交流内容。

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

from langchain.chat_models import ChatOpenAI

from langchain.schema import HumanMessage

chat = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)

out=chat([HumanMessage(content="你好,你是谁")])
print("==========")
print(out)
print("==========")

在这里插入图片描述

这里才是我们提问的地方

3.1.2.3 SystemMessage(系统消息)

用于向用户提供系统通知、警告或其他重要信息的消息。这些消息通常由系统自动生成并发送。

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

from langchain.chat_models import ChatOpenAI

from langchain.schema import HumanMessage

chat = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)

messages = [
    SystemMessage(content="你现在是翻译专家,你会把我的话转化成英文"),
    HumanMessage(content="我是个帅小伙,很开心认识大家")
]
out=chat(messages)
print("==========")
print(out)
print("==========")

在这里插入图片描述
看到没,这时候,我们的大模型就可以作为一个助手帮你了

还可有以下情况,就是上面说的模仿大模型说话,我们先看一下原生的

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

from langchain.chat_models import ChatOpenAI

from langchain.schema import HumanMessage

chat = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)


print("==========")
res = chat(
    [
        SystemMessage(content="你现在是一个青春期叛逆少年,不喜欢学习,喜欢新事物"),
        HumanMessage(content="老师让我写作业,我不想写,怎么办")
    ]
)
print(res)

在这里插入图片描述

加入之后

print("==========")
res = chat(
    [
        SystemMessage(content="你现在是一个青春期叛逆少年,不喜欢学习,喜欢新事物"),
        HumanMessage(content="老师让我写作业,我不想写,怎么办"),
        AIMessage(content="我要玩一会,我要玩一会!"),
        HumanMessage(content="老师让我写作业,我不想写,怎么办")
    ]
)
print(res)

在这里插入图片描述
是不是很好玩

同时还支持批量操作

print("==========")
batch_messages = [
    [
        SystemMessage(content="你是一名鼓励师,你要夸我"),
        HumanMessage(content="我是一个开发人员")
    ],
    [
        SystemMessage(content="你是一名翻译工作人员,帮我的话翻译成英文"),
        HumanMessage(content="我是一个开发人员")
    ],
]
result = chat.generate(batch_messages)
print(result)
print("==========")

print(result.llm_output)

print("==========")

print(result.generations)
 
 

在这里插入图片描述

3.1.2.4 ChatMessage(聊天消息)

用于表示在聊天对话中交换的消息,可以是来自 AI 或真实用户的消息。

流处理

只要在声明的地方加入streaming和callbacks

from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
chat = ChatOpenAI(streaming=True, callbacks=[StreamingStdOutCallbackHandler()])
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

from langchain.chat_models import ChatOpenAI

from langchain.schema import HumanMessage
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
chat = ChatOpenAI(streaming=True, callbacks=[StreamingStdOutCallbackHandler()],
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)
resp = chat([HumanMessage(content="你好,你是谁")])
print(resp)

然后就在控制台一个字一个字打印
在这里插入图片描述

未完成待续,明天继续吧,睡觉了

关于我-一个默默打工小孩

我是去年本科计算机毕业的,一直在前进。不存在商业化博客,乱七八糟的。
如果帮到大家了,或者遇到什么麻烦欢迎和我一起讨论
18956043585(微信同号)
如果解决你的麻烦,也欢迎在这里留下你的兴奋
目标是2天一更新,继续加油吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1290338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣46. 全排列(java 回溯法)

Problem: 46. 全排列 文章目录 题目描述思路解题方法复杂度Code 题目描述 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 思路 1.该题目要求求出一个数组的全排列,我们可以利用回溯模拟出一个对数组中所有…

9_企业架构队列缓存中间件分布式Redis

企业架构队列缓存中间件分布式Redis 学习目标和内容 1、能够描述Redis作用及其业务适用场景 2、能够安装配置启动Redis 3、能够使用命令行客户端简单操作Redis 4、能够实现操作基本数据类型 5、能够理解描述Redis数据持久化机制 6、能够操作安装php的Redis扩展 7、能够操作实现…

maven生命周期回顾

目录 文章目录 **目录**两种最常用打包方法:生命周期: 两种最常用打包方法: 1.先 clean,然后 package2.先 clean,然后install 生命周期: 根据maven生命周期,当你执行mvn install时&#xff0c…

JAVA IO:NIO

1.阻塞 IO 模型 ​ 最传统的一种 IO 模型,即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出 CPU。当…

Unity 简单打包脚本

打包脚本 这个打包脚本适用于做demo,脚本放在Editor目录下 using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;public class BuildAB {[MenuItem("Tools/递归遍历文件夹下…

构建第一个事件驱动型 Serverless 应用

我相信,我们从不缺精彩的应用创意,我们缺少的把这些想法变成现实的时间和付出。 我认为,无服务器技术真的有助于最大限度节省应用开发和部署的时间,并且无服务器技术用可控的成本,实现了我的那些有趣的想法。 在我 2…

kali学习

目录 黑客法则: 一:页面使用基础 二:msf和Windows永恒之蓝漏洞 kali最强渗透工具——metasploit 介绍 使用永恒之蓝进行攻击 ​编辑 使用kali渗透工具生成远程控制木马 渗透测试——信息收集 域名信息收集 黑客法则: 一&…

Java架构师系统架构设计原则应用

目录 1 导语2 如何设计高并发系统:局部并发原则3 如何设计高并发系统:服务化与拆分4 高可用系统有哪些设计原则?5 如何保持简单轻量的架构-DRY、KISS,YAGNI原则6 如何设计组件间的交互和行为-HCLC,CQS,SOC7 框架层面的发展趋势-约定大于配置想学习架构师构建流程请跳转:…

有源滤波器在矿区配电网中的应用

针对目前有源滤波器应用于矿区谐波治理时电网频率适应能力较低的问题,针对定采样点数字控制系统提出了一种具有频率自适应能力的谐振控制策略。该策略不仅可以实现对电网频率波动的自适应,提高滤波器补偿效果,而且不需要在线对控制器参数进行…

ansible常用模块介绍

ansible运行模块的两种方式 Ad - Hoc 利用 ansible 命令直接完成管理 , 主要用于临时命令使用场景 ansible westos -m shell -a ls /mnt playbook ansible 脚本 , 主要用于大型项目场景 , 需要前期的规划 vim test.yml - hosts: all task…

【Docker】从零开始:13.Docker安装tomcat

Docker】从零开始:13.Docker安装Tomcat 下载Tomcat镜像启动Tomcat镜像新版本Tomcat修改访问Tomact首页 下载Tomcat镜像 [rootdocker ~]# docker pull tomcat Using default tag: latest latest: Pulling from library/tomcat 0e29546d541c: Pull complete 9b829c7…

IDEA加载阿里Java规范插件

IDEA加载阿里巴巴Java开发手册插件,在写代码的时候会自动扫描代码规范。 1、打开Settings 2、打开Plugins 3、搜索Alibaba Java Code Guidelines(XenoAmess TPM)插件,点击Install进行安装,然后重启IDE生效。 4、鼠标右…

Zabbix 5.0 安装部署

一、系统准备工作: Linux : centos 7 mini zabbix-server版本 5.0 LTS 二、安装配置步骤 系统更新 yum update -y 关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 #临时 sed -i s/SELINUXenforcing/SELINU…

User: zhangflink is not allowed to impersonate zhangflink

使用hive2连接进行添加数据是报错: [08S01][1] Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. User: zhangflink is not allowed to impersonate zhangflink 有些文章说需要修…

烟感监控:这个技巧是真的香,后悔没早点知道!

在现代社会,安全意识的提升成为各行各业关注的焦点之一。特别是在建筑、工业和住宅领域,火灾作为一种突发性、破坏性极强的灾害,给人们的生命和财产安全带来了巨大的威胁。 因此,为了有效预防和应对火灾,烟感监控系统逐…

【Angular开发】Angular中的高级组件

在这个博客中,我将解释Angular中的几个高级组件和机制,它们增强了灵活性、可重用性和性能。 通过熟悉这些高级组件和机制,您可以提高您的Angular开发技能,并在应用程序中利用灵活性、可重用性和性能优化的能力。让我们开始吧&…

iOS ------ 调用高德地图SDK

一,导入第三方库 这里使用CocoaPods安装SDK,方法和前面导入第三方库相同 1.打开终端,cd 文件路径 进入到所创建的项目文件中 2.输入pod init为该项目创建Podfile文件 3.编辑 Podfile 文件 Podfile文件内容如下: platform :ios,…

yolov1网络结构

YOLO神经网络结构如下图所示。把一幅480x480的原图分割成7x749个网格,每个网格要预测两个预选框(bounding box)的坐标(x,y,w,h),其中x和y表示box中心点与该格子边界的相对…

Netty中Channel的isWritable方法理解

目录 初见 深入 需要注意 对待超SIZE情况开源项目怎么做 1、seata中 2、SUMMER中 3、一些资料中 总结 初见 以下是包中注释 Returns true if and only if the I/O thread will perform the requested write operation immediately. Any write requests made when t…

Elasticsearch,Kibana集成,x-pack鉴权配置

Elasticsearch,Kibana集成 Java8环境部署[CentOS7] cd /usr/local/src wget https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gztar -xzvf jdk-8u201-linux-x64.tar.gz -C /usr/local#配置环境变量 vim /etc/profile #文末添加 export JAVA_HOME/us…