cd D:\OpenSource\Python\VipLangChain # 初始化 uv 项目(可选)

cd D:\OpenSource\Python\VipLangChain # 初始化 uv 项目(可选) uv init1. 创建虚拟环境uv venv2. 激活虚拟环境Windows.venv\Scripts\activate3. 安装环境变量uv add python-dotenv --default-index https://pypi.tuna.tsinghua.edu.cn/simpleLangChain 支持各种不同的模型而且提供了对应的兼容SDK,不过也都需要安装对应依赖4. 安装 LangChain 依赖-v 可以显示 debug 日志uv add langchain -v --default-index https://pypi.tuna.tsinghua.edu.cn/simple5. 集成 DeepSeek前面加了 --default-index 后面执行可以不用加了因为它会在 pyproject.toml 中记录了uv add langchain-deepseek --default-index https://pypi.tuna.tsinghua.edu.cn/simple如果需要集成 OpenAIuv add langchain-openai --default-index https://pypi.tuna.tsinghua.edu.cn/simple如果需要集成 Anthropicuv 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_dotenvload_dotenv()定义工具Agent 的核心能力之一是 Tool Calling工具调用 。2. 定义工具from langchain.tools import tool定义一个工具其实就是定义一个方法通过 tool 进行修饰tooldef getWeather(city: str) - str:“”“通过调用第三方接口将天气进行返回”“”print(f正在查询{city}天气…“)return f”{city}今天是晴天气温25度创建 AgentLangChain 入门 Model 的初始化和调用接下来创建一个 Agent并指定使用 deepseek 模型。LangChain 会自动加载.env 文件中的 DEEPSEEK_API_KEY 并根据指定的模型去访问对应的接口地睛无需要指定接口地址模型不能调工具但它可以返回的内容里包含想要调的工具名 tool_calls这时候 LangChain 会自动去调工具3. 创建 Agentfrom langchain.agents import create_agentagent create_agent(# 前面加上 “openai:qwen-plus” 前缀指定模型“deepseek-chat”,tools[getWeather])发起调用LangChain 会自动调用 get_weather 方法并返回结果。调用 Agentprint(“正在调用大模型…”)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_agentfrom langchain.tools import toolfrom dotenv import load_dotenvload_dotenv()tooldef getWeather(city: str) - str:“”“通过调用第三方接口将天气进行返回”“”print(f正在查询{city}天气…“)return f”{city}今天是晴天气温25度创建 agentagent create_agent(model“deepseek-chat”, # 不需要加前缀 如“ollama:qwen3.5:4b”tools[getWeather], #定义回调的工具(函数)system_prompt“You 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返回最终答案imageimage如果跑不起来看下 PyCharm 的运行环境是否正确