基于大模型 API 的早餐自动算价器实现
背景与需求
在日常消费场景中,尤其是早餐店等高频小额交易场景,人工计算价格容易出现误差。为了验证大模型在垂直场景下的落地能力,本文设计并实现了一个早餐价格自动计算应用。该应用能够识别菜单图片中的商品信息,解析用户的自然语言点餐指令,并准确计算总金额。
系统架构设计
本方案采用多模态大模型与文本大模型协同工作的架构:
- 图像识别层:使用多模态大模型(如 GLM-4V)对菜单图片进行 OCR 识别,提取商品名称与单价。
- 意图理解层:使用文本大模型(如 GLM-4)解析用户口语化点餐内容,对齐菜单标准名称并提取数量。
- 逻辑计算层:通过代码遍历提取结果,执行乘法累加运算得出总价。
- 对话管理:支持多轮对话上下文,处理修改订单的需求。
技术实现细节
1. 菜单信息识别与抽取
首先需要对早餐店的菜单图片进行处理。由于菜单排版各异,提示词工程需强调结构化输出,避免模型幻觉。
提示词设计要点
- 角色设定:明确为 OCR 专家。
- 约束条件:强制 JSON 格式输出,数值不带单位,严禁联想补充。
- 示例引导:提供标准的 JSON 结构示例。
ocr_prompt = """
## Role
你是一名 OCR 专家。
## Goals
请根据提供的菜单图片内容,识别出图片的菜品名称以及价格,并用 json 结构输出。
## Constrains
- 输出结果必须为 json 格式;
- json 内容的 key 为菜品名称,value 为价格;
- value 结果中不需要带单位,只放数值,类型为 float;
- 识别内容必须严格按照遵循图片内容,不要联想,不要自己发挥;
- 言简意赅,直接输出 json 结果。
## Example
json 结果示例如下:
{"key1": value1, "key2": value2}
## Initialization
请根据提供图片开始内容解析。
"""
API 调用配置
调用时务必设置 response_format 参数为 json_object,确保返回结果可直接被程序解析,减少后续正则清洗的成本。
from zhipuai import ZhipuAI
import json
api_key = "YOUR_API_KEY"
client = ZhipuAI(api_key=api_key)
image_url = "https://example.com/menu.jpg" # 替换为实际图片 URL
query_ocr = ocr_prompt
response = client.chat.completions.create(
model="glm-4v-flash",
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": image_url}},
{"type": , : query_ocr}
]
}
],
response_format={: }
)
menu_data = json.loads(response.choices[].message.content)
(menu_data)


