框架与工具链3462 字
LangChain多模态输入与自定义输出
·全库 433 / 611
《LangChain多模态输入与自定义输出》共 0.3 万字,通篇围绕 LangChain、prompt、多模态、上下文 展开,归在「框架与工具链」这一层。
覆盖LangChainprompt多模态上下文工具调用需求
适合要选技术栈、不想把别人踩过的坑重踩一遍的人
目录骨架(7 节)
- 如何解析 JSON 输出
- json_output_parser_no_pydantic.py
- 如何解析 XML 输出
- 如何解析 YAML 输出
- Schema
- Well formatted instance
- 流式处理
示例代码
注:将ppt后缀名改为zip后解压
python版本:3.12.4
多模态数据输入
这里我们演示如何将多模态输入直接传递给模型。我们目前期望所有输入都以与OpenAI 期望的格式相同的格式传递。对于支持多模态输入的其他模型提供者,我们在类中添加了逻辑以转换为预期格式。
在这个例子中,我们将要求模型描述一幅图像。
image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o")
API 参考:HumanMessage | ChatOpenAI
最常支持的传入图像的方式是将其作为字节字符串传入。这应该适用于大多数模型集成。
import base64
import httpx
image_data = base64.b64encode(httpx.get(image_url).content).decode("utf-8")
message = HumanMessage(
content=[
{"type": "text", "text": "用中文描述这张图片中的天气"},
{
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{image_data}"},
},
],
)
response = model.invoke([message])
print(response.content)
这张图片展示了一个晴朗的天气。天空中有一些淡淡的云,阳光明媚,照亮了图中的草地和木板路。天空呈现出明亮的蓝色,与绿色的草地形成了鲜明的对比。整体感觉是非常清新和舒适的,适合户外活动和散步。
我们可以在“image_url”类型的内容块中直接提供图像 URL。请注意,只有部分模型提供商支持此功能。
message = HumanMessage(
content=[
{"type": "text", "text": "用中文描述这张图片中的天气"},
{"type": "image_url", "image_url": {"url": image_url}},
],
)
response = model.invoke([message])
print(response.content)
图片中的天气晴朗,天空中有一些稀薄的白云,整体呈现出蓝色。阳光明媚,光线充足,草地和树木显得非常绿意盎然。这种天气非常适合户外活动,比如散步或野餐。总的来说,天气非常舒适宜人。
我们还可以传入多幅图像。
message = HumanMessage(
content=[
{"type": "text", "text": "这两张图片是一样的吗?"},
{"type": "image_url", "image_url": {"url": image_url}},
{"type": "image_url", "image_url": {"url": image_url}},
],
)
response = model.invoke([message])
print(response.content)
这两张图片不一样。第一张是一个晴天的草地景色,有一条木板小路通向远方;第二张是一个覆盖着雪的村庄,有多栋房屋和一些红色灯笼。两张图片显示的是完全不同的场景。
