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

相关推荐
TDengine (老段)32 分钟前
TDengine IDMP 十大实用功能(3)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
Maiko Star34 分钟前
【HM-LC】LangChain RAG查询优化详解:查询重写、混合检索与重排序实战
langchain·rag
sun032236 分钟前
【JDK 动态代理】 和 【CGLIB 代理】对比
java·数据库·sql
YH_Analytics1 小时前
2026 高压 E-House 市场深度分析报告市场格局
网络·数据库
后台模板学习1 小时前
MongoDB 与 MySQL 在 IM 即时聊天场景中该
数据库·mysql·mongodb
2501_913061341 小时前
MCP核心能力
langchain
KaiwuDB2 小时前
企业级数据库数据保护:KaiwuDB KaiwuDB V3.3.0 发布:S3 冷热分层存储与主备集群能力增强实战解析模场景备份恢复方案解析
数据库·时序数据库·kaiwudb·发版·多模时序数据库·冷热分层存储·主备集群
DataY2 小时前
MySQL CDC 直接写进 Doris 汇总模型:同步即汇总,明细不用搬两遍
数据库
琳达爱分享2 小时前
客服改了地址,发货任务把它改了回去:一次没人报错的覆盖
数据库