langchain核心组件1-智能体

这里写目录标题

简介

langchain版本 v1.x

在此版本中,langchain可以创建一个智能体

基础使用

我日常使用因为是直接对话,所以基本上只需要以下几个组件

  • model: 定义智能体大脑,是大语言模型地址,可以云也可以本地
  • tools:智能体可以使用的工具集合,在使用中可以通过工具来实现用户需要
  • middleware:中间件,类似于spring中的aop,可以在中间拦截做对应业务处理,例如权限,prompt改写,敏感词删选,敏感数据清空等。
  • system_prompt:系统提示词,类似于告诉llm,它的角色是什么,基本上同模型,提示词越好,agent效果越好
  • checkpointer:模型短期记忆,模型因此可以实现短期记忆,放内存还是放库里,自行决定
  • state_schema: 状态记录数属性,里面可以放置一些需要的变量值,打断点可以发现在runtime.state中
python 复制代码
chat_model = ChatTongyi(model="qwen3-max")
# 这里是各个langchain工具
tools = [None]
middlewares = [None]
system_prompt = "你是一个智能助手,要帮助用户解决问题"
response_format = "返回数据以json格式"
memory = InMemorySaver()
# 使用示例
if __name__ == "__main__":
    agent = create_agent(
        model=chat_model,
        tools=tools,
        system_prompt=system_prompt,
        middleware=middlewares,
        state_schema=AgentState,
        checkpointer=memory
    )

静态模型使用

python 复制代码
def static_model_agent():
    '''
    静态模型使用
    :return:
    '''
    agent = create_agent(model=chat_model)
    config: RunnableConfig = {"configurable": {"thread_id": "1"}}

    response = agent.invoke({"messages": "你好,我是张鹏"}, config)
    for message in response["messages"]:
        print(message.pretty_print())

这是最简单的用法,直接调用llm,使用基础对话功能。

动态模型

python 复制代码
def dynamic_model_agent():
    '''
    静态模型使用
    :return:
    '''
    advanced_model = ChatTongyi(model="qwen3-max")
    basic_model = ChatTongyi(model="qwen3-max")
    @wrap_model_call
    def dynamic_model_selection(request: ModelRequest, handler) -> ModelResponse:
        """根据对话复杂性选择模型。"""
        message_count = len(request.state["messages"])

        if message_count > 10:
            # 对较长的对话使用高级模型
            new_request = request.override(model=advanced_model)
        else:
            new_request = request.override(model=basic_model)

        # 使用新请求调用处理器
        return handler(new_request)
    agent = create_agent(
        model=basic_model,  # 默认模型
        middleware=[dynamic_model_selection]
    )
    response = agent.invoke({"messages": "你好,我是张鹏"})
    for msg in response["messages"]:
        print(msg.pretty_print())

这里要使用动态模型就要使用@wrap_model_call注解,标识在request中修改替换model。
这里尤其注意的是:官方文档代码会执行报错

python 复制代码
    if message_count > 10:
        # 对较长的对话使用高级模型
        model = advanced_model
    else:
        model = basic_model

    request.model = model
    return handler(request)

这里会报错DeprecationWarning: Direct attribute assignment to ModelRequest.model is deprecated. Use request.override(model=...) instead to create a new request with the modified attribute.

request.model = model

原因:ModelRequest 对象是不可变的(immutable),我们可以直接new一个新的赋值然后返回。

相关推荐
倔强的石头_1 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab2 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
葫芦和十三2 天前
渐进发现|代码库不是文档库
langchain·agent·ai编程
ClouGence2 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
柒和远方2 天前
LangGraph 深度解析:从增强型 LLM 到生产级 Agent
langchain·llm·agent
无响应de神2 天前
三、用户与权限管理
数据库·mysql
麦聪聊数据3 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡3 天前
【MySQL数据库】数据类型与表约束
数据库·mysql
曹牧3 天前
Oracle EXPLAIN PLAN
数据库·oracle