llm学习-4(llm和langchain)

langchain说明文档:langchain 0.2.6 — 🦜🔗 langChain 0.2.6icon-default.png?t=N7T8https://api.python.langchain.com/en/latest/langchain_api_reference.html#module-langchain.chat_models


1:模型

(1)自定义模型导入:

'''
在自定义llm里面接入langchain
'''
from wenxin_llm import Wenxin_LLM
from dotenv import find_dotenv, load_dotenv
import os# 读取本地/项目的环境变量
# find_dotenv()寻找并定位.env文件的路径
# load_dotenv()读取该.env文件,并将其中的环境变量加载到当前的运行环境中
load_dotenv(find_dotenv())# 获取环境变量 API_KEY
wenxin_api_key = os.environ["QIANFAN_AK"]
wenxin_secret_key = os.environ["QIANFAN_SK"]
llm = Wenxin_LLM(api_key=wenxin_api_key, secret_key=wenxin_secret_key, system="你是一个nlp领域的学者!")
output = llm.invoke("你好,请问你是谁?")
print('outpu_1:', output)

(2)langchain直接导入:

'''
langchain直接调用文心一言模型
'''
from dotenv import find_dotenv, load_dotenv
import os
load_dotenv(find_dotenv())
QIANFAN_AK = os.environ["QIANFAN_AK"]
QIANFAN_SK = os.environ["QIANFAN_SK"]# # Install required dependencies
# %pip install -qU langchain langchain-communityfrom langchain_community.llms import QianfanLLMEndpoint
llm = QianfanLLMEndpoint(streaming=True)
res = llm("你好,请你自我介绍一下!")
print(res)

2:prompt模板

我们知道聊天模型的接口是基于消息(message),而不是原始的文本。PromptTemplates 也可以用于产生消息列表,在这种样例中,prompt不仅包含了输入内容信息,也包含了每条message的信息(角色、在列表中的位置等)。通常情况下,一个 ChatPromptTemplate 是一个 ChatMessageTemplate 的列表。每个 ChatMessageTemplate 包含格式化该聊天消息的说明(其角色以及内容)。

'''
prompt模板
'''
from langchain.prompts.chat import ChatPromptTemplate
template = "你是一个翻译助手,可以帮助我将 {input_language} 翻译成 {output_language}."
human_template = "{text}"
chat_prompt = ChatPromptTemplate.from_messages([("system", template),("human", human_template),
])text = "我带着比身体重的行李,\
游入尼罗河底,\
经过几道闪电 看到一堆光圈,\
不确定是不是这里。\
"
messages  = chat_prompt.format_messages(input_language="中文", output_language="英文", text=text)
print('messages:', messages)
output  = llm.invoke(messages)
print('output:', output)# from langchain_core.prompts import ChatPromptTemplate# # 这里我们要求模型对给定文本进行中文翻译
# text = "我带着比身体重的行李,\
# 游入尼罗河底,\
# 经过几道闪电 看到一堆光圈,\
# 不确定是不是这里。\
# "
# prompt = """请你将由三个反引号包括的文本翻译成英文!\
# text: ```{text}```
# """# prompt.format(text=text)

3:输出解析器(Output parser)

OutputParsers 将语言模型的原始输出转换为可以在下游使用的格式。 OutputParsers 有几种主要类型,包括:

  • 将 LLM 文本转换为结构化信息(例如 JSON)
  • 将 ChatMessage 转换为字符串
  • 将除消息之外的调用返回的额外信息(如 OpenAI 函数调用)转换为字符串

最后,我们将模型输出传递给 output_parser,它是一个 BaseOutputParser,这意味着它接受字符串或 BaseMessage 作为输入。 StrOutputParser 特别简单地将任何输入转换为字符串。

'''
输出解析器
'''
from langchain_core.output_parsers import StrOutputParseroutput_parser = StrOutputParser()
out = output_parser.invoke(output)
print('out:', out)

4:形成完成流程链(Chain)

我们现在可以将所有这些组合成一条链。该链将获取输入变量,将这些变量传递给提示模板以创建提示,将提示传递给语言模型,然后通过(可选)输出解析器传递输出。

(1):使用LLMChain制作链

'''
使用LLChain做链
'''
from langchain.chains import LLMChain
chain = LLMChain(prompt=chat_prompt,llm=llm,output_parser=output_parser
)
# 运行链
out = chain.run(input_language="中文", output_language="英文", text=text)
print('out_chain:', out)

