吃透LangChain(五):多模态输入与自定义输出
多模态数据输入
这里我们演示如何将多模态输入直接传递给模型。我们目前期望所有输入都以与OpenAl 期望的格式相同的格式传递。对于支持多模态输入的其他模型提供者,我们在类中添加了逻辑以转换为预期格式。
在这个例子中,我们将要求模型描述一幅图像。
import base64
import httpx
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAIimg_url = "https://img0.baidu.com/it/u=3217812679,2585737758&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500"
img_data = base64.b64encode(httpx.get(img_url).content).decode("utf-8")
model = ChatOpenAI(model="gpt-4o")message = HumanMessage(content = [{"type": "text", "text": "用中文描述图片里边的内容和天气"},{"type": "image_url", "image url": {"url": f"data:image/jpeg;base64,{img_data}"}}]
)result = model.invoke([message])
print(result)
输出
这张图片中的天气晴朗,天空呈现明亮的蓝色,并有一些白色云朵点缀。阳光明媚,给大地带来了充足的光照。总体而言,天气非常宜人
多张图片输入
import base64
import httpx
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAIimg_url = "https://img0.baidu.com/it/u=3217812679,2585737758&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500"
img_url1 = "https://img0.baidu.com/it/u=3217812679,2585737758&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500"
model = ChatOpenAI(model="gpt-4o")message = HumanMessage(content = [{"type": "text", "text": "两张图片是否一致?"},{"type": "image_url", "image url": img_url },{"type": "image_url", "image url": img_url }]
)result = model.invoke([message])
print(result)
引用工具
from typing import Literal
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool@tool
def weather_tool(weather: Literal["晴朗的", "多云的", "多雨的", "多雪的"]) -> None:passimg_url = "https://t11.baidu.com/it/u=2838234550,164986307&fm=30&app=106&f=JPEG"
model = ChatOpenAI(model="gpt-4o")
model_with_tool = model.bind_tools([weather_tool])
message = HumanMessage(content = [{"type": "text", "text": "用中文描述图片里边的天气"},{"type": "image_url", "image url": {"url": img_url}},]
)result = model_with_tool.invoke([message])
print(result)
自定义输出:JSON、XML、YAML
如何输出JSON
虽然一些模型提供商支持内置的方法返回结构化输出,但并非所有都支持。我们可以使用输出解析器来帮助用户通过提示指定任意的 JSON 模式,查询符合该模式的模型输出,最后将该模式解析为JSON。请记住,大型语言模型是有泄漏的抽象!您必须使用具有足够容量的大型语言模型来生成格式良好的JSON.
JsonOutputParser 是一个内置选项,用于提示并解析JSON 输出。虽然它在功能上类似于PydanticOutputParser,但它还支持流式返回部分JSON 对象。
以下是如何将其与 Pydantic 一起使用以方便地声明预期模式的示例:
如何输出XML
XmlOutputParser
如何输出YAML
YamlOutputParser