49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { runAgent } from '@kevisual/ai/agent'
|
||
import { app, cnbManager } from '../../app.ts';
|
||
import z from 'zod';
|
||
|
||
app.route({
|
||
path: 'cnb',
|
||
key: 'chat',
|
||
description: 'cnb智能对话接口',
|
||
middleware: ['auth'],
|
||
metadata: {
|
||
args: {
|
||
question: z.string().describe('用户输入的问题'),
|
||
messages: z.array(z.object({
|
||
role: z.enum(['user', 'assistant']).describe('消息角色,user表示用户输入,assistant表示助手回复'),
|
||
content: z.string().describe('消息内容')
|
||
})).describe('对话消息列表,按照时间顺序排列,包含用户和助手的历史消息'),
|
||
model: z.string().optional().describe('默认auto')
|
||
}
|
||
}
|
||
}).define(async (ctx) => {
|
||
// notCNBCheck(ctx);
|
||
if (!ctx.args.question && !ctx.args.messages) {
|
||
ctx.throw(400, '缺少必要参数,必须提供question或messages');
|
||
return;
|
||
}
|
||
const model = ctx.args?.model || 'auto'
|
||
const item = await cnbManager.getCNBItem(ctx);
|
||
const cnbAi = item.cnbAi;
|
||
const messages = ctx.args.messages || [{
|
||
role: 'user',
|
||
content: ctx.args.question
|
||
}]
|
||
const routes = app.routes.filter(route => {
|
||
const tags = route.metadata?.tags || [];
|
||
if (tags.includes('notInNpcAgent')) {
|
||
return false;
|
||
}
|
||
return true
|
||
});
|
||
const result = await runAgent({
|
||
app,
|
||
messages: messages,
|
||
routes,
|
||
languageModel: cnbAi(model),
|
||
token: '',
|
||
// token: ctx.query.token as string,
|
||
});
|
||
ctx.body = result;
|
||
}).addTo(app); |