update
This commit is contained in:
40
src/chat.ts
Normal file
40
src/chat.ts
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import { QueryRouter } from "./route.ts";
|
||||||
|
|
||||||
|
type RouterChatOptions = {
|
||||||
|
router?: QueryRouter;
|
||||||
|
}
|
||||||
|
export class RouterChat {
|
||||||
|
router: QueryRouter;
|
||||||
|
prompt: string = '';
|
||||||
|
constructor(opts?: RouterChatOptions) {
|
||||||
|
this.router = opts?.router || new QueryRouter();
|
||||||
|
}
|
||||||
|
prefix(wrapperFn?: (routes: any[]) => string) {
|
||||||
|
if (this.prompt) {
|
||||||
|
return this.prompt;
|
||||||
|
}
|
||||||
|
let _prompt = `你是一个调用函数工具的助手,当用户询问时,如果拥有工具,请返回 JSON 数据,数据的值的内容是 id 和 payload 。如果有参数,请放到 payload 当中。
|
||||||
|
|
||||||
|
下面是你可以使用的工具列表:
|
||||||
|
|
||||||
|
`;
|
||||||
|
if (!wrapperFn) {
|
||||||
|
_prompt += this.router.routes.map(r => `工具名称: ${r.id}\n描述: ${r.description}\n`).join('\n');
|
||||||
|
} else {
|
||||||
|
_prompt += wrapperFn(this.router.exportRoutes());
|
||||||
|
}
|
||||||
|
_prompt += `当你需要使用工具时,请严格按照以下格式返回:
|
||||||
|
{
|
||||||
|
"id": "工具名称",
|
||||||
|
"payload": {
|
||||||
|
// 参数列表
|
||||||
|
}
|
||||||
|
}
|
||||||
|
如果你不需要使用工具,直接返回用户想要的内容即可,不要返回任何多余的信息。`;
|
||||||
|
return _prompt;
|
||||||
|
}
|
||||||
|
chat() {
|
||||||
|
const prompt = this.prefix();
|
||||||
|
return prompt;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -103,7 +103,7 @@ export type RouteOpts = {
|
|||||||
isDebug?: boolean;
|
isDebug?: boolean;
|
||||||
};
|
};
|
||||||
export type DefineRouteOpts = Omit<RouteOpts, 'idUsePath' | 'verify' | 'verifyKey' | 'nextRoute'>;
|
export type DefineRouteOpts = Omit<RouteOpts, 'idUsePath' | 'verify' | 'verifyKey' | 'nextRoute'>;
|
||||||
const pickValue = ['path', 'key', 'id', 'description', 'type', 'validator', 'middleware'] as const;
|
const pickValue = ['path', 'key', 'id', 'description', 'type', 'validator', 'middleware', 'metadata'] as const;
|
||||||
export type RouteInfo = Pick<Route, (typeof pickValue)[number]>;
|
export type RouteInfo = Pick<Route, (typeof pickValue)[number]>;
|
||||||
export class Route<U = { [key: string]: any }> {
|
export class Route<U = { [key: string]: any }> {
|
||||||
/**
|
/**
|
||||||
|
|||||||
17
src/test/chat.ts
Normal file
17
src/test/chat.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { App } from '../app.ts'
|
||||||
|
import { RouterChat } from '@/chat.ts';
|
||||||
|
|
||||||
|
const app = new App();
|
||||||
|
|
||||||
|
app.prompt(`获取时间的工具`).define(async (ctx) => {
|
||||||
|
ctx.body = '123'
|
||||||
|
}).addTo(app);
|
||||||
|
|
||||||
|
app.prompt('获取天气的工具。\n参数是 city 为对应的城市').define(async (ctx) => {
|
||||||
|
ctx.body = '晴天'
|
||||||
|
}).addTo(app);
|
||||||
|
|
||||||
|
|
||||||
|
export const chat = new RouterChat({ router: app.router });
|
||||||
|
|
||||||
|
console.log(chat.chat());
|
||||||
Reference in New Issue
Block a user