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一个新的赋值然后返回。

相关推荐
oradh2 分钟前
Oracle参数文件(PFILE与SPFILE)维护操作总结
数据库·oracle·oracle参数·spfile·pfile
l1t12 分钟前
kryonix提交的DuckDB 统一并优化标量执行器基础设施 - #24564 PR
开发语言·数据库·数据仓库·sql
鸽芷咕16 分钟前
【金仓数据库征文】从 Oracle 到金仓:一次零误差的数据库国产化迁移实录
数据库·oracle
Wang's Blog19 分钟前
AI Agent白手起家37: LangChain 输出解析器实战:文本、JSON、XML 与 Pydantic
xml·langchain·json
0566461 小时前
RAG 向量检索:从“查字“到“查意“
数据库·人工智能·学习·oracle
bug嘛我经常写1 小时前
dbf文件UTF-8转GBK编码,以及两编码文件互转
数据库·python
知行合一。。。1 小时前
LangGraph--03--本地服务与 Studio 调试
数据库
你不是我我2 小时前
【AI 测评】PostgreSQL主从流复制实战:数据同步、状态验证与故障切换
数据库·postgresql
月落归舟2 小时前
Redis 三种消息队列实现方案
数据库·redis·list
棒棒的唐2 小时前
postgresql集成pgvector
数据库·postgresql