better 更好的llm使用统计

This commit is contained in:
SengokuCola
2025-03-21 17:44:18 +08:00
parent 341ab99770
commit a47266abd2
7 changed files with 54 additions and 32 deletions

View File

@@ -56,7 +56,6 @@ class BotConfig:
llm_reasoning: Dict[str, str] = field(default_factory=lambda: {}) llm_reasoning: Dict[str, str] = field(default_factory=lambda: {})
llm_reasoning_minor: Dict[str, str] = field(default_factory=lambda: {}) llm_reasoning_minor: Dict[str, str] = field(default_factory=lambda: {})
llm_normal: Dict[str, str] = field(default_factory=lambda: {}) llm_normal: Dict[str, str] = field(default_factory=lambda: {})
llm_normal_minor: Dict[str, str] = field(default_factory=lambda: {})
llm_topic_judge: Dict[str, str] = field(default_factory=lambda: {}) llm_topic_judge: Dict[str, str] = field(default_factory=lambda: {})
llm_summary_by_topic: Dict[str, str] = field(default_factory=lambda: {}) llm_summary_by_topic: Dict[str, str] = field(default_factory=lambda: {})
llm_emotion_judge: Dict[str, str] = field(default_factory=lambda: {}) llm_emotion_judge: Dict[str, str] = field(default_factory=lambda: {})
@@ -235,7 +234,6 @@ class BotConfig:
"llm_reasoning", "llm_reasoning",
"llm_reasoning_minor", "llm_reasoning_minor",
"llm_normal", "llm_normal",
"llm_normal_minor",
"llm_topic_judge", "llm_topic_judge",
"llm_summary_by_topic", "llm_summary_by_topic",
"llm_emotion_judge", "llm_emotion_judge",

View File

