langchain LCEL,prompt模块,outputparse输出模块

目录

基本代码

prompt模块

prompt模版控制长度 

outputparse格式化输出


LangChain表达式语言,或者LCEL,是一种声明式的方式,可以轻松地将链条组合在一起

langchian 可以使用 通义千问,我们用通义千问,用法也要申请 api:通义千问API如何使用_模型服务灵积(DashScope)-阿里云帮助中心

然后再代码目录创建一个 .env 文件,用来保存 api-key,例如

DASHSCOPE_API_KEY=sk-xxxxxxxxxx

这样就可以用了,就不需要官网默认示例的 openai 了,那个比较麻烦。

基本代码

import os
from dotenv import load_dotenv
from langchain_community.llms import Tongyi
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParserload_dotenv('key.env')  # 指定加载 env 文件
key = os.getenv('DASHSCOPE_API_KEY')  # 获得指定环境变量
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]  # 获得指定环境变量model = Tongyi(temperature=1)
# 设定系统上下文,构建提示词
template = """请扮演一位资深的技术博主,您将负责为用户生成适合在微博发送的中文帖文。
请把用户输入的内容扩展成 140 字左右的文字,并加上适当的 emoji 使内容引人入胜并专业。"""# 创建提示词对象,用于显示给用户的最终提示
prompt = ChatPromptTemplate.from_messages([("system", template), ("human", "{input}")])# 通过 LCEL 构建调用链并执行得到文本输出
# StrOutputParser() 模型对象的输出转为字符串
chain = prompt | model | StrOutputParser()
res = chain.invoke({"input": "给大家推荐一本新书《LangChain实战》,让我们一起开始来学习 LangChain 吧!"})
print(res)

prompt模块

上面的提示词不带参数,我们使用 langchain 的 prompt 模块来做一个带参数的提示词

import os
from dotenv import load_dotenv
from langchain_community.llms import Tongyi
from langchain_core.prompts import ChatPromptTemplateload_dotenv('key.env')  # 指定加载 env 文件
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]  # 获得指定环境变量
prompt = ChatPromptTemplate.from_template("请编写一篇关于{topic}的中文小故事,不超过100字")
model = Tongyi(temperature=1)
chain = prompt | model
res = chain.invoke({"topic": "小白兔"})
print(res)

对话提示词模版

import os
from dotenv import load_dotenv
load_dotenv('key.env')  # 指定加载 env 文件
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]  # 获得指定环境变量from langchain_core.prompts import ChatPromptTemplatechat_template = ChatPromptTemplate.from_messages([("system", "You are a helpful AI bot. Your name is {name}."),("human", "Hello, how are you doing?"),("ai", "I'm doing well, thanks!"),("human", "{user_input}"),]
)
res = chat_template.format_messages(name="Bob", user_input="What is your name?")
print(res)

prompt模版控制长度 

示例选择器

可以根据用户输入的长度,输入较长选择更多示例,输入较短选择更少示例

import os
from dotenv import load_dotenv
load_dotenv('key.env')  # 指定加载 env 文件
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]  # 获得指定环境变量from langchain_core.prompts import PromptTemplate
from langchain_core.prompts import FewShotPromptTemplate
from langchain.prompts.example_selector import LengthBasedExampleSelector# 创建一些反义词输入输出的示例内容
examples = [{"input": "happy", "output": "sad"},{"input": "tall", "output": "short"},{"input": "energetic", "output": "lethargic"},{"input": "sunny", "output": "gloomy"},{"input": "windy", "output": "calm"},
]example_prompt = PromptTemplate(input_variables=["input", "output"],template="Input: {input}\nOutput: {output}",
)
example_selector = LengthBasedExampleSelector(examples=examples,example_prompt=example_prompt,# 设定期望的示例文本长度max_length=25
)
dynamic_prompt = FewShotPromptTemplate(example_selector=example_selector,example_prompt=example_prompt,# 设置示例以外部分的前置文本prefix="Give the antonym of every input",# 设置示例以外部分的后置文本suffix="Input: {adjective}\nOutput:\n\n",input_variables=["adjective"],
)# 当用户输入的内容比较少时,所有示例都足够被使用
print(dynamic_prompt.format(adjective="big"))# 当用户输入的内容足够长时,只有少量示例会被引用
long_string = "big and huge and massive and large and gigantic and tall and much much much much much bigger than everything else"
print(dynamic_prompt.format(adjective=long_string))

 

