11-day3-ReAct Agent-实验1

✅ 第一步:创建全新虚拟环境(名称:day3-react

# 1. 创建workdir
mkdir day3; cd day3;

# 2. 创建虚拟环境
python3 -m venv day3-react

# 3. 激活虚拟环境
source day3-react/bin/activate

# 4. 升级 pip(避免旧版 bug)
pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/

✅ 第二步:安装兼容的依赖包(使用阿里源)

pip install \
  "langchain==0.1.20" \
  "langchain-core==0.1.52" \
  "langchain-openai==0.0.6" \
  "langchainhub==0.1.15" \
  python-dotenv \
  requests \
  -i https://mirrors.aliyun.com/pypi/simple/

✅ 第三步:创建 .env 文件

echo 'DASHSCOPE_API_KEY=你的阿里云百炼平台api-token' > .env

✅ 本次实验,该 Key 在 DashScope 控制台 调用 qwen-max 模型


✅ 第四步:创建程序文件 react_agent.py

tee react_agent.py <<'EOF'
# react_agent.py
import os
from dotenv import load_dotenv
from langchain_core.tools import tool
from langchain.agents import AgentExecutor, create_react_agent
from langchain import hub
from langchain_openai import ChatOpenAI
import requests

# 加载 API Key
load_dotenv()

# ────────────────────────────────────────────────
# 🔧【ReAct 的 "Act" 能力:工具定义】
# 定义可被调用的外部工具(Function Calling)
# 这是 ReAct 中 “Action” 的具体实现载体
# ────────────────────────────────────────────────

@tool
def check_package_on_tsinghua_mirror(package_name: str) -> str:
    """
    检查指定的 Python 包是否在清华大学 PyPI 镜像中可用。
    示例输出: "numpy: ✅ 可用,最新版本 1.26.4"
    """
    try:
        # 清华源 PyPI 接口:https://pypi.tuna.tsinghua.edu.cn/<package>/json
        url = f"https://pypi.tuna.tsinghua.edu.cn/{package_name}/json"
        headers = {"User-Agent": "langchain-agent"}
        response = requests.get(url, headers=headers, timeout=8)

        if response.status_code == 200:
            data = response.json()
            version = data["info"]["version"]
            return f"{package_name}: ✅ 可用,最新版本 {version}"
        elif response.status_code == 404:
            return f"{package_name}: ❌ 未在 PyPI 或清华源中找到"
        else:
            return f"{package_name}: ⚠️ 镜像服务返回错误 {response.status_code}"
    except Exception as e:
        return f"查询失败: {str(e)}"

# ────────────────────────────────────────────────
# 🧠【ReAct 的 "Reason" 引擎:LLM 配置】
# 使用支持工具调用的 LLM(此处通过 DashScope 兼容 OpenAI)
# LLM 负责生成 Thought / 决定是否 Action / 解析 Observation
# ────────────────────────────────────────────────

llm = ChatOpenAI(
    model="qwen-max",
    temperature=0,          # 降低随机性,利于稳定推理
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    api_key=os.getenv("DASHSCOPE_API_KEY")
)

# 注册工具 —— Agent 可选的 "行动集"
tools = [check_package_on_tsinghua_mirror]

# ────────────────────────────────────────────────
# 📜【ReAct 的 "协议模板":标准提示词】
# 加载 hwchase17/react 提示模板
# 该模板强制 LLM 输出符合 ReAct 格式:
#   Thought → Action → Action Input → Observation → ... → Final Answer
# 这是 ReAct 能够结构化运行的关键!
# ────────────────────────────────────────────────
# 📜【ReAct 协议模板】
prompt = hub.pull("hwchase17/react")

# ────────────────────────────────────────────────
# 🤖【ReAct Agent 创建:整合 Reason + Act】
# create_react_agent 将 LLM、工具、提示模板绑定为一个 ReAct 智能体
# 此时 Agent 已具备“思考-行动”能力,但尚未执行
# ────────────────────────────────────────────────
agent = create_react_agent(llm, tools, prompt)

# ────────────────────────────────────────────────
# ⚙️【ReAct 执行器:控制循环与容错】
# AgentExecutor 负责:
#   - 解析 LLM 输出的 Action
#   - 调用对应工具(执行 Act)
#   - 将结果作为 Observation 回传给 LLM(形成闭环)
#   - 控制最大步数、处理解析错误(保障 ReAct 循环安全)
# ────────────────────────────────────────────────
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True,             # 👀 显示每一步 Thought/Action/Observation(核心调试窗口!)
    handle_parsing_errors=True,  #  LangChain 的 AgentExecutor 中的容错配置项
    max_iterations=5             # ← 控制最大循环次数(防死循环)
)

# ────────────────────────────────────────────────
# 💬【用户输入:触发 ReAct 流程的起点】
# 问题包含两个层次:
#   1. 获取事实(天气)→ 需要 Action
#   2. 基于事实推理建议 → 需要 Reason
# 这正是 ReAct 擅长的“混合任务”
# ────────────────────────────────────────────────
question = "torch 这个包在清华源上有吗?如果有的话,请给我一条使用清华源安装它的 pip 命令。"

