feat: 添加cnb智能对话接口,支持用户提问和消息列表处理

This commit is contained in:
2026-03-11 13:49:07 +08:00
parent 38ee73e48f
commit 813005ab9c
5 changed files with 214 additions and 41 deletions

View File

@@ -3,6 +3,9 @@ import { useContextKey } from '@kevisual/context'
import { useKey } from '@kevisual/use-config'
import { CNB } from '../src/index.ts';
import { CNBManager } from './modules/cnb-manager.ts'
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
export const cnbManager = new CNBManager()
// CNB_TOKEN是降级兼容变量推荐使用CNB_API_KEY
@@ -28,7 +31,13 @@ export const app = await useContextKey<App>('app', () => {
export const notCNBCheck = (ctx: any) => {
const isCNB = useKey('CNB');
if (!isCNB) {
ctx.throw(400, '当前环境非 cnb-board 环境,无法获取 live 内容');
ctx.throw(400, '当前环境非 cnb-board 环境,无法获取内容');
}
return false;
}
}
const repo = useKey('CNB_REPO_SLUG_LOWERCASE') as string || 'kevision/kevision';
export const cnbAi = createOpenAICompatible({
baseURL: `https://api.cnb.cool/${repo}/-/ai/`,
name: 'custom-cnb',
apiKey: token,
});

36
agent/routes/chat/chat.ts Normal file
View File

@@ -0,0 +1,36 @@
import { runAgent } from '@kevisual/ai/agent'
import { app, notCNBCheck, cnbAi } 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('对话消息列表,按照时间顺序排列,包含用户和助手的历史消息')
}
}
}).define(async (ctx) => {
// notCNBCheck(ctx);
if (!ctx.args.question && !ctx.args.messages) {
ctx.throw(400, '缺少必要参数必须提供question或messages');
return;
}
const messages = ctx.args.messages || [{
role: 'user',
content: ctx.args.question
}]
const result = await runAgent({
app,
messages: messages,
languageModel: cnbAi('auto'),
token: ctx.query?.token as string,
});
ctx.body = result;
}).addTo(app);

View File

@@ -10,6 +10,7 @@ import './cnb-board/index.ts';
import './share/index.ts';
import './cnb-manager/index.ts';
import './build/index.ts';
import './chat/chat.ts';
/**
* 验证上下文中的 App ID 是否与指定的 App ID 匹配