outputparse格式化输出

使用 PydanticOutputParser 控制输出格式

from typing import Listfrom langchain_core.prompts import PromptTemplate
from langchain_community.llms.ollama import Ollama
from langchain.output_parsers import PydanticOutputParser
from langchain.pydantic_v1 import BaseModel, Fieldclass Actor(BaseModel):name: str = Field(description="name of an author")book_names: List[str] = Field(description="list of names of book they wrote")actor_query = "随机生成一位知名的作家及其代表作品"parser = PydanticOutputParser(pydantic_object=Actor)prompt = PromptTemplate(template="请回答下面的问题:\n{query}\n\n{format_instructions}\n如果输出是代码块,请不要包含首尾的```符号",input_variables=["query"],partial_variables={"format_instructions": parser.get_format_instructions()},
)input = prompt.format_prompt(query=actor_query)
print(input)model = Ollama(model="llama2-chinese:13b")
output = model(input.to_string())print(output)
parser.parse(output)

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

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

相关文章

基于ros的相机内参标定过程

基于ros的相机内参标定过程 1. 安装还对应相机的驱动2. 启动相机节点发布主题3. 下载camera_calibartion4. 将红框的文件夹复制在自己的工作空间里边,编译5. 标定完成以后,生成内参参数文件camera.yaml。将文件放在对应的路径下,修改config文…

ArcGIS Server 10发布要素服务时遇到的数据库注册问题总结(一)

工作环境: Windows 7 64 位旗舰版 ArcGIS Server 10.1 ArcGIS Desktop 10.1 IIS 7.0 开始的时候以为10.1发布要素服务和10.0一样,需要安装ArcSDE,后来查阅资料发现不需要,数据库直连方式就可以了。 首先我来说一下发布要素服…

stm32开发之threadx+netxduo(tcp 服务端使用记录)

前言 本篇需要用到threadx之动态内存的实现记录 里面的动态内存分配管理代码.开发环境使用的stm32cubemxclion组合芯片使用的是stm32f407zgt6,网口使用的是lan8720,使用cubemx提供的lan8742也可以驱动,注意实际的网口与芯片的引脚 示例代码 tcp 服务端…

Excel文本内容抽取工具[Python]

#创作灵感# 一堆Excel文件,每个打开看太累了。写个脚本直接显示里面的内容多好。最好这些内容可以直接复制到剪切板,方便以后编辑修改。只需要将文件拖动到全屏置顶的文本框内,就能弹出Excel里的内容。支持一次选取多个文件。 开干&#xff…

计算机视觉——引导APSF和梯度自适应卷积增强夜间雾霾图像的可见性算法与模型部署(C++/python)

摘要 在夜间雾霾场景中,可见性经常受到低光照、强烈光晕、光散射以及多色光源等多种因素的影响而降低。现有的夜间除雾方法常常难以处理光晕或低光照条件,导致视觉效果过暗或光晕效应无法被有效抑制。本文通过抑制光晕和增强低光区域来提升单张夜间雾霾…

N1922A是德科技N1922A功率传感器

181/2461/8938产品概述: N192XA 传感器是首款通过将直流参考源和开关电路集成到功率传感器中来提供内部调零和校准的传感器。此功能消除了与使用外部校准源相关的多个连接,从而最大限度地减少了连接器磨损、测试时间和测量不确定性。 连接到 DUT 时进行…

InsectMamba:基于状态空间模型的害虫分类

InsectMamba:基于状态空间模型的害虫分类 摘要IntroductionRelated WorkImage ClassificationInsect Pest Classification PreliminariesInsectMambaOverall Architecture InsectMamba: Insect Pest Classification with State Space Model 摘要 害虫分类是农业技术…

