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

langchain基础

1 获取阿里云的api

这部分主要是就是关于提示词,有用户语言,系统语言,ai语言。下面我来用例子来学习这些

2 HumanMessage, SystemMessage

from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="qwen-plus",openai_api_key="你的阿里云api",openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1")

这一步就是初始化一个模型调用的阿里云的qwen-plus,这部分我们可以直接在阿里云的文档中学习。

然后下面我们就设置提示词

from langchain.schema.messages import HumanMessage, SystemMessage
messages = [SystemMessage(content="请你作为我的数学课助教,用通俗易懂且间接的语言帮我解释数学原理。"),HumanMessage(content="什么是勾股定理?"),
]
response = model.invoke(messages)print(response.content)

这里我们设置系统提示词为“请你作为我的数学课助教,用通俗易懂且间接的语言帮我解释数学原理”,那么回答的问题就有关于我们的数学问题。

3 Prompt Template

from langchain.prompts import (SystemMessagePromptTemplate,AIMessagePromptTemplate,HumanMessagePromptTemplate,
)

这里导入了三个类,就是用户信息模板,ai信息模板,系统模板。就是说我们先写好一个模板后面只需要补全其中的信息就好了。如下

system_template_text="你是一位专业的翻译,能够将{input_language}翻译成{output_language},并且输出文本会根据用户要求的任何语言风格进行调整。请只输出翻译后的文本,不要有任何其它内容。"
system_prompt_template = SystemMessagePromptTemplate.from_template(system_template_text)

现在我就写了一个系统提示词模板,下面我们看看系统提示词模板长啥样

下面我们再创建一个用户提示词模板

human_template_text="文本:{text}\n语言风格:{style}"
human_prompt_template = HumanMessagePromptTemplate.from_template(human_template_text)

下面我们看下怎么往里面传入参数

就这样,我们创建一个模板之后,只需要改变关键词就可以了,不用全部改变了。

print('你好,{0},{1}'.format('小狗','小猫'))
# 你好,小狗,小猫

这里会不会发现和我们的输出时的format差不多的。

下面就是创建一个模型示例,然后传入参数(model.invoke()就是传入参数)

