图片

项目背景

面对陌生语言的菜单,如何快速识别菜品并准确下单?这一痛点长期困扰着跨国旅行者和留学生。基于此,我开发了“AI 识菜通”——一款融合多模态感知、跨语言理解与生成式视觉的智能点餐助手。

用户只需上传一张任意语言的菜单图片,即可在数秒内获得结构化、本地化(中文)的菜品列表,每道菜附带精准描述与逼真图像,并支持一键加入购物车、生成可直接向服务员展示的点餐字符串。

这看似简单的功能背后,涉及图像识别、多语言翻译、AI 图像生成等多项技术的协同工作。本文将重点介绍我们如何运用 TRAE SOLO 的上下文工程能力,协同豆包大模型 Version 1.6 和 Seedream 4.0,构建这个端到端的智能点餐系统。

图片

从 Prompt Engineering 到 Context Engineering 的演进

过去几年,大家都在谈论 Prompt Engineering(提示词工程),通过精心设计输入文本来引导 AI 模型输出期望的结果。但随着 AI 应用场景越来越复杂,单纯的 prompt 已经不够用了。

想象一下,如果你要开发一个智能客服系统,它不仅要理解用户当前的问题,还要记住之前的对话内容,知道用户的身份信息,甚至要根据不同的业务场景调用不同的处理流程。这时候,静态的 prompt 就显得力不从心了。

上下文工程(Context Engineering)正是为了解决这个问题而生。它不再把 AI 调用看作一次性的“黑箱请求”,而是将其放在一个结构化、可演化、可追溯的上下文空间中。简单来说,就是要在正确的时间,给正确的模型,提供正确的上下文信息。

图片

技术选型:豆包大模型生态

本项目所用的视觉理解大模型和文生图大模型均采用火山引擎 Mass 平台,分别是 doubao-seed-1-6-vision-250815 和 doubao-seedream-4-0-250828,主要基于两个考量:

doubao-seed-1-6-vision 具备强大的视觉理解能力,适用于视频理解、Grounding、GUI Agent 等高复杂度场景。相比 Doubao-1.5-thinking-vision-pro,它在教育、图像审核、巡检与安防和 AI 搜索问答等场景下展现出更强的通用多模态理解和推理能力,支持 256k 上下文窗口,输出长度支持最大 64k tokens。

doubao-seedream-4.0 基于领先架构的 SOTA** 级多模态图像创作模型,打破传统文生图模型的创作边界。它原生支持文本、单图和多图输入,用户可自由融合文本与图像,在同一模型下实现基于主体一致性的多图融合创作、图像编辑、组图生成等多样玩法。

接入指南

通过火山引擎 Mass 平台(www.volcengine.com/)可以快速接入这些模型…

图片

点击所需的 AI API 进入,进行快捷 API 接入即可。

图片图片

以下是调用示例:

doubao-seed-1-6-vision 调用示例:

curl https://ark.cn-beijing.volces.com/api/v3/chat/completions 
  -H "Content-Type: application/json" 
  -H "Authorization: Bearer your api key" 
  -d $'{
    "model": "doubao-seed-1-6-vision-250815",
    "messages": [
        {
            "content": [
                {
                    "image_url": {
                        "url": "https://ark-project.tos-cn-beijing.ivolces.com/images/view.jpeg"
                    },
                    "type": "image_url"
                },
                {
                    "text": "图片主要讲了什么?",
                    "type": "text"
                }
            ],
            "role": "user"
        }
    ]
}'

doubao-seedream-4.0 调用示例:

curl -X POST https://ark.cn-beijing.volces.com/api/v3/images/generations 
  -H "Content-Type: application/json" 
  -H "Authorization: Bearer your api key" 
  -d '{
    "model": "doubao-seedream-4-0-250828",
    "prompt": "Generate 3 images of a girl and a cow plushie happily riding a roller coaster in an amusement park, depicting morning, noon, and night.",
    "image": ["https://ark-doc.tos-ap-southeast-1.bytepluses.com/doc_image/seedream4_imagesToimages_1.png", "https://ark-doc.tos-ap-southeast-1.bytepluses.com/doc_image/seedream4_imagesToimages_2.png"],
    "sequential_image_generation": "auto",
    "sequential_image_generation_options": {
        "max_images": 3
    },
    "response_format": "url",
    "size": "2K",
    "stream": true,
    "watermark": true
}'

图片

