添加了langgraph-vivado-install 这个skill
This commit is contained in:
@@ -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 "<converted_path>/vivado.bat"
|
||||||
|
```
|
||||||
|
- 若不存在:提示 "路径无效或找不到 vivado.bat,请重新输入。" 并**重复 Step C**。
|
||||||
|
- 若存在:继续。
|
||||||
|
|
||||||
|
2. **将路径临时加入当前会话 PATH**(Windows 反斜杠转为正斜杠):
|
||||||
|
```bash
|
||||||
|
export PATH="<converted_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": "<Step 3 确认的 Windows 格式路径>",
|
||||||
|
"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`(均在调用时的当前目录)。
|
||||||
Reference in New Issue
Block a user