这里写目录标题
简介
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一个新的赋值然后返回。
