diff --git a/langgraph-vivado-install/SKILL.md b/langgraph-vivado-install/SKILL.md new file mode 100644 index 0000000..e541036 --- /dev/null +++ b/langgraph-vivado-install/SKILL.md @@ -0,0 +1,229 @@ +--- +name: langgraph-vivado-install +description: 在 Windows 原生环境下自动化配置基于 Conda 的 LangGraph 开发环境,并强制完成 Vivado 链路的闭环验证。当用户提到"配置langgraph"、"安装langgraph"、"LangGraph环境"、"langgraph vivado"、"配置开发环境 langgraph"、"LangGraph+Vivado"、"搭建langgraph"时,必须触发此技能。即使用户未明确说"用这个技能",只要涉及在 Windows 上安装或配置 LangGraph(含与 Vivado 集成),都应触发。 +--- + +# LangGraph + Vivado 环境配置技能 + +本技能在 Windows 原生环境(Git Bash / 命令提示符)中自动完成以下工作: +1. 检测并安装 Conda +2. 创建 `langgraph` 虚拟环境并安装所需包 +3. 迭代检测 Vivado 链路直至成功 +4. 写出配置文件与冒烟测试脚本并运行验证 + +--- + +## 整体流程 + +``` +Step 1: Conda 检测与安装 +Step 2: 创建 langgraph 环境,安装依赖 +Step 3: Vivado 链路迭代检测(循环直到成功) +Step 4: 写出 env_config.json,提示持久化 +Step 5: 生成并运行 smoke_test.py +``` + +--- + +## Step 1 — Conda 检测与安装 + +运行: +```bash +conda --version +``` + +- **若成功**:记录版本,进入 Step 2。 +- **若失败**:执行安装命令: + ```bash + winget install -e --id Anaconda.Miniconda3 + ``` + 安装完成后,提示用户: + > "Miniconda 安装完成。请重启 Shell 或运行 `conda init bash` 使 conda 命令生效,然后重新触发本技能。" + **在用户确认 conda 可用之前,不继续执行后续步骤。** + +--- + +## Step 2 — 创建 langgraph Conda 环境 + +### 2a. 检查环境是否已存在 +```bash +conda env list | grep "^langgraph" +``` + +- 若已存在:跳过创建,直接进入 2b。 +- 若不存在: + ```bash + conda create -n langgraph python=3.11 -y + ``` + +### 2b. 安装所需 Python 包 +```bash +conda run -n langgraph pip install langgraph langchain-anthropic pandas +``` + +验证安装: +```bash +conda run -n langgraph python -c "import langgraph; print('LangGraph OK:', langgraph.__version__)" +``` + +若导入失败,报告错误并停止,请用户检查网络或 pip 源配置。 + +--- + +## Step 3 — Vivado 链路迭代检测循环 + +这是本技能的核心环节。目标是确保在 `langgraph` 环境中可以调用 Vivado。 + +### Step A:首次尝试检测 +```bash +conda run -n langgraph vivado -version +``` + +### Step B:若成功 +- 打印版本信息(取输出第一行)。 +- 进入 Step 4。 + +### Step C:若失败(命令未找到)— 交互式路径收集 + +**停止自动化**,向用户提问: + +> "未能检测到 Vivado 环境。请输入 Vivado 的 bin 文件夹完整路径(例如:`C:\Xilinx\Vivado\2023.2\bin`):" + +**收到用户输入后执行:** + +1. **验证路径有效性** — 检查该目录下 `vivado.bat` 是否存在: + ```bash + # 将用户输入的 Windows 路径转换为 bash 路径后检查 + # 例:C:\Xilinx\Vivado\2023.2\bin → /c/Xilinx/Vivado/2023.2/bin + ls "/vivado.bat" + ``` + - 若不存在:提示 "路径无效或找不到 vivado.bat,请重新输入。" 并**重复 Step C**。 + - 若存在:继续。 + +2. **将路径临时加入当前会话 PATH**(Windows 反斜杠转为正斜杠): + ```bash + export PATH=":$PATH" + ``` + +3. **记录该路径**供后续 Step 4/5 使用(内部变量 `VIVADO_BIN_PATH`)。 + +4. **重试检测**: + ```bash + vivado -version + ``` + - 若成功:打印版本,进入 Step 4。 + - 若再次失败:回到 Step C 顶部,重新向用户询问路径。 + +> **循环逻辑**:重复 Step C 直到 `vivado -version` 执行成功为止。不要跳过,不要假设路径正确。 + +--- + +## Step 4 — 持久化配置 + +`vivado -version` 成功后: + +### 4a. 提示用户持久化 +向用户说明: +> "为了在每次新开 Shell 时自动识别 Vivado,建议将该路径永久添加到 Windows 系统环境变量 PATH 中。操作方法:系统属性 → 高级 → 环境变量 → 编辑 PATH → 新建,粘贴路径。" + +### 4b. 写出 env_config.json +在当前工作目录创建: +```json +{ + "VIVADO_BIN_PATH": "", + "conda_env": "langgraph", + "python_version": "3.11", + "packages": ["langgraph", "langchain-anthropic", "pandas"] +} +``` + +--- + +## Step 5 — 生成冒烟测试脚本并运行 + +在当前工作目录创建 `smoke_test.py`,内容如下: + +```python +import subprocess +import sys +import json +import os + + +def test_langgraph(): + try: + import langgraph + import importlib.metadata + version = importlib.metadata.version("langgraph") + print(f"[OK] LangGraph import OK, version: {version}") + return True + except ImportError as e: + print(f"[FAIL] LangGraph import failed: {e}") + return False + + +def test_vivado(): + config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "env_config.json") + env = os.environ.copy() + vivado_bin = "" + + if os.path.exists(config_path): + with open(config_path, encoding="utf-8") as f: + config = json.load(f) + vivado_bin = config.get("VIVADO_BIN_PATH", "").strip() + if vivado_bin: + env["PATH"] = vivado_bin + os.pathsep + env["PATH"] + + # On Windows use the full path to vivado.bat to avoid shell PATH issues + if vivado_bin and (os.name == "nt" or sys.platform == "win32"): + cmd = [os.path.join(vivado_bin, "vivado.bat"), "-version"] + else: + cmd = ["vivado", "-version"] + + try: + result = subprocess.run(cmd, capture_output=True, text=True, timeout=30, env=env) + if result.returncode == 0: + first_line = (result.stdout.strip().splitlines() or ["(no output)"])[0] + print(f"[OK] Vivado detected: {first_line}") + return True + else: + print(f"[FAIL] vivado -version non-zero exit: {result.stderr.strip()}") + return False + except FileNotFoundError: + print(f"[FAIL] vivado not found. CMD tried: {cmd}") + return False + except subprocess.TimeoutExpired: + print("[FAIL] vivado -version timed out (30s)") + return False + + +if __name__ == "__main__": + print("=" * 50) + print("LangGraph + Vivado smoke test") + print("=" * 50) + ok_lg = test_langgraph() + ok_vv = test_vivado() + print("=" * 50) + if ok_lg and ok_vv: + print("[PASS] All checks passed. LangGraph + Vivado pipeline OK!") + sys.exit(0) + else: + print("[FAIL] Some checks failed. See above.") + sys.exit(1) +``` + +### 运行冒烟测试 +```bash +conda run -n langgraph python smoke_test.py +``` + +- **全部通过**:向用户报告"环境配置完成,LangGraph + Vivado 链路闭环成功。" +- **有失败项**:读取具体错误,向用户说明原因(路径问题、包未安装等),并提供修复建议。 + +--- + +## 注意事项 + +- Windows 路径转换规则:`C:\Xilinx\Vivado\2023.2\bin` → `/c/Xilinx/Vivado/2023.2/bin`(首字母小写,冒号去掉,反斜杠换正斜杠)。 +- `conda run -n langgraph vivado -version` 需要 PATH 在 conda 激活前已包含 Vivado bin 目录,若不行则用 `export PATH=... && conda run ...` 形式或直接用绝对路径调用。 +- 本技能产生的文件:`env_config.json`、`smoke_test.py`(均在调用时的当前目录)。