ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

langchain组件+案例----->day16

langchain组件+案例----->day16 1langchain组件的分区11模型from langchain.chat_models import init_chat_model model init_chat_model( modeldeepseek-v4-pro, model_providerdeepseek, ) response model.invoke(你是谁) print(response.content)from langchain_openai import ChatOpenAI llm ChatOpenAI( modelqwen-plus, temperature0.75, api_keysk-ws-H.ELRIXEP.1FU3.MEQCIEDGBtjTnhBB7RAVMJNlUeCSOzLtXKpPU1NavE_kx0kQAiARdmFvK_yHxTdBFndpyXzzjSZvNzXT15669ajCMdg-OQ, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, ) res llm.invoke(你是谁) print(res)12from langchain_core.tools import tool from langchain_openai import ChatOpenAI tool( descriptionSearch the customer database for records matching the query,参数query(搜索关键词)字符串 Search terms to look for;limit(条数) 整型: Maximum number of results to return ) def search_database(query:str, limit:int10) - str: return fFound {limit} results for {query} tool(calculator,descriptionPerforms arithmetic calculations. Use this for any math problems.) def calc(expression:str)-str: Evaluate mathematical expressions. return str(eval(expression)) tool(web_search) # Custom name def search(query: str) - str: Search the web for information. return fResults for: {query} print(search.name) # web_search # model init_chat_model( # modeldeepseek-v4-pro, # model_providerdeepseek, # # ) llm ChatOpenAI( modelqwen-plus, temperature0.75, api_keysk-ws-H.ELRIXEP.1FU3.MEQCIEDGBtjTnhBB7RAVMJNlUeCSOzLtXKpPU1NavE_kx0kQAiARdmFvK_yHxTdBFndpyXzzjSZvNzXT15669ajCMdg-OQ, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, ) llm.bind_tools(tools[search, calc, search_database]) response llm.invoke(你是谁) print(response.content)一些对映的案例21 agentfrom langchain.agents import create_agent from langchain.chat_models import init_chat_model from langchain_openai import ChatOpenAI # model init_chat_model( # modeldeepseek-v4-pro, # model_providerdeepseek, # # ) llm ChatOpenAI( modelqwen-plus, temperature0.75, api_keysk-ws-H.ELRIXEP.1FU3.MEQCIEDGBtjTnhBB7RAVMJNlUeCSOzLtXKpPU1NavE_kx0kQAiARdmFvK_yHxTdBFndpyXzzjSZvNzXT15669ajCMdg-OQ, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, ) def check_weather(location: str) - str: Return the weather forecast for the specified location. return fIts always sunny in {location} graph create_agent( modelllm, tools[check_weather], system_promptYou are a helpful assistant, ) inputs {messages: [{role: user, content: what is the weather in sf}]} for chunk in graph.stream(inputs, stream_modeupdates): print(chunk)22 reactfrom datetime import datetime from langchain.agents import create_agent from langchain_core.tools import tool from langchain_openai import ChatOpenAI # 1定义大模型 llm ChatOpenAI( modelqwen-plus, temperature0.75, api_keysk-ws-H.ELRIXEP.1FU3.MEQCIEDGBtjTnhBB7RAVMJNlUeCSOzLtXKpPU1NavE_kx0kQAiARdmFvK_yHxTdBFndpyXzzjSZvNzXT15669ajCMdg-OQ, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, ) # 2:定义工具,一定放到工具列表中 tool( description获取指定城市的当前时间,当用户询问时间、现在几点、当前时间等问题时调用此工具。 参数: city,字符串类型,城市,比如:北京,上海 返回值:当前城市的时间字符串 ) def get_current_time(city: str) - str: now_str datetime.now().strftime(%Y年%m月%d日 %H%M%S) return f{city}的当前时间是{now_str} tool( description获取制定城市的当前天气, 当用户询问天气,气温等问题时,调用此工具 参数: city,字符串类型,城市,比如:北京,上海 返回值:当前城市的天气数据字符串 ) def get_current_weather(city: str) - str: weather_data { 北京: 晴天温度 28°C湿度 45%空气质量良, 上海: 多云温度 30°C湿度 70%空气质量优, 广州: 阵雨温度 32°C湿度 85%空气质量良, 深圳: 晴天温度 31°C湿度 65%空气质量优, 杭州: 阴天温度 27°C湿度 60%空气质量良, } weather_res weather_data.get(city, f未找到{city}的天气数据请尝试查询: 北京、上海、广州、深圳、杭州) return f{city}的当前天气是{weather_res} tools [get_current_time, get_current_weather] # 3:创建agent- ReAct[思考-行动-观察] system_prompt 你是一个智能助手 你可以使用工具来解决问题 工具列表: 1:当用户询问时间、现在几点、当前时间等问题时,调用get_current_time工具 2:当用户询问天气,气温等问题时,调用get_current_weather工具 请根据用户的问题,自主决定是否调用工具,调用哪个工具,调用顺序 如果不需要工具,直接回答用户的问题 agent create_agent( modelllm, toolstools, system_promptsystem_prompt, debugTrue ) # 4:执行agent result agent.invoke( {messages: [{role: user, content: 北京的天气是什么}]} ) print(result) print(result.get(messages)[-1].content)23 Checkpointerfrom datetime import datetime from langchain.agents import create_agent from langchain_core.tools import tool from langchain_openai import ChatOpenAI from langgraph.checkpoint.memory import InMemorySaver llm ChatOpenAI( modelqwen-plus, temperature0.75, api_keysk-ws-H.ELRIXEP.1FU3.MEQCIEDGBtjTnhBB7RAVMJNlUeCSOzLtXKpPU1NavE_kx0kQAiARdmFvK_yHxTdBFndpyXzzjSZvNzXT15669ajCMdg-OQ, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, ) # 2:定义工具,一定放到工具列表中 tool( description获取指定城市的当前时间,当用户询问时间、现在几点、当前时间等问题时调用此工具。 参数: city,字符串类型,城市,比如:北京,上海 返回值:当前城市的时间字符串 ) def get_current_time(city: str) - str: now_str datetime.now().strftime(%Y年%m月%d日 %H%M%S) return f{city}的当前时间是{now_str} tool( description获取制定城市的当前天气, 当用户询问天气,气温等问题时,调用此工具 参数: city,字符串类型,城市,比如:北京,上海 返回值:当前城市的天气数据字符串 ) def get_current_weather(city: str) - str: weather_data { 北京: 晴天温度 28°C湿度 45%空气质量良, 上海: 多云温度 30°C湿度 70%空气质量优, 广州: 阵雨温度 32°C湿度 85%空气质量良, 深圳: 晴天温度 31°C湿度 65%空气质量优, 杭州: 阴天温度 27°C湿度 60%空气质量良, } weather_res weather_data.get(city, f未找到{city}的天气数据请尝试查询: 北京、上海、广州、深圳、杭州) return f{city}的当前天气是{weather_res} tools [get_current_time, get_current_weather] # 3:创建agent- ReAct[思考-行动-观察] system_prompt 你是一个智能助手 你可以使用工具来解决问题 工具列表: 1:当用户询问时间、现在几点、当前时间等问题时,调用get_current_time工具 2:当用户询问天气,气温等问题时,调用get_current_weather工具 请根据用户的问题,自主决定是否调用工具,调用哪个工具,调用顺序 如果不需要工具,直接回答用户的问题 # 实例化记忆存储器这里用内存存储,也支持AsyncPostgresSaver checkpointer InMemorySaver() agent create_agent( modelllm, toolstools, system_promptsystem_prompt, checkpointercheckpointer, # 检查点,海马体,用于保存当前的状态,短期记忆 debugTrue # 开启调试模式 ) if __name__ __main__: print(\n [第1轮] 用户: 我叫user_001我最喜欢的城市是上海我喜欢晴天。) thread_id user_001 # 同一个thread_id共享记忆,不同的thread_id记忆隔离 config { configurable: { thread_id: thread_id } } res1 agent.invoke( input{ messages: [{role: user, content: 我叫user_001我最喜欢的城市是上海我喜欢晴天。}]}, configconfig ) print(res1) print(res1[messages][-1].content) print(\n [第2轮] 用户: 帮我查一下我喜欢的城市现在天气怎么样) res2 agent.invoke( input{ messages: [{role: user, content: 帮我查一下我喜欢的城市现在天气怎么样}]}, configconfig ) print(res2) print(res2[messages][-1].content) print(\n [第3轮] 用户: 我刚才说我叫什么名字) res3 agent.invoke( input{messages: [{role: user, content: 我刚才说我叫什么名字}]}, configconfig ) print(res3) print(res3[messages][-1].content) print(\n [第4轮] 现在开启一个全新的会话,我叫user_002) thread_id user_002 # 同一个thread_id共享记忆,不同的thread_id记忆隔离 config { configurable: { thread_id: thread_id } } res4 agent.invoke( input{messages: [{role: user, content: 我刚才说我叫什么名字}]}, configconfig ) print(res4) print(res4[messages][-1].content)24 结构化 先查股票数据 → 如果涨了就查新闻 → 如果跌了就查财报 → 最后生成报告 import os import random from langchain.agents import create_agent from langchain_core.tools import tool from langchain_openai import ChatOpenAI llm ChatOpenAI( modelqwen-plus, # turbo temperature0.75, api_keyos.getenv(DASHSCOPE_API_KEY), base_urlhttps://llm-pz0prcj5mohy7yjg.cn-beijing.maas.aliyuncs.com/compatible-mode/v1 ) # 2. 定义工具 (Tools) tool( description获取指定股票代码的当前价格和涨跌幅。 参数:symbol,字符串类型,股票代码,比如:sh600000,返回值:当前价格和涨跌幅的字符串 ) def get_stock_price(symbol: str) - str: 获取指定股票代码的当前价格和涨跌幅。 # 模拟真实股价波动 price round(random.uniform(80, 120), 2) change round(random.uniform(-5, 5), 2) status 上涨 if change 0 else 下跌 return f{symbol} 当前价格: ${price}, 涨跌幅: {change}%, 状态: {status} tool( description获取指定股票的最新新闻。参数:symbol,字符串类型,股票代码,比如:sh600000,返回值:最新新闻的字符串 ) def get_stock_news(symbol: str) - str: return f{symbol} 最新新闻: 公司发布新产品市场反应积极分析师上调目标价。 tool( description获取指定公司的最新财报摘要 参数:symbol,字符串类型,股票代码,比如:sh600000,返回值:最新财报摘要的字符串 ) def get_financial_report(symbol: str) - str: return f{symbol} 最新财报: 营收增长 15%净利润增长 8%超出市场预期。 tools [get_stock_price, get_stock_news, get_financial_report] system_prompt 你是一个专业的金融分析师负责分析股票市场。 请严格按照以下步骤执行: 1:首先,调用get_stock_price工具查询用户指定的股票 2:然后,根据股票的涨跌幅判断股票的状态: 如果涨了就调用get_stock_news工具查询股票的最新新闻 如果跌了就调用get_financial_report工具查询股票的最新财报摘要 3:最后,生成一份报告,报告包括股票的当前价格,涨跌幅,状态,最新新闻,最新财报摘要 agent create_agent( modelllm, toolstools, system_promptsystem_prompt, debugTrue ) res1 agent.invoke( { messages: [{role: user, content: 分析一下股票 AAPL 的情况}] } ) print(res1)25 中间件from langgraph.graph import StateGraph, MessagesState, START, END def mock_llm(state: MessagesState): print(state) return {messages: [{role: ai, content: hi!lisi}]} graph StateGraph(MessagesState) graph.add_node(mock_llm) graph.add_edge(START, mock_llm) graph.add_edge(mock_llm, END) graph graph.compile() res graph.invoke({messages: [{role: user, content: hi!zhangsan}]}) print(res)总结LangChain 核心分为模型、工具、Agent、记忆、流程编排五大基础组件。模型层支持 init_chat_model 统一加载与 ChatOpenAI 兼容调用通义、DeepSeek 等大模型。工具用 tool 装饰器定义可绑定给模型实现数学、检索、查询等能力扩展。create_agent 快速构建 ReAct 智能体自主完成思考、调用工具、输出回答流程。Checkpointer 内存检查点依托 thread_id 实现会话隔离留存用户对话短期记忆。结构化 Agent 依靠系统提示词约束工具调用顺序完成股票分析固定业务流程。LangGraph 底层 StateGraph 搭建状态图自定义节点与流转实现简易工作流中间件。Agent 可流式返回执行步骤开启 debug 能直观查看工具调用完整执行链路。多会话场景依靠 InMemorySaver 区分用户不同线程无法读取彼此对话信息。整体由底层模型工具、中层智能体、上层状态图构成分层可扩展大应用框架。
返回列表