langchain 入门指南(二)- 如何跟大模型对话
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
本文中,我们会通过一个简单的例子来展示如何使用 langchain
来调用大模型的 chat
API(使用 Chat Model
)。
这个例子前面也有使用过,但是前面还没有针对里面的内容进行详细的说明。
配置 key
的文档请看 langchain 入门指南(一)- 准备 API KEY
依赖安装
pip install -U langchain-openai
示例
下面的 ChatOpenAI
表示我们要使用的是 Chat Model
,顾名思义,这个模型是用来进行对话的,这也是我们最常用的一种模型。
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessagechat = ChatOpenAI(model="yi-large",temperature=0.3,max_tokens=200,api_key='your key',base_url="https://api.lingyiwanwu.com/v1"
)messages = [SystemMessage(content="你是一名精通了 golang 的专家"),HumanMessage(content="写一个 golang 的 hello world 程序"),
]response = chat.invoke(messages)print(response.content)
ChatOpenAI 说明
使用 ChatOpenAI
类,我们可以调用 chat
API。ChatOpenAI
类的构造函数有以下参数:
ChatOpenAI 参数
model
:模型名称,例如yi-large
(零一万物),gpt-3.5-turbo
(OpenAI HK)等。temperature
:用于控制生成文本的多样性,值越大,生成的文本越多样化。max_tokens
:生成文本的最大长度。(我们的输入和 LLM 的输出都需要消耗token
数,所以如果只是测试,可以控制一下输出的token
数量)api_key
:API 密钥(支持多种,不只是 OpenAI 的)。不填写的话,会从环境变量中读取(对应的环境变量是OPENAI_API_KEY
)。base_url
:API 的接口地址。不填写的话,会从环境变量中读取(对应的环境变量是OPENAI_BASE_URL
)。timeout
:超时时间,单位是秒。max_retries
: 最大重试次数。
invoke 方法的参数说明
我们可以看到上面的例子传递了一个 messages
参数,这个参数是一个列表,里面包含了 HumanMessage
和 SystemMessage
。
在其他地方,我们可能会看到其他形式的参数,它实际上也支持很多种形式,例如:
元组列表
from langchain_openai import ChatOpenAIchat = ChatOpenAI(model="yi-large",temperature=0.3,max_tokens=200,api_key='your key',base_url="https://api.lingyiwanwu.com/v1",
)messages = [('system', '你是一名精通了 golang 的专家'),('human', '写一个 golang 的 hello world 程序')
]response = chat.invoke(messages)print(response.content)
BaseMessage 列表
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessagechat = ChatOpenAI(model="yi-large",temperature=0.3,max_tokens=200,api_key='your key',base_url="https://api.lingyiwanwu.com/v1",
)messages = [SystemMessage(content="你是一名精通了 golang 的专家"),HumanMessage(content="写一个 golang 的 hello world 程序"),
]response = chat.invoke(messages)print(response.content)
字符串
from langchain_openai import ChatOpenAIchat = ChatOpenAI(model="yi-large",temperature=0.3,max_tokens=200,api_key='your key',base_url="https://api.lingyiwanwu.com/v1",
)# 这个字符串参数会被转换为 HumanMessage
response = chat.invoke('使用 golang 写一个 hello world 程序')print(response.content)
字符串列表
from langchain_openai import ChatOpenAIchat = ChatOpenAI(model="yi-large",temperature=0.3,max_tokens=200,api_key='your key',base_url="https://api.lingyiwanwu.com/v1",
)messages = ["你是一名精通了 golang 的专家","写一个 golang 的 hello world 程序",
]response = chat.invoke(messages)print(response.content)
invoke 方法的返回值
上面是直接打印了返回值的 content
属性,实际上返回值中包含了其他一些有用的信息:
{"lc": 1,"type": "constructor","id": ["langchain","schema","messages","AIMessage"],"kwargs": {"content": "<...省略...>","response_metadata": {"token_usage": {"completion_tokens": 200,"prompt_tokens": 35,"total_tokens": 235},"model_name": "yi-large","system_fingerprint": null,"finish_reason": "length","logprobs": null},"type": "ai","id": "run-29131a4f-e792-4c9e-8cf5-490afed94176-0","usage_metadata": {"input_tokens": 35,"output_tokens": 200,"total_tokens": 235},"tool_calls": [],"invalid_tool_calls": []}
}
一些字段说明:
completion_tokens
/output_tokens
是生成的文本的token
数量。prompt_tokens
/input_tokens
是输入的token
数量。total_tokens
是单次请求总的token
数量。
在实际的应用中,我们需要注意使用的 token
的数量,防止消耗太多的 token
,因为 token
是要花钱来购买的。
如果我们是为其他人提供服务,可能就需要针对不同的用户来统计 token
的使用情况,以便计费。
相关文章:
langchain 入门指南(二)- 如何跟大模型对话
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 本文中,我们会通过一个简单的例子来展示如何使用 langchain 来调用大模型的 chat API(使用 Chat Modelÿ…...

[集成学习]基于python的Stacking分类模型的客户购买意愿分类预测
1 导入必要的库 import pandas as pd import numpy as np import missingno as msno import matplotlib.pyplot as plt from matplotlib import rcParams import seaborn as sns from sklearn.metrics import roc_curve, auc from sklearn.linear_model import LogisticRegres…...

FastApi地理坐标数据存取实践
说明: 应用Pydantic Model 验证/出入 数据, SqlAlchemy Model数据实体,Fastapi提供API机制支持。数据表的坐标字段采用Mysql的GEOMETRY类型目前还没成功使用Pydantic的Coordinate类型,待后续改良 要点: 输出的结果是…...

Docker容器——初识Docker,安装以及了解操作命令
一、Docker是什么? 是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源,用来管理容器和镜像的工具是在Linux容器里驱动运行应用的开源工具是一种轻量级的“虚拟机” 基于linux内核运行Docker的容器技术可以在一台主机上轻松为任何应用…...

JavaSE从零开始到精通
1.前置知识 JVM:java virtrual machine, java虚拟机, 专门用于执行java代码的一款软件。可以将class文件,转换为机器认识的机器码,因为我们的计算机只认识010101的二进制语言。JRE:java runtime enviroment, java运行时环境, jav…...

求解答word图标变白
把WPS卸载了之后就变成白色了,然后在注册表中把word的地址改成office word的地址之后图标变成这样了,怎么办...

Jenkins 离线升级
1. 环境说明 环境 A: jenkins 版本:2.253使用 systemctl 管理的 jenkins 服务 环境 B: 可以上网的机器,装有 docker-compose docker 和 docker-compose 安装,这里都略了。 2. 安装旧版本 2.1 环境 A jenkins 目录打包文件 …...

Unty 崩溃问题(Burst 1.8.2)
错误代码: Assertion failed on expression: exception SCRIPTING_NULL UnityEngine.StackTraceUtility:ExtractStackTrace () Unity.Burst.BurstCompiler:SendRawCommandToCompiler (string Unity版本:2021.3.17F1,Burst 1.8.2 表现&…...

【大型实战】企业网络实验(华为核心交换、ESXI7.0vmware虚拟机、DHCP中继、服务端网络及用户端网络配置)
需求 实验 vmware网络配置(企业内部一般为ESXI) 这样服务器虚拟机使用192.168.200.X网段才能与用户侧互通 vmware虚拟机配置(DHCP服务器网络配置) 打开网络管理页面 nmtui重置一下网络连接(重启网卡) …...
vue2路由跳转是异步的
在 Vue 2 中,如果你在路由跳转函数中通过路由路径判断路径时,发现路径还是上一个路径,这是因为路由跳转是异步的。为了确保在路由跳转完成后进行判断,你可以使用路由的导航守卫或者 nextTick 来确保获取到最新的路由路径。 使用 …...
第一阶段面试题总结
1. 线程和进程的概念,区别、以及什么时候用线程什么时候用进程 1.1 线程概念 线程是进程中的一个执行单元,一个进程可以包含多个线程 线程是一个轻量级的进程 线程是CPU任务调度的最小单元 1.2 进程概念 进程是一个程序的运行实例,它包含了…...
设计模式(工厂模式,模板方法模式,单例模式)
单例模式: 确保一个类只有一个实例,并提供全局访问点。 单例模式举例: 配置信息类:用于存储应用程序的全局配置信息,例如数据库连接信息、日志配置等。 日志类:用于记录应用程序运行时的日志信息&#x…...
ES6 对象的新增方法(十四)
1. Object.assign(target, …sources) 特性:将一个或多个源对象的所有可枚举属性复制到目标对象。 用法:用于对象属性的合并。 const obj1 { a: 1, b: 2 }; const obj2 { b: 3, c: 4 }; Object.assign(obj1, obj2);console.log(obj1); // 输出&#…...
Spring Boot 学习总结(34)—— spring-boot-starter-xxx 和 xxx-spring-boot-starter 区别?
一、Spring Starter 简介 Spring Starter 是 Spring Boot 提供的一种便捷方式,帮助开发者快速集成和配置 Spring 应用中所需的依赖。每个 Starter 都是一个预配置的依赖集,可以自动配置应用的一部分或特定功能。这些 Starter 旨在消除手动编写大量样板代码和配置的需求。 1…...
昇思训练营打卡第二十五天(RNN实现情感分类)
RNN,即循环神经网络(Recurrent Neural Network),是一种深度学习模型,特别适用于处理序列数据。以下是对RNN的简要介绍: RNN的特点: 记忆性:与传统的前馈神经网络不同,R…...

昇思25天学习打卡营第02天|张量 Tensor
一、什么是张量 Tensor 张量是一种特殊的数据结构,与数组和矩阵非常相似。张量(Tensor)是MindSpore网络运算中的基本数据结构。 张量可以被看作是一个多维数组,但它比普通的数组更加灵活和强大,因为它支持在GPU等加速…...

权威认可 | 海云安开发者安全助手系统通过信通院支撑产品功能认证并荣获信通院2024年数据安全体系建设优秀案例
近日,2024全球数字经济大会——数字安全生态建设专题论坛(以下简称“论坛”)在京成功举办。由全球数字经济大会组委会主办,中国信息通信研究院及公安部第三研究所共同承办,论坛邀请多位专家和企业共同参与。 会上颁发…...
24.7.10|暑假-数组题目:实现整数的数字反转【学习记录】
1、题目: 32位有符号整数,将整数每位上的数字进行反转 输入:123 输出:321 输入:-123 输出:-321 输入:120 输出:21 !) 问题 怎么把整数转换成字符串ÿ…...
【ceph】ceph集群-添加/删除mon
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...
Django ORM中的Q对象
Q 对象在 Django ORM 中用于构建复杂的查询条件,特别是当你需要使用逻辑运算符(如 AND、OR、NOT)时。以下是一些使用 Q 对象进行复杂查询的实际例子。 Q对象使用 模型 假设我们有一个包含员工信息的模型 Employee: from djang…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...