feat: 上下文管理
This commit is contained in:
parent
1accefc1da
commit
bf8c9e1e12
16
src/context.ts
Normal file
16
src/context.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
type Message = { role: 'system' | 'user' | 'assistant'; content: string };
|
||||||
|
|
||||||
|
export class ContextManager {
|
||||||
|
private messages: Message[] = [];
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
}
|
||||||
|
|
||||||
|
add(message: Message) {
|
||||||
|
this.messages.push(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
getMessages(): Message[] {
|
||||||
|
return [...this.messages];
|
||||||
|
}
|
||||||
|
}
|
||||||
36
src/index.ts
36
src/index.ts
@ -1,19 +1,25 @@
|
|||||||
import OpenAI from 'openai';
|
import { ContextManager } from './context.js';
|
||||||
import 'dotenv/config';
|
import { chat } from './llm.js';
|
||||||
|
import * as readline from 'node:readline/promises';
|
||||||
|
|
||||||
const client = new OpenAI({
|
const context = new ContextManager();
|
||||||
apiKey: process.env.OPENAI_API_KEY,
|
context.add({ role: 'system', content: '你是一个直爽的小助手,回答尽量简洁。' });
|
||||||
baseURL: process.env.OPENAI_BASE_URL,
|
|
||||||
|
const rl = readline.createInterface({
|
||||||
|
input: process.stdin,
|
||||||
|
output: process.stdout,
|
||||||
});
|
});
|
||||||
|
|
||||||
const response = await client.chat.completions.create({
|
console.log('Agent已启动,输入 "exit" 退出。\n');
|
||||||
model: 'deepseek-v4-pro',
|
|
||||||
messages: [
|
|
||||||
{ role: 'system', content: '你是一个直爽的编程助手,回答尽量简洁。' },
|
|
||||||
{ role: 'user', content: '什么是闭包?用一句话解释。' },
|
|
||||||
],
|
|
||||||
temperature: 0.7,
|
|
||||||
});
|
|
||||||
|
|
||||||
const reply = response.choices[0]?.message?.content;
|
while (true) {
|
||||||
console.log(reply);
|
const userInput = await rl.question('我: ');
|
||||||
|
if (userInput.toLowerCase() === 'exit') break;
|
||||||
|
|
||||||
|
context.add({ role: 'user', content: userInput });
|
||||||
|
const reply = await chat(context.getMessages());
|
||||||
|
console.log('助手:', reply.content);
|
||||||
|
context.add({ role: 'assistant', content: reply.content! });
|
||||||
|
}
|
||||||
|
|
||||||
|
rl.close();
|
||||||
16
src/llm.ts
Normal file
16
src/llm.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import OpenAI from 'openai';
|
||||||
|
import 'dotenv/config';
|
||||||
|
|
||||||
|
const client = new OpenAI({
|
||||||
|
apiKey: process.env.OPENAI_API_KEY,
|
||||||
|
baseURL: process.env.OPENAI_BASE_URL,
|
||||||
|
});
|
||||||
|
|
||||||
|
export async function chat(messages: { role: string; content: string }[]) {
|
||||||
|
const response = await client.chat.completions.create({
|
||||||
|
model: 'deepseek-v4-pro',
|
||||||
|
messages: messages as any,
|
||||||
|
temperature: 0.7,
|
||||||
|
});
|
||||||
|
return response.choices[0]!.message!;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user