基于 TRAE SOLO 的开发实践

开发流程概述

整个开发过程始于一个简单的需求描述:

我要做一个AI识菜通应用。功能是:用户可以上传一张任何语言菜单图片,调用视觉理解模型doubao-seed-1-6-vision-250815,分析菜单中的内容并翻译为中文,之后进入第二个页面:点菜页面,点菜页面会将AI翻译后的中文菜单一一展示,并且用户可以点菜。每一道菜都包含它的名字、它的介绍和一张图片,图片调用doubao-seedream-4-0-250828模型的生成图片,然后用户点加号可以把这道菜加入他的购物车,最后点提交生成一个一串字符,上面写他想要点哪些菜,方便他跟服务员说他要点哪些。这个字符应该包合中文名和他元语言的名字。项目需要使用react 实现,使用 shadcn、redix 组件库。AI模型的API KEY放在local storage,通过网页右上角的齿轮按钮输入。

输入到 TRAE SOLO 对话框中,TRAE SOLO 不会直接开始开发,而是会先设计两份文档,待我们确认之后才会开始开发。

图片

自动生成的项目文档

TRAE SOLO 会自动帮你创建两份文档,分别是需求文档和架构文档:

AI 识菜通产品需求文档

产品需求文档涵盖了产品概述、核心功能、用户流程和界面设计等方面。文档详细描述了三个主要页面:首页(菜单上传功能)、点餐页面(菜品展示列表、购物车管理)、设置页面(API 密钥配置),并绘制了完整的用户操作流程图。

# AI识菜通产品需求文档

## 1. 产品概述

AI识菜通是一款智能菜单识别与点餐应用,帮助用户快速理解任何语言的菜单内容并完成点餐。
用户只需上传菜单图片,AI即可自动识别并翻译菜单内容,生成精美的菜品图片,让用户轻松完成点餐流程。
该产品主要面向出国旅游、商务出差或在多语言环境用餐的用户,解决语言障碍带来的点餐困扰。

## 2. 核心功能

### 2.1 用户角色

本产品无需用户注册,所有功能对所有用户开放。

### 2.2 功能模块

我们的AI识菜通应用包含以下主要页面:

1. **首页**:菜单上传功能、应用介绍、导航菜单
2. **点餐页面**:菜品展示列表、购物车管理、订单生成
3. **设置页面**:API密钥配置、应用设置

### 2.3 页面详情

| 页面名称 | 模块名称   | 功能描述                              |
| ---- | ------ | --------------------------------- |
| 首页   | 菜单上传区域 | 支持拖拽或点击上传菜单图片,显示上传进度和预览           |
| 首页   | 应用介绍   | 展示应用功能特色和使用说明                     |
| 首页   | 导航栏    | 包含设置按钮和应用标题                       |
| 点餐页面 | 菜品列表   | 展示AI识别的菜品信息,包含中文名称、原文名称、描述和AI生成图片 |
| 点餐页面 | 购物车    | 显示已选菜品数量和总览,支持增减数量                |
| 点餐页面 | 订单生成   | 生成包含中文和原文的点餐清单字符串                 |
| 设置页面 | API配置  | 输入和保存Doubao API密钥                 |
| 设置页面 | 应用设置   | 语言偏好、主题设置等基础配置                    |

## 3. 核心流程

**主要用户操作流程:**

1. 用户进入首页,点击或拖拽上传菜单图片
2. 系统调用视觉识别AI分析菜单内容并翻译为中文
3. 跳转到点餐页面,展示识别结果和AI生成的菜品图片
4. 用户浏览菜品,点击加号将心仪菜品加入购物车
5. 确认选择后,生成包含中文和原文的点餐清单
6. 用户可将清单展示给服务员完成点餐

```mermaid
graph TD
    A[首页] --> B[上传菜单图片]
    B --> C[AI识别处理]
    C --> D[点餐页面]
    D --> E[浏览菜品]
    E --> F[添加到购物车]
    F --> G[生成点餐清单]
    A --> H[设置页面]
    H --> I[配置API密钥]
```

## 4. 用户界面设计

### 4.1 设计风格