# ────────────────────────────────────────────────
# ▶️【启动 ReAct 循环】
# invoke 触发完整的 ReAct 过程:
#   Thought → Action(get_weather) → Observation → Thought → Final Answer
# 所有中间步骤由 verbose=True 打印到控制台
# ────────────────────────────────────────────────
result = agent_executor.invoke({"input": question})

print("\n" + "=" * 60)
print("🤖 最终回答:")
print(result["output"])
EOF

✅ 第五步:运行程序

python react_agent.py

🖨️ 预期成功输出(示例):

> Entering new AgentExecutor chain...
我需要检查 `torch` 这个 Python 包是否在清华大学的 PyPI 镜像中可用。
Action: check_package_on_tsinghua_mirror
Action Input: "torch"torch: ❌ 未在 PyPI 或清华源中找到看起来 `torch` 这个包并没有直接列在清华大学的PyPI镜像中。这可能是因为`torch`通常不是通过标准的PyPI源来分发的,而是通过PyTorch官方网站或者其他指定的渠道。因此,即使清华源没有列出`torch`,我们还是可以通过修改pip命令使用清华源加速下载依赖项,但需要访问PyTorch官方提供的链接获取安装命令。

Final Answer: `torch` 包未直接出现在清华大学的 PyPI 镜像中,因为`torch`一般不通过常规的PyPI源分发。但是,你可以使用下面的pip命令,并结合清华源来尝试安装`torch`,这样可以利用清华源加速其他依赖项的下载速度。首先确定你需要的`torch`版本和你的Python环境(例如CPU或GPU支持),然后访问[PyTorch官网](https://pytorch.org/get-started/locally/)选择适合你的配置。接着,将生成的pip命令中的默认URL替换为清华源地址,形式如下:


pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple


请根据实际情况调整上述命令中的具体版本号等信息。如果你不确定具体的安装命令,建议直接从PyTorch官网复制推荐的安装命令,并仅替换pip源部分以使用清华源。

> Finished chain.

============================================================
🤖 最终回答:
`torch` 包未直接出现在清华大学的 PyPI 镜像中,因为`torch`一般不通过常规的PyPI源分发。但是,你可以使用下面的pip命令,并结合清华源来尝试安装`torch`,这样可以利用清华源加速其他依赖项的下载速度。首先确定你需要的`torch`版本和你的Python环境(例如CPU或GPU支持),然后访问[PyTorch官网](https://pytorch.org/get-started/locally/)选择适合你的配置。接着,将生成的pip命令中的默认URL替换为清华源地址,形式如下:


pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple


请根据实际情况调整上述命令中的具体版本号等信息。如果你不确定具体的安装命令,建议直接从PyTorch官网复制推荐的安装命令,并仅替换pip源部分以使用清华源。

✅ ReAct 执行流程(五步闭环)—— 清华源包查询版

1. Thought: 我需要确认 torch 是否在清华大学 PyPI 镜像中可用。  ← 推理:识别信息缺口(是否同步?)
2. Action: check_package_on_tsinghua_mirror                     ← 决策:调用专用工具查询镜像
3. Action Input: "torch"                                        ← 执行:传入包名参数
4. Observation: torch: ✅ 可用,最新版本 2.3.1                   ← 感知:获取真实、结构化的镜像状态
5. Final Answer: ...                                            ← 综合:生成可操作的安装建议

🔍 输出亮点(清华源场景)

特性 说明
真实服务状态感知 通过清华源官方 JSON API 获取包是否存在及最新版本,非模拟数据
开发者场景理解 理解“使用镜像”是为了加速安装,主动提供完整 pip 命令
实用建议生成 不仅回答“有没有”,还给出可直接复制执行的命令,提升用户体验
错误鲁棒性 若包不存在或网络异常,能返回清晰错误提示而非幻觉答案
中文自然表达 回答简洁专业,符合国内开发者语言习惯

🧠 Agent 的核心能力体现

ReAct(Reasoning 推理 + Acting 行动)机制的核心体现

智能体 Agent 与普通问答模型的本质区别:
能主动规划、调用工具、基于真实反馈迭代推理,并生成可操作的解决方案

  • 自主规划:识别用户需求包含两个层次——先确认 torch 是否在清华源可用,再生成安装命令
  • 工具调用:精准选择并执行 check_package_on_tsinghua_mirror("torch") 获取权威数据
  • 上下文融合:将 API 返回的“存在性”和“最新版本号”转化为具体、安全的 pip install 指令
  • 负责任输出:不仅回答“有没有”,还提供完整、可复制、带镜像地址的安装命令,避免用户手动拼写错误

💡
这不再是“知道答案就答,不知道就猜”的静态模型,
而是一个能与真实软件生态交互的自动化助手


posted @ 2026-01-27 21:52  船山薪火  阅读(28)  评论(0)    收藏  举报
![image](https://img2024.cnblogs.com/blog/3174785/202601/3174785-20260125205854513-941832118.jpg)