LangChain 入门 Agent 的基本运行机制

LangChain 入门 Agent 的基本运行机制
安装依赖cd D:\OpenSource\Python\VipLangChain # 初始化 uv 项目可选 uv init # 1. 创建虚拟环境 uv venv # 2. 激活虚拟环境Windows .venv\Scripts\activate # 3. 安装环境变量 uv add python-dotenv --default-index https://pypi.tuna.tsinghua.edu.cn/simple # LangChain 支持各种不同的模型而且提供了对应的兼容SDK,不过也都需要安装对应依赖 # 4. 安装 LangChain 依赖 # -v 可以显示 debug 日志 uv add langchain -v --default-index https://pypi.tuna.tsinghua.edu.cn/simple # 5. 集成 DeepSeek # 前面加了 --default-index 后面执行可以不用加了因为它会在 pyproject.toml 中记录了 uv add langchain-deepseek --default-index https://pypi.tuna.tsinghua.edu.cn/simple # 如果需要集成 OpenAI uv add langchain-openai --default-index https://pypi.tuna.tsinghua.edu.cn/simple # 如果需要集成 Anthropic uv add langchain-anthropic --default-index https://pypi.tuna.tsinghua.edu.cn/simple为了测试环境创建一个 notebook (jupyter)uv add notebookpyproject.toml[project] name vip-langchain version 0.1.0 description Add your description here readme README.md requires-python 3.12 dependencies [ langchain1.3.4, langchain-deepseek1.0.1, notebook7.5.6, python-dotenv1.2.2, ] [[tool.uv.index]] url https://pypi.tuna.tsinghua.edu.cn/simple default trueprint(Hello LangChain)Hello LangChain添加环境变量创建.env文件DEEPSEEK_API_KEYsk-7c0asdffasd.........加载环境变量# 1. 加载环境变更 from dotenv import load_dotenv load_dotenv()定义工具Agent 的核心能力之一是 Tool Calling工具调用 。# 2. 定义工具 from langchain.tools import tool # 定义一个工具其实就是定义一个方法通过 tool 进行修饰 tool def getWeather(city: str) - str: 通过调用第三方接口将天气进行返回 print(f正在查询{city}天气...) return f{city}今天是晴天气温25度创建 AgentLangChain 入门 Model 的初始化和调用接下来创建一个 Agent并指定使用 deepseek 模型。LangChain 会自动加载.env 文件中的 DEEPSEEK_API_KEY 并根据指定的模型去访问对应的接口地睛无需要指定接口地址模型不能调工具但它可以返回的内容里包含想要调的工具名 tool_calls这时候 LangChain 会自动去调工具# 3. 创建 Agent from langchain.agents import create_agent agent create_agent( # 前面加上 openai:qwen-plus 前缀指定模型 deepseek-chat, tools[getWeather] )发起调用LangChain 会自动调用 get_weather 方法并返回结果。# 调用 Agent print(正在调用大模型...) response agent.invoke({ messages: [ {role: user, content: 苏州今天的天气如何} ] }) print(response) # 格式化打印 for message in response[messages]: print(message.model_dump_json(indent2))完成代码如下from langchain.agents import create_agent from langchain.tools import tool from dotenv import load_dotenv load_dotenv() tool def getWeather(city: str) - str: 通过调用第三方接口将天气进行返回 print(f正在查询{city}天气...) return f{city}今天是晴天气温25度 # 创建 agent agent create_agent( modeldeepseek-chat, # 不需要加前缀 如ollama:qwen3.5:4b tools[getWeather], #定义回调的工具(函数) system_promptYou are a helpful assistant ) # 注意不要写成 message也不报错就是不返回你想要的结果问AI还一本正经的胡说八道给我越改越复杂 response agent.invoke({ messages: [ {role: user, content: 苏州今天的天气如何} ] }) for message in response[messages]: print(message.model_dump_json(indent2))invoke 的调用记录正在调用大模型... 正在查询苏州天气... # 请求模型 { content: 苏州今天的天气如何, additional_kwargs: {}, response_metadata: {}, type: human, name: null, id: f011a5ea-85d4-435e-b09b-fdac67409924 } # 模型返回内容 { content: 好的我来帮您查询苏州今天的天气情况。, additional_kwargs: { refusal: null }, response_metadata: { token_usage: { completion_tokens: 54, prompt_tokens: 286, total_tokens: 340, completion_tokens_details: null, prompt_tokens_details: { audio_tokens: null, cached_tokens: 256 }, prompt_cache_hit_tokens: 256, prompt_cache_miss_tokens: 30 }, model_provider: deepseek, model_name: deepseek-v4-flash, system_fingerprint: fp_8b330d02d0_prod0820_fp8_kvcache_20260402, id: e093d135-db43-4207-ab51-8ec767899395, finish_reason: tool_calls, logprobs: null }, type: ai, name: null, id: lc_run--019e901c-4b44-78d0-a6fa-344e52bcf90b-0, tool_calls: [ { name: getWeather, # 模型不会调工具但他会告诉你接下来需要调什么工具工具就是函数 args: { city: 苏州 }, id: call_00_BYkQIEyR1XEU7Q02dJTK9591, type: tool_call } ], invalid_tool_calls: [], usage_metadata: { input_tokens: 286, output_tokens: 54, total_tokens: 340, input_token_details: { cache_read: 256 }, output_token_details: {} } } # 工具的结果发给模型分析 { content: 苏州今天是晴天气温25度, additional_kwargs: {}, response_metadata: {}, type: tool, name: getWeather, id: 1b3937e0-b767-47f0-9a26-a513357d2598, tool_call_id: call_00_BYkQIEyR1XEU7Q02dJTK9591, artifact: null, status: success } # 最终模型反出结果 { content: 苏州今天天气不错具体情况如下\n\n **苏州今日天气**\n- **天气状况**晴天\n- **气温**25℃\n\n是个适合出门的好天气如果需要了解更多信息随时可以问我哦~, additional_kwargs: { refusal: null }, response_metadata: { token_usage: { completion_tokens: 46, prompt_tokens: 358, total_tokens: 404, completion_tokens_details: null, prompt_tokens_details: { audio_tokens: null, cached_tokens: 256 }, prompt_cache_hit_tokens: 256, prompt_cache_miss_tokens: 102 }, model_provider: deepseek, model_name: deepseek-v4-flash, system_fingerprint: fp_8b330d02d0_prod0820_fp8_kvcache_20260402, id: e7239d5d-f12a-4894-830e-0c4e2cf79f83, finish_reason: stop, logprobs: null }, type: ai, name: null, id: lc_run--019e901c-5024-7e63-a841-a8da6e7bc375-0, tool_calls: [], invalid_tool_calls: [], usage_metadata: { input_tokens: 358, output_tokens: 46, total_tokens: 404, input_token_details: { cache_read: 256 }, output_token_details: {} } }此时 Agent 会解析用户问题判断是否需要调用工具自动调用 get_weather返回最终答案