ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

content和content_blocks的使用

content和content_blocks的使用 消息属性content、content_blockscontent消息的 content 可以理解为数据内容它是弱类型的既支持字符串也支持列表列表元素通常为字典。举例1存储字符串如果只是纯文本内容直接传递字符串即可。from langchain.messagesimportHumanMessage msg1HumanMessage(content你好啊)msg2HumanMessage(你好啊)print(msg1)print(msg2)说明当 content 内容只有字符串时可以省略参数名称。举例2存储字典列表如果需要发送的不只是文本例如多模态内容则需要使用 content 的字典列表形式。字典内容需遵循模型供应商的 API 规范以 openai:gpt-4.1 为例参考官方文档https://developers.openai.com/api/reference/python/resources/chat/subresources/completions/methods/create或https://developers.openai.com/api/reference/resources/chat/subresources/completions/methods/create?site_localeen测试代码importbase64 from langchain.chat_modelsimportinit_chat_model from langchain.messagesimportHumanMessage from dotenvimportload_dotenvimportos load_dotenv(overrideTrue)modelinit_chat_model(modelgpt-5.4-mini,model_provideropenai,api_keyos.getenv(CLOSEAI_API_KEY),base_urlos.getenv(CLOSEAI_API_BASE))def encode_image(img_path,img_typejpeg):将一张本地图片转换成 Base64 编码的 Data URI 字符串,方便在文本中嵌入图片数据 with open(img_path,rb)as img_file:returnfdata:image/{img_type};base64,{base64.b64encode(img_file.read()).decode(utf-8)}# 图像路径img_pathD:\\workspace_pycharm_llm\\chapter022_model\\img.png# 获取图像base64编码字符串base64_imageencode_image(img_path)responsemodel.invoke([HumanMessage(content[{type:text,text:这张图里有什么},{type:image_url,image_url:base64_image,}])])print(response.content)content_blocks在LangChain1.x中content_blocks是消息对象BaseMessage的一项重大升级。它的核心目标是提供一种跨模型供应商、标准化的多模态数据结构。过去、处理图片、音频、甚至是模型生成的“思维链内容时”不同供应商的API格式各异导致开发者需要写大量的适配代码。content_blocks的出现终结了这种混乱。在LangChain1.2版本中消息对象的content属性依然存在为了向前兼容但新增了content_blocks属性可以将content解析为标准、类型安全的表示。数据结构它是一个list[TypedDict]统一格式每个block都有一个type字段用于区分内容类型支持类型包括text文本image图片audio音频video视频、tool_call工具调用以及reasoning推理/思维链输入格式化对于复杂的对话带图片或工具结果建议使用content_blocks列表形式构建HumanMessage或AIMessage借助content_blocks我们可以用一套标准代码无缝地在不同厂商的模型之间切换。输出格式化content_blocks还可用于输出格式化以deepseek官网的deepseek-v4-flash为例其输出包含思考内容后者位于additional_kwargs的reasoning_content字段下。比如不同的模型其输出格式可能不同仅为提取思考内容切换模型都可能需要更改代码非常不方便。content_blocks提供了统一的输出格式可以将不同格式的响应统一为标准格式。注意content_blocks是懒加载的即调用时才会解析说明优先检查response.content_blocks而不是response.content特别是当你需要获取“思维链”或者“引用”信息时。
返回列表