feat: implement general assistant

This commit is contained in:
steven
2023-04-17 16:14:39 +08:00
parent 13b23181b0
commit d03ce9fac1
10 changed files with 74 additions and 23 deletions

1
assistants/README.md Normal file
View File

@ -0,0 +1 @@
# Assistant bots

View File

@ -0,0 +1 @@
# General bot

View File

@ -0,0 +1,10 @@
export default {
id: "general-bot",
name: "General bot",
description: "A general bot of SQL Chat.",
avatar: "",
getPrompt: (): string => {
const basicPrompt = `Please be careful to return only key information, and try not to make it too long.`;
return basicPrompt;
},
};

3
assistants/index.ts Normal file
View File

@ -0,0 +1,3 @@
export * as generalBot from "./general-bot";
export * as sqlchatBot from "./sql-chat-bot";
export * as migrationBot from "./migration-bot";

View File

@ -0,0 +1,10 @@
export default {
id: "migration-bot",
name: "Migration bot",
description: "A bot focused on database migration.",
avatar: "",
getPrompt: (input?: string): string => {
// TODO: update prompt.
return "";
},
};

View File

@ -0,0 +1,14 @@
import generalBot from "../general-bot";
export default {
id: "sql-chat-bot",
name: "SQL Chat bot",
description: "The wonderful SQL Chat bot.",
avatar: "",
getPrompt: (schema?: string): string => {
const generalPrompt = generalBot.getPrompt();
const basicPrompt = `Please follow the instructions to answer the questions:
1. Set the language to the markdown code block for each code block. For example, \`SELECT * FROM table\` is SQL.`;
return `${generalPrompt}\nThis is my database schema"${schema}". You will see the tables and columns in the database. And please answer the following questions about the database.\n${basicPrompt}`;
},
};

View File

@ -1,30 +1,18 @@
import { first } from "lodash-es";
import { Id, User } from "@/types";
import { Assistant, Id } from "@/types";
import * as customAssistantList from "../../assistants";
// Assistant is a special user.
export const assistantList: User[] = [
{
id: "sql-assistant",
name: "SQL Chat",
description: "🤖️ I'm an expert in SQL. I can answer your questions about databases and SQL.",
avatar: "",
},
];
const assistantList: Assistant[] = Object.keys(customAssistantList).map((name) => {
return {
...((customAssistantList as any)[name].default as Assistant),
};
});
export const getAssistantById = (id: Id) => {
const user = assistantList.find((user) => user.id === id);
return user || (first(assistantList) as User);
const assistant = assistantList.find((assistant) => assistant.id === id);
return assistant || (first(assistantList) as Assistant);
};
// getPromptOfAssistant define the special prompt for each assistant.
export const getPromptGeneratorOfAssistant = (assistant: User) => {
const basicPrompt = `Please follow the instructions to answer the questions:
1. Set the language to the markdown code block for each code block. For example, \`SELECT * FROM table\` is SQL.
2. Please be careful to return only key information, and try not to make it too long.
`;
if (assistant.id === "sql-assistant") {
return (schema: string) =>
`This is my database schema"${schema}". You will see the tables and columns in the database. And please answer the following questions about the database.\n${basicPrompt}`;
}
return () => `\n${basicPrompt}`;
export const getPromptGeneratorOfAssistant = (assistant: Assistant) => {
return assistant.getPrompt;
};

View File

@ -60,6 +60,22 @@ export const useConversationStore = create<ConversationState>()(
}),
{
name: "conversation-storage",
version: 1,
migrate: (persistedState: any, version: number) => {
let state = persistedState as ConversationState;
if (version === 0) {
for (const conversation of state.conversationList) {
if (!conversation.connectionId) {
conversation.assistantId = "general-bot";
} else {
conversation.assistantId = "sql-chat-bot";
}
}
state.currentConversation = undefined;
}
return state;
},
}
)
);

7
src/types/assistant.ts Normal file
View File

@ -0,0 +1,7 @@
export interface Assistant {
id: string;
name: string;
description: string;
avatar: string;
getPrompt: (input?: string) => string;
}

View File

@ -7,3 +7,4 @@ export * from "./message";
export * from "./setting";
export * from "./api";
export * from "./connector";
export * from "./assistant";