Commit 7e395564 by tinywell

日志,时间记录

parent da717251
import logging
from typing import Dict, Any, Optional, List
from pydantic import BaseModel, Field
from langchain_core.tools import BaseTool
......
import time
import logging
from typing import Dict, List, Tuple, Any, Optional
from pydantic import BaseModel, Field
from typing import Type
......
......@@ -2,7 +2,7 @@ from pydantic import BaseModel,Field
from typing import Literal
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import PydanticOutputParser
from ..utils.logger import get_logger
class RouterQuery(BaseModel):
"""Route a user query to the most relevant datasource."""
......@@ -43,9 +43,16 @@ class RouterLLM:
partial_variables={"format_instructions": parser.get_format_instructions()},
)
self.router = prompt | llm | parser
self.logger = get_logger(self.__class__.__name__)
def invoke(self, question):
return self.router.invoke({"query": question})
self.logger.info(f"路由用户查询: {question}")
try:
result = self.router.invoke({"query": question})
self.logger.info(f"路由用户查询结果: {result}")
return result
except Exception as e:
self.logger.error(f"路由用户查询失败: {e}", exc_info=True)
return {'datasource': 'none'}
def new_router_llm(llm):
......
......@@ -84,7 +84,7 @@ from pydantic import BaseModel,Field
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import PydanticOutputParser
import re
from ..utils.logger import get_logger
class ReWriterModel(BaseModel):
rewriter: str = Field(
......@@ -102,10 +102,11 @@ class ReWriteLLM:
)
self.router = prompt | llm
self.parser = parser
self.logger = get_logger(self.__class__.__name__)
def invoke(self, question, history):
response = self.router.invoke({"query": question, "histories": history})
self.logger.info(f"重写用户查询: {question}")
try:
response = self.router.invoke({"query": question, "histories": history})
result = self.parser.invoke(response)
except:
# 定义正则表达式模式
......@@ -119,6 +120,7 @@ class ReWriteLLM:
return match[1].strip()
return response.content
self.logger.info(f"重写后的问题: {result.rewriter}")
return result.rewriter
def extend_history(self, history):
......
from typing import List, Dict
from datetime import datetime
import time
from langchain_core.prompts import PromptTemplate,ChatPromptTemplate,SystemMessagePromptTemplate,MessagesPlaceholder,HumanMessagePromptTemplate
from langchain.tools.render import render_text_description_and_args
......@@ -91,33 +92,56 @@ class ToolRunner:
self.chain = prompt | self.llm
def run(self, input: str, tool_name: str, params: Dict):
self.logger.info(f"Running tool '{tool_name}' with params: {params}")
start_time = time.time()
self.logger.info(f"开始执行工具 '{tool_name}',参数: {params}")
if tool_name not in self.tools:
self.logger.error(f"Tool {tool_name} not found")
self.logger.error(f"工具 {tool_name} 未找到")
raise ValueError(f"Tool {tool_name} not found")
try:
# 工具执行
tool_start = time.time()
tool = self.tools[tool_name]
self.logger.info(f"Invoking tool {tool_name}")
self.logger.info(f"调用工具 {tool_name}")
result = tool.invoke(params)
self.logger.debug(f"Tool result: {result}")
tool_time = time.time() - tool_start
self.logger.info(f"工具执行完成,耗时: {tool_time:.2f}秒")
self.logger.debug(f"工具执行结果: {result}")
# 提取 markdown 表格
table = ""
if "markdown" in result:
table = result["markdown"]
del result["markdown"]
self.logger.info("Getting LLM interpretation")
# LLM 解释结果
llm_start = time.time()
self.logger.info("开始 LLM 结果解释")
llm_result = self.chain.invoke({"input": input, "result": result})
llm_time = time.time() - llm_start
self.logger.info(f"LLM 解释完成,耗时: {llm_time:.2f}秒")
# 组装响应
response = {
"output": llm_result.content,
"table": table
}
self.logger.info("Tool execution completed successfully")
total_time = time.time() - start_time
self.logger.info(f"工具执行完成,总耗时: {total_time:.2f}秒,其中工具执行: {tool_time:.2f}秒,LLM解释: {llm_time:.2f}秒")
# 记录性能指标
self.logger.info(
"性能指标 - "
f"总耗时: {total_time:.2f}秒, "
f"工具执行: {tool_time:.2f}秒 ({(tool_time/total_time)*100:.1f}%), "
f"LLM解释: {llm_time:.2f}秒 ({(llm_time/total_time)*100:.1f}%)"
)
return response
except Exception as e:
self.logger.error(f"Error running tool: {str(e)}")
error_time = time.time() - start_time
self.logger.error(f"工具执行失败,耗时: {error_time:.2f}秒,错误: {str(e)}", exc_info=True)
raise
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment