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

相关推荐
Meepo_haha2 小时前
配置 Redis
数据库·redis·缓存
u0109147604 小时前
CSS组件库如何快速扩展_通过Sass @extend继承基础布局
jvm·数据库·python
baidu_340998825 小时前
Golang怎么用go-noescape优化性能_Golang如何使用编译器指令控制逃逸分析行为【进阶】
jvm·数据库·python
m0_678485455 小时前
如何利用虚拟 DOM 实现无痕刷新?基于 VNode 对比的状态保持技巧
jvm·数据库·python
qq_342295825 小时前
CSS如何实现透明背景效果_通过RGBA色彩模式控制透明度
jvm·数据库·python
panzer_maus5 小时前
MySQL 索引介绍与索引优化的简单介绍
数据库·mysql
Greyson15 小时前
CSS如何处理超长文本换行问题_结合word-wrap属性
jvm·数据库·python
captain3765 小时前
事务___
java·数据库·mysql
justjinji5 小时前
如何批量更新SQL数据表_使用UPDATE JOIN语法提升效率
jvm·数据库·python
爱学习的小邓同学6 小时前
MySQL --- MySQL数据类型
数据库·mysql