koishi-plugin-satori-ai
Version:
基于 Satori 适配器的智能对话插件,具备用户画像、长期记忆、常识管理和好感度系统
276 lines (275 loc) • 8.18 kB
TypeScript
import { Context, Schema, Service } from 'koishi';
export declare const usage = "\u4F7F\u7528\u8BF4\u660E\u89C1\u63D2\u4EF6\u4E3B\u9875";
export interface User {
id?: number;
userid: string;
usersname: string;
p: number;
favorability: number;
userlevel: number;
usage: number;
location: string;
lastChatTime?: number;
items?: Record<string, ItemInfo>;
}
export interface ItemInfo {
id: string;
count: number;
price?: number;
description?: string;
favorability?: number;
metadata?: Record<string, any>;
}
export interface Payload {
model: string;
messages: Sat.Msg[];
max_tokens?: number;
temperature: number;
top_p?: number;
frequency_penalty?: number;
presence_penalty?: number;
thinking?: {
type: string;
};
}
export type FavorabilityAdjustment = number | {
absolute: number;
};
export interface FavorabilityConfig {
enable_favorability: boolean;
max_favorability_perday: number;
dataDir: string;
input_censor_favorability: boolean;
value_of_input_favorability: number;
output_censor_favorability: boolean;
value_of_output_favorability: number;
enable_auxiliary_LLM: boolean;
offset_of_fafavorability: number;
prompt_0: string;
favorability_div_1: number;
prompt_1: string;
favorability_div_2: number;
prompt_2: string;
favorability_div_3: number;
prompt_3: string;
favorability_div_4: number;
prompt_4: string;
prompt_5: string;
}
export type FavorabilityLevel = '厌恶' | '陌生' | '朋友' | '暧昧' | '恋人' | '夫妻';
export interface MemoryEntry {
role: string;
content: string;
}
export interface ChannelMemory {
dialogues: MemoryEntry[];
updatedAt: number;
}
export interface MemoryConfig {
dataDir: string;
bracket_filter: boolean;
memory_filter: string;
message_max_length: number;
memory_block_words: string[];
enable_self_memory: boolean;
personal_memory: boolean;
channel_dialogues: boolean;
channel_dialogues_max_length: number;
remember_min_length: number;
common_topN: number;
dailogues_topN: number;
enhanceReasoningProtection: boolean;
}
export interface MiddlewareConfig {
private: boolean;
nick_name: boolean;
nick_name_list: string[];
nick_name_block_words: string[];
random_min_tokens: number;
randnum: number;
max_tokens: number;
enable_warning: boolean;
warning_group: string;
}
export interface APIConfig {
baseURL: string;
keys: string[];
appointModel: string;
not_reasoner_LLM_URL: string;
not_reasoner_LLM: string;
not_reasoner_LLM_key: string[];
use_not_reasoner_LLM_length: number;
auxiliary_LLM_URL: string;
auxiliary_LLM: string;
auxiliary_LLM_key: string[];
temperature: number;
frequency_penalty: number;
presence_penalty: number;
maxRetryTimes?: number;
retry_delay_time?: number;
reasoning_content?: boolean;
max_output_tokens: number;
}
export interface APIError extends Error {
response?: {
status: number;
data: {
error?: {
code: string;
message: string;
};
};
};
}
export interface FixedDialogue {
triggers: string[];
favorabilityRange?: [number, number];
probability: number;
timeRange?: [string, string];
response: string;
favorability?: number;
}
export declare class Sat extends Service {
static inject: {
required: string[];
optional: string[];
};
constructor(ctx: Context, config: Sat.Config);
}
export declare namespace Sat {
interface Msg {
role: string;
content: string;
}
interface Payload {
engine: string;
prompt: string;
temperature: number;
max_tokens?: number;
top_p: number;
frequency_penalty: number;
presence_penalty: number;
}
interface Config {
baseURL: string;
key: string[];
appointModel: string;
enhanceReasoningProtection: boolean;
not_reasoner_LLM_URL: string;
not_reasoner_LLM: string;
not_reasoner_LLM_key: string[];
use_not_reasoner_LLM_length: number;
auxiliary_LLM_URL: string;
auxiliary_LLM: string;
auxiliary_LLM_key: string[];
prompt: string;
reasoner_prompt: string;
no_system_prompt: boolean;
max_tokens: number;
max_output_tokens: number;
message_max_length: number;
remember_min_length: number;
temperature: number;
frequency_penalty: number;
presence_penalty: number;
log_system_prompt: boolean;
log_reasoning_content: boolean;
log_ask_response: boolean;
authority: number;
alias: string[];
dataDir: string;
enable_self_memory: boolean;
bracket_filter: boolean;
memory_filter: string;
memory_block_words: string[];
personal_memory: boolean;
channel_dialogues: boolean;
channel_dialogues_max_length: number;
common_topN: number;
dailogues_topN: number;
enable_fixed_dialogues: boolean;
enable_reasoner_like: boolean;
max_usage: number[];
private: boolean;
nick_name: boolean;
nick_name_list: string[];
nick_name_block_words: string[];
reasoner_filter: boolean;
reasoner_filter_word: string;
duplicateDialogueCheck: boolean;
enable_online_user_check: boolean;
random_min_tokens: number;
enable_random_without_favorability: boolean;
randnum: number;
sentences_divide: boolean;
min_sentences_length: number;
max_sentences_length: number;
time_interval: number;
max_parallel_count: number;
reply_pointing: boolean;
enable_mood: boolean;
max_mood: number;
value_of_input_mood: number;
value_of_output_mood: number;
visible_mood: boolean;
mood_div_1: number;
mood_prompt_0: string;
mood_div_2: number;
mood_prompt_1: string;
mood_prompt_2: string;
enable_pocket_money: boolean;
min_pocket_money: number;
max_pocket_money: number;
pocket_money_cost: number;
enable_weather_perception: boolean;
Location_search_API_URL: string;
location_param_name: string;
weather_api_key: string;
weather_param_name: string;
weather_api_URL: string;
weather_cd_time: number;
weather_jwt_private_key_pem?: string;
weather_jwt_kid?: string;
weather_jwt_sub?: string;
weather_jwt_exp_seconds?: number;
enable_favorability: boolean;
max_favorability_perday: number;
input_censor_favorability: boolean;
value_of_input_favorability: number;
output_censor_favorability: boolean;
value_of_output_favorability: number;
enable_auxiliary_LLM: boolean;
offset_of_fafavorability: number;
visible_favorability: boolean;
enable_user_portrait: boolean;
max_portrait_dialogues: number;
portrait_usage: number;
portrait_min_favorability: number;
prompt_0: string;
favorability_div_1: number;
prompt_1: string;
favorability_div_2: number;
prompt_2: string;
favorability_div_3: number;
prompt_3: string;
favorability_div_4: number;
prompt_4: string;
prompt_5: string;
enable_warning: boolean;
warning_group: string;
warning_admin_id: string;
maxRetryTimes: number;
retry_delay_time: number;
Broadcast_block_channel: string[];
waiting_time: number;
enable_game: boolean;
enable_galgame: boolean;
game_block_channel: string[];
enable_fencing: boolean;
enable_OneTouch: boolean;
cd_for_OneTouch: number;
enable_emoji: boolean;
emoji_probability: number;
}
const Config: Schema<Config>;
}