49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import * as p from '@clack/prompts';
|
|
import {sendMessage} from "./src/llm.ts";
|
|
import color from 'picocolors';
|
|
|
|
async function chat() {
|
|
console.clear();
|
|
p.intro(color.bgCyan(color.black(' AI 助手已就绪 ')));
|
|
|
|
while (true) {
|
|
// 1. 获取输入
|
|
const prompt = await p.text({
|
|
message: '你:',
|
|
placeholder: '说点什么... (输入 exit 退出)',
|
|
validate: (value) => value ? undefined : '请输入内容'
|
|
});
|
|
|
|
// 2. 退出判定
|
|
if (p.isCancel(prompt) || prompt.toLowerCase() === 'exit') {
|
|
p.outro(color.dim('对话结束'));
|
|
break;
|
|
}
|
|
|
|
// 3. 模拟回复逻辑
|
|
const s = p.spinner();
|
|
s.start('助手正在思考...');
|
|
|
|
// 这里替换成你真实的 AI 请求
|
|
const response = await sendMessage(prompt);
|
|
|
|
s.stop('助手回复:');
|
|
|
|
// 4. 使用 p.note 来承载回复内容,它会自动处理边框和宽度
|
|
// p.note(
|
|
// response.choices[0].message.reasoning_content,
|
|
// '✨ '
|
|
// );
|
|
p.log.message(color.white(
|
|
response.choices[0].message.reasoning_content
|
|
))
|
|
p.log.success(color.white(
|
|
response.choices[0].message.content
|
|
));
|
|
|
|
// 5. 打印一个空行,防止下一轮对话的 "你:" 贴得太近
|
|
console.log('');
|
|
}
|
|
}
|
|
|
|
chat(); |