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 'dotenv/config';
|
||||
import { ContextManager } from './context.js';
|
||||
import { chat } from './llm.js';
|
||||
import * as readline from 'node:readline/promises';
|
||||
|
||||
const client = new OpenAI({
|
||||
apiKey: process.env.OPENAI_API_KEY,
|
||||
baseURL: process.env.OPENAI_BASE_URL,
|
||||
const context = new ContextManager();
|
||||
context.add({ role: 'system', content: '你是一个直爽的小助手,回答尽量简洁。' });
|
||||
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout,
|
||||
});
|
||||
|
||||
const response = await client.chat.completions.create({
|
||||
model: 'deepseek-v4-pro',
|
||||
messages: [
|
||||
{ role: 'system', content: '你是一个直爽的编程助手,回答尽量简洁。' },
|
||||
{ role: 'user', content: '什么是闭包?用一句话解释。' },
|
||||
],
|
||||
temperature: 0.7,
|
||||
});
|
||||
console.log('Agent已启动,输入 "exit" 退出。\n');
|
||||
|
||||
const reply = response.choices[0]?.message?.content;
|
||||
console.log(reply);
|
||||
while (true) {
|
||||
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