news 2026/8/4 18:50:45

【大模型】-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/8/4 5:14:03

【大模型】-LangChain--stream流式同步异步

文章目录1.同步stream流2.异步astream流3.异步astream流json输出4.异步事件astream_events流5.异步多线程1.同步stream流 import os from langchain_community.chat_models import ChatTongyios.environ["DASHSCOPE_API_KEY"] "sk-秘钥" llm ChatTongyi…

作者头像 李华
网站建设 2026/8/4 1:37:19

兜兜英语每日短语:逃单篇

1. &#x1f37d;️&#x1f4a8; dine and dash&#xff08;吃霸王餐 / 吃完就跑&#xff09; 英文&#xff1a;Nine diners in Chongqing dined and dashed, leaving one person behind. 中文&#xff1a;重庆 9 名食客吃霸王餐后逃单&#xff0c;只留下一人 “背锅”&#x…

作者头像 李华
网站建设 2026/8/4 4:55:58

计算机毕业设计springboot汽车智慧检修系统 基于SpringBoot的智能汽车故障预测与维修管理平台 融合IoT的SpringBoot车辆健康监测与维修决策系统

计算机毕业设计springboot汽车智慧检修系统a93520rj &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 当汽车从“机械”进化为“数据孤岛”&#xff0c;每一次打火、每一脚刹车都…

作者头像 李华
网站建设 2026/8/3 13:30:51

python3

import osdef traverse_files(path):# 遍历当前路径下的所有文件和文件夹for item in os.listdir(path):# 拼接完整路径item_path os.path.join(path, item)if os.path.isfile(item_path):# 是文件则输出路径print("文件:", item_path)elif os.path.isdir(item_path…

作者头像 李华
网站建设 2026/8/4 1:06:54

【3D图像技术分析与实现】Apple Vision Pro三维成像技术栈深度解析

作为空间计算的标杆产品&#xff0c;Apple Vision Pro的三维成像能力是其实现虚实融合体验的核心基石。它并未依赖单一技术路径&#xff0c;而是通过“多传感器硬件阵列专用芯片算力全栈软件框架”的协同架构&#xff0c;构建了兼具精度、实时性与沉浸感的三维感知系统。本文将…

作者头像 李华
网站建设 2026/8/3 12:58:19

经典算法题详解之统计重复个数(三)

算法我们设计一个哈希表 recall&#xff1a;哈希表 recall 以 s2 字符串的下标 index 为索引&#xff0c;存储匹配至第 s1cnt 个 s1 的末尾&#xff0c;当前匹配到第 s2cnt 个 s2 中的第 index 个字符时&#xff0c; 已经匹配过的 s1 的个数 s1cnt 和 s2 的个数 s2cnt 。我们在…

作者头像 李华