@@ -38,9 +38,9 @@ class EmojiManager:
def __init__(self): def __init__(self):
self._scan_task = None self._scan_task = None
self.vlm = LLM_request(model=global_config.vlm, temperature=0.3, max_tokens=1000, request_type="image") self.vlm = LLM_request(model=global_config.vlm, temperature=0.3, max_tokens=1000, request_type="emoji")
self.llm_emotion_judge = LLM_request( self.llm_emotion_judge = LLM_request(
model=global_config.llm_emotion_judge, max_tokens=600, temperature=0.8, request_type="image" model=global_config.llm_emotion_judge, max_tokens=600, temperature=0.8, request_type="emoji"
) # 更高的温度更少的token后续可以根据情绪来调整温度 ) # 更高的温度更少的token后续可以根据情绪来调整温度
def _ensure_emoji_dir(self): def _ensure_emoji_dir(self):
@@ -111,7 +111,7 @@ class EmojiManager:
if not text_for_search: if not text_for_search:
logger.error("无法获取文本的情绪") logger.error("无法获取文本的情绪")
return None return None
text_embedding = await get_embedding(text_for_search) text_embedding = await get_embedding(text_for_search, request_type="emoji")
if not text_embedding: if not text_embedding:
logger.error("无法获取文本的embedding") logger.error("无法获取文本的embedding")
return None return None
@@ -310,7 +310,7 @@ class EmojiManager:
logger.info(f"[检查] 表情包检查通过: {check}") logger.info(f"[检查] 表情包检查通过: {check}")
if description is not None: if description is not None:
embedding = await get_embedding(description) embedding = await get_embedding(description, request_type="emoji")
# 准备数据库记录 # 准备数据库记录
emoji_record = { emoji_record = {
"filename": filename, "filename": filename,

View File

@@ -32,10 +32,17 @@ class ResponseGenerator:
temperature=0.7, temperature=0.7,
max_tokens=1000, max_tokens=1000,
stream=True, stream=True,
request_type="response",
)
self.model_v3 = LLM_request(
model=global_config.llm_normal, temperature=0.7, max_tokens=3000, request_type="response"
)
self.model_r1_distill = LLM_request(
model=global_config.llm_reasoning_minor, temperature=0.7, max_tokens=3000, request_type="response"
)
self.model_sum = LLM_request(
model=global_config.llm_summary_by_topic, temperature=0.7, max_tokens=3000, request_type="relation"
) )
self.model_v3 = LLM_request(model=global_config.llm_normal, temperature=0.7, max_tokens=3000)
self.model_r1_distill = LLM_request(model=global_config.llm_reasoning_minor, temperature=0.7, max_tokens=3000)
self.model_v25 = LLM_request(model=global_config.llm_normal_minor, temperature=0.7, max_tokens=3000)
self.current_model_type = "r1" # 默认使用 R1 self.current_model_type = "r1" # 默认使用 R1
self.current_model_name = "unknown model" self.current_model_name = "unknown model"
@@ -175,7 +182,7 @@ class ResponseGenerator:
""" """
# 调用模型生成结果 # 调用模型生成结果
result, _, _ = await self.model_v25.generate_response(prompt) result, _, _ = await self.model_sum.generate_response(prompt)
result = result.strip() result = result.strip()
# 解析模型输出的结果 # 解析模型输出的结果

View File

@@ -55,9 +55,9 @@ def is_mentioned_bot_in_message(message: MessageRecv) -> bool:
return False return False
async def get_embedding(text): async def get_embedding(text, request_type="embedding"):
"""获取文本的embedding向量""" """获取文本的embedding向量"""
llm = LLM_request(model=global_config.embedding, request_type="embedding") llm = LLM_request(model=global_config.embedding, request_type=request_type)
# return llm.get_embedding_sync(text) # return llm.get_embedding_sync(text)
return await llm.get_embedding(text) return await llm.get_embedding(text)

View File

@@ -174,9 +174,9 @@ class Memory_graph:
class Hippocampus: class Hippocampus:
def __init__(self, memory_graph: Memory_graph): def __init__(self, memory_graph: Memory_graph):
self.memory_graph = memory_graph self.memory_graph = memory_graph
self.llm_topic_judge = LLM_request(model=global_config.llm_topic_judge, temperature=0.5, request_type="topic") self.llm_topic_judge = LLM_request(model=global_config.llm_topic_judge, temperature=0.5, request_type="memory")
self.llm_summary_by_topic = LLM_request( self.llm_summary_by_topic = LLM_request(
model=global_config.llm_summary_by_topic, temperature=0.5, request_type="topic" model=global_config.llm_summary_by_topic, temperature=0.5, request_type="memory"
) )
def get_all_node_names(self) -> list: def get_all_node_names(self) -> list:
@@ -375,6 +375,8 @@ class Hippocampus:
return topic_num return topic_num
async def operation_build_memory(self): async def operation_build_memory(self):
logger.debug("------------------------------------开始构建记忆--------------------------------------")
start_time = time.time()
memory_samples = self.get_memory_sample() memory_samples = self.get_memory_sample()
all_added_nodes = [] all_added_nodes = []
all_added_edges = [] all_added_edges = []
@@ -427,6 +429,12 @@ class Hippocampus:
# logger.success(f"强化连接: {', '.join(all_added_edges)}") # logger.success(f"强化连接: {', '.join(all_added_edges)}")
self.sync_memory_to_db() self.sync_memory_to_db()
end_time = time.time()
logger.success(
f"--------------------------记忆构建完成:耗时: {end_time - start_time:.2f} "
"秒--------------------------"
)
def sync_memory_to_db(self): def sync_memory_to_db(self):
"""检查并同步内存中的图结构与数据库""" """检查并同步内存中的图结构与数据库"""
# 获取数据库中所有节点和内存中所有节点 # 获取数据库中所有节点和内存中所有节点

View File

@@ -581,7 +581,8 @@ class LLM_request:
completion_tokens=completion_tokens, completion_tokens=completion_tokens,
total_tokens=total_tokens, total_tokens=total_tokens,
user_id="system", # 可以根据需要修改 user_id user_id="system", # 可以根据需要修改 user_id
request_type="embedding", # 请求类型为 embedding # request_type="embedding", # 请求类型为 embedding
request_type=self.request_type, # 请求类型为 text
endpoint="/embeddings", # API 端点 endpoint="/embeddings", # API 端点
) )
return result["data"][0].get("embedding", None) return result["data"][0].get("embedding", None)

