🛍️ Ontology RL Commerce Agent(原名“Ontology MCP Server”)突出了最新的强化学习驱动的闭环系统。该系统仍然依赖于模型上下文协议(MCP)来结合本体推理、电子商务业务逻辑、记忆以及一个Gradio用户界面,以便您可以从头到尾地重现完整的购物助手体验。
🤖 强化学习驱动的代理:Stable Baselines3 PPO训练流水线内置在树中。它涵盖了从数据 → 训练 → 评估 → 部署的整个流程,使代理能够不断从真实的对话记录和工具日志中学习,从而自动发现更安全、更高效的工具链策略。
需求
20GB 磁盘空间
一键启动
# 1. 克隆仓库
git clone <repository-url>
cd ontology-mcp-server-RL-Stable-Baselines3
# 2. 配置环境变量
cp .env.example .env
nano .env # 填写LLM API密钥
# 3. 启动所有服务
docker-compose up -d
# 4. 尾随日志
docker-compose logs -f
# 5. 停止服务
docker-compose down
服务端点
常见命令
# 重启单个服务
docker-compose restart agent-ui
# 进入容器进行调试
docker exec -it ontology-agent-ui bash
# 检查状态
docker-compose ps
# 清理并重建(谨慎使用)
docker-compose down -v
docker-compose build --no-cache
docker-compose up -d
GPU支持(可选)
安装nvidia-docker,然后取消注释docker-compose.yml中的GPU块。
distribution=$(. /etc/os-release; echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
需求
40GB磁盘(数据库、Chroma向量、RL检查点)
安装依赖项
git clone <repository-url>
cd ontology-mcp-server-RL-Stable-Baselines3
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .
Docker部署会在首次启动时自动运行这些步骤。手动步骤仅适用于本地开发。
export ONTOLOGY_DATA_DIR="$(pwd)/data"
python scripts/init_database.py # 创建表
python scripts/seed_data.py # 种子基础用户/产品
python scripts/add_bulk_products.py # 可选:+1000产品
python scripts/add_bulk_users.py # 可选:+200用户
python scripts/update_demo_user_names.py --seed 2025
示例用户
| 用户ID | 名称 | 邮箱 | 级别 | 终身消费 |
|---|---|---|---|---|
| 1 | 张三 | zhangsan@example.com | 普通 | ¥0 |
| 2 | 李四 | lisi@example.com | VIP | ¥6,500 |
| 3 | 王五 | wangwu@example.com | SVIP | ¥12,000 |
示例产品
src/agent/config.yaml 支持DeepSeek、OpenAI兼容API或本地Ollama:
llm:
provider: "deepseek"
api_url: "https://api.deepseek.com/v1"
api_key: "your-api-key-here"
model: "deepseek-chat"
temperature: 0.7
max_tokens: 2000
或者通过环境变量:
export OPENAI_API_URL="https://api.deepseek.com/v1"
export OPENAI_API_KEY="your-api-key"
export OPENAI_MODEL="deepseek-chat"
# 本地Ollama(qwen3:8b示例)
export LLM_PROVIDER="ollama"
export OLLAMA_API_URL="http://localhost:11434/v1"
export OLLAMA_MODEL="qwen3:8b"
export OLLAMA_API_KEY="ollama" # Ollama忽略此值
训练脚本(train_rl_agent.py)和Gradio代理都通过HTTP调用MCP。如果需要覆盖MCP_BASE_URL:
# 本地/开发
export MCP_BASE_URL="http://127.0.0.1:8000"
# Docker/生产(容器间通信)
export MCP_BASE_URL="http://ontology-mcp-server:8000"
选项1:start_all.sh(推荐)
./scripts/start_all.sh
# 日志流至logs/<service>_yyyyMMdd_HHmmss.log
tail -f logs/server_*.log
停止所有服务:
./scripts/stop_all.sh
选项2:单独启动
./scripts/run_server.sh
./scripts/run_agent.sh
./scripts/run_training_dashboard.sh
./scripts/run_tensorboard.sh
选项3:手动命令
# 终端1:MCP服务器(FastAPI)
source .venv/bin/activate
export ONTOLOGY_DATA_DIR="$(pwd)/data"
uvicorn ontology_mcp_server.server:app --host 0.0.0.0 --port 8000
# 终端2:Gradio UI
source .venv/bin/activate
export ONTOLOGY_DATA_DIR="$(pwd)/data"
export MCP_BASE_URL="http://127.0.0.1:8000"
python -m agent.gradio_ui
# 终端3:RL训练仪表板
source .venv/bin/activate
export ONTOLOGY_DATA_DIR="$(pwd)/data"
export MCP_BASE_URL="http://127.0.0.1:8000"
python scripts/run_training_dashboard.py
# 终端4:TensorBoard
source .venv/bin/activate
tensorboard --logdir data/rl_training/logs/tensorboard --host 0.0.0.0 --port 6006
要更改Gradio绑定地址/端口,请在启动前设置
GRADIO_SERVER_NAME和GRADIO_SERVER_PORT。run_agent.sh/run_training_dashboard.sh接受AGENT_HOST/PORT和TRAINING_DASHBOARD_HOST/PORT;它们将值转发给Gradio环境变量以保持端口7860/7861独立。
标签页:
flowchart LR
subgraph Ingest[Ingest & Store]
direction TB
U(User input)
U --> AT(ChromaMemory.add_turn)
AT --> SUM(generate_summary)
SUM --> DB((ChromaDB collection))
AT --> DB
end
subgraph Extract[Extraction]
direction TB
AT --> EX(UserContextExtractor)
EX --> UM(UserContextManager)
end
subgraph Retrieval[Retrieval & Injection]
direction TB
UM --> CTX(get_context_for_prompt)
CTX --> NOTE_CTX(Inject context + history)
NOTE_CTX --> AGT(Agent / LLM)
end
AGT --> TC(Tool calls)
TC --> AT
TC -->|create_order yields ORD...| UM
用户:你好
AI:你好!欢迎...(意图:问候)
用户:推荐一部手机?
AI:[commerce.search_products] 返回4款iPhone型号...
用户:iPhone 15 Pro Max有货吗?
AI:[commerce.check_stock] 有货,50台...
用户:加入购物车
AI:[commerce.add_to_cart] 已添加...(状态:浏览 → 购物车)
scripts/generate_dialogue_corpus.py生成最新的200个完全真实的场景python test_rl_modules.py检查RL模块python train_rl_agent.py --timesteps ...启动PPO训练MCP服务器暴露HTTP端点。
健康检查
curl http://localhost:8000/health
能力列表
curl http://localhost:8000/capabilities
调用工具
curl -X POST http://localhost:8000/invoke \
-H "Content-Type: application/json" \
-d '{
"tool": "commerce.search_products",
"params": {
"available_only": true,
"limit": 5
}
}'
本体工具(3个)
ontology.explain_discountontology.normalize_productontology.validate_order商业工具(18个)
4. commerce.search_products
5. commerce.get_product_detail
6. commerce.check_stock
7. commerce.get_product_recommendations
8. commerce.get_product_reviews
9. commerce.add_to_cart
10. commerce.view_cart
11. commerce.remove_from_cart
12. commerce.create_order
13. commerce.get_order_detail
14. commerce.cancel_order
15. commerce.get_user_orders
16. commerce.process_payment
17. commerce.track_shipment
18. commerce.get_shipment_status
19. commerce.create_support_ticket
20. commerce.process_return
21. commerce.get_user_profile
ReAct代理(react_agent.py)
对话状态(conversation_state.py)
系统提示(prompts.py)
对话记忆(chroma_memory.py)
recent,similarity,hybriddata/chroma_memory/质量跟踪(quality_metrics.py)
意图追踪器(intent_tracker.py)
推荐引擎(recommendation_engine.py)
硬件提示:PPO训练受益于≥8核CPU,≥32GB内存,和≥1个具有≥12GB VRAM的GPU(如RTX 3080/4090/A6000)。仅使用CPU是可能的,但10万步可能需要5-8小时;GPU将其缩短到约1小时。预留≥15GB用于
data/rl_training/。
src/agent/rl_agent/)| 文件 | 角色 | 备注 |
|---|---|---|
state_extractor.py | 将多源对话编码成128维向量 | 处理嵌入/简单特征,容忍字符串/对象意图 |
reward_calculator.py | 多目标奖励 | 任务/效率/满意度/安全性 + 回合聚合 |
gym_env.py | EcommerceGymEnv | 22个离散动作(21个工具 + 直接回复) |
ppo_trainer.py | 训练编排 | DummyVecEnv + 评估/检查点回调 + TensorBoard |
train_rl_agent.py | CLI入口 | 可配置步数、评估频率、检查点、嵌入 |
场景语料库 data/training_scenarios/sample_dialogues.json 包含200个真实对话,涉及真实用户/订单/产品的5个场景类别。
数据阶段
add_bulk_products.py,add_bulk_users.py,update_demo_user_names.py --seed 2025。python scripts/generate_dialogue_corpus.py。训练
source .venv/bin/activate
export ONTOLOGY_DATA_DIR="$(pwd)/data"
export MCP_BASE_URL="http://localhost:8000"
export OPENAI_API_URL="https://api.deepseek.com/v1"
export OPENAI_API_KEY="your-api-key"
export OPENAI_MODEL="deepseek-chat"
export TRAIN_DEVICE="gpu" # 回退到cpu
python test_rl_modules.py
python train_rl_agent.py \
--timesteps 100000 \
--eval-freq 2000 \
--checkpoint-freq 20000 \
--output-dir data/rl_training \
--max-steps-per-episode 12 \
--scenario-file data/training_scenarios/sample_dialogues.json \
--device "${TRAIN_DEVICE:-gpu}"
日志流至data/rl_training/logs/tensorboard/。
data/rl_training/best_model/best_model.zipdata/rl_training/models/ppo_ecommerce_final.zipdata/rl_training/checkpoints/ppo_ecommerce_step_*.zipdata/rl_training/logs/training_log.jsonpython - <<'PY'
from agent.react_agent import LangChainAgent
from agent.rl_agent.ppo_trainer import PPOTrainer
agent = LangChainAgent(max_iterations=6)
trainer = PPOTrainer(agent, output_dir="data/rl_training")
trainer.create_env(max_steps_per_episode=10)
trainer.load_model("data/rl_training/best_model/best_model.zip")
query = "我需要十部旗舰华为手机,预算大约7000"
action_idx, action_name, _ = trainer.predict(query)
print("RL建议的操作:", action_idx, action_name)
result = agent.run(query)
print(result["final_answer"])
PY
src/training_dashboard/ 提供了一个自包含的控制台,包括语料库汇总、训练编排、指标可视化、模型注册表和热重载:
config/training_dashboard.example.yaml → config/training_dashboard.yaml并调整路径。PYTHONPATH=src python scripts/run_training_dashboard.py启动。