修复清空记忆缺失

This commit is contained in:
ACT丶流星雨 2026-03-26 15:47:15 +08:00
parent 77e9d558d5
commit 696f0f6115
9 changed files with 84 additions and 142 deletions

View File

@ -1,77 +0,0 @@
# 烤龙肉的做法
## 前言
龙肉,作为幻想世界中最珍贵的食材之一,其烹饪方法自古以来就是冒险者和宫廷厨师们追求的终极秘技。以下是一份经典的烤龙肉食谱。
---
## 食材准备
| 食材 | 用量 | 备注 |
|------|------|------|
| 龙肉(里脊或腿肉) | 2公斤 | 需提前放血处理 |
| 龙息椒粉 | 2大勺 | 普通辣椒粉可替代 |
| 凤凰蛋黄 | 3个 | 鸡蛋黄可替代 |
| 精灵橄榄油 | 100毫升 | 特级初榨橄榄油可替代 |
| 矮人黑盐 | 适量 | 海盐可替代 |
| 迷迭香、百里香 | 各一把 | 新鲜为佳 |
| 蒜头 | 8瓣 | 拍碎 |
| 蜂蜜 | 3大勺 | 用于表面刷酱 |
---
## 烹饪步骤
### 第一步:腌制龙肉(需提前一天)
1. 将龙肉洗净,用厨房纸巾吸干表面水分
2. 用锋利的刀在肉面划几道深约1厘米的斜纹便于入味
3. 将蛋黄、橄榄油、龙息椒粉、黑盐混合,调成腌料
4. 均匀涂抹在龙肉表面,放入密封容器
5. 冷藏腌制12-24小时
### 第二步:准备香草束
1. 将迷迭香、百里香捆扎成束
2. 蒜瓣拍碎备用
3. 准备好蜂蜜刷酱
### 第三步:烤制
1. **预热烤炉**将烤炉预热至220°C若使用龙焰烤炉调至"青龙"档位)
2. **初次高温烤制**
- 将腌制好的龙肉放入烤盘
- 铺上香草束和蒜瓣
- 220°C烤制20分钟封住肉汁
3. **转中温慢烤**
- 温度降至160°C
- 每隔20分钟翻面一次并刷上蜂蜜
- 继续烤制约1.5-2小时视肉块大小调整
4. **检验熟度**
- 用探针温度计测量中心温度达65°C为五分熟
- 达75°C为全熟
- 龙肉建议七分熟约70°C口感最佳
### 第四步:静置与切片
1. 出炉后用锡纸包裹静置15分钟
2. 逆着纹理切成1厘米厚的片状
3. 摆盘,淋上烤盘中的肉汁
---
## 小贴士
- ⚠️ **安全提示**:处理龙肉时请佩戴防火手套,残余龙息可能引发灼伤
- 🍷 **搭配推荐**:建议搭配精灵白葡萄酒或矮人麦芽啤酒
- 🔥 若龙肉带有冰属性如霜龙烤制时间需延长30%
---
## 成品效果
外皮金黄酥脆,内部肉质鲜嫩多汁,带有独特的硫磺香气与蜂蜜的甜润,回味中隐约有龙息的微辣感。

View File

