深入浅出 langchain 1. Prompt 与 Model

示例

从代码入手来看原理

python 复制代码
from langchain_core.output_parsers import StrOutputParser  
from langchain_core.prompts import ChatPromptTemplate  
from langchain_openai import ChatOpenAI  
  
prompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")  
model = ChatOpenAI(model="gpt-4")  
output_parser = StrOutputParser()  
  
chain = prompt | model | output_parser  
  
chain.invoke({"topic": "ice cream"})

chain = prompt | model | output_parser

|是 Unix 管道操作符, 将不同的组件链接到一起, 一组组件的输出作为下一组件的输入.

Prompt

prompt 是一个 BasePromptTemplate ,这意味着它接收一个模板变量的字典并生成一个 PromptValue 。一个 PromptValue 是一个完成提示的包装器,可以传递给 LLM (接受字符串作为输入)或 ChatModel (接受消息序列作为输入)。它可以与任何语言模型类型一起工作,因为它定义了生成 BaseMessage 和生成字符串的逻辑。

以下是 PromptValue 的输入

python 复制代码
prompt_value = prompt.invoke({"topic": "ice cream"})

prompt_value
# ChatPromptValue(messages=[HumanMessage(content='tell me a short joke about ice cream')])

prompt_value.to_messages()
# [HumanMessage(content='tell me a short joke about ice cream')]

prompt_value.to_string()
# 'Human: tell me a short joke about ice cream'

Model

然后将 PromptValue 传递给 model 。在这种情况下,我们的 model 是一个 ChatModel ,意味着它将输出一个 BaseMessage

python 复制代码
message = model.invoke(prompt_value)  

message
# AIMessage(content="Why don't ice creams ever get invited to parties?\n\nBecause they always bring a melt down!")

如果我们的 model 是一个 LLM ,它会输出一个字符串。

python 复制代码
from langchain_openai.llms import OpenAI  
  
llm = OpenAI(model="gpt-3.5-turbo-instruct")  
llm.invoke(prompt_value)

# '\n\nRobot: Why did the ice cream truck break down? Because it had a meltdown!'

Output parser

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

python 复制代码
output_parser.invoke(message)

# "Why did the ice cream go to therapy? \n\nBecause it had too many toppings and couldn't find its cone-fidence!"

Summary

运行流程图如下:

我们将用户输入变成字典后, 传递给 PromptTemplate 包装成 PromptValue, 传递给 ChatModel 后, Model 给我们返回 ChatMessage, 再将其传递给 StrOutputParser, 最终解析成 String 类型

相关推荐
百里香酚兰2 分钟前
【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录&解决方案
人工智能·学习·unity·大模型·deepseek
sp_fyf_20241 小时前
[大语言模型-论文精读] 更大且更可指导的语言模型变得不那么可靠
人工智能·深度学习·神经网络·搜索引擎·语言模型·自然语言处理
肖遥Janic2 小时前
Stable Diffusion绘画 | 插件-Deforum:商业LOGO广告视频
人工智能·ai·ai作画·stable diffusion
我就是全世界3 小时前
一起了解AI的发展历程和AGI的未来展望
人工智能·agi
colorknight3 小时前
1.2.3 HuggingFists安装说明-MacOS安装
人工智能·低代码·macos·huggingface·数据科学·ai agent
kuan_li_lyg3 小时前
MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态
开发语言·人工智能·matlab·机器人·ros·机械臂·手眼标定
山川而川-R4 小时前
Windows安装ollama和AnythingLLM
人工智能·python·语言模型·自然语言处理
Kuekua-seu4 小时前
diffusion vs GAN
人工智能·神经网络·生成对抗网络
电子科技圈4 小时前
IAR全面支持国科环宇AS32X系列RISC-V车规MCU
人工智能·嵌入式硬件·mcu·编辑器
大地之灯4 小时前
深度学习每周学习总结J1(ResNet-50算法实战与解析 - 鸟类识别)
人工智能·python·深度学习·学习·算法