news 2026/4/3 6:01:58

【大模型】-LangChain多模态输入和自定义输出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【大模型】-LangChain多模态输入和自定义输出

文章目录

        • 11.1 xml输出
        • 11.2 json输出
        • 11.3 支持图片输入
        • 11.4 配合工具输出
11.1 xml输出
fromlangchain_core.output_parsersimportJsonOutputParser,XMLOutputParserfromlangchain_core.promptsimportChatPromptTemplate,HumanMessagePromptTemplate,MessagesPlaceholder,PromptTemplatefromlangchain_community.chat_modelsimportChatTongyifromdotenvimportload_dotenvfrompydanticimportBaseModel,Field load_dotenv()llm=ChatTongyi(model="qwen-plus")joke_query="生成周杰伦的歌曲,按照年份升序排列"parser=XMLOutputParser()prompt=PromptTemplate(template="回答用户的查询。\n{format_instructions}\n{query}\n",input_variables=["query"],partial_variables={"format_instructions":parser.get_format_instructions()},)chain=prompt|llm response=chain.invoke({"query":joke_query})print(response.content)#输出结果<songs><song><title>可爱女人</title><year>2000</year><album>Jay</album></song><song><title>星晴</title><year>2000</year><album>Jay</album></song><song><title>龙卷风</title><year>2000</year><album>Jay</album></song><song><title>简单爱</title><year>2001</year><album>Fantasy</album></song><song><title>开不了口</title><year>2001</year><album>Fantasy</album></song><song><title>双截棍</title><year>2001</year><album>Fantasy</album></song><song><title>爱在西元前</title><year>2001</year><album>Fantasy</album></song><song><title>娘子</title><year>2000</year><album>Jay</album></song><song><title>安静</title><year>2000</year><album>Jay</album></song><song><title>半岛铁盒</title><year>2002</year><album>The Eight Dimensions</album></song><song><title>东风破</title><year>2003</year><album>Yeh Hui-Mei</album></song><song><title>晴天</title><year>2003</year><album>Yeh Hui-Mei</album></song><song><title>七里香</title><year>2004</year><album>Common Jasmine Orange</album></song><song><title>发如雪</title><year>2005</year><album>November's Chopin</album></song><song><title>千里之外</title><year>2006</year><album>Still Fantasy</album></song><song><title>青花瓷</title><year>2007</year><album>On the Run!</album></song><song><title>稻香</title><year>2008</year><album>Capricorn</album></song><song><title>说好不哭</title><year>2019</year><album>未发行专辑</album></song><song><title>Mojito</title><year>2020</year><album>Mojito</album></song><song><title>最伟大的作品</title><year>2022</year><album>最伟大的作品</album></song></songs>
11.2 json输出
fromlangchain_core.output_parsersimportJsonOutputParserfromlangchain_core.promptsimportChatPromptTemplate,HumanMessagePromptTemplate,MessagesPlaceholder,PromptTemplatefromlangchain_community.chat_modelsimportChatTongyifromdotenvimportload_dotenvfrompydanticimportBaseModel,Field load_dotenv()llm=ChatTongyi(model="qwen-plus")classJoke(BaseModel):setup:str=Field(description="设置笑话的问题")punchline:str=Field(description="解决笑话的答案")joke_query="告诉我一个笑话"parser=JsonOutputParser(pydantic_object=Joke)prompt=PromptTemplate(template="回答用户的查询。\n{format_instructions}\n{query}\n",input_variables=["query"],partial_variables={"format_instructions":parser.get_format_instructions()},)chain=prompt|llm|parser##print(chain.invoke({"query": joke_query}))forchunkinchain.stream({"query":joke_query}):print(chunk)#输出{}{'setup':''}{'setup':'为什么'}{'setup':'为什么程序员总是喜欢用黑暗'}{'setup':'为什么程序员总是喜欢用黑暗模式?'}{'setup':'为什么程序员总是喜欢用黑暗模式?','punchline':'因为他们'}{'setup':'为什么程序员总是喜欢用黑暗模式?','punchline':'因为他们不喜欢光明。'}
11.3 支持图片输入
importbase64importhttpxfromlangchain_core.messagesimportHumanMessagefromlangchain_community.chat_modelsimportChatTongyifromdotenvimportload_dotenv load_dotenv()image_url="https://img1.baidu.com/it/u=352739982,3234821554&fm=253&app=138&f=JPEG?w=500&h=857"image_data=base64.b64encode(httpx.get(image_url).content).decode("utf-8")llm=ChatTongyi(model="qwen-plus")# 使用支持图像识别的模型message=HumanMessage(content=[{"type":"text","text":"用中文描述这张图片的内容"},{"type":"image_url","image_url":{"url":{"url":f"data:image/jpeg;base64,{image_data}"}}}])response=llm.invoke([message])print(response.content)#输出这张图片展示了一个现代风格的客厅,整体色调以白色和浅木色为主,营造出明亮、宽敞的空间感。以下是图片中各个元素的详细描述:1.**地板**: 地板采用浅色木地板,表面光滑且有自然的木纹纹理,增加了空间的温馨感。2.**沙发**: 客厅中央摆放着一组灰色布艺沙发,包括一个三人座沙发和两个单人座沙发。沙发的设计简洁,线条流畅,坐垫柔软,给人一种舒适的感觉。沙发上没有多余的装饰,保持了极简主义的风格。3.**茶几**: 沙发前有一张圆形玻璃茶几,透明的桌面让空间显得更加通透。茶几上放置了一本打开的书和一个小型植物盆栽,增添了一丝生活气息。...............
11.4 配合工具输出
importbase64importhttpxfromlangchain_core.messagesimportHumanMessage,ToolMessagefromlangchain_community.chat_modelsimportChatTongyifromlangchain_core.toolsimporttool# 补充导入tool装饰器fromtypingimportLiteral# 添加此行以解决 Literal 未定义问题fromdotenvimportload_dotenv load_dotenv()image_url="https://copyright.bdstatic.com/vcg/creative/cae2f3d12fc98f2eb94d625dad4f42a3.jpg@wm_1,k_cGljX2JqaHdhdGVyLmpwZw=="image_data=base64.b64encode(httpx.get(image_url).content).decode("utf-8")llm=ChatTongyi(model="qwen-plus")# 使用支持图像识别的模型@tooldefweather_tool(weather:Literal["晴朗的","多云的","多雨的","下雪的"])->str:"""根据天气类型返回描述"""weather_descriptions={"晴朗的":"今天阳光明媚,是个好天气。","多云的":"今天多云,可能会有些阴沉。","多雨的":"今天有雨,记得带伞。","下雪的":"今天下雪,注意保暖和防滑。"}returnweather_descriptions.get(weather,"无法识别的天气类型。")model_with_tools=llm.bind_tools(tools=[weather_tool])message=HumanMessage(content=[{"type":"text","text":"用中文描述这张图片的天气"},{"type":"image_url","image_url":f"data:image/jpeg;base64,{image_data}"# 直接使用字符串}])response=model_with_tools.invoke([message])print(response.content)# 创建包含工具调用的完整链路# 修改工具调用处理部分# 修改工具调用处理部分,确保消息格式正确# def call_model_with_tools(messages):# response = model_with_tools.invoke(messages)## # 检查是否有工具调用# if hasattr(response, 'tool_calls') and response.tool_calls:# tool_results = []# for tool_call in response.tool_calls:# # 访问字典中的参数(如果tool_call是字典)# if isinstance(tool_call, dict):# tool_name = tool_call.get('name')# tool_args = tool_call.get('args')# tool_call_id = tool_call.get('id')# else:# # 如果tool_call是对象# tool_name = getattr(tool_call, 'name', None)# tool_args = getattr(tool_call, 'args', {})# tool_call_id = getattr(tool_call, 'id', None)## # 根据工具名称执行相应工具# if tool_name == 'weather_tool':# try:# result = weather_tool.invoke(tool_args)# tool_results.append(# ToolMessage(# content=str(result),# tool_call_id=tool_call_id# )# )# except Exception as e:# tool_results.append(# ToolMessage(# content=f"工具执行错误: {str(e)}",# tool_call_id=tool_call_id# )# )## # 将工具结果添加到消息历史中,并重新调用模型# new_messages = messages + [response] + tool_results# return call_model_with_tools(new_messages)## return response## # 使用完整工具调用链路# final_response = call_model_with_tools([message])# print(final_response.content)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/31 3:28:40

