cortico-world-feast 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/README.md +5 -7
- package/package.json +4 -4
- package/src/data/african.json +374 -0
- package/src/data/anglo-american.json +150 -185
- package/src/data/cantonese.json +662 -37
- package/src/data/eastern-european.json +377 -0
- package/src/data/{southern-european.json → european.json} +238 -12
- package/src/data/french.json +146 -38
- package/src/data/fujian-taiwan.json +521 -0
- package/src/data/hubei.json +516 -0
- package/src/data/hunan.json +439 -0
- package/src/data/italian.json +152 -37
- package/src/data/japanese.json +295 -0
- package/src/data/jiangzhe-hu.json +1118 -0
- package/src/data/korean.json +149 -37
- package/src/data/latin-american.json +453 -0
- package/src/data/mexican.json +113 -0
- package/src/data/middle-eastern.json +398 -36
- package/src/data/northeast.json +475 -37
- package/src/data/northern.json +630 -112
- package/src/data/northwest.json +407 -0
- package/src/data/shandong.json +478 -37
- package/src/data/sichuan.json +788 -39
- package/src/data/{indian.json → south-asian.json} +125 -12
- package/src/data/southeast-asian.json +188 -0
- package/src/data/southwest.json +898 -0
- package/src/eat.js +49 -8
- package/src/world.js +2 -2
- package/src/data/desserts.json +0 -440
- package/src/data/home-cooking.json +0 -559
- package/src/data/jiangnan.json +0 -454
- package/src/data/yunnan-guizhou.json +0 -449
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,69 @@
|
|
|
1
1
|
# 更新日志
|
|
2
2
|
|
|
3
|
+
## 0.5.0
|
|
4
|
+
|
|
5
|
+
补到 **500 道 / 24 个菜系组**,中餐 300 + 外餐 200。分类不加新轴:还是「`cuisine` 只说地域、`category` 只说形态」。
|
|
6
|
+
|
|
7
|
+
**新开三个地域组**
|
|
8
|
+
|
|
9
|
+
305 道摊在 21 组上,粤菜和日料已经 22 道,再往里塞就成了一锅。这次按"那片地方真有很多菜、且和邻近组不重叠"开了三组:
|
|
10
|
+
|
|
11
|
+
- **拉美菜**(12 道):秘鲁、巴西、阿根廷、古巴。墨西哥本来单独成组,不并进来。
|
|
12
|
+
- **东欧菜**(10 道):俄罗斯、乌克兰、波兰、匈牙利、捷克。
|
|
13
|
+
- **非洲菜**(10 道):摩洛哥、突尼斯、埃及(北非)、埃塞俄比亚、尼日利亚、肯尼亚、南非。
|
|
14
|
+
|
|
15
|
+
**印度菜改名南亚菜**
|
|
16
|
+
|
|
17
|
+
那一组现在收巴基斯坦的尼哈里、斯里兰卡的碗状薄饼、孟加拉的芥末鱼咖喱,再叫"印度菜"就不老实了。和 0.4.0 把南欧菜改成欧洲菜是同一个理由。
|
|
18
|
+
|
|
19
|
+
**⚠ 破坏性:`cuisine` 的「印度菜」变成了「南亚菜」**,存了旧值的筛选会筛不到菜。
|
|
20
|
+
|
|
21
|
+
**各组都摊厚了**
|
|
22
|
+
|
|
23
|
+
粤菜 22→32、川菜 12→32、江浙沪菜 18→30、北方菜 20→30、日料 22→28、西北菜 20→28、鄂菜 12→26、闽台菜 15→26;原来最薄的川菜、鄂菜、西南菜翻了一倍。现在最薄的一组也有 10 道。
|
|
24
|
+
|
|
25
|
+
新菜一律先写死 `region` 再归组(济南油旋归鲁菜、凯里酸汤牛肉归西南菜、拉合尔尼哈里归南亚菜),没有一道靠"另开一组"安置。
|
|
26
|
+
|
|
27
|
+
**工具与校验**
|
|
28
|
+
|
|
29
|
+
- `tools/one-shot/check-plan.mjs`:按组对账,`旧库 + 新菜` 差一道就红。这一轮吃过亏——批次文件名算错,两个 agent 写了同一个文件,前一批被**悄悄覆盖**,少了 10 道却没有任何报错。
|
|
30
|
+
- 新增 4 项测试:每组至少 10 道、新开三组都在且有菜、南亚菜里出现印度以外的国家、起手句不许同组同句式。
|
|
31
|
+
- 195 道新菜全部一次过 `validate-dishes`。
|
|
32
|
+
|
|
33
|
+
## 0.4.0
|
|
34
|
+
|
|
35
|
+
菜系分类回炉:拆掉最后两个非地域组,修掉 16 处"region 写甲地、cuisine 写乙菜系"的错位。**21 组 / 305 道。**
|
|
36
|
+
|
|
37
|
+
**上一版的分类还留着五个问题**
|
|
38
|
+
|
|
39
|
+
0.3.0 把形态轴拆干净了,但菜系轴上还剩两处例外,而且不少菜的产地和菜系对不上:
|
|
40
|
+
|
|
41
|
+
- **家常菜**是风格不是地域,它 15 道里大半 `region` 本来就写着具体地方(红烧排骨=苏州、手撕包菜=长沙)。
|
|
42
|
+
- **甜品**在 `category` 里已经有一个同名值,菜系里再放一个等于同一根轴出现两次——问"甜品在哪",答案是"两个地方都有"。上一版留它的理由("德式甜点没别的家")不成立。
|
|
43
|
+
- 上海葱油饼挂在北方菜、南宁老友粉在云贵菜、三道上海菜在江浙菜——组名没把地域说全。
|
|
44
|
+
|
|
45
|
+
**现在 21 组,没有非地域组**
|
|
46
|
+
|
|
47
|
+
中餐 11:川、粤、江浙沪、北方、湘、西南、东北、西北、闽台、鲁、鄂;外餐 10:日料、韩式、东南亚、印度、墨西哥、意、法、欧洲、英美、中东。
|
|
48
|
+
|
|
49
|
+
- 甜品解散(12 道):双皮奶/姜撞奶/糖不甩/芝麻糊/雪媚娘→粤菜,桂花酒酿圆子/桂花糕→江浙沪菜,杏仁豆腐→北方菜,芋泥→闽台菜,榴莲千层→东南亚,铜锣烧→日料,黑森林蛋糕→欧洲菜。
|
|
50
|
+
- 家常菜解散(15 道)按 `region` 归位;5 道只写「中国」这类空话的,一并补成具体城市。
|
|
51
|
+
- 江浙菜→**江浙沪菜**、云贵菜→**西南菜**(含广西)、南欧菜→**欧洲菜**(收德国黑森林蛋糕、比利时薯条)。
|
|
52
|
+
- 修掉 16 处错位:上海葱油饼→江浙沪、济南韭菜盒子→鲁菜、西安羊杂汤→西北、北京糖蒜与绿豆雪糕→北方、东北夜市烤五花肉卷金针菇→东北、台南红豆牛奶冰与福建银耳莲子羹→闽台、巴黎香草冰淇淋→法餐、比利时脆薯条与布鲁塞尔热可可→欧洲、扬州酸辣汤→江浙沪(勾芡的淮扬羹,不是红油那路)、蒂华纳凯撒沙拉→墨西哥、托斯卡纳烤鸡→意菜、埃塞俄比亚手冲→中东、京都冷萃→日料。
|
|
53
|
+
- 搬到英美菜和韩式各剩 11 道,补了**布法罗鸡翅**和**春川辣炒鸡排**。
|
|
54
|
+
|
|
55
|
+
**⚠ 破坏性:旧的 `cuisine` 值失效。** 「江浙菜」「云贵菜」「南欧菜」「家常菜」「甜品」不再存在,存了旧值的筛选条件会筛不到菜。想按形态找甜品请用 `category`。
|
|
56
|
+
|
|
57
|
+
**「先喝了口汤」不再念给没汤的菜**
|
|
58
|
+
|
|
59
|
+
这句原来在通用正餐池里,于是布法罗鸡翅、烤串、煎饼都会"先喝了口汤"(全库抽样 2457 次里撞上 345 次)。现在汤羹和火锅单独一档,并加单测锁住。
|
|
60
|
+
|
|
61
|
+
**工具**
|
|
62
|
+
|
|
63
|
+
- 新增 `tools/one-shot/regroup-regions.mjs`:这次的拆组 + 修错位迁移,同 0.3.0 的写法(逐道写归属、漏一道就整批退出、`--dry` 预演)。
|
|
64
|
+
- 跑完的一次性脚本移进 `tools/one-shot/`,免得有人重复跑引用已删文件的脚本。
|
|
65
|
+
- `DISH-SPEC.md` 的判据第 3 条改成"先补 `region` 再归组",并明写不许再引入非地域组。
|
|
66
|
+
|
|
3
67
|
## 0.3.0
|
|
4
68
|
|
|
5
69
|
菜系和形态终于拆成两根轴,菜单改成"先选类别、再在里面挑菜系"。同时补到 300 道。
|
|
@@ -37,6 +101,7 @@
|
|
|
37
101
|
- `tools/publish-check.mjs` 不再写死 25 个数据文件,改成跟 `GROUPS` 的组数走。
|
|
38
102
|
- `tools/check-file.mjs` 不变。
|
|
39
103
|
|
|
104
|
+
|
|
40
105
|
## 0.2.0
|
|
41
106
|
|
|
42
107
|
菜单从 80 道加到 200 道,多了 5 个菜系;面板也不再在两三百道时悄悄截掉一截。
|
package/README.md
CHANGED
|
@@ -2,21 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
给 Coo 一张会端菜的桌子。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
500 道菜(24 个菜系组),每道都有九维口味分值、上桌的样子、香气、口感、余韵,和一段 40-400 字的实吃描写。她能自己按菜系挑着吃,主人也能从面板把一道菜端到她面前。**同一道菜每次吃到的都不一样**——温度、状态、配的那口都会变,所以连着吃三次不会说三遍同一句话。吃过什么、对什么反应、攒出来的口味画像跨天留着。饭点提醒默认开着,可以在配置里一键关掉。
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## 里面有什么
|
|
10
10
|
|
|
11
|
-
**菜品库**:
|
|
11
|
+
**菜品库**:500 道,24 个菜系组。中餐 11 组 300 道、外餐 13 组 200 道。
|
|
12
12
|
|
|
13
13
|
| 中餐 | 外餐 |
|
|
14
14
|
| --- | --- |
|
|
15
|
-
|
|
|
15
|
+
| 川菜、粤菜、江浙沪菜、北方菜、湘菜、西南菜、东北菜、西北菜、闽台菜、鲁菜、鄂菜 | 日料、韩式、东南亚、印度菜、墨西哥菜、意菜、法餐、欧洲菜、英美菜、中东菜 |
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
**菜系和形态是两根轴,不混在一起。** `cuisine` 只说这道菜**从哪来**(川菜、法餐、中东菜…),`category` 只说它**是什么形态**(热菜、凉菜、主食、汤羹、面点、小吃、甜品、饮品、烧烤、火锅)。0.2.0 之前这两根轴是混着的——同一道菜可能既算「中式小吃」又算「江浙菜」,生煎包和小笼包就这么被拆到了两组。现在一道菜只有一个菜系归属,想按形态找就筛 `category`。
|
|
17
|
+
**菜系和形态是两根轴,不混在一起。** `cuisine` 只说这道菜**从哪来**(川菜、法餐、中东菜…),`category` 只说它**是什么形态**(热菜、凉菜、主食、汤羹、面点、小吃、甜品、饮品、烧烤、火锅)。0.2.0 之前这两根轴是混着的——同一道菜可能既算「中式小吃」又算「江浙菜」,生煎包和小笼包就这么被拆到了两组。0.4.0 又把两根轴上残留的两个「例外组」清了:**家常菜**(风格,不是地域)和**甜品**(`category` 里已经有同名值)。所以现在一道菜只有一个菜系归属,想按形态找就筛 `category`——「甜品」是筛 `category` 得到的,不是筛 `cuisine`。
|
|
20
18
|
|
|
21
19
|
每道菜 15 个字段:`id` / `name` / `alias` / `cuisine` / `category` / `region` / `ingredients` / `method` / `serving` / `taste`(九维)/ `texture` / `aroma` / `finish` / `prose` / `keywords`。
|
|
22
20
|
|
|
@@ -157,7 +155,7 @@ src/state.js 纯状态逻辑(不碰 fs / 定时器 / 宿主,可单测
|
|
|
157
155
|
src/dishes.js 菜品库加载、查找、筛选、随机、口味画像
|
|
158
156
|
src/eat.js 「这一口」的渲染(种子化,可复现)
|
|
159
157
|
src/ENV_PROMPT.md 进提示词的说明
|
|
160
|
-
src/data/*.json
|
|
158
|
+
src/data/*.json 24 组菜品数据
|
|
161
159
|
dist/webui.js 浏览器端面板(menu / history)
|
|
162
160
|
```
|
|
163
161
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cortico-world-feast",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "一桌菜 · 给 Coo 一张会端菜的桌子:
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "一桌菜 · 给 Coo 一张会端菜的桌子:500 道带九维口味、香气、口感与实吃描写的菜品(24 个菜系组),她能自己挑、主人能从面板端一道过去;同一道菜每次吃到的都不一样,吃过什么和口味画像跨天攒着;另有一套可开关的饭点提醒。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "青",
|
|
7
7
|
"repository": {
|
|
@@ -62,11 +62,11 @@
|
|
|
62
62
|
"locales": {
|
|
63
63
|
"zh": {
|
|
64
64
|
"displayName": "一桌菜",
|
|
65
|
-
"description": "给 Coo 一张会端菜的桌子:
|
|
65
|
+
"description": "给 Coo 一张会端菜的桌子:500 道菜(24 个菜系组),每道都有九维口味、香气、口感、余韵和一段实吃描写。她能自己按菜系挑,主人也能从面板把一道菜端到她面前;同一道菜每次吃到的都不一样(温度、状态、配的那口会变),吃过什么、对什么反应、口味画像跨天攒着。饭点提醒默认开着,可以在配置里一键关掉。"
|
|
66
66
|
},
|
|
67
67
|
"en": {
|
|
68
68
|
"displayName": "Table",
|
|
69
|
-
"description": "A table that serves food to your Coo:
|
|
69
|
+
"description": "A table that serves food to your Coo: 500 dishes across 24 cuisines, each with a nine-axis flavour profile, aroma, texture, aftertaste and a full paragraph of how it actually eats. She can pick by cuisine, or you can put a dish down in front of her from the panel. The same dish never lands the same way twice, and what she ate, how it landed and her taste profile accumulate across days. Meal reminders are on by default and can be switched off in config."
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"tags": [
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "marrakech-chicken-tagine",
|
|
4
|
+
"name": "马拉喀什塔吉锅炖鸡",
|
|
5
|
+
"alias": "柠檬橄榄焖鸡",
|
|
6
|
+
"cuisine": "非洲菜",
|
|
7
|
+
"category": "热菜",
|
|
8
|
+
"region": "摩洛哥马拉喀什",
|
|
9
|
+
"ingredients": [
|
|
10
|
+
"童子鸡",
|
|
11
|
+
"盐渍柠檬",
|
|
12
|
+
"绿橄榄",
|
|
13
|
+
"洋葱",
|
|
14
|
+
"藏红花",
|
|
15
|
+
"香菜"
|
|
16
|
+
],
|
|
17
|
+
"method": "整鸡剁成八块,用盐、姜末和藏红花水抓匀腌二十分钟。锅底铺洋葱圈,鸡块皮朝下码上去,淋橄榄油、加小半碗水,锥形盖扣严,小火焖四十分钟。开盖放盐渍柠檬片和绿橄榄,再焖十分钟,收到锅底汁能挂住勺背。",
|
|
18
|
+
"serving": "连锥形盖一起端上桌,揭盖白汽直冲到脸上,锅沿一圈汁还在冒小泡。鸡皮塌在骨头上,筷子一夹就滑开,橄榄滚到锅底,配的硬面包还热,手指捏住有点烫。",
|
|
19
|
+
"taste": {
|
|
20
|
+
"辣": 5,
|
|
21
|
+
"麻": 0,
|
|
22
|
+
"咸": 45,
|
|
23
|
+
"鲜": 62,
|
|
24
|
+
"甜": 15,
|
|
25
|
+
"酸": 30,
|
|
26
|
+
"苦": 3,
|
|
27
|
+
"油": 45,
|
|
28
|
+
"香": 78
|
|
29
|
+
},
|
|
30
|
+
"texture": "鸡皮一抿就化,肉纤维用手一撕就散开,盐渍柠檬的皮韧,嚼到后面带砂,橄榄在牙间爆出一小包汁。",
|
|
31
|
+
"aroma": "揭盖先是藏红花的土腥气冲上来,接着是洋葱煮化的甜,最后才闻到柠檬皮和橄榄的咸酸。",
|
|
32
|
+
"finish": "咽下去后舌根留下一层橄榄的咸,喉口慢慢泛出柠檬皮的精油味,五秒后嘴里发干,想再喝一口茶。",
|
|
33
|
+
"prose": "筷子夹住鸡腿一拧,骨头就退出来了。头一口只吃皮,咸和油一起铺在舌面上;吃到中段撕一块胸肉蘸锅底汤汁,酸从两侧腮帮子顶上来,肉反而更甜;最后把橄榄和柠檬皮留在碗底,用面包刮锅边那圈稠汁,面包吸饱了发软,手指上全是油。",
|
|
34
|
+
"keywords": [
|
|
35
|
+
"塔吉锅",
|
|
36
|
+
"盐渍柠檬",
|
|
37
|
+
"慢炖"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "marrakech-lamb-couscous",
|
|
42
|
+
"name": "马拉喀什羊肉库斯库斯",
|
|
43
|
+
"alias": "羊肉蒸麦粒",
|
|
44
|
+
"cuisine": "非洲菜",
|
|
45
|
+
"category": "主食",
|
|
46
|
+
"region": "摩洛哥马拉喀什",
|
|
47
|
+
"ingredients": [
|
|
48
|
+
"库斯库斯麦粒",
|
|
49
|
+
"羊腿肉",
|
|
50
|
+
"鹰嘴豆",
|
|
51
|
+
"胡萝卜",
|
|
52
|
+
"西葫芦",
|
|
53
|
+
"哈里萨辣酱"
|
|
54
|
+
],
|
|
55
|
+
"method": "麦粒倒进宽盆,洒淡盐水用手掌搓,搓到每粒都裹上粉,上蒸笼蒸二十分钟。取出倒回盆里抖散、洒水,再蒸,前后三次。羊肉与鹰嘴豆、胡萝卜同锅炖一小时,汤一勺勺淋在麦粒上让它自己吸。",
|
|
56
|
+
"serving": "麦粒堆成小山,顶上挖一个坑,羊肉和蔬菜码在坑里,汤沿粒缝往下渗。蒸笼布还冒热气,勺子插进去阻力很轻,粒与粒之间是松的,羊骨露在边上。",
|
|
57
|
+
"taste": {
|
|
58
|
+
"辣": 12,
|
|
59
|
+
"麻": 0,
|
|
60
|
+
"咸": 42,
|
|
61
|
+
"鲜": 55,
|
|
62
|
+
"甜": 8,
|
|
63
|
+
"酸": 10,
|
|
64
|
+
"苦": 2,
|
|
65
|
+
"油": 40,
|
|
66
|
+
"香": 70
|
|
67
|
+
},
|
|
68
|
+
"texture": "麦粒一咬就断,外面滑,芯里还留一点硬;鹰嘴豆压在舌面会瘪开成粉,羊肉的纤维横着散。",
|
|
69
|
+
"aroma": "先闻到蒸笼布的湿麦香,像刚晒过的粮食;拌开辣酱后是辣和蒜,羊肉的膻味最后才浮上来。",
|
|
70
|
+
"finish": "咽下去后嘴里留着麦子的干香,辣味在舌侧慢慢升起,喉咙发暖,过一会儿又想吃下一勺带汤的。",
|
|
71
|
+
"prose": "勺子戳进麦粒堆里,先感觉是松的。第一口不拌辣酱,只有麦子和羊汤的咸,粒在牙间一粒粒破开;吃到中间把辣酱搅进去,辣从舌根往上走,得赶紧再塞一勺带汤的麦粒压住;最后剩坑底的汤和几粒麦,用手指按着勺子刮干净,盆底露出陶釉。",
|
|
72
|
+
"keywords": [
|
|
73
|
+
"蒸麦",
|
|
74
|
+
"羊肉",
|
|
75
|
+
"周五"
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "cairo-ful-medames",
|
|
80
|
+
"name": "开罗蚕豆泥",
|
|
81
|
+
"alias": "福尔梅达梅斯",
|
|
82
|
+
"cuisine": "非洲菜",
|
|
83
|
+
"category": "小吃",
|
|
84
|
+
"region": "埃及开罗",
|
|
85
|
+
"ingredients": [
|
|
86
|
+
"干蚕豆",
|
|
87
|
+
"洋葱",
|
|
88
|
+
"大蒜",
|
|
89
|
+
"孜然",
|
|
90
|
+
"橄榄油",
|
|
91
|
+
"柠檬"
|
|
92
|
+
],
|
|
93
|
+
"method": "干蚕豆泡一夜,连泡水倒进厚底锅,加去皮蒜瓣,小火煮两小时到手指一按就烂。舀出大半捣成粗泥,余下连汤回锅,撒孜然和盐,淋生橄榄油搅两下,盛碗后在中间按个窝再浇油。",
|
|
94
|
+
"serving": "粗陶碗端上来还烫手,豆泥表面不平,油在窝里晃。旁边一摞现烙的扁面饼,边缘鼓起焦泡,撕开时有脆响,番茄丁和腌菜堆在小碟里。",
|
|
95
|
+
"taste": {
|
|
96
|
+
"辣": 8,
|
|
97
|
+
"麻": 0,
|
|
98
|
+
"咸": 40,
|
|
99
|
+
"鲜": 50,
|
|
100
|
+
"甜": 5,
|
|
101
|
+
"酸": 18,
|
|
102
|
+
"苦": 6,
|
|
103
|
+
"油": 52,
|
|
104
|
+
"香": 65
|
|
105
|
+
},
|
|
106
|
+
"texture": "豆泥粗,舌头顶上去还有半粒的颗粒感;饼带筋,嚼两下就软,腌菜丁在牙间咔一声。",
|
|
107
|
+
"aroma": "先是橄榄油的青草气,接着孜然冲鼻,最后才透出煮豆子的土味和蒜的辛辣。",
|
|
108
|
+
"finish": "咽下去后舌面发绵,孜然的余味停在后鼻腔,嘴里稍稍发酸,想再撕一块饼把碗擦一遍。",
|
|
109
|
+
"prose": "饼撕成三角,先蘸锅边那圈最干的豆泥。第一口只尝到咸和油,豆子的甜要嚼两下才出来;吃到一半把番茄丁和腌菜拌进去,酸把油压下去,勺子越挖越快;最后碗底剩一层油和几片豆皮,用饼角刮起来塞进嘴里,手指上留着橄榄油。",
|
|
110
|
+
"keywords": [
|
|
111
|
+
"早餐",
|
|
112
|
+
"蚕豆",
|
|
113
|
+
"面饼"
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "sfax-harissa-grilled-fish",
|
|
118
|
+
"name": "斯法克斯辣酱烤鱼",
|
|
119
|
+
"alias": "哈里萨烤鲷鱼",
|
|
120
|
+
"cuisine": "非洲菜",
|
|
121
|
+
"category": "烧烤",
|
|
122
|
+
"region": "突尼斯斯法克斯",
|
|
123
|
+
"ingredients": [
|
|
124
|
+
"鲷鱼",
|
|
125
|
+
"哈里萨辣酱",
|
|
126
|
+
"大蒜",
|
|
127
|
+
"孜然",
|
|
128
|
+
"香菜",
|
|
129
|
+
"柠檬"
|
|
130
|
+
],
|
|
131
|
+
"method": "整条鲷鱼两面各划三刀,辣酱、蒜末、孜然和橄榄油调成糊,抹进刀口和鱼腹,腌半小时。炭要烧到不见明火,鱼放抹油的铁箅上,离炭一掌高,一面六分钟再翻,皮起泡就刷一次油。",
|
|
132
|
+
"serving": "鱼整条躺在盘里,皮上裂开几处,白肉顶出来。盘底垫柠檬片和香菜,旁边小碗装着剩下的辣酱,铁箅的焦痕还印在鱼身上,筷子一压汁从裂口冒。",
|
|
133
|
+
"taste": {
|
|
134
|
+
"辣": 55,
|
|
135
|
+
"麻": 0,
|
|
136
|
+
"咸": 48,
|
|
137
|
+
"鲜": 66,
|
|
138
|
+
"甜": 5,
|
|
139
|
+
"酸": 25,
|
|
140
|
+
"苦": 8,
|
|
141
|
+
"油": 60,
|
|
142
|
+
"香": 82
|
|
143
|
+
},
|
|
144
|
+
"texture": "皮脆得能听见声音,一压就裂;贴骨的肉最嫩,叉子一刮成片;尾部肉紧,嚼着发干。",
|
|
145
|
+
"aroma": "上桌先闻到炭火的烟,然后是辣酱的辣和蒜,鱼腥被压到最底下,柠檬皮的气味最后才出来。",
|
|
146
|
+
"finish": "咽下去后口腔两侧发烫,辣停在喉咙口,炭味从鼻子后面透出来,五秒后很想喝凉的。",
|
|
147
|
+
"prose": "鱼皮先被筷子挑开一条缝,热气从那道口子里冒出来。第一口只吃皮和贴皮的肉,辣在舌尖炸开,得配一口面包;吃到中间往鱼腹里掏,那里吸满酱,咸辣更重,肉却更软;最后把骨两侧的碎肉刮进盘子,柠檬片也被挤过一遍,盘底的油用面包抹净。",
|
|
148
|
+
"keywords": [
|
|
149
|
+
"炭烤",
|
|
150
|
+
"哈里萨",
|
|
151
|
+
"海鱼"
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "marrakech-mint-tea",
|
|
156
|
+
"name": "马拉喀什薄荷茶",
|
|
157
|
+
"alias": "摩洛哥薄荷绿茶",
|
|
158
|
+
"cuisine": "非洲菜",
|
|
159
|
+
"category": "饮品",
|
|
160
|
+
"region": "摩洛哥马拉喀什",
|
|
161
|
+
"ingredients": [
|
|
162
|
+
"珠茶",
|
|
163
|
+
"新鲜薄荷",
|
|
164
|
+
"白糖"
|
|
165
|
+
],
|
|
166
|
+
"method": "珠茶先用滚水冲一遍倒掉,放进小银壶,加冷水上火煮到滚,抓一大把薄荷按进壶里再煮两分钟。放糖离火,壶嘴抬到离杯口三十厘米往下倒,倒出泡沫,再倒回壶里,来回三次。",
|
|
167
|
+
"serving": "玻璃杯里泡沫浮在表面,茶汤是琥珀色,薄荷叶立着沉在杯底。银壶嘴细长,倒的时候手腕要抬高,杯壁烫手,得捏住杯口那一圈才端得起来。",
|
|
168
|
+
"taste": {
|
|
169
|
+
"辣": 0,
|
|
170
|
+
"麻": 0,
|
|
171
|
+
"咸": 0,
|
|
172
|
+
"鲜": 10,
|
|
173
|
+
"甜": 70,
|
|
174
|
+
"酸": 3,
|
|
175
|
+
"苦": 15,
|
|
176
|
+
"油": 0,
|
|
177
|
+
"香": 60
|
|
178
|
+
},
|
|
179
|
+
"texture": "入口是细泡沫,滑过去;茶汤薄,不挂舌;薄荷叶嚼一下有纤维,凉意在齿间散开。",
|
|
180
|
+
"aroma": "端起来先闻到薄荷的凉,刺在鼻前;接着是绿茶的炒青味,糖的甜最后才被鼻子认出来。",
|
|
181
|
+
"finish": "咽下去后喉咙里回出一股凉,苦停在舌根,甜跟着慢慢退,一分钟内嘴里还是清的。",
|
|
182
|
+
"prose": "茶从高处落进杯子,泡沫还没消就喝了一口,嘴唇先碰到一层细密的泡。第一口甜得厉害,薄荷的凉冲上鼻腔;喝到半杯,糖沉下去,苦味显出来,茶变得有骨头;最后杯底剩一层泡沫和几片叶子,捞出来在手心闻一下,放回壶里续水。",
|
|
183
|
+
"keywords": [
|
|
184
|
+
"薄荷",
|
|
185
|
+
"绿茶",
|
|
186
|
+
"待客"
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"id": "lagos-party-jollof-rice",
|
|
191
|
+
"name": "拉各斯番茄焖饭",
|
|
192
|
+
"alias": "Jollof Rice",
|
|
193
|
+
"cuisine": "非洲菜",
|
|
194
|
+
"category": "主食",
|
|
195
|
+
"region": "尼日利亚拉各斯",
|
|
196
|
+
"ingredients": [
|
|
197
|
+
"长粒香米",
|
|
198
|
+
"塔塔西红椒酱",
|
|
199
|
+
"棕榈油",
|
|
200
|
+
"烟熏虾粉",
|
|
201
|
+
"咖喱粉与百里香"
|
|
202
|
+
],
|
|
203
|
+
"method": "长粒米淘三遍泡十分钟沥干。番茄、红椒、洋葱打成粗酱,棕榈油烧到冒烟倒酱,中火炒足十五分钟,炒到油重新浮出、颜色由亮红转深红才下米。米翻匀裹色,加高汤没过一指节,撒烟熏虾粉和百里香,盖严小火焖二十五分钟中途不开盖,最后五分钟转大火逼出锅底那层薄焦。",
|
|
204
|
+
"serving": "黑铁锅直接端上桌,锅底那片焦米贴着锅壁还在滋滋响,白汽从米缝里冒出来。勺背压下去能感到米粒弹回来,锅耳烫手,得垫块布才端得住。",
|
|
205
|
+
"taste": {
|
|
206
|
+
"辣": 45,
|
|
207
|
+
"麻": 0,
|
|
208
|
+
"咸": 55,
|
|
209
|
+
"鲜": 60,
|
|
210
|
+
"甜": 15,
|
|
211
|
+
"酸": 20,
|
|
212
|
+
"苦": 0,
|
|
213
|
+
"油": 62,
|
|
214
|
+
"香": 70
|
|
215
|
+
},
|
|
216
|
+
"texture": "米粒是分开的,咬开有轻微弹性,锅底焦片脆得发硬,牙齿先碰到脆壳再滑进软芯,舌面留一点细颗粒。",
|
|
217
|
+
"aroma": "先闻到棕榈油的甜腥和番茄炒透后的焦红味,接着是百里香和咖喱粉的干香,最后才浮出烟熏虾粉那点柴火气。",
|
|
218
|
+
"finish": "咽下去后嘴里留着淡淡的烟熏,喉咙后头微辣往上返,口水变多,再过一会儿只剩番茄的酸甜。",
|
|
219
|
+
"prose": "勺子先刮到锅底那层焦片,连同米一起舀进嘴里,第一口是滚烫的番茄酸和烟熏味一起压过来。吃到中间,米粒被汤润透,弹性还在,辣味一层层叠上来,得配一口冰水才接着扒。最后盘底剩一层碎焦米和油亮的红汤,用勺子顺着锅壁刮干净,那点锅巴的糊香才是这锅饭真正收尾的地方。",
|
|
220
|
+
"keywords": [
|
|
221
|
+
"派对大锅",
|
|
222
|
+
"锅底焦片",
|
|
223
|
+
"配炸鸡"
|
|
224
|
+
]
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"id": "addis-injera-misir-wot",
|
|
228
|
+
"name": "亚的斯英吉拉配红扁豆酱",
|
|
229
|
+
"alias": "Injera with Misir Wot",
|
|
230
|
+
"cuisine": "非洲菜",
|
|
231
|
+
"category": "主食",
|
|
232
|
+
"region": "埃塞俄比亚亚的斯亚贝巴",
|
|
233
|
+
"ingredients": [
|
|
234
|
+
"苔麸粉",
|
|
235
|
+
"红扁豆",
|
|
236
|
+
"柏柏尔辣椒粉",
|
|
237
|
+
"红洋葱",
|
|
238
|
+
"酥油"
|
|
239
|
+
],
|
|
240
|
+
"method": "苔麸粉兑水搅成稀糊,盖布室温放三天,等表面起满小泡、闻着发酸再用。平底铁盘烧到烫手,舀一勺面糊从外圈淋进中心,盖盖两分钟,饼面全部裂成蜂窝眼就取出,只煎一面。红扁豆煮到能捏碎,洋葱碎下干锅炒到出水发软,加酥油和柏柏尔粉炒出红油,倒豆子小火炖二十分钟,搅到起沙。",
|
|
241
|
+
"serving": "整张饼摊在大圆铝盘里,边缘卷起盖住四角,中间一坨红酱冒着热气。手撕饼时饼皮有点湿凉,盘底那几张早被酱浸软了,端盘的人手腕一沉。",
|
|
242
|
+
"taste": {
|
|
243
|
+
"辣": 50,
|
|
244
|
+
"麻": 0,
|
|
245
|
+
"咸": 45,
|
|
246
|
+
"鲜": 45,
|
|
247
|
+
"甜": 5,
|
|
248
|
+
"酸": 42,
|
|
249
|
+
"苦": 0,
|
|
250
|
+
"油": 32,
|
|
251
|
+
"香": 58
|
|
252
|
+
},
|
|
253
|
+
"texture": "饼皮软而带孔,撕开时筋道不散,嚼起来有发酸的回弹,配着扁豆泥的沙感,像含了一口细豆沙。",
|
|
254
|
+
"aroma": "先扑上来的是发酵面糊那种微酸的米香,然后才是柏柏尔辣椒的辛辣和酥油的奶味,最后留在鼻子里的是洋葱炒透的甜。",
|
|
255
|
+
"finish": "咽下去后舌根留着豆沙的厚和辣椒的余温,酸味慢慢退,喉咙会觉得干,得再来一口饼皮把味道压住。",
|
|
256
|
+
"prose": "撕下一角饼皮,指腹先蹭到那层密密的小孔,把红扁豆酱裹进去,第一口是酸的、软的,辣椒在后半段才追上来。吃到中间,酱里的酥油渗进饼孔,一张饼卷一勺酱,手指越来越黏,酸味把油全部抵消掉。最后盘底只剩一圈被酱浸红的饼边,卷起来一口吃掉,收在发酵的酸和辣椒的暖上。",
|
|
257
|
+
"keywords": [
|
|
258
|
+
"手抓",
|
|
259
|
+
"共享大盘",
|
|
260
|
+
"发酵酸"
|
|
261
|
+
]
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"id": "nairobi-mishkaki-beef-skewers",
|
|
265
|
+
"name": "内罗毕炭烤牛肉串",
|
|
266
|
+
"alias": "Mishkaki",
|
|
267
|
+
"cuisine": "非洲菜",
|
|
268
|
+
"category": "烧烤",
|
|
269
|
+
"region": "肯尼亚内罗毕",
|
|
270
|
+
"ingredients": [
|
|
271
|
+
"牛肋条肉",
|
|
272
|
+
"蒜姜泥",
|
|
273
|
+
"红辣椒粉",
|
|
274
|
+
"青柠汁",
|
|
275
|
+
"花生油"
|
|
276
|
+
],
|
|
277
|
+
"method": "牛肋条切成三厘米见方的块,用蒜姜泥、辣椒粉、青柠汁和油抓匀,冷藏腌满一小时。木签提前泡水,每串穿五六块,块与块之间留缝。炭烧到没有明火、灰面发白再上架,离炭十厘米,每面四分钟,总共只翻两次,最后一分钟刷一层腌料汁,听见油滴进炭里爆响就离火。",
|
|
278
|
+
"serving": "铁签还冒着白烟,油珠顺着肉块往下走,滴在炭上炸起一串火星。捏着签尾的木把,手指能感到肉块里的热度,盘底铺的洋葱丝被肉汁压软了。",
|
|
279
|
+
"taste": {
|
|
280
|
+
"辣": 30,
|
|
281
|
+
"麻": 0,
|
|
282
|
+
"咸": 52,
|
|
283
|
+
"鲜": 62,
|
|
284
|
+
"甜": 8,
|
|
285
|
+
"酸": 25,
|
|
286
|
+
"苦": 0,
|
|
287
|
+
"油": 55,
|
|
288
|
+
"香": 72
|
|
289
|
+
},
|
|
290
|
+
"texture": "外层焦壳脆得能听见响,咬到里头还是嫩的,纤维一扯就断,肥的部分化成油水,中间夹着一丝青柠的凉。",
|
|
291
|
+
"aroma": "先是炭火的焦味冲上来,跟着是蒜姜和辣椒粉混在烤肉上的辛香,最后才闻到青柠皮被挤破的清苦气。",
|
|
292
|
+
"finish": "咽下去后嘴里留着炭味和辣椒的烫,舌头两侧发紧,过十几秒渗出肉汁的甜,牙缝里还卡着一点焦壳。",
|
|
293
|
+
"prose": "还没入口,竹签尖上的油先滴到手腕上,烫得人换了个握法。咬下第一块,焦壳先碎开,肉汁跟着涌出来,蒜和辣椒的火气一直顶到鼻腔。吃到中间几块偏瘦,得蘸点青柠汁才不柴,肥的那块咬破后整串都润了。最后把签子上剩的碎肉刮下来,连同盘底泡软的洋葱丝一起吃了,手指上的盐和炭灰在裤子上蹭掉。",
|
|
294
|
+
"keywords": [
|
|
295
|
+
"炭火",
|
|
296
|
+
"街边摊",
|
|
297
|
+
"配乌加利"
|
|
298
|
+
]
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"id": "cape-town-boerewors",
|
|
302
|
+
"name": "开普敦波尔香肠",
|
|
303
|
+
"alias": "Boerewors",
|
|
304
|
+
"cuisine": "非洲菜",
|
|
305
|
+
"category": "烧烤",
|
|
306
|
+
"region": "南非开普敦",
|
|
307
|
+
"ingredients": [
|
|
308
|
+
"粗绞牛肉",
|
|
309
|
+
"带肥猪肩肉",
|
|
310
|
+
"烘烤芫荽籽",
|
|
311
|
+
"丁香与肉豆蔻",
|
|
312
|
+
"醋"
|
|
313
|
+
],
|
|
314
|
+
"method": "牛肉与带肥猪肩按七三粗绞,颗粒留到黄豆大小。芫荽籽烘过碾碎,与丁香、肉豆蔻、醋和盐一起揉进肉里,冰镇半小时。肠衣灌九分满,边灌边盘,不扎节也不扎孔。炭火离肉十五厘米,转着慢烤二十分钟,皮鼓起来、表面结出深褐网纹就离火,扎孔会让油和肉汁一起漏光。",
|
|
315
|
+
"serving": "一整圈肠盘在铁网上,粗得像手腕,油顺着肠皮往下淌,滴进炭里啪啪响。端盘时能听见肠皮还轻轻作响,铁盘烫得不敢直接上手,得用夹子把圈剪开。",
|
|
316
|
+
"taste": {
|
|
317
|
+
"辣": 5,
|
|
318
|
+
"麻": 0,
|
|
319
|
+
"咸": 58,
|
|
320
|
+
"鲜": 60,
|
|
321
|
+
"甜": 5,
|
|
322
|
+
"酸": 18,
|
|
323
|
+
"苦": 0,
|
|
324
|
+
"油": 72,
|
|
325
|
+
"香": 65
|
|
326
|
+
},
|
|
327
|
+
"texture": "肠皮咬下去先绷一下再噗地破开,肉芯粗绞的颗粒感很实,嚼到肥肉块会化开,颗粒之间还有芫荽籽的碎脆。",
|
|
328
|
+
"aroma": "先闻到的是肉和炭火的焦香,随后芫荽籽与丁香那种暖烘烘的药香追上来,最后是肠皮烤出的油香。",
|
|
329
|
+
"finish": "咽下去后肉汁的咸和醋的酸在舌面上停一会儿,喉咙里有丁香的暖,牙缝里留着粗绞的肉粒,手边那口凉啤酒刚好接上。",
|
|
330
|
+
"prose": "刀切下去,肠皮先绷住再弹开,第一截入口是烫的,油汁直接顺着嘴角流下来。吃到中段,粗绞的牛肉显出颗粒,芫荽籽在牙齿间碎开,丁香的暖慢慢从后面升上来,配一口烤玉米或一勺玉米糊才压得住这股脂香。最后把烤得最干的两头吃掉,皮更韧,咸味也最重,手背上全是油。",
|
|
331
|
+
"keywords": [
|
|
332
|
+
"炭火圈烤",
|
|
333
|
+
"不扎孔",
|
|
334
|
+
"配玉米糊"
|
|
335
|
+
]
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"id": "cape-malay-curry-mince-pie",
|
|
339
|
+
"name": "开普敦咖喱肉馅饼",
|
|
340
|
+
"alias": "Cape Malay Curry Mince Pie",
|
|
341
|
+
"cuisine": "非洲菜",
|
|
342
|
+
"category": "面点",
|
|
343
|
+
"region": "南非开普敦",
|
|
344
|
+
"ingredients": [
|
|
345
|
+
"牛肉末",
|
|
346
|
+
"开普马来咖喱粉",
|
|
347
|
+
"黄杏酱",
|
|
348
|
+
"洋葱",
|
|
349
|
+
"起酥面团"
|
|
350
|
+
],
|
|
351
|
+
"method": "牛肉末要带点肥,冷锅下锅压散,先炒干多余的水再炒到粒粒分明。洋葱碎用黄油炒到焦黄,加咖喱粉、姜黄和月桂炒香,倒回肉末,放一勺黄杏酱和醋,小火煮到几乎没有汤汁,馅太湿酥皮就会塌。面团包成半月形,边缘用叉子压两遍,刷蛋液,两百摄氏度烤二十分钟到金黄。",
|
|
352
|
+
"serving": "从铁盘里提起来,酥皮边缘还在掉渣,油印留在吸油纸上。半边鼓起来,热气从叉子压过的封口往外冒,指尖碰一下就缩手。",
|
|
353
|
+
"taste": {
|
|
354
|
+
"辣": 35,
|
|
355
|
+
"麻": 0,
|
|
356
|
+
"咸": 50,
|
|
357
|
+
"鲜": 55,
|
|
358
|
+
"甜": 30,
|
|
359
|
+
"酸": 30,
|
|
360
|
+
"苦": 0,
|
|
361
|
+
"油": 70,
|
|
362
|
+
"香": 62
|
|
363
|
+
},
|
|
364
|
+
"texture": "酥皮是层层脆的,咬下去先掉一圈渣,里面的肉末松散带汁,偶尔咬到洋葱的软甜,封口那两折更硬更筋。",
|
|
365
|
+
"aroma": "先闻到黄油酥皮的奶香,接着是咖喱粉里孜然和香菜籽的热香,最后才是黄杏酱那股微微发酸的果甜。",
|
|
366
|
+
"finish": "咽下去后咖喱的辣慢慢退,嘴里留下一点果酱的酸甜和酥皮的油,手指上还沾着渣,得舔一下才干净。",
|
|
367
|
+
"prose": "手指先沾到酥皮渣,咬开第一口是烫的,油和咖喱的辣一起冲出来,赶快哈两口气。吃到中间,肉末和黄杏酱混在一起,辣被甜按住,酥皮一层层塌下去,到后半只就有点散,得用另一只手托着。最后剩的封口边最硬,蘸掉盘里那点肉汁吃干净,手指上全是黄油和咖喱粉。",
|
|
368
|
+
"keywords": [
|
|
369
|
+
"黄杏酱",
|
|
370
|
+
"半月形",
|
|
371
|
+
"趁热吃"
|
|
372
|
+
]
|
|
373
|
+
}
|
|
374
|
+
]
|