@ -443,7 +443,7 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
table.text("type").notNullable(); // "main" | "references" table.text("type").notNullable(); // "main" | "references"
table.integer("createTime").notNullable(); table.integer("createTime").notNullable();
table.integer("updateTime").notNullable(); table.integer("updateTime").notNullable();
table.integer("state").notNullable(); // 1正常0正在生成description-1description为空。-2归属为空,-3md5变动 table.integer("state").notNullable(); // 1正常0正在生成description-1description为空。-2归属为空,-3md5变动-4文件不存在
table.primary(["id"]); table.primary(["id"]);
}, },
initData: async (knex) => { initData: async (knex) => {

View File

@ -1,4 +1,4 @@
// @routes-hash 7cec68ede825a3753ef93dc3bab8f7ad // @routes-hash fd1b3ec2552be041f1b6e9582eb842b6
import { Express } from "express"; import { Express } from "express";
import route1 from "./routes/agents/clearMemory"; import route1 from "./routes/agents/clearMemory";
@ -77,24 +77,25 @@ import route73 from "./routes/setting/fileManagement/openFolder";
import route74 from "./routes/setting/getTextModel"; import route74 from "./routes/setting/getTextModel";
import route75 from "./routes/setting/loginConfig/getUser"; import route75 from "./routes/setting/loginConfig/getUser";
import route76 from "./routes/setting/loginConfig/updateUserPwd"; import route76 from "./routes/setting/loginConfig/updateUserPwd";
import route77 from "./routes/setting/memoryConfig/getMemory"; import route77 from "./routes/setting/memoryConfig/delAllMemory";
import route78 from "./routes/setting/memoryConfig/sureMemory"; import route78 from "./routes/setting/memoryConfig/getMemory";
import route79 from "./routes/setting/skillManagement/addSkill"; import route79 from "./routes/setting/memoryConfig/sureMemory";
import route80 from "./routes/setting/skillManagement/deleteSkill"; import route80 from "./routes/setting/skillManagement/addSkill";
import route81 from "./routes/setting/skillManagement/embeddingSkill"; import route81 from "./routes/setting/skillManagement/deleteSkill";
import route82 from "./routes/setting/skillManagement/generateDescription"; import route82 from "./routes/setting/skillManagement/embeddingSkill";
import route83 from "./routes/setting/skillManagement/getSkillList"; import route83 from "./routes/setting/skillManagement/generateDescription";
import route84 from "./routes/setting/skillManagement/scanSkills"; import route84 from "./routes/setting/skillManagement/getSkillList";
import route85 from "./routes/setting/skillManagement/updateSkill"; import route85 from "./routes/setting/skillManagement/scanSkills";
import route86 from "./routes/setting/vendorConfig/addVendor"; import route86 from "./routes/setting/skillManagement/updateSkill";
import route87 from "./routes/setting/vendorConfig/deleteVendor"; import route87 from "./routes/setting/vendorConfig/addVendor";
import route88 from "./routes/setting/vendorConfig/getVendorList"; import route88 from "./routes/setting/vendorConfig/deleteVendor";
import route89 from "./routes/setting/vendorConfig/modelTest"; import route89 from "./routes/setting/vendorConfig/getVendorList";
import route90 from "./routes/setting/vendorConfig/updateVendor"; import route90 from "./routes/setting/vendorConfig/modelTest";
import route91 from "./routes/task/getTaskApi"; import route91 from "./routes/setting/vendorConfig/updateVendor";
import route92 from "./routes/task/getTaskCategories"; import route92 from "./routes/task/getTaskApi";
import route93 from "./routes/task/taskDetails"; import route93 from "./routes/task/getTaskCategories";
import route94 from "./routes/test/test"; import route94 from "./routes/task/taskDetails";
import route95 from "./routes/test/test";
export default async (app: Express) => { export default async (app: Express) => {
app.use("/api/agents/clearMemory", route1); app.use("/api/agents/clearMemory", route1);
@ -173,22 +174,23 @@ export default async (app: Express) => {
app.use("/api/setting/getTextModel", route74); app.use("/api/setting/getTextModel", route74);
app.use("/api/setting/loginConfig/getUser", route75); app.use("/api/setting/loginConfig/getUser", route75);
app.use("/api/setting/loginConfig/updateUserPwd", route76); app.use("/api/setting/loginConfig/updateUserPwd", route76);
app.use("/api/setting/memoryConfig/getMemory", route77); app.use("/api/setting/memoryConfig/delAllMemory", route77);
app.use("/api/setting/memoryConfig/sureMemory", route78); app.use("/api/setting/memoryConfig/getMemory", route78);
app.use("/api/setting/skillManagement/addSkill", route79); app.use("/api/setting/memoryConfig/sureMemory", route79);
app.use("/api/setting/skillManagement/deleteSkill", route80); app.use("/api/setting/skillManagement/addSkill", route80);
app.use("/api/setting/skillManagement/embeddingSkill", route81); app.use("/api/setting/skillManagement/deleteSkill", route81);
app.use("/api/setting/skillManagement/generateDescription", route82); app.use("/api/setting/skillManagement/embeddingSkill", route82);
app.use("/api/setting/skillManagement/getSkillList", route83); app.use("/api/setting/skillManagement/generateDescription", route83);
app.use("/api/setting/skillManagement/scanSkills", route84); app.use("/api/setting/skillManagement/getSkillList", route84);
app.use("/api/setting/skillManagement/updateSkill", route85); app.use("/api/setting/skillManagement/scanSkills", route85);
app.use("/api/setting/vendorConfig/addVendor", route86); app.use("/api/setting/skillManagement/updateSkill", route86);
app.use("/api/setting/vendorConfig/deleteVendor", route87); app.use("/api/setting/vendorConfig/addVendor", route87);
app.use("/api/setting/vendorConfig/getVendorList", route88); app.use("/api/setting/vendorConfig/deleteVendor", route88);
app.use("/api/setting/vendorConfig/modelTest", route89); app.use("/api/setting/vendorConfig/getVendorList", route89);
app.use("/api/setting/vendorConfig/updateVendor", route90); app.use("/api/setting/vendorConfig/modelTest", route90);
app.use("/api/task/getTaskApi", route91); app.use("/api/setting/vendorConfig/updateVendor", route91);
app.use("/api/task/getTaskCategories", route92); app.use("/api/task/getTaskApi", route92);
app.use("/api/task/taskDetails", route93); app.use("/api/task/getTaskCategories", route93);
app.use("/api/test/test", route94); app.use("/api/task/taskDetails", route94);
app.use("/api/test/test", route95);
} }

View File

@ -0,0 +1,9 @@
import express from "express";
import { error, success } from "@/lib/responseFormat";
import u from "@/utils";
const router = express.Router();
export default router.post("/", async (req, res) => {
await u.db("memories").del();
res.status(200).send(success(true));
});

View File

@ -51,7 +51,16 @@ export default router.post(
}); });
} }
const list = await query.select("*").orderBy("updateTime", "desc").orderBy("type", "desc").limit(limit).offset(offset); const list = await query
.select("*")
.orderByRaw(`
CASE type WHEN 'main' THEN 1 ELSE 0 END ASC,
CASE WHEN id NOT IN (SELECT skillId FROM o_skillAttribution) THEN 0 ELSE 1 END ASC,
CASE WHEN state = 1 THEN 1 ELSE 0 END ASC,
updateTime DESC
`)
.limit(limit)
.offset(offset);
// 查询每个技能的归属 // 查询每个技能的归属
const skillIds = list.map((item: any) => item.id); const skillIds = list.map((item: any) => item.id);

