better 更好的llm使用统计
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|
||||||
# 解析模型输出的结果
|
# 解析模型输出的结果
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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 = []
|
||||||
@@ -426,6 +428,12 @@ class Hippocampus:
|
|||||||
logger.success(f"强化连接: {', '.join(all_added_edges)}")
|
logger.success(f"强化连接: {', '.join(all_added_edges)}")
|
||||||
# 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):
|
||||||
"""检查并同步内存中的图结构与数据库"""
|
"""检查并同步内存中的图结构与数据库"""
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
#嵌入模型
|
#嵌入模型
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user