MCP库存聊天机器人(Django+简单代理)
一个最小的、本地友好的项目聊天机器人演示,通过工具调用回答库存数据库问题。
- 后端: 姜戈
- DB: SQLite(自动创建)
- “MCP风格”工具: 每个表(产品、供应商、订单、订单项)在内部注册表中注册的Python函数
- 型号: 可选拥抱面部
transformers基于辅助程序(默认为简单的关键字/规则路由,因此无需大量下载即可运行) - 前端: 使用HTMX在本地主机上发送/接收消息的简单聊天页面
这是一个演示脚手架,您可以稍后扩展到完整的MCP服务器集成中。目前,代理在简单的意图解析后在本地执行工具。
特性
- 包含示例数据(产品、供应商、订单、订单项)的库存模式。
- 聊天提示->代理->所选工具->通过Django ORM进行数据库->格式化响应。
- 示例查询:
- “列出产品” - “显示产品小部件A” - “库存低于10” - “供应商Contoso” - “2025年1月1日至2025年12月31日之间的订单”
快速入门
- 创建venv并安装deps
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt注意:该应用运行良好 没有 变压器模型。如果你想要LLM辅助解析,请保留 transformers 安装。不需要大型模型;默认情况下配置了小text2text模型(例如flan-t5-small)。- 运行迁移并加载示例数据
python manage.py migrate
python manage.py loaddata inventory/fixtures/sample.json(或者,您可以运行:)
python manage.py load_sample_data- 启动服务器
python manage.py runserver打开http://127.0.0.1:8000/chat
拥抱脸模型(可选)
- 默认情况下,代理使用关键字和正则表达式规则进行路由。
- 要让代理向小型HF模型请求结构化操作(tool+args),请设置:
export USE_NLP=1该应用程序将尝试使用小 flan-t5-small 模型(text2text)。您可以在中更改此设置 core/hf_model.py.
项目布局
mcp_inventory_chatbot/
├─ manage.py
├─ mcp_chatbot/
│ ├─ settings.py
│ ├─ urls.py
│ ├─ wsgi.py
│ ├─ asgi.py
├─ core/
│ ├─ agent.py
│ ├─ hf_model.py
│ ├─ tool_registry.py
│ ├─ utils.py
├─ inventory/
│ ├─ models.py
│ ├─ admin.py
│ ├─ fixtures/sample.json
│ ├─ management/commands/load_sample_data.py
│ ├─ migrations/ (created at migrate)
├─ webui/
│ ├─ views.py
│ ├─ urls.py
│ ├─ templates/chat.html
│ ├─ static/chat.css
│ ├─ static/chat.js
├─ requirements.txt
├─ FLOWCHART.md
└─ SCHEMA.md安全说明
此演示有意将查询限制为安全的ORM调用和已知工具。避免在没有严格保护措施的情况下插入任意SQL生成。
扩展到真正的MCP
- 替换
core/tool_registry.py使用真正的MCP工具客户端,按表发布工具。 - 改变
core/agent.py从模型中格式化符合MCP的工具调用,通过MCP执行它们,并返回结果。 - 考虑添加身份验证、分页、流媒体和更丰富的UI。
