🤖 Odoo AI 智能查询系统 - 基于 Streamlit 和阿里云 DashScope 的企业级数据查询解决方案
📖 项目概述
这是一个基于 Streamlit 和 阿里云 DashScope 开发的智能 Odoo ERP 数据查询系统。该系统通过自然语言处理技术,让用户能够用中文自然语言查询 Odoo 系统中的各种业务数据,大大降低了数据查询的技术门槛。
🎯 核心特性
1. 智能自然语言查询
- 中文自然语言处理:支持中文查询,如"查找所有员工"、"查询销售订单及产品信息"
- AI 智能解析:基于阿里云 DashScope 的 qwen-turbo 模型进行查询意图识别
- 多模型支持:支持人力资源、销售、采购、库存、财务等多个业务模块
2. 双模式工作界面
- 🔍 数据查询模式:专注于数据检索和分析
- 💬 智能聊天模式:提供 Odoo 系统使用指导和业务咨询
3. 灵活的网络模式
- 🏠 本地模式:仅使用本地 Odoo 服务,适合内网环境
- 🌍 在线模式:优先使用在线 AI 服务
- 🤖 智能模式:自动选择最佳服务
🏗️ 技术架构
核心技术栈
- 前端框架:Streamlit - 快速构建数据应用
- AI 服务:阿里云 DashScope (qwen-turbo 模型)
- ERP 系统:Odoo XML-RPC API
- 数据处理:Pandas DataFrame
- 模板引擎:Jinja2
📊 功能模块详解
1. 人力资源模块
支持查询员工信息、部门结构、职位管理等:
python
# 员工信息查询示例
"查找所有员工" → hr.employee 模型
"员工及部门信息" → 跨表查询员工和部门信息
2. 销售管理模块
支持销售订单查询、客户信息、产品详情等:
python
# 销售订单查询示例
"查询销售订单" → sale.order 模型
"销售订单及产品信息" → 跨表查询订单和产品详情
3. 库存管理模块
支持库存数量查询、产品信息、库位管理等:
python
# 库存查询示例
"查询产品库存数量" → stock.quant 模型
"产品及库存信息" → 跨表查询产品和库存
4. 采购管理模块
支持采购订单、供应商信息查询:
python
# 采购查询示例
"查询采购订单" → purchase.order 模型
"采购订单及供应商产品" → 跨表查询采购和供应商信息
5. 财务管理模块
支持会计凭证、发票、账单查询:
python
# 财务查询示例
"查询财务凭证" → account.move 模型
"大额发票" → 条件查询大额财务记录
🚀 核心代码解析
AI 查询解析器
python
def parse_query_with_ai(self, query: str) -> Dict[str, Any]:
"""使用 AI 解析自然语言查询"""
try:
# 构建系统提示词
system_prompt = self.system_prompt_template.render(
models_info=json.dumps(self.models_info, ensure_ascii=False, indent=2)
)
# 调用 AI 服务
response = self.openai_client.chat.completions.create(
model="qwen-turbo",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": f"请解析以下查询并返回 JSON 格式:{query}"}
],
temperature=0.1,
max_tokens=1000
)
# 解析 AI 返回的 JSON
ai_response = response.choices[0].message.content.strip()
parsed = json.loads(ai_response)
return {
"success": True,
"parsed": parsed,
"explanation": parsed.get("explanation", "")
}
except Exception as e:
return self._fallback_parsing(query)
跨表查询处理
python
def search_records(self, model: str, domain: List = None, fields: List = None,
limit: int = 10, order: str = None) -> Dict[str, Any]:
"""搜索记录 - 支持跨表查询"""
try:
# 处理跨表查询字段
processed_fields = []
related_queries = {}
need_order_lines = False
for field in fields:
if field == "order_line" or field.startswith("order_line."):
need_order_lines = True
if "order_line" not in processed_fields:
processed_fields.append("order_line")
elif '.' in field:
# 处理关联字段,如 partner_id.name
parts = field.split('.')
relation_field = parts[0]
related_field = parts[1]
if relation_field not in processed_fields:
processed_fields.append(relation_field)
if relation_field not in related_queries:
related_queries[relation_field] = []
related_queries[relation_field].append(related_field)
else:
processed_fields.append(field)
# 执行主查询
result = self.proxy.execute_kw(
self.database, self.uid, self.password,
model, "search_read", [domain],
{"fields": processed_fields, "limit": limit, "order": order}
)
# 处理关联数据
if (related_queries or need_order_lines) and result:
enhanced_result = []
for record in result:
enhanced_record = record.copy()
# 处理订单行查询
if need_order_lines and "order_line" in record:
order_line_result = self.proxy.execute_kw(
self.database, self.uid, self.password,
"sale.order.line" if model == "sale.order" else "purchase.order.line",
"search_read", [[("order_id", "=", record["id"])]],
{"fields": ["product_id", "name", "product_uom_qty", "price_unit", "price_subtotal"]}
)
if order_line_result:
enhanced_record["order_lines"] = order_line_result
enhanced_result.append(enhanced_record)
result = enhanced_result
return {"success": True, "data": result, "count": len(result)}
except Exception as e:
return {"success": False, "error": str(e), "data": [], "count": 0}
🎨 用户界面设计
主界面布局
系统采用现代化的界面设计,包含:
- 顶部导航:模式选择和网络模式切换
- 侧边栏:快速示例、连接状态、模型信息
- 主内容区:聊天界面和数据展示
- 响应式设计:适配不同屏幕尺寸
数据展示优化
- 智能表格:自动处理复杂数据类型
- 跨表数据:订单和产品信息的分离展示
- 数据统计:实时计算和展示关键指标
- 导出功能:支持 CSV 格式数据导出
🔧 安装和配置
环境要求
bash
Python 3.8+
Streamlit
pandas
openai
jinja2
xmlrpc
requests
配置步骤
- 安装依赖
bash
pip install streamlit pandas openai jinja2 requests
- 配置 Odoo 连接
python
# 修改连接参数
self.odoo_url = "http://your-odoo-server:8069"
self.database = "your-database-name"
- 配置 AI 服务
python
# 配置阿里云 DashScope API
self.openai_client = OpenAI(
api_key='your-dashscope-api-key',
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
- 启动应用
bash
streamlit run streamlit_odoo_dashscope_ai.py
💡 使用示例
基础查询示例
用户输入: "查找所有员工"
AI 解析: {"model": "hr.employee", "fields": ["name", "employee_id", "department_id", "work_email"]}
结果: 显示员工列表,包含姓名、工号、部门、邮箱
复杂查询示例
用户输入: "销售订单及产品信息"
AI 解析: {"model": "sale.order", "fields": ["name", "partner_id.name", "amount_total", "order_line"]}
结果: 显示订单概览 + 产品详情表格
条件查询示例
用户输入: "库存不足的产品"
AI 解析: {"model": "stock.quant", "domain": [["quantity", "<", 10]]}
结果: 显示库存少于10个的产品
🎯 应用场景
1. 企业管理层
- 实时数据监控:快速了解业务状况
- 决策支持:基于数据的决策分析
- 报表生成:自动生成各类业务报表
2. 业务人员
- 日常查询:快速查询客户、订单、库存信息
- 数据分析:分析销售趋势、库存状况
- 客户服务:快速响应客户查询需求
3. 技术人员
- 系统集成:作为 Odoo 系统的智能查询接口
- 数据导出:批量导出数据用于进一步分析
- API 开发:基于此系统开发更多应用
🔮 未来发展方向
1. 功能扩展
- 语音查询:支持语音输入和语音播报
- 图表可视化:集成更多图表类型
- 移动端适配:优化移动设备体验
2. AI 能力增强
- 多语言支持:支持英文等其他语言
- 智能推荐:基于历史查询推荐相关问题
- 预测分析:基于历史数据进行趋势预测
3. 系统集成
- 第三方系统:集成更多 ERP 和 CRM 系统
- API 开放:提供 RESTful API 接口
- 插件生态:支持自定义插件开发
📈 性能优化
1. 查询优化
- 缓存机制:缓存常用查询结果
- 分页加载:大数据量分页显示
- 异步处理:长时间查询异步执行
2. AI 服务优化
- 批量处理:批量处理多个查询
- 模型缓存:缓存 AI 模型响应
- 降级策略:AI 服务异常时的降级处理
🛡️ 安全考虑
1. 数据安全
- 用户认证:Odoo 用户认证机制
- 权限控制:基于用户权限的数据访问控制
- 数据加密:敏感数据传输加密
2. API 安全
- API 密钥管理:安全的 API 密钥存储
- 请求限流:防止 API 滥用
- 日志审计:完整的操作日志记录
📞 技术支持
联系方式
- 微信:H13655699934
常见问题
- 连接失败:检查 Odoo 服务状态和网络连接
- AI 服务异常:检查 DashScope API 密钥和配额
- 查询无结果:检查用户权限和查询条件
🎉 总结
这个 Odoo AI 智能查询系统通过结合现代 AI 技术和传统 ERP 系统,为企业提供了一个强大而易用的数据查询解决方案。它不仅降低了数据查询的技术门槛,还提供了智能化的用户体验,是现代企业数字化转型的重要工具。
通过自然语言处理技术,用户可以用日常语言查询复杂的业务数据,大大提高了工作效率。同时,系统的模块化设计和扩展性为未来的功能增强提供了良好的基础。
本文档介绍了基于 Streamlit 和阿里云 DashScope 的 Odoo AI 智能查询系统的完整功能和技术实现。该系统为企业提供了一个现代化、智能化的数据查询解决方案。