* **主色调**:现代蓝色 (#3B82F6) 和温暖橙色 (#F59E0B)

* **辅助色**:中性灰色系 (#6B7280, #F3F4F6)

* **按钮样式**:圆角设计,悬停效果,阴影层次

* **字体**:中文使用思源黑体,英文使用 Inter 字体,主要字号 16px

* **布局风格**:卡片式设计,顶部导航,响应式网格布局

* **图标风格**:线性图标,统一的视觉语言,支持深浅主题

### 4.2 页面设计概览

| 页面名称 | 模块名称 | 界面元素                       |
| ---- | ---- | -------------------------- |
| 首页   | 上传区域 | 虚线边框的拖拽区域,上传图标,进度条,图片预览卡片  |
| 首页   | 导航栏  | 应用Logo,标题,设置齿轮图标按钮         |
| 点餐页面 | 菜品卡片 | 圆角卡片,AI生成图片,菜名标题,描述文本,加号按钮 |
| 点餐页面 | 购物车  | 浮动购物车图标,数量徽章,侧边栏展开面板       |
| 设置页面 | 配置表单 | 输入框,保存按钮,状态提示,分组设置项        |

### 4.3 响应式设计

应用采用移动优先的响应式设计,完美适配手机、平板和桌面设备。在移动端优化触摸交互体验,确保按钮大小适合手指操作。

4.4 API调用示例

doubao-seedream-4-0-250828调用示例如下

curl -X POST <https://ark.cn-beijing.volces.com/api/v3/images/generations> 

-H "Content-Type: application/json" 

-H "Authorization: Bearer your api key" 

-d '{

"model": "doubao-seedream-4-0-250828",

"prompt": "Generate 3 images of a girl and a cow plushie happily riding a roller coaster in an amusement park, depicting morning, noon, and night.",

"image": [" <https://ark-doc.tos-ap-southeast-1.bytepluses.com/doc_image/seedream4_imagesToimages_1.png> ", " <https://ark-doc.tos-ap-southeast-1.bytepluses.com/doc_image/seedream4_imagesToimages_2.png> "],

"sequential_image_generation": "auto",

"sequential_image_generation_options": {

"max_images": 3

},

"response_format": "url",

"size": "2K",

"stream": true,

"watermark": true

}'

doubao-seed-1-6-vision-250815调用示例

curl <https://ark.cn-beijing.volces.com/api/v3/chat/completions> 

-H "Content-Type: application/json" 

-H "Authorization: Bearer your api key" 

-d $'{

"model": "doubao-seed-1-6-vision-250815",

"messages": [

{

"content": [

{

"image_url": {

"url": " <https://ark-project.tos-cn-beijing.ivolces.com/images/view.jpeg> "

},

"type": "image_url"

},

{

"text": "图片主要讲了什么?",

"type": "text"

}

],

"role": "user"

}

]

}'

AI 识菜通技术架构文档

技术架构文档则从系统架构、技术选型、路由定义、API 接口、数据模型等维度进行了全面设计。架构采用纯前端方案,使用 React + TypeScript + Vite + TailwindCSS** 技术栈,集成 shadcn/ui 和 Radix UI 组件库,所有数据存储在 LocalStorage 中确保安全性。

# AI识菜通技术架构文档

## 1. Architecture design

```mermaid
graph TD
    A[用户浏览器] --> B[React前端应用]
    B --> C[Doubao Vision API]
    B --> D[Doubao Image Generation API]
    B --> E[LocalStorage]

    subgraph "前端层"
        B
        F[shadcn/ui组件]
        G[Radix UI组件]
        H[状态管理]
        B --> F
        B --> G
        B --> H
    end

    subgraph "外部服务"
        C
        D
    end

    subgraph "本地存储"
        E
    end
```

## 2. Technology Description

* Frontend: React@18 + TypeScript + Vite + TailwindCSS

* UI Components: shadcn/ui + Radix UI

* State Management: React Context + useState/useReducer

* HTTP Client: Fetch API

* Storage: LocalStorage

* Icons: Lucide React

* External APIs: Doubao Vision API, Doubao Image Generation API

## 3. Route definitions

| Route     | Purpose               |
| --------- | --------------------- |
| /         | 首页,菜单图片上传和AI处理        |
| /menu     | 点菜页面,显示翻译后的菜品列表和购物车功能 |
| /settings | 设置页面,配置API密钥和应用设置     |

## 4. API definitions

### 4.1 Core API

#### Doubao Vision API 调用

```
POST https://ark.cn-beijing.volces.com/api/v3/chat/completions
```

Request Headers:

| Header Name   | Value             | Description |
| ------------- | ----------------- | ----------- |
| Authorization | Bearer {API_KEY} | API密钥认证     |
| Content-Type  | application/json  | 请求内容类型      |