37、GNOME开发资源与未来展望

GNOME开发资源与未来展望 开发资源 GNOME开发者网站为 http://developer.gnome.org/,在这里可以找到新闻、文档、当前项目等内容。以下是一些可能特别感兴趣的项目: - GNOME文档项目 (http://developer.gnome.org/projects/gdp/):提供各类GNOME文档,包括当前软件包文档…

作者头像 李华
网站建设 2026/3/17 22:25:36

6、RSEI 生态环境质量智能评估系统 (GEE App)

&#x1f33f; RSEI 生态环境质量智能评估系统 (GEE App) 平台: Google Earth Engine (GEE) 核心算法: 主成分分析 (PCA) / 遥感生态指数 (RSEI) &#x1f4d6; 项目简介 本项目是一个基于 Google Earth Engine 的自动化遥感生态指数 (RSEI) 计算工具。它集成了 绿度、湿度、热…

作者头像 李华
网站建设 2026/3/29 8:37:48

Diffusion Policy详解

论文&#xff1a;Diffusion Policy Visuomotor Policy Learning via Action Diffusion github: https://github.com/real-stanford/diffusion_policy Diffusion&#xff0c;它是一种生成方法&#xff0c;如今图像生成领域的成就基本都是基于Diffusion方法。其次Policy&#xf…

作者头像 李华
网站建设 2026/4/3 5:37:36

力扣 完全平方数

一、题目回顾给定一个正整数 n&#xff0c;要求找到最少数量的完全平方数&#xff08;如 1, 4, 9, 16, …&#xff09;&#xff0c;使它们的和等于 n。示例n 12 → 4 4 4 → 3n 13 → 4 9 → 2本质问题一句话总结&#xff1a;把 n 拆成若干个完全平方数之和&#xff0c;要…

作者头像 李华
网站建设 2026/3/24 19:15:20

基于springboot和vue的人脸识别的无人值守自习室预约签到系统的设计与实现_4s9zffod(java毕业设计项目源码)

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华