



























1、load env文件
import { config as loadDotenv } from "dotenv";
loadDotenv();
或者
import "dotenv/config";
2、nodejs的数据的输入输出
import { createInterface } from "node:readline/promises";
import { stdin as input, stdout as output } from "node:process";
const rl = createInterface({ input, output });
const userText = (await rl.question("你: ")).trim();
if (["exit", "quit", "q"].includes(userText.toLowerCase())) {
break;
}
console.log(`AI: ${text || "(未返回文本内容)"}\n`);
3、获取文件的拓展名
import { extname } from "node:path";
const suffix = extname(filePath).toLowerCase();
if (suffix !== ".md" && suffix !== ".txt") {
continue;
}
4、获取文件的目录
import { resolve } from "node:path";
const KNOWLEDGE_BASE_DIR = resolve(process.cwd(), "knowledge_base");
5、根据文件目录 遍历文件
walkFiles(KNOWLEDGE_BASE_DIR);
function walkFiles(dir: string): string[] {
const files: string[] = [];
for (const entry of readdirSync(dir, { withFileTypes: true })) {
const fullPath = resolve(dir, entry.name);
if (entry.isDirectory()) {
files.push(...walkFiles(fullPath));
} else {
files.push(fullPath);
}
}
return files;
}
6、文件读取
import { existsSync, readFileSync } from "node:fs";
function loadTrainingExamples(maxExamples = 20): TrainingExample[] {
if (!existsSync(TRAINING_DATA_PATH)) {
return [];
}
return readFileSync(TRAINING_DATA_PATH, "utf-8")
.split(/\r?\n/)
.map((line) => line.trim())
.filter(Boolean)
.flatMap(parseTrainingExample)
.slice(0, maxExamples);
}
6、读取env文件
const apiKey = process.env.OPENAI_API_KEY?.trim();
const baseURL = process.env.OPENAI_BASE_URL?.trim();
const model = process.env.MODEL_NAME?.trim() || "qwen-plus";
7、抛出异常
if (!apiKey || !baseURL) {
throw new Error("缺少 OPENAI_API_KEY 或 OPENAI_BASE_URL 配置");
}
漫思
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。