View File

@ -44,19 +44,19 @@ export default router.post("/", async (req, res) => {
let updatedCount = 0; let updatedCount = 0;
let removedCount = 0; let removedCount = 0;
const scannedIds = new Set<string>(); const scannedPaths = new Set<string>();
const existingRows = await u.db("o_skillList").whereIn("type", ["main", "references"]).select("id", "md5", "type", "path"); const existingRows = await u.db("o_skillList").whereIn("type", ["main", "references"]).select("id", "md5", "type", "path");
for (const item of scanItems) { for (const item of scanItems) {
const id = crypto.createHash("md5").update(item.relativePath).digest("hex"); scannedPaths.add(item.relativePath);
const name = path.basename(item.entry, ".md");
const existing = existingRows.find((row: any) => row.path === item.relativePath);
const content = await fs.readFile(item.fullPath, "utf-8"); const content = await fs.readFile(item.fullPath, "utf-8");
const md5 = crypto.createHash("md5").update(content).digest("hex"); const md5 = crypto.createHash("md5").update(content).digest("hex");
const existing = existingRows.find((row: any) => row.id === id);
scannedIds.add(id);
if (!existing) { if (!existing) {
const id = crypto.createHash("md5").update(item.relativePath).digest("hex");
const name = path.basename(item.entry, ".md");
await u.db("o_skillList").insert({ await u.db("o_skillList").insert({
id, id,
path: item.relativePath, path: item.relativePath,
@ -70,25 +70,19 @@ export default router.post("/", async (req, res) => {
state: -1, state: -1,
}); });
insertedCount++; insertedCount++;
continue; } else {
} const updateData: Record<string, any> = { md5, updateTime: now };
if (existing.md5 !== md5) {
if (existing.md5 !== md5 || existing.path !== item.relativePath || existing.type !== item.type) { updateData.state = -3;
await u.db("o_skillList").where("id", id).update({ }
path: item.relativePath, await u.db("o_skillList").where("id", existing.id).update(updateData);
name,
md5,
type: item.type,
updateTime: now,
state: -3,
});
updatedCount++; updatedCount++;
} }
} }
const removedIds = existingRows.map((row: any) => row.id).filter((id: string) => !scannedIds.has(id)); const removedIds = existingRows.filter((row: any) => !scannedPaths.has(row.path)).map((row: any) => row.id);
if (removedIds.length > 0) { if (removedIds.length > 0) {
await u.db("o_skillList").whereIn("id", removedIds).delete(); await u.db("o_skillList").whereIn("id", removedIds).update({ state: -4, updateTime: now });
removedCount = removedIds.length; removedCount = removedIds.length;
} }

View File

@ -6,6 +6,7 @@ import { validateFields } from "@/middleware/middleware";
import fs from "fs/promises"; import fs from "fs/promises";
import path from "path"; import path from "path";
import crypto from "crypto"; import crypto from "crypto";
import { getEmbedding } from "@/utils/agent/embedding";
const router = express.Router(); const router = express.Router();
@ -99,6 +100,14 @@ export default router.post(
state: resolveState(finalDescription, finalAttributions), state: resolveState(finalDescription, finalAttributions),
}); });
if (finalDescription && !current.embedding) {
const embedding = await getEmbedding(finalDescription);
await u
.db("o_skillList")
.where("id", nextId)
.update({ embedding: JSON.stringify(embedding) });
}
await u.db("o_skillAttribution").where("skillId", nextId).delete(); await u.db("o_skillAttribution").where("skillId", nextId).delete();
if (finalAttributions.length > 0) { if (finalAttributions.length > 0) {
await u.db("o_skillAttribution").insert( await u.db("o_skillAttribution").insert(

View File

@ -1,4 +1,4 @@
// @db-hash f9f1fb9b0fc04331ecf65d34c1e4b6af // @db-hash d807205fbb27fc5ddb04cae060fb4430
//该文件由脚本自动生成,请勿手动修改 //该文件由脚本自动生成,请勿手动修改
export interface memories { export interface memories {
@ -156,6 +156,7 @@ export interface o_storyboard {
'filePath'?: string | null; 'filePath'?: string | null;
'frameMode'?: string | null; 'frameMode'?: string | null;
'id'?: number; 'id'?: number;
'index'?: string | null;
'lines'?: string | null; 'lines'?: string | null;
'mode'?: string | null; 'mode'?: string | null;
'model'?: string | null; 'model'?: string | null;

View File

@ -30,13 +30,8 @@ export default function runCode(code: string) {
urlToBase64, urlToBase64,
mergeImages, mergeImages,
pollTask, pollTask,
Response,
exports, exports,
fetch,
axios, axios,
FormData, FormData,
}, },
compiler: "javascript", compiler: "javascript",