langchain尚硅谷day1-3 p2

上一P实在是太多内容了,没招了哈哈哈。

现在来讲讲输出部分的内容吧:

1.在agent的构建中,其实我们有时候可能更需要的是一种结构化的数据,这种数据更稳定一些。

首先是这个代码 :

关键代码其实是

这一部分,其实我们只需要将大模型的内容给它就行。但过程是这样的:我们先需要利用JsonOutputParser()这个类去构建一个对象,然后通过这个对象去调用invoke()方法,把大模型的一堆输出他。他就可以解析出来值。

创建JSON输出解析器实例

parser = JsonOutputParser()

调用解析器处理结果数据,将输入转换为JSON格式的响应

response = parser.invoke(result)

返回的是下面这样的一个字典:

python 复制代码
"""
JsonOutputParser,即JSON输出解析器,
是一种用于将大模型的自由文本输出转换为结构化JSON数据的工具。

本案例是:指定提示词指明返回 json 格式
"""

from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
import os
from langchain.chat_models import init_chat_model
from loguru import logger

# 创建聊天提示模板,包含系统角色设定和用户问题输入
chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个{role},请简短回答我提出的问题,结果返回json格式,q字段表示问题,a字段表示答案。"),
    ("human", "请回答:{question}")
])

# 使用指定的角色和问题生成具体的提示内容
prompt = chat_prompt.invoke({"role": "AI助手", "question": "什么是LangChain,简洁回答100字以内"})
logger.info(prompt)

# 初始化模型
model = init_chat_model(
    model="qwen-plus",
    model_provider="openai",
    api_key=
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

# 调用模型获取回答结果
result = model.invoke(prompt)
logger.info(f"模型原始输出:\n{result}")

print("*" *  60)


# 创建JSON输出解析器实例
parser = JsonOutputParser()
# 调用解析器处理结果数据,将输入转换为JSON格式的响应
response = parser.invoke(result)
logger.info(f"解析后的结构化结果:\n{response}")
logger.info("\n")
# 打印类型
logger.info(f"结果类型: {type(response)}") # <class 'dict'>

当我们需要指定结构化输出的内容与形态的时候:

python 复制代码
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
import os
from langchain.chat_models import init_chat_model
from loguru import logger
from pydantic import BaseModel, Field
class Person(BaseModel):
    """
    定义一个新闻结构化的数据模型类
    属性:
        time (str): 新闻发生的时间
        person (str): 新闻涉及的人物
        event (str): 发生的具体事件
    """
    time: str = Field(description="时间") #
    person: str = Field(description="人物")
    event: str = Field(description="事件")

# 创建JSON输出解析器,用于将model输出解析为Person对象
parser = JsonOutputParser(pydantic_object=Person)

我们需要构建一个pydantic的数据模型类。然后去描述一下我们到底需要什么样的一些元素要素。

这样的话就可以得到下面这样的json格式的内容

当我们需要比较严格地限制输入的时候:可以利用关下面的这个Annotated去生成变量。

他这个就是专门来设置约束的。

python 复制代码
from typing import Annotated
from pydantic import BaseModel, Field, ValidationError

# 用Annotated结合Field设置范围约束,兼具注释和运行时校验能力
Age = Annotated[int, Field(ge=0, le=150, description="年龄,范围0-150")]

class Person(BaseModel):
    name: str
    age: int
    age2: Age

try:
    p = Person(name="z3", age=11, age2=188)
    print(p)
except ValidationError as e:
    print("数据校验失败:")
    print(e)

差不多要结束了,复得好累。今天晚上决定跟前女友去打一个电话,我想去看看能不能当朋友。祝福我吧各位,希望她能听我说话,希望她能听得到吧。

相关推荐
大模型真好玩19 小时前
LangChain DeepAgents 速通指南(九)—— 生产级智能体框架 DeepAgents Code 源码导读
人工智能·langchain·agent
早点睡啊3 天前
精读 LangChain 官方文档(二)Model 篇:把模型调用升级成工程化推理接口
人工智能·langchain
星始流年5 天前
从 Tool 到 Skill——基于 LangChain 的服务端Skill实现
前端·langchain·agent
codedx5 天前
LangChain 和 LangGraph 构建的 Agent 项目模版
后端·langchain·agent
颜酱6 天前
LangGraph 入门指南
langchain
武子康7 天前
调查研究-186 LangChain 和 LangGraph 的区别:从快速构建 Agent 到生产级工作流编排
人工智能·langchain·llm
葫芦和十三10 天前
渐进发现|代码库不是文档库
langchain·agent·ai编程
柒和远方10 天前
LangGraph 深度解析:从增强型 LLM 到生产级 Agent
langchain·llm·agent
沪漂阿龙11 天前
《LangChain》成本、限流、缓存、降级:AI 应用上线要考虑的问题
人工智能·langchain
段一凡-华北理工大学11 天前
LangChain框架在高炉炼铁智能化领域的应用~系列文章09:工具调用Tool — 让AI学会操作高炉仪表盘
网络·人工智能·架构·langchain·高炉炼铁·高炉智能化·高炉智能体