# order-agent-4.0 **Repository Path**: fengqi0705/order-agent-4.0 ## Basic Information - **Project Name**: order-agent-4.0 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-06-24 - **Last Updated**: 2026-06-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 一、UV的基本使用 1.1 按照uv: powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" 1.2 创建项目目录,进入目录环境中,创建虚拟环境 uv venv --python 3.12 1.3 初始化项目 uv init 1.4 按照项目依赖 uv add xxxx #添加依赖 uv remove xxx #删除依赖 uv sync #同步更新 注意:项目的依赖信息在pyproject.toml文件中 我们项目需要的依赖信息如下: uv add langchain uv add langchain-openai uv add langchain-huggingface uv add python-dotenv uv add pymysql uv add pymilvus uv add torch uv add sentence-transformers uv add sqlalchemy uv add langchain_mcp_adapters uv add fastapi uv add redis 二、创建业务数据库 CREATE DATABASE menu CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; USE `menu`; -- ---------------------------- -- Table structure for menu_items -- ---------------------------- DROP TABLE IF EXISTS `menu_items`; CREATE TABLE `menu_items` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '菜品ID,主键自增', `dish_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜品名称', `price` decimal(8, 2) NOT NULL COMMENT '价格(元)', `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '菜品描述', `category` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜品分类', `spice_level` tinyint NULL DEFAULT 0 COMMENT '辣度等级:0-不辣,1-微辣,2-中辣,3-重辣', `flavor` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '口味特点', `main_ingredients` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '主要食材,多个食材用逗号分隔', `cooking_method` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '烹饪方法', `is_vegetarian` tinyint(1) NULL DEFAULT 0 COMMENT '是否素食:0-否,1-是', `allergens` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '过敏原信息,多个过敏原用逗号分隔', `is_available` tinyint(1) NULL DEFAULT 1 COMMENT '是否可供应:0-不可用,1-可用', `is_featured` tinyint(1) NULL DEFAULT 0 COMMENT '是否特色主菜:0-否,1-是', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, INDEX `idx_category`(`category`) USING BTREE, INDEX `idx_is_available`(`is_available`) USING BTREE, INDEX `idx_is_vegetarian`(`is_vegetarian`) USING BTREE, INDEX `idx_price`(`price`) USING BTREE, INDEX `idx_spice_level`(`spice_level`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '菜单表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of menu_items -- ---------------------------- INSERT INTO `menu_items` VALUES (1, '宫保鸡丁', 28.00, '经典川菜,鸡肉丁配花生米,酸甜微辣,口感丰富', '川菜', 2, '酸甜微辣', '鸡胸肉,花生米,青椒,红椒,葱段', '爆炒', 0, '花生,可能含有麸质', 1,1,now(),now()); INSERT INTO `menu_items` VALUES (2, '麻婆豆腐', 18.00, '四川传统名菜,嫩滑豆腐配麻辣汤汁,下饭神器', '川菜', 3, '麻辣鲜香', '嫩豆腐,牛肉末,豆瓣酱,花椒', '烧炒', 0, '大豆,可能含有麸质', 1, 0,now(),now()); INSERT INTO `menu_items` VALUES (3, '清炒时蔬', 15.00, '新鲜时令蔬菜清炒,营养健康,口感清爽', '素食', 0, '清淡爽口', '时令蔬菜,蒜蓉', '清炒', 1, '', 1, 1,now(),now()); INSERT INTO `menu_items` VALUES (4, '红烧鲈鱼', 45.00, '新鲜鲈鱼红烧制作,肉质鲜美,营养丰富', '鲁菜', 1, '咸鲜微甜', '鲈鱼,生抽,老抽,冰糖,葱姜', '红烧', 0, '鱼类', 1, 1,now(),now()); INSERT INTO `menu_items` VALUES (5, '蒜蓉西兰花', 12.00, '新鲜西兰花配蒜蓉,营养丰富,适合减肥人群', '素食', 0, '蒜香清淡', '西兰花,大蒜,橄榄油', '蒸炒', 1, '无过敏源', 1,0,now(),now()); drop table IF EXISTS reservation_order; CREATE TABLE reservation_order( id int AUTO_INCREMENT COMMENT '预订单ID,主键自增', num_people int NOT NULL COMMENT '客人人数', num_children int NOT NULL COMMENT '儿童人数', arrival_time datetime NOT NULL COMMENT '到达时间', seat_preference varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '座位偏好', main_dish_preference varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '主菜偏好', other_comments text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '其他备注需求', created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '预订单表' ROW_FORMAT = Dynamic; 在实际的项目开发中: 1.需求:产品经理 1.1 智能聊天 1.2 预订查询 1.3 菜单查询 2.概要设计: 2.1 技术 2.2 功能设计 2.3 接口设计 GET /faq/suggest?query POST /chat GET /menu/list 用户输入的问题和FAQ中的问题进行匹配,返回匹配到的问题。这里使用“顺序匹配+词袋匹配+包含加分”给用户问题和FAQ问题进行相似度打分。 1、文本清洗:把标点符号、空格这些除掉,只看核心字 "位置在哪里啊????" --》"位置在哪里啊" 2、顺序匹配:找出两个字符串最长公共子序列,而且考虑顺序的(SequenceMatcher) query: abcdef question: rtabcedgef 最长公共子序列:abc,然后继续找剩下部分的公共部分。。。 最后算出得分:2 * 公共部分总长度/(两个字符串长度之和) query: "密码忘记了怎么办?" question: "忘记了密码怎么办?" 意思一样,但是词序换了,但是得分会偏低,这就是顺序匹配的缺点。 3、词袋匹配(jaccard相似度):不管顺序,只看你有的字我是不是也有 jaccard相似度= 两个集合的交集/两个集合的并集 query: "密码忘记了怎么办"-》 字袋{密 码 忘 记 了 怎 么 办} question: "忘记了密码怎么办"-》字袋{忘 记 了 密 码 怎 么 办} 交集:8 并集:8 Jaccard相似度:8/8=1 4、加分:补偿0.2 5、最终得分:顺序匹配得分*0.6 + 词袋匹配得分*0.4 + 0.2 生产环境下,Embedding+余弦相似度,这种才能真正理解语义,