多模態數據輸入
????? 這里我們演示如何將多模態輸入直接傳遞給模型。我們目前期望所有輸入都以與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