前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LangChain学习:models,prompts,parsers

LangChain学习:models,prompts,parsers

作者头像
Michael阿明
发布2023-07-21 21:31:59
3600
发布2023-07-21 21:31:59
举报

文章目录

learn from https://learn.deeplearning.ai/langchain/lesson/2/models,-prompts-and-parsers

1. model

这里使用的是 AzureChatOpenAI

代码语言:javascript
复制
from config import api_type, api_key, api_base, api_version, model_name
from langchain.chat_models import AzureChatOpenAI
from langchain import OpenAI, ConversationChain, LLMChain, PromptTemplate
from langchain.prompts import ChatPromptTemplate
from langchain.output_parsers import ResponseSchema
from langchain.output_parsers import StructuredOutputParser

model = AzureChatOpenAI(
    openai_api_base=api_base,
    openai_api_version=api_version,
    deployment_name=model_name,
    openai_api_key=api_key,
    openai_api_type=api_type,
    temperature=0.5,
)

查看源代码,可以看到 AzureChatOpenAI 类是继承的 ChatOpenAI

代码语言:javascript
复制
class AzureChatOpenAI(ChatOpenAI):
    """Wrapper around Azure OpenAI Chat Completion API. To use this class you
    must have a deployed model on Azure OpenAI. Use `deployment_name` in the
    constructor to refer to the "Model deployment name" in the Azure portal.

2. prompts

代码语言:javascript
复制
sep = '###'
template_string = """
把下面用{sep}包裹的文本用{style}风格表达出来,输出结果不要有{sep}分隔符,使用json格式,key=text。
文本:{sep}{text}{sep}
"""
prompt_template = ChatPromptTemplate.from_template(template_string)
在这里插入图片描述
在这里插入图片描述

可以看到,提示词模板有三个输出参数

执行方法1

运行以下代码

代码语言:javascript
复制
chatgpt_chain = LLMChain(
    llm=model,
    prompt=prompt_template,
    verbose=True,
)
output = chatgpt_chain.run(sep=sep, text='我家小孩读书不用功,学习习惯不好,我今天打了他一顿',  style='古人')
print(type(output))
print(output)

输出:

代码语言:javascript
复制
> Entering new  chain...
Prompt after formatting:
Human: 
把下面用###包裹的文本用古人风格表达出来,输出结果不要有###分隔符,使用json格式,key=text。
文本:###我家小孩读书不用功,学习习惯不好,我今天打了他一顿###

> Finished chain.
<class 'str'>
{
    "text": "吾家之童子,读书不勤,学习之道不得其正。今日吾不得已而责之,以期能改过自新。"
}

输出的内容是字符串

执行方法2

先把模板填好

代码语言:javascript
复制
prompt = prompt_template.format_messages(sep=sep, text='我家小孩读书不用功,学习习惯不好,我今天打了他一顿',  style='古人')
在这里插入图片描述
在这里插入图片描述

promptlist,里面是 <class 'langchain.schema.messages.HumanMessage'>

代码语言:javascript
复制
output = model(prompt)
print(output.content)
#  '{
#    "text": "余家稚童讀書不勤,學習習慣不佳,吾今日責之一頓。"
#   }'

输出的还是字符串

3. parsers

代码语言:javascript
复制
output_text = ResponseSchema(name='text', description='输出的文本')
event_time = ResponseSchema(name='time', description='事件是什么时候发生的')
people = ResponseSchema(name='people', description='事件发生的人物,使用python list存储')
addr = ResponseSchema(name='addr', description='事件发生地点,如果未知的话,输出未知两个字')
event = ResponseSchema(name='event', description='事件起因')

reponse_schemas = [output_text, event_time, people, addr, event]
output_parser = StructuredOutputParser.from_response_schemas(reponse_schemas)
format_instructions = output_parser.get_format_instructions()
print(format_instructions)

输出

代码语言:javascript
复制
The output should be a markdown code snippet formatted in the following schema, including the leading and trailing "```json" and "```":

```json
{
	"text": string  // 输出的文本
	"time": string  // 事件是什么时候发生的
	"people": string  // 事件发生的人物,使用python list存储
	"addr": string  // 事件发生地点,如果未知的话,输出未知两个字
	"event": string  // 事件起因
}

format_instructions 也是一个字符串,它对输出的格式做了说明

那现在改下提示模板:加入输出格式的说明

代码语言:javascript
复制
template_string = """
把下面用{sep}包裹的文本用{style}风格表达出来。
文本:{sep}{text}{sep}

{format_instructions}
"""
prompt_template = ChatPromptTemplate.from_template(template_string)
prompt = prompt_template.format_messages(sep=sep, text='我家小孩读书不用功,学习习惯不好,我今天打了他一顿',  style='古人', format_instructions=format_instructions)
代码语言:javascript
复制
output = model(prompt)
在这里插入图片描述
在这里插入图片描述

输出的是一个 AIMessage对象

解析输出结果

代码语言:javascript
复制
output_dict = output_parser.parse(output.content)
print(type(output_dict))
print(output_dict)
print(output_dict['event'])

输出:

代码语言:javascript
复制
<class 'dict'>
{'text': '余家小兒讀書不用功,學習習慣不佳,鄙人今日責打他一頓。', 
'time': '古代', 'people': ['我', '小兒'], 'addr': '未知', 
'event': '小兒學習不力,需加強教育。'}
小兒學習不力,需加強教育。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. model
  • 2. prompts
    • 执行方法1
      • 执行方法2
      • 3. parsers
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档