model = ChatOpenAI(model="qwen-plus",openai_api_key="你的阿里云api",openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1")
response = model.invoke([system_prompt,human_prompt
])

4 ChatPromptTemplate

这个就是前面的优化版本,把原本的多句,要传入参数两次,集合了一下,传一次,但是一次传好几个。

from langchain.prompts import ChatPromptTemplate
prompt_template = ChatPromptTemplate.from_messages([("system", "你是一位专业的翻译,能够将{input_language}翻译成{output_language},并且输出文本会根据用户要求的任何语言风格进行调整。请只输出翻译后的文本,不要有任何其它内容。"),("human", "文本:{text}\n语言风格:{style}"),]
)
prompt_template.input_variables
prompt_value = prompt_template.invoke({"input_language": "汉语", "output_language": "汉语","text":"勿以善小而不为,勿以恶小而为之。", "style": "白话文"})
prompt_value
prompt_value.messages
model = ChatOpenAI(model="qwen-plus",openai_api_key="你的阿里云api",openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1")
response = model.invoke(prompt_value)
print(response)

4 ai提示词模板

from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage
from langchain.prompts import FewShotChatMessagePromptTemplate, ChatPromptTemplate
example_prompt = ChatPromptTemplate.from_messages([("human", "格式化以下学生信息:\n姓名 -> {customer_name}\n年龄 -> {customer_age}\n 城市 -> {customer_city}"),("ai", "##学生信息\n- 学生姓名:{formatted_name}\n- 学生年龄:{formatted_age}\n- 学籍所在地:{formatted_city}")]
)

这里我们先写了一个样例模板,类似与训练出一个模型一样,让他就这样输出。

然后初始化一些信息

examples = [{"customer_name": "张三", "customer_age": "7","customer_city": "郑州","formatted_name": "张三","formatted_age": "7岁","formatted_city": "河南省郑州市"},{"customer_name": "李四", "customer_age": "9","customer_city": "广州","formatted_name": "李四","formatted_age": "9岁","formatted_city": "广东省广州市"},
]

再使用函数传入进去

few_shot_template = FewShotChatMessagePromptTemplate(example_prompt=example_prompt,examples=examples,
)

然后再定义一个模板,这个模板就用于后面传入参数了。前面模板只是传入一个example

final_prompt_template = ChatPromptTemplate.from_messages([few_shot_template,("human", "{input}"),]
)

定义一个模板,这个模板就是传入上面那个。

final_prompt = final_prompt_template.invoke({"input": "格式化以下学生信息:\n姓名 -> 王五\n年龄 -13\n 城市 -> 南昌'"})

这里我查看了一下我们已经有的信息,和最后一次问的信息。

然后初始化model,传入信息,再输出

model = ChatOpenAI(model="qwen-plus",openai_api_key="你的阿里云api",openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1")
response = model.invoke(final_prompt)
print(response.content)

输出

5 CommaSeparatedListOutputParser

这个就是别人已经定义好的东西,我们直接调用就好了,例如

from langchain_openai import ChatOpenAI
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([("system", "{parser_instructions}"),("human", "列出5个{subject}国家的汽车品牌。")
])
output_parser = CommaSeparatedListOutputParser()
parser_instructions = output_parser.get_format_instructions()
print(parser_instructions)

输出    Your response should be a list of comma separated values, eg: `foo, bar, baz`

意思就是输出的格式是以,分隔的

final_prompt = prompt.invoke({"subject": "美国", "parser_instructions": parser_instructions})model = ChatOpenAI(model="qwen-plus",openai_api_key="你的阿里云api",openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1")
response = model.invoke(final_prompt)
print(response.content)

传入参数,初始化模型,输出

6 转化为json格式

from typing import Listfrom langchain.output_parsers import PydanticOutputParser
from langchain.prompts import ChatPromptTemplate
from langchain.schema import HumanMessage
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI
#%%
class FilmInfo(BaseModel):film_name: str = Field(description="电影的名字", example="拯救大兵瑞恩")author_name: str = Field(description="电影的导演", example="斯皮尔伯格")genres: List[str] = Field(description="电影的题材", example=["历史", "战争"])#BaseModel用于创建数据模式,也就是数据的说明书,Field是字段,用于为Basemodel里的属性提供额外的信息和验证条件
#%%
output_parser = PydanticOutputParser(pydantic_object=FilmInfo)
#%%
print(output_parser.get_format_instructions())

这个就是定义了一个模板,然后可以输出按照我们的要求的json格式

定义提示词

prompt = ChatPromptTemplate.from_messages([("system", "{parser_instructions} 你输出的结果请使用中文。"),("human", "请你帮我从电影概述中,提取电影名、导演,以及电影的体裁。电影概述会被三个#符号包围。\n###{film_introduction}###")
])
#%%
film_introduction = """《复仇者联盟4:终局之战》(Avengers: Endgame)是美国科幻电影,改编自美国漫威漫画,漫威电影宇宙(Marvel Cinematic Universe,缩写为MCU)第22部影片。影片由安东尼·罗素和乔·罗素执导,小罗伯特·唐尼、克里斯·埃文斯、马克·鲁法洛、克里斯·海姆斯沃斯、斯嘉丽·约翰逊、杰瑞米·雷纳、保罗·路德、布丽·拉尔森、乔什·布洛林、汤姆·希德勒斯顿、汤姆·赫兰德等主演。讲述《复仇者联盟3:无限战争》的毁灭性事件过后,宇宙由于疯狂泰坦灭霸的行动而变得满目疮痍。无论前方将遭遇怎样的后果,复仇者联盟都必须在剩余盟友的帮助下再一次集结,以逆转灭霸的所作所为,彻底恢复宇宙的秩序。该片于2019年4月26日在美国上映,4月24日在中国上映。截止2019年7月21日,《复仇者联盟4》全球票房达27.89亿美元,获全球影史票房总冠军。
"""
final_prompt = prompt.invoke({"film_introduction": film_introduction,"parser_instructions": output_parser.get_format_instructions()})
print(final_prompt)

加载模型,传入参数,输出结构。

model = ChatOpenAI(model="qwen-plus",openai_api_key="你的阿里云api",openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1")
response = model.invoke(final_prompt)
print(response.content)

7 链式传播

from langchain_openai import ChatOpenAI
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import ChatPromptTemplate
#%%
prompt = ChatPromptTemplate.from_messages([("system", "{parser_instructions}"),("human", "列出5个{subject}生产的汽车的品牌。")
])
#%%
output_parser = CommaSeparatedListOutputParser()
parser_instructions = output_parser.get_format_instructions()
#%%
model = ChatOpenAI(model="qwen-plus",openai_api_key="你的阿里云api",openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1")

这里还是和前面一样,定义了一个系统和用户提示词模板,然后输出提示词模板用逗号分隔。

然后我们可以这样传输

result = output_parser.invoke(model.invoke(prompt.invoke({"subject": "中国", "parser_instructions": parser_instructions})))
result

这里我们可以使用chain特殊的传入格式

chat_model_chain = prompt | model | output_parser
result = chat_model_chain.invoke({"subject": "中国", "parser_instructions": parser_instructions})
result

http://www.dtcms.com/a/561963.html

相关文章:

  • vue2+vuex登录功能
  • fastapi -- 耗时任务处理
  • 网站建设咨询服务企业级服务器配置
  • 做阅读任务挣钱的网站北京网站建设公司哪家最好
  • 零基础学Python_自动补全符号
  • C++14 新特性:更加简洁和高效的编程体验
  • 邹城网站设计百中搜
  • 青海省住房和城乡建设厅官方网站wordpress s.w.org
  • Apollo Planning 模块技术深度解析
  • 哪个网站可以帮助做数学题百度推送
  • 企业网站和信息化建设哪里有网站制作服务
  • 【Linux】深入理解进程(三)(环境变量)
  • 【C学生序号姓名学号年龄降序排序】2022-12-9
  • 平衡二叉树解题思路
  • 电子商务网站应该如何建设四川教育公共信息服务平台
  • 响应式官方网站便宜自适应网站建设厂家
  • 实例016 百元买百鸡问题
  • 硬件-射频学习DAY3——高频电流的“恐深症”:趋肤效应解密
  • Hudi安装部署
  • 宠物之家网站开发九江网站建设优化公司
  • 网站的360快照怎么做锦州网站seo
  • 【Android】结合View的事件分发机制解决滑动冲突
  • python 异步编程 -- 理解asyncio里的Future 对象
  • zoho crmvue做网站对seo
  • Java---System 类
  • 31.使用等待队列实现阻塞访问
  • Tyme 技术赋能:节气与季节的高效求解实战攻略
  • 【C++】2025CSP-J第二轮真题及解析
  • 网站建设教程流程更改wordpress主题语言
  • 朝阳区网站建设蒙特网设计公司