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

【GPT入门】第19课 Langchain IO模型

【GPT入门】第19课 Langchain IO模型

  • 概述
  • 1. 四行代码调用OPENAI
  • 2.三种角色
  • 3. IO模型
    • 3.1 PromptTemplate 可以在模板中自定义变量
    • 3.2 ChatPromptTemplate用模板表示的对话上下文
    • 3.3 从文件中加载prompt
    • 3.4 从json_schema定义输出格式
    • 3.5 json输出的第二种方法
    • 3.6 OutputFixingParser做格式自动修正

概述

本文讲 LangChain 的核心组件
模型 I/O 封装
LLMs:大语言模型
Chat Models:一般基于 LLMs,但按对话结构重新封装
PromptTemple:提示词模板
OutputParser:解析输出

1. 四行代码调用OPENAI

from langchain_openai import ChatOpenAI

llm = ChatOpenAI()
response = llm.invoke("你是谁")
print(response.content)

2.三种角色

from langchain.schema import (
    AIMessage,  # 相当于OpenAI的ChatCompletion的role="assistant"
    HumanMessage,   # 相当于OpenAI的ChatCompletion的role="user"  
    SystemMessage  # 相当于OpenAI的ChatCompletion的role="system"
)   
from langchain_openai import ChatOpenAI

messages = [
    SystemMessage(content="你是一个专业的翻译员"),
    HumanMessage(content="你好,我想翻译一段英文,你能帮我吗?"),
    AIMessage(content="当然可以,你可以告诉我你要翻译的英文是什么?"),
    HumanMessage(content="how are you?")
]

llm = ChatOpenAI()
ret = llm.invoke(messages)
print(ret)


3. IO模型

3.1 PromptTemplate 可以在模板中自定义变量

from langchain.prompts import PromptTemplate

template = PromptTemplate.from_template("给我讲一个关于{subject}的笑话")
print(template)
print(template.format(subject="猫"))
template = PromptTemplate.from_template("给我讲主角是{name},主题是{subject}的笑话")
print(template)
print(template.format(name="小明", subject="猫"))

from langchain_openai import ChatOpenAI
llm = ChatOpenAI()
ret = llm.invoke(template.format(name="小明", subject="猫"))
print(ret)


3.2 ChatPromptTemplate用模板表示的对话上下文

from langchain.prompts import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
template = ChatPromptTemplate.from_messages([
    SystemMessagePromptTemplate.from_template(
        "你是{product}到客服助手,你的名字叫{name}"),
    HumanMessagePromptTemplate.from_template("{query}")
])
llm = ChatOpenAI()
prompt = template.format_messages(
    product="小米",
    name="小爱同学",
    query="你是谁"
)
ret = llm.invoke(prompt)
print(ret.content)
#我是小米客服助手,你可以叫我小爱同学。有什么问题我可以帮你解决呢?

3.3 从文件中加载prompt

from langchain.prompts import PromptTemplate

template = PromptTemplate.from_file("myPrompt.txt", encoding='utf-8')
print(template)
print(template.format(boyName="小明", girlName="小红"))

3.4 从json_schema定义输出格式

json_schema = {
    "title": "Date",
    "description": "Formated date expression",
    "type": "object",
    "properties": {
        "year": {
            "type": "integer",
            "description": "year, YYYY",
        },
        "month": {
            "type": "integer",
            "description": "month, MM",
        },
        "day": {
            "type": "integer",
            "description": "day, DD",
        },
        "era": {
            "type": "string",
            "description": "BC or AD",
        },
    },
}
structure_llm = llm.with_structured_output(json_schema)

print(structure_llm.invoke(input_prompt))

3.5 json输出的第二种方法

from langchain_core.output_parsers import JsonOutputParser

parser = JsonOutputParser(pydantic_object=Date)

prompt = PromptTemplate(
    template="提取用户输入中的日期。\n用户输入:{query}\n{format_instructions}",
    input_variables=["query"],
    partial_variables={"format_instructions": parser.get_format_instructions()},
)
query = "2025年三月6日天气晴..."
input_prompt = prompt.format_prompt(query=query)
output = llm.invoke(input_prompt)
print("原始输出:\n"+output.content)

print("\n解析后:")
print(parser.invoke(output))

3.6 OutputFixingParser做格式自动修正

from langchain.output_parsers import OutputFixingParser

new_parser = OutputFixingParser.from_llm(parser=parser, llm=ChatOpenAI())

bad_output = output.content.replace("3","四")
print("PydanticOutputParser:")
try:
    print(parser.invoke(bad_output))
except Exception as e:
    print(e)

print("OutputFixingParser:")
print(new_parser.invoke(bad_output))

http://www.kler.cn/a/584039.html

相关文章:

  • jenkins+robotFramework持续集成(三)之jenkins参数
  • Linux zgrep 命令使用详解
  • GPU加速的国密SM2算法实现
  • Android 14 昼夜色切换多屏时候非主屏的Activity无法收到onConfigurationChanged
  • 双指针算法介绍+算法练习(2025)
  • Anaconda 以及 Jupyter Notebook的详细安装教程
  • 独立IP服务器的好处都有哪些?
  • Android头像布局
  • Node.js 模块化概念详细介绍
  • 【微知】tmux如何在一个会话的1个窗口中水平分割或者垂直分割窗口?(垂直 Ctrl + b, %; 切换Ctrl + b, 方向键; ctrl d关闭)
  • 当AI回答问题时,它的“大脑”里在炒什么菜?
  • PrivHunterAI越权漏洞检测工具详细使用教程
  • 从零开始学习机器人---如何高效学习机械原理
  • pycharm + anaconda + yolo11(ultralytics) 的视频流实时检测,保存推流简单实现
  • 程序化广告行业(11/89):洗牌期与成熟期的变革及行业生态解析
  • 深度学习-145-Text2SQL之基于官方提示词模板进行交互
  • 三分钟掌握音视频信息查询 | 在 Rust 中优雅地集成 FFmpeg
  • 平时作业
  • C语言一维数组
  • 使用 ESP32 和 Python 进行手势识别