View File

@@ -128,52 +128,60 @@ enable = true
#下面的模型若使用硅基流动则不需要更改使用ds官方则改成.env.prod自定义的宏使用自定义模型则选择定位相似的模型自己填写 #下面的模型若使用硅基流动则不需要更改使用ds官方则改成.env.prod自定义的宏使用自定义模型则选择定位相似的模型自己填写
#推理模型 #推理模型
[model.llm_reasoning] #回复模型1 主要回复模型 [model.llm_reasoning] #回复模型1 主要回复模型
name = "Pro/deepseek-ai/DeepSeek-R1" name = "Pro/deepseek-ai/DeepSeek-R1"
# name = "Qwen/QwQ-32B"
provider = "SILICONFLOW" provider = "SILICONFLOW"
pri_in = 0 #模型的输入价格(非必填,可以记录消耗) pri_in = 4 #模型的输入价格(非必填,可以记录消耗)
pri_out = 0 #模型的输出价格(非必填,可以记录消耗) pri_out = 16 #模型的输出价格(非必填,可以记录消耗)
[model.llm_reasoning_minor] #回复模型3 次要回复模型 [model.llm_reasoning_minor] #回复模型3 次要回复模型
name = "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B" name = "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B"
provider = "SILICONFLOW" provider = "SILICONFLOW"
pri_in = 1.26 #模型的输入价格(非必填,可以记录消耗)
pri_out = 1.26 #模型的输出价格(非必填,可以记录消耗)
#非推理模型 #非推理模型
[model.llm_normal] #V3 回复模型2 次要回复模型 [model.llm_normal] #V3 回复模型2 次要回复模型
name = "Pro/deepseek-ai/DeepSeek-V3" name = "Pro/deepseek-ai/DeepSeek-V3"
provider = "SILICONFLOW" provider = "SILICONFLOW"
pri_in = 2 #模型的输入价格(非必填,可以记录消耗)
pri_out = 8 #模型的输出价格(非必填,可以记录消耗)
[model.llm_normal_minor] #V2.5 [model.llm_emotion_judge] #表情包判断
name = "deepseek-ai/DeepSeek-V2.5"
provider = "SILICONFLOW"
[model.llm_emotion_judge] #主题判断 0.7/m
name = "Qwen/Qwen2.5-14B-Instruct" name = "Qwen/Qwen2.5-14B-Instruct"
provider = "SILICONFLOW" provider = "SILICONFLOW"
pri_in = 0.7
pri_out = 0.7
[model.llm_topic_judge] #主题判断建议使用qwen2.5 7b [model.llm_topic_judge] #记忆主题判断建议使用qwen2.5 7b
name = "Pro/Qwen/Qwen2.5-7B-Instruct" name = "Pro/Qwen/Qwen2.5-7B-Instruct"
provider = "SILICONFLOW" provider = "SILICONFLOW"
pri_in = 0
pri_out = 0
[model.llm_summary_by_topic] #建议使用qwen2.5 32b 及以上 [model.llm_summary_by_topic] #概括模型,建议使用qwen2.5 32b 及以上
name = "Qwen/Qwen2.5-32B-Instruct" name = "Qwen/Qwen2.5-32B-Instruct"
provider = "SILICONFLOW" provider = "SILICONFLOW"
pri_in = 0 pri_in = 1.26
pri_out = 0 pri_out = 1.26
[model.moderation] #内容审核 未启用 [model.moderation] #内容审核,开发中
name = "" name = ""
provider = "SILICONFLOW" provider = "SILICONFLOW"
pri_in = 0 pri_in = 1.0
pri_out = 0 pri_out = 2.0
# 识图模型 # 识图模型
[model.vlm] #图像识别 0.35/m [model.vlm] #图像识别
name = "Pro/Qwen/Qwen2-VL-7B-Instruct" name = "Pro/Qwen/Qwen2.5-VL-7B-Instruct"
provider = "SILICONFLOW" provider = "SILICONFLOW"
pri_in = 0.35
pri_out = 0.35
#嵌入模型 #嵌入模型