-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·346 lines (276 loc) · 8.24 KB
/
Copy pathinstall.sh
File metadata and controls
executable file
·346 lines (276 loc) · 8.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
#!/bin/bash
# NVIDIA NeMo Agent Toolkit AI对话机器人 - 一键安装脚本
# 支持 Linux/macOS/Windows(WSL)
set -e
echo "🚀 NVIDIA NeMo Agent Toolkit AI对话机器人 - 一键安装"
echo "=================================================="
# 检测操作系统
detect_os() {
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
echo "检测到操作系统: Linux"
OS="linux"
elif [[ "$OSTYPE" == "darwin"* ]]; then
echo "检测到操作系统: macOS"
OS="macos"
elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
echo "检测到操作系统: Windows"
OS="windows"
else
echo "⚠️ 未知操作系统: $OSTYPE"
echo "请在 Linux、macOS 或 Windows WSL 环境中运行此脚本"
exit 1
fi
}
# 检查必要工具
check_requirements() {
echo "📋 检查系统要求..."
# 检查Python
if ! command -v python3 &> /dev/null; then
echo "❌ Python 3 未安装"
echo "请先安装 Python 3.12 或更高版本"
exit 1
fi
python_version=$(python3 --version | cut -d' ' -f2 | cut -d'.' -f1-2)
echo "✅ Python 版本: $python_version"
# 检查Node.js
if ! command -v node &> /dev/null; then
echo "❌ Node.js 未安装"
echo "请先安装 Node.js 18 或更高版本"
exit 1
fi
node_version=$(node --version)
echo "✅ Node.js 版本: $node_version"
# 检查Git
if ! command -v git &> /dev/null; then
echo "❌ Git 未安装"
echo "请先安装 Git"
exit 1
fi
echo "✅ Git 已安装"
}
# 安装uv包管理器
install_uv() {
echo "📦 安装 uv 包管理器..."
if ! command -v uv &> /dev/null; then
echo "正在下载并安装 uv..."
curl -LsSf https://astral.sh/uv/install.sh | sh
# 添加到PATH
export PATH="$HOME/.local/bin:$PATH"
if ! command -v uv &> /dev/null; then
echo "❌ uv 安装失败"
exit 1
fi
fi
echo "✅ uv 包管理器已安装"
}
# 克隆和设置项目
setup_project() {
echo "📥 设置项目..."
# 记录当前目录
PROJECT_ROOT=$(pwd)
# 如果目录不存在,克隆项目
if [ ! -d "NeMo-Agent-Toolkit" ]; then
echo "正在克隆 NVIDIA NeMo Agent Toolkit..."
git clone https://github.com/NVIDIA/NeMo-Agent-Toolkit.git
echo "正在初始化子模块..."
cd NeMo-Agent-Toolkit
git submodule update --init --recursive
cd "$PROJECT_ROOT"
else
echo "项目目录已存在..."
fi
# 进入NeMo-Agent-Toolkit目录进行Python环境设置
cd NeMo-Agent-Toolkit
# 创建Python虚拟环境
echo "正在创建Python虚拟环境..."
uv venv --seed .venv --python 3.12
# 激活虚拟环境并安装依赖
echo "正在安装Python依赖..."
source .venv/bin/activate
uv pip install -e .
uv pip install -e '.[langchain]'
uv pip install tavily-python
uv pip install 'httpx[socks]'
echo "✅ 后端依赖安装完成"
# 返回项目根目录
cd "$PROJECT_ROOT"
}
# 设置前端
setup_frontend() {
echo "🎨 设置前端..."
# 检查前端目录是否存在
if [ ! -d "external/aiqtoolkit-opensource-ui" ]; then
echo "❌ 前端目录不存在: external/aiqtoolkit-opensource-ui"
echo "请确保子模块已正确初始化"
exit 1
fi
# 进入前端目录
cd external/aiqtoolkit-opensource-ui
echo "正在安装前端依赖..."
npm install
echo "✅ 前端依赖安装完成"
# 返回项目根目录
cd ../..
}
# 创建配置文件
create_config() {
echo "⚙️ 创建配置文件..."
# 确保在项目根目录
PROJECT_ROOT=$(pwd)
# 在NeMo-Agent-Toolkit目录中创建配置文件
cd NeMo-Agent-Toolkit
mkdir -p configs
cat > configs/hackathon_config.yml << 'EOF'
# NVIDIA NeMo Agent Toolkit 黑客松配置
# 支持用户自定义OpenAI兼容API
general:
use_uvloop: true
functions:
tavily_search:
_type: tavily_internet_search
description: "使用Tavily API进行实时网络搜索"
current_datetime:
_type: current_datetime
description: "获取当前日期和时间"
llms:
# 默认使用Bailian API (用户可修改)
default_llm:
_type: openai
model_name: "qwen-plus"
api_key: "Your API Key"
base_url: "https://dashscope.aliyuncs.com/compatible-mode/v1"
temperature: 0.7
max_tokens: 2048
workflow:
_type: react_agent
tool_names:
- tavily_search
- current_datetime
llm_name: default_llm
verbose: true
parse_agent_response_max_retries: 3
max_iterations: 10
EOF
echo "✅ 配置文件创建完成"
# 返回项目根目录
cd "$PROJECT_ROOT"
}
# 创建启动脚本
create_scripts() {
echo "📝 创建启动脚本..."
# 确保在项目根目录
PROJECT_ROOT=$(pwd)
# 在NeMo-Agent-Toolkit目录中创建启动脚本
cd NeMo-Agent-Toolkit
# 创建启动脚本
cat > start.sh << 'EOF'
#!/bin/bash
echo "🚀 启动 NVIDIA NeMo Agent Toolkit AI对话机器人"
echo "=============================================="
# 获取项目根目录和NeMo目录
NEMO_DIR=$(pwd)
PROJECT_ROOT=$(dirname "$NEMO_DIR")
# 设置环境变量
export TAVILY_API_KEY=Your API Key
# 激活Python虚拟环境
source .venv/bin/activate
# 启动后端服务
echo "📡 启动后端服务..."
aiq serve --config_file configs/hackathon_config.yml --host 0.0.0.0 --port 8001 &
BACKEND_PID=$!
# 等待后端启动
echo "⏳ 等待后端服务启动..."
sleep 10
# 启动前端服务
echo "🎨 启动前端服务..."
cd "$PROJECT_ROOT/external/aiqtoolkit-opensource-ui"
npm run dev &
FRONTEND_PID=$!
# 返回NeMo目录
cd "$NEMO_DIR"
echo ""
echo "✅ 系统启动完成!"
echo ""
echo "🌐 访问地址:"
echo " 前端界面: http://localhost:3000"
echo " API文档: http://localhost:8001/docs"
echo ""
echo "📝 测试建议:"
echo " 1. 天气查询: '北京今天的天气怎么样,气温是多少?'"
echo " 2. 公司信息: '帮我介绍一下NVIDIA Agent Intelligence Toolkit'"
echo " 3. 时间查询: '现在几点了?'"
echo ""
echo "🛑 停止服务: 按 Ctrl+C 或运行 ./stop.sh"
echo ""
# 保存进程ID
echo $BACKEND_PID > .backend.pid
echo $FRONTEND_PID > .frontend.pid
# 等待用户中断
wait
EOF
# 创建停止脚本
cat > stop.sh << 'EOF'
#!/bin/bash
echo "🛑 停止 NVIDIA NeMo Agent Toolkit AI对话机器人"
echo "=============================================="
# 停止后端服务
if [ -f .backend.pid ]; then
BACKEND_PID=$(cat .backend.pid)
if ps -p $BACKEND_PID > /dev/null; then
echo "停止后端服务 (PID: $BACKEND_PID)..."
kill $BACKEND_PID
fi
rm -f .backend.pid
fi
# 停止前端服务
if [ -f .frontend.pid ]; then
FRONTEND_PID=$(cat .frontend.pid)
if ps -p $FRONTEND_PID > /dev/null; then
echo "停止前端服务 (PID: $FRONTEND_PID)..."
kill $FRONTEND_PID
fi
rm -f .frontend.pid
fi
# 清理其他相关进程
pkill -f "aiq serve" 2>/dev/null || true
pkill -f "next dev" 2>/dev/null || true
echo "✅ 所有服务已停止"
EOF
# 添加执行权限
chmod +x start.sh stop.sh
echo "✅ 启动脚本创建完成"
# 返回项目根目录
cd "$PROJECT_ROOT"
}
# 主安装流程
main() {
detect_os
check_requirements
install_uv
setup_project
setup_frontend
create_config
create_scripts
echo ""
echo "🎉 安装完成!"
echo "=============="
echo ""
echo "📁 项目根目录: $(pwd)"
echo "📁 NeMo项目目录: $(pwd)/NeMo-Agent-Toolkit"
echo ""
echo "🚀 快速启动:"
echo " cd NeMo-Agent-Toolkit && ./start.sh"
echo ""
echo "🛑 停止服务:"
echo " cd NeMo-Agent-Toolkit && ./stop.sh"
echo ""
echo "⚙️ 自定义配置:"
echo " 编辑 NeMo-Agent-Toolkit/configs/hackathon_config.yml 文件"
echo " 可修改 API密钥、模型名称、base_url 等"
echo ""
echo "📚 更多信息:"
echo " https://github.com/NVIDIA/NeMo-Agent-Toolkit"
echo ""
}
# 运行主函数
main "$@"