LangChain 入门和Agent原理

目录

Python - UV 为每个项目创建独立、干净的Python工作空间
UV 中文文档:https://uv.doczh.com/

安装依赖

复制代码
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
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 notebook

pyproject.toml

复制代码
[project]
name = "vip-langchain"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "langchain>=1.3.4",
    "langchain-deepseek>=1.0.1",
    "notebook>=7.5.6",
    "python-dotenv>=1.2.2",
]

[[tool.uv.index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true
python 复制代码
print("Hello LangChain")

Hello LangChain

添加环境变量

创建 .env 文件

复制代码
DEEPSEEK_API_KEY=sk-7c0asdffasd.........

加载环境变量

python 复制代码
# 1. 加载环境变更
from dotenv import load_dotenv

load_dotenv()

定义工具

Agent 的核心能力之一是 Tool Calling(工具调用) 。

python 复制代码
# 2. 定义工具
from langchain.tools import tool

# 定义一个工具,其实就是定义一个方法通过 @tool 进行修饰
@tool
def getWeather(city: str) -> str:
    """
    通过调用第三方接口,将天气进行返回
    """
    return f"{city} 今天是晴天,气温25度"

创建 Agent

接下来创建一个 Agent,并指定使用 deepseek 模型。

LangChain 会自动加载.env 文件中的 DEEPSEEK_API_KEY ,并根据指定的模型,去访问对应的接口地睛,无需要指定接口地址

模型不能调工具,但它可以返回的内容里包含想要调的工具名 tool_calls,这时候 LangChain 会自动去调工具

python 复制代码
# 3. 创建 Agent
from langchain.agents import create_agent

agent = create_agent(
    # 前面加上 "openai:qwen-plus" 前缀,指定模型
    "deepseek-chat",
    tools=[getWeather],
    system_prompt="You are a helpful assistant"
)

发起调用

LangChain 会自动调用 get_weather 方法,并返回结果。

python 复制代码
# 调用 Agent
print("正在调用大模型...")
response = agent.invoke(
    {
      "message": [
        {"role": "user", "content": "苏州今天的天气如何?"}
      ]
    }
)
print(response)

# 格式化打印
for message in response["messages"]:
    print(message.model_dump_json(indent=2))
复制代码
正在调用大模型...
{'messages': [AIMessage(content='您好!我是智能助手,请问有什么可以帮您的?比如查询天气等。', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 18, 'prompt_tokens': 280, 'total_tokens': 298, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 256}, 'prompt_cache_hit_tokens': 256, 'prompt_cache_miss_tokens': 24}, 'model_provider': 'deepseek', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_8b330d02d0_prod0820_fp8_kvcache_20260402', 'id': '6f0ff3be-4172-430f-a30a-d5a5d25ab5c9', 'finish_reason': 'stop', 'logprobs': None}, id='lc_run--019e8d6d-08e4-7bf0-8fb5-13610f76b071-0', tool_calls=[], invalid_tool_calls=[], usage_metadata={'input_tokens': 280, 'output_tokens': 18, 'total_tokens': 298, 'input_token_details': {'cache_read': 256}, 'output_token_details': {}})]}

此时 Agent 会:

  • 解析用户问题
  • 判断是否需要调用工具
  • 自动调用 get_weather
  • 返回最终答案

如果跑不起来,看下 PyCharm 的运行环境是否正确