AI学习-LangChain实战-多模态识别agent

智能体三核心,模型工具记忆

开发流程一般是定义模型;定义工具;添加记忆管理;然后定义智能体;测试

以下是黑马的菜品识别系统agent

复制代码
# 加载环境变量
from dotenv import load_dotenv
from langchain_core.messages import AIMessage

load_dotenv()

from langchain.chat_models import init_chat_model
import os

# 多模态模型
multimodal_model = init_chat_model(
    model="qwen3-omni-flash",  # 模型名称,这里选择qwen3.5-plus,这是一个多模态模型,支持图片、文本、音频、视频
    model_provider="openai"
)

from langchain_tavily import TavilySearch

# web搜索工具,使用tavily作为web搜索工具
web_search = TavilySearch(
    max_results=5,
    topic="general"
)

from langgraph.checkpoint.sqlite import SqliteSaver
import sqlite3

# 初始化checkpointer 记忆管理
checkpointer = SqliteSaver(sqlite3.connect("resources/personal_chief.db", check_same_thread=False))
# 自动建表
checkpointer.setup()

from langchain.agents import create_agent

system_prompt = """
你是一名私人厨师。收到用户提供的食材照片或清单后,请按以下流程操作:
1.识别和评估食材:若用户提供照片,首先辨识所有可见食材。基于食材的外观状态,评估其新鲜度与可用量,整理出一份"当前可用食材清单"。
2.智能食谱检索:优先调用 web_search 工具,以"可用食材清单"为核心关键词,查找可行菜谱。
3.多维度评估与排序:从营养价值和制作难度两个维度对检索到的候选食谱进行量化打分,并根据得分排序,制作简单且营养丰富的排名靠前。
4.结构化方案输出:把排序后的食谱整理为一份结构清晰的建议报告,要包含食谱信息、得分、推荐理由,帮助用户快速做出决策。

请严格按照流程,优先调用 web_search 工具搜索食谱,再搜索不到的情况下才能自己发挥。
"""

agent = create_agent(
    model=multimodal_model,
    tools=[web_search],
    system_prompt=system_prompt,
    checkpointer=checkpointer
)

from langchain.messages import HumanMessage

multimodal_message = HumanMessage(
    content=[
        {"type": "text", "text": "帮我看看这些食材能做些什么?"},
        # 正确格式:image_url,不是 image
        {
            "type": "image_url",
            "image_url": {
                "url": "https://img95.699pic.com/photo/60024/7565.jpg_wh860.jpg"
            }
        }
    ])

config = {"configurable": {"thread_id": "new_chat_124"}}
#注意这个tread_id,重复了就会导致用了别的记忆

response = agent.invoke({"messages": [multimodal_message]}, config)

# 友好打印
for message in response['messages']:
    message.pretty_print()

response = agent.invoke(
    {"messages": [HumanMessage(content="我喜欢第3道菜,可以说的更详细点吗?")]},
    config
)

# 友好打印
response['messages'][-1].pretty_print()

可见是有记忆的

用LangSmith进行部署,首先注册

LangSmith

复制这个apikey保存.env

相关推荐
Hhy_11073 分钟前
《C++深度解构06》手撕 string —— 从底层内存管理到深浅拷贝彻底吃透
c语言·开发语言·c++·学习·visual studio
政安晨25 分钟前
【政安晨】嵌入式AI开发实践 —— ESP-Claw 深度拆解:把 AI Agent 塞进 $5 芯片,它是怎么“看见“并“握住“硬件的
人工智能·开源·esp·ai agents·esp-claw·esp-mosaico
卷无止境36 分钟前
以 Obsidian 为核心的知识库体系:工具生态、AI 协同与最佳实践方案
人工智能
山甫aa44 分钟前
锁一篇搞定:乐观锁、悲观锁、CAS、数据库锁与分布式锁【从零开始的 Web 后端学习】
java·数据库·分布式·后端·学习·web
ShuangNaoPai1 小时前
饱和品类的心智词生成:从“新米”认知到“五新米”的判定路由
人工智能·程序人生·产品·思维·品牌营销
星云_byto1 小时前
CSS布局
人工智能·机器学习·目标跟踪·1024程序员节
天天代码码天天1 小时前
照片和视频之外,微信里的声音也值得好好保存
人工智能
m0_564876841 小时前
CMake学习
学习
IT_陈寒1 小时前
Java开发实战:从入门到精通
前端·人工智能·后端
只愿云淡风清1 小时前
正则表达式学习笔记 02:基础语法
笔记·学习·正则表达式