Request Body:

```json
{
  "model": "doubao-seed-1-6-vision-250815",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "请识别这张菜单图片中的所有菜品,并翻译为中文。请按照以下JSON格式返回:{"dishes": [{"originalName": "原文名称", "chineseName": "中文名称", "description": "菜品描述", "estimatedPrice": "预估价格"}]}"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/jpeg;base64,{base64_image}"
          }
        }
      ]
    }
  ]
}
```

#### Doubao Image Generation API 调用

```
POST https://ark.cn-beijing.volces.com/api/v3/images/generations
```

Request Headers:

| Header Name   | Value             | Description |
| ------------- | ----------------- | ----------- |
| Authorization | Bearer {API_KEY} | API密钥认证     |
| Content-Type  | application/json  | 请求内容类型      |

Request Body:

```json
{
  "model": "doubao-seedream-4-0-250828",
  "prompt": "高质量的{菜品名称}美食摄影,专业餐厅级别,自然光线,精美摆盘",
  "n": 1,
  "size": "1024x1024",
  "quality": "standard"
}
```

### 4.2 数据类型定义

```typescript
// 菜品信息
interface Dish {
  id: string;
  originalName: string;
  chineseName: string;
  description: string;
  estimatedPrice?: string;
  imageUrl?: string;
  isGeneratingImage?: boolean;
}

// 购物车项目
interface CartItem {
  dish: Dish;
  quantity: number;
}

// API配置
interface ApiConfig {
  visionApiKey: string;
  imageApiKey: string;
}

// 应用状态
interface AppState {
  dishes: Dish[];
  cart: CartItem[];
  isProcessing: boolean;
  processingStep: 'uploading' | 'analyzing' | 'translating' | 'generating_images' | 'completed';
  apiConfig: ApiConfig;
}
```

## 5. Data model

### 5.1 LocalStorage 数据结构

由于这是一个纯前端应用,所有数据都存储在浏览器的LocalStorage中:

```typescript
// API配置存储
localStorage.setItem('ai-menu-api-config', JSON.stringify({
  visionApiKey: string,
  imageApiKey: string
}));

// 最近处理的菜单缓存
localStorage.setItem('ai-menu-recent-dishes', JSON.stringify({
  timestamp: number,
  dishes: Dish[]
}));

// 用户偏好设置
localStorage.setItem('ai-menu-preferences', JSON.stringify({
  language: 'zh-CN',
  imageQuality: 'standard',
  autoGenerateImages: true
}));
```

### 5.2 组件状态管理

```typescript
// 全局应用状态 Context
const AppContext = createContext<{
  state: AppState;
  dispatch: React.Dispatch<AppAction>;
}>();

// 状态更新动作
type AppAction = 
  | { type: 'SET_DISHES'; payload: Dish[] }
  | { type: 'ADD_TO_CART'; payload: Dish }
  | { type: 'REMOVE_FROM_CART'; payload: string }
  | { type: 'UPDATE_CART_QUANTITY'; payload: { dishId: string; quantity: number } }
  | { type: 'SET_PROCESSING'; payload: boolean }
  | { type: 'SET_PROCESSING_STEP'; payload: AppState['processingStep'] }
  | { type: 'UPDATE_DISH_IMAGE'; payload: { dishId: string; imageUrl: string } };
```

## 6. 项目结构

```
ai-menu/
├── src/
│   ├── components/
│   │   ├── ui/                 # shadcn/ui组件
│   │   ├── ImageUpload.tsx     # 图片上传组件
│   │   ├── DishCard.tsx        # 菜品卡片组件
│   │   ├── Cart.tsx            # 购物车组件
│   │   ├── OrderSummary.tsx    # 订单摘要组件
│   │   └── ApiKeySettings.tsx  # API密钥设置组件
│   ├── pages/
│   │   ├── HomePage.tsx        # 首页
│   │   ├── MenuPage.tsx        # 点菜页面
│   │   └── SettingsPage.tsx    # 设置页面
│   ├── hooks/
│   │   ├── useApiConfig.ts     # API配置管理
│   │   ├── useImageUpload.ts   # 图片上传处理
│   │   └── useCart.ts          # 购物车逻辑
│   ├── services/
│   │   ├── doubaoApi.ts        # Doubao API调用
│   │   └── imageService.ts     # 图片处理服务
│   ├── context/
│   │   └── AppContext.tsx      # 全局状态管理
│   ├── types/
│   │   └── index.ts            # TypeScript类型定义
│   ├── utils/
│   │   ├── storage.ts          # LocalStorage工具
│   │   └── imageUtils.ts       # 图片处理工具
│   └── App.tsx
├── public/
├── package.json
├── tailwind.config.js
├── vite.config.ts
└── tsconfig.json
```