(2):使用管道操作符(|

 接下来我们将使用LCEL(LCEL 起步 | 🦜️🔗 Langchain)这种语法去快速实现一条链(chain)。

'''
使用管道操作符(|)制作链
'''
chain = chat_prompt | llm | output_parser
out = chain.invoke({"input_language":"中文", "output_language":"英文","text": text})
print('out_管道:', out)

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

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

相关文章

跟《经济学人》学英文:2024年07月06日这期 Amazon turns 30

As Amazon turns 30, three factors will define its next decade It will have to deal with trustbusters, catch up on AI and revive its core business 它将不得不应对反垄断者,追赶人工智能并重振其核心业务 trustbuster: 美 [ˈtrəs(t)ˌbəs…

Java中的算法优化与复杂度分析

Java中的算法优化与复杂度分析 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在软件开发中,算法的效率直接影响到程序的性能和响应速度。算法优化…

你真的会ELISA加样吗?

在ELISA实验中,研究人员需要进行多次加样步骤完成实验操作。对于常规双抗体夹心法ELISA,一般有如下加样步聚,即加样本、加检测抗体、加酶结合物、加底物(最后加终止液停止反应)。 加样步骤基础知识 加样步骤中一般使用…

云仓酒庄北京公司2024年:深耕酒业生态,以专业筑基

云仓酒庄北京公司:深耕酒业生态,以专业筑基,共绘酒业新蓝图 在竞争日益激烈的酒类市场中,云仓酒庄北京公司以其稳健的步伐、专业底蕴以及对品质的不懈追求,正逐步成为行业内一股不可忽视的力量。这家公司不仅仅是一个…

高级java每日一道面试题-2024年7月5日

题目: 请描述 Java 中接口和抽象类的区别,并说明什么时候应该使用接口,什么时候应该使用抽象类。 解答: 接口和抽象类都是 Java 中用于实现面向对象编程的重要概念,但它们在功能和用法上有一些区别: 1.…

把Windows打造成一个NTP网络时间服务器,为网关提供校时服务

把Windows打造成一个NTP网络时间服务器,为网关提供校时服务。主要目的是为了解决:当网关不能上外网的时候,可以使用局域网的电脑来当做NTP服务器,实现校时功能。 跟着小编来看,如何使用NTP网络时间服务器来同步时间。 …

Laravel为什么会成为最优雅的PHP框架?

引言 在现代Web开发中,选择一个合适的框架是构建高效、可靠和可维护应用的关键。从简单的博客到复杂的企业级应用,PHP框架一直在不断演变和进步。其中,Laravel作为一个相对较新的框架,自2011年首次发布以来,迅速崛起并…

ubuntu关于docker部署 项目一站式教程

**假设已有ubuntu服务器并且登录root账号 ** **FinalShell中复制快捷键是 ****Ctrl+Shift+V** 卸载老版本docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker步骤 更新软件包sudo apt update sudo apt upgrade安装docker依赖sudo apt-get …

监控工具 Prometheus

监控工具 Prometheus Prometheus 是一个开源的监控解决方案,它能够收集、存储和查询指标数据,并提供了强大的报警和可视化功能。Prometheus 适用于监控云原生应用程序和基础设施,是 Kubernetes 生态系统中常用的监控工具之一。 1. Promethe…

Yarn有哪些功能特点

Yarn是一个由Facebook团队开发,并联合Google、Exponent和Tilde等公司推出的JavaScript包管理工具,旨在提供更优的包管理体验,解决npm(Node Package Manager)的一些痛点。Yarn的功能特点主要包括以下几个方面&#xff1…

分享 10个简单实用的 JS 代码技巧

代码图片生成工具:有码高清 一、滚动到页面顶部 我们可以使用 window.scrollTo() 平滑滚动到页面顶部。 源码: const scrollToTop () > {window.scrollTo({ top: 0, left: 0, behavior: "smooth" }); };二、滚动到页面底部 当然&…

汉王、绘王签字版调用封装

说明 需要配合汉王或绘王签字版驱动以及对应的sdk服务使用 constants.js //汉王、绘王sdk websocket连接地址 export const WS_URLS {1:ws://127.0.0.1:29999, //汉王2:ws://127.0.0.1:7181, }export const COMMAND1 {1: {HWPenSign: "HWStartSign",nLogo: "…

探索大型语言模型自动评估 LLM 输出长句准确性的方法

LLM现在能够自动评估较长文本中的事实真实性 源码地址:https://github.com/google-deepmind/long-form-factuality 论文地址:https://arxiv.org/pdf/2403.18802.pdf 这篇论文是关于谷歌DeepMind的,提出了新的数据集、评估方法和衡量标准&am…

vue2+element-ui新增编辑表格+删除行

实现效果&#xff1a; 代码实现 &#xff1a; <el-table :data"dataForm.updateData"border:header-cell-style"{text-align:center}":cell-style"{text-align:center}"><el-table-column label"选项字段"align"center&…

Linux 内核 GPIO 用户空间接口

文章目录 Linux 内核 GPIO 接口旧版本方式&#xff1a;sysfs 接口新版本方式&#xff1a;chardev 接口 gpiod 库及其命令行gpiod 库的命令行gpiod 库函数的应用 GPIO&#xff08;General Purpose Input/Output&#xff0c;通用输入/输出接口&#xff09;&#xff0c;是微控制器…

MAX()和ROW_NUMBER()函数的对比

SQL 查询中,使用 MAX() 函数和使用窗口函数 ROW_NUMBER() 都可以实现获取每个分组中某个列的最大值,但它们的实现方式和性能表现有所不同。以下是两者的区别和性能对比: 使用 MAX() 函数 SELECTMAX(d.times) FROMv_y d WHEREd.id = a.idAND d.name = a.nameAND d.age = a.…

交换机需要多大 buffer(续:更一般的原理)

前面用 aimd 系统分析了交换机 buffer 需求量随流数量增加而减少&#xff0c;今天从更一般的角度继续分析这事。 将交换机建模为一个 m/m/1 排队系统&#xff0c;多流场景下它就会变成一个 m/g/1 排队系统&#xff0c;而这事比前面的 aimd 系统分析更容易推导。 m/m/1 系统中…

哪里还可以申请免费一年期的SSL证书?

目前&#xff0c;要申请免费一年期的SSL证书&#xff0c;选项较为有限&#xff0c;因为多数供应商已转向提供短期的免费证书&#xff0c;通常有效期为90天。不过&#xff0c;有一个例外是JoySSL&#xff0c;它仍然提供一年期的免费SSL证书&#xff0c;但是只针对教育版和政务版…

halcon学习

halcon列程详细介绍-V1.3 从文件夹中遍历图片(用到的算子及实例) 1)list_files(::Directory,Options:Files) 功能:列出目录中的所有文件 参数列表: 第1个参数Directory为输入变量,需要列出的目录名字,即输入目录地址; 第2个参数Options为输入变量,默认值为files,建…

html三级菜单

示例 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Menu Example</title> <link re…