Excel从零基础到高手【办公】

第1课 - 快速制作目录【上篇】第1课 - 快速制作目录【下篇】第2课 - 快速定位到工作表的天涯海角第3课 - 如何最大化显示工作表的界面第4课 - 给你的表格做个瘦身第5课 - 快速定位目标区域所在位置第6课 - 快速批量填充序号第7课 - 按自定义的序列排序第8课 - 快速删除空白行第…

C++数据结构与算法——贪心算法难题

C第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C查漏补缺,尤其是树的部分。这一部分计划一个月,主要利用代码随想录来学习,刷题使用力扣网站,不定时更…

计算机视觉异常检测——PatchCore面向全召回率的工业异常检测

1. 概述 异常检测问题在工业图像数据分析中扮演着至关重要的角色,其目的是从大量正常数据中识别出异常行为或模式。这一任务的挑战在于,正常数据的样本相对容易获取,而异常情况却因其稀有性和多样性而难以收集。为了解决这一问题&#xff0c…

跟TED演讲学英文:Why AI will spark exponential economic growth by Cathie Wood

TED英文文稿 文章目录 TED英文文稿Why AI will spark exponential economic growthIntroductionVocabularyTranscriptSummary Why AI will spark exponential economic growth Link: https://www.ted.com/talks/cathie_wood_why_ai_will_spark_exponential_economic_growth? …

家庭网络防御系统搭建-将NDR系统的zeek日志集成到securit yonion

在前面的文章中安装了zeek,这里,安装了securityonion,这里,本文讲述如何将zeek生成的日志发送到siem security onion之中。 所有日志集成的步骤分为如下几步: 日志收集配置日志发送接收日志解析配置日志展示配置 ZEEK日志收集配…

大型语言模型如何助力推荐系统:综述研究

论文地址:https://arxiv.org/pdf/2306.05817.pdf 这篇论文主要探讨了推荐系统(RS)如何从大型语言模型(LLM)中获益。论文首先指出,随着在线服务和网络应用的快速发展,推荐系统已成为缓解信息过载…

路由器如何端口映射到外网?

随着互联网的发展和普及,远程访问已经成为了现代社会的一个重要需求。在复杂的网络环境下,特别是涉及异地组网的情况下,实现远程访问变得更加困难。本文将介绍一种名为【天联】的组网产品,它可以解决复杂网络环境下的远程连接问题…

搜维尔科技:Patchwork 3D工业仿真实时渲染,将CAD 数据转换成真实感的3D模型以用于工业用途

Patchwork 3D工业仿真 实时渲染点击跳转官网 从实时渲染到真实照片 根据工作阶段所需的逼真度,您可以使用三个渲染引擎,从最快的(OpenGL,交互式)到最逼真的(光线跟踪,Iray物理逼真)…

vue中使用axios获取不到响应头Content-Disposition的解决办法

项目中,后端返回的文件流; 前端需要拿到响应头里的Content-Disposition字段的值,从中获取文件名 在控制台Headers中可以看到相关的字段和文件名,但是在axios里面却获取不到 如果想要让客户端访问到相关信息,服务器不仅要在head…

web安全学习笔记【22】——文件上传(1)

WEB攻防-PHP应用&文件上传&函数缺陷&条件竞争&二次渲染&黑白名单&JS绕过 演示案例: PHP-原生态-文件上传-前后端验证PHP-原生态-文件上传-类型文件头验证PHP-原生态-文件上传-后缀黑白名单验证PHP-原生态-文件上传-解析配置&二次渲染…

XUbuntu22.04之Typora添加水印并输出pdf文件(二百二十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

功能测试_验证某城市电话号码的正确性

案例:验证某城市电话号码的正确性 功能测试_等价类设计用例: 步骤: 1:明确需求:电话号码是否正确 2:划分等价类:有效等价类、有效取值、无效等价类、无效取值 3:提取数据编写用例:用例编号…