上下文工程开发

如果对于 SOLO 生成的文档不满意,或者有部分地方需要修改的话,是可以直接在文档中进行编辑的,这一点做得非常丝滑,SOLO 给我的整体体验就是整个项目开发过程全在你的掌控中。

文档就是 TRAE 对整个项目的理解,这个修正过程是很有必要的。确认文档无误后,TRAE SOLO 开始按照文档进行开发。整个过程展现了上下文工程的强大能力:

图片

智能依赖管理

SOLO 会在开发的过程中自动下载依赖、创建配置文件、生成函数、运行终端,遇到的问题也都会被当做上下文继续完善开发。

图片图片

实时错误处理

遇到编译错误时可以一键添加到上下文中进行修复,系统会根据上下文自动测试,比传统的复制控制台错误再手动调试要高效得多。

图片

动态需求调整

开发过程中可以随时打断并提出问题或修改需求,TRAE SOLO 会根据上下文重新思考,结合已生成的内容和新提出的内容进行综合考量,确保逻辑连贯。

图片

图片

成果展示

部署体验

项目部署选择了 Vercel 平台,Vercel 以其卓越的开发者体验和对现代前端框架的深度支持,极大简化了部署流程,整个部署流程仅需一句话即可完成。

图片

如果缺少 API 密钥或依赖,TRAE SOLO 会及时提醒补充信息。

图片

功能演示

首页界面

在部署完毕之后访问 AI 识菜通网址的第一印象就是首页,界面整洁,重点突出,作为初版生成效果还是符合预期的,后续可以给 TRAE 更多参考再优化。

图片

API 密钥设置

想要使用本项目的话,第一件事就是设置豆包大模型的 API 密钥,这里声明一下:用户自己的 API 密钥存放在本地的 storage 中,并不会上传到云端,确保用户的密钥安全。

图片

菜单识别流程

我从网上下载了一份英文菜单进行测试,看看项目到底能不能打:

图片

上传图片之后项目就会调用豆包大模型进行分析,整体的时间根据菜单内容的多少会有些出入,静静等待几分钟就好:

图片

菜单识别完毕之后,首页会提示,点击去点菜即可看到生成的中文菜单。

图片

以下是生成后的结果,可以看到,生成的图片是很符合菜单中的样子的,这样让本来晦涩难懂的菜单有了活力,这也许就是科技带给我们的意义吧,服务生活,然后这样就可以顺利点菜了:

图片

购物车管理

支持添加菜品、调整数量、删除操作,最终生成包含中文和原文的双语点餐清单,可直接展示给服务员。

图片图片

点击生成订单汇总,会生成一份刚刚的点菜 TXT 格式的清单:

图片

图片

总结

“AI 识菜通”是一个融合多模态 AI 能力的智能点餐应用,通过用户上传任意语言的菜单图片,自动调用豆包大模型(doubao-seed-1.6-vision)进行视觉识别与翻译,再结合 Seedream 4.0 生成高质量菜品图像,最终实现结构化中文菜单展示、购物车管理与点餐清单生成。整个项目采用 React + TypeScript 技术栈,集成 shadcn/ui 与 Radix UI 组件库,所有数据(包括 API 密钥)均本地存储于浏览器 LocalStorage,无需后端依赖。项目通过 Vercel 实现一键部署,具备完整的响应式设计与流畅的用户交互体验。

在这个过程中,TRAE SOLO 不仅是一款开发工具,更像一位“全栈 AI 工程师搭档” 。它从需求理解开始,自动生成产品文档与技术架构,再逐步完成项目初始化、依赖安装、组件开发、错误修复与部署上线,全程丝滑流畅。其上下文感知能力极强——即使中途打断或修改需求,也能基于已有上下文智能调整,确保逻辑连贯。更难得的是,它对开发者体验极度友好:自动处理依赖冲突、一键修复语法错误、实时预览效果,真正实现了“Talk。 Think. Ship.”的开发哲学。

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:[email protected]