Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
718766abb8
|
|
@ -13,6 +13,6 @@ print(f"cuDNN 版本: {cudnn_version}")
|
|||
|
||||
# 检查是否可以访问 CUDA
|
||||
if torch.cuda.is_available():
|
||||
print("CUDA is available. GPU name:", torch.cuda.get_device_name(0))
|
||||
print("pip install sentence-transformers -i https://pypi.mirrors.ustc.edu.cn/simpleCUDA is available. GPU name:", torch.cuda.get_device_name(0))
|
||||
else:
|
||||
print("CUDA is not available. Please check your installation.")
|
||||
|
|
@ -104,8 +104,8 @@ def tavily_search(text, config, top_k):
|
|||
raw_results = tavily_tool.run(text)
|
||||
search_results = [{k: v for k, v in item.items() if k != 'url'} for item in raw_results]
|
||||
|
||||
print("=== 完整搜索返回值 ===")
|
||||
print(search_results)
|
||||
# print("=== 完整搜索返回值 ===")
|
||||
# print(search_results)
|
||||
return search_results
|
||||
|
||||
SEARCH_ENGINES = {
|
||||
|
|
@ -158,7 +158,7 @@ def search_engine(query: str, top_k:int=0, engine_name: str="", config: dict={})
|
|||
)
|
||||
|
||||
docs = [x for x in search_result2docs(results, engine_name) if x.page_content and x.page_content.strip()]
|
||||
print(f"docs: {docs}")
|
||||
print(f"len(docs): {len(docs)}")
|
||||
return {"docs": docs, "search_engine": engine_name}
|
||||
|
||||
|
||||
|
|
@ -167,7 +167,7 @@ def search_internet(query: str = Field(description="query for Internet search"))
|
|||
"""用这个工具实现获取世界、历史、实时新闻、或除电力系统之外的信息查询"""
|
||||
try:
|
||||
print(f"search_internet: query: {query}")
|
||||
return BaseToolOutput(search_engine(query=query), format=format_context)
|
||||
return BaseToolOutput(data= search_engine(query=query), format=format_context)
|
||||
except Exception as e:
|
||||
logger.error(f"未知错误: {str(e)}")
|
||||
return BaseToolOutput(f"搜索过程中发生未知错误,{str(e)}", format=format_context)
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ def format_context(self: BaseToolOutput) -> str:
|
|||
doc = DocumentWithVSId.parse_obj(doc)
|
||||
source_documents.append(doc.page_content)
|
||||
|
||||
print(f"format_context: doc.page_content: {doc.page_content}")
|
||||
# print(f"format_context: doc.page_content: {doc.page_content}")
|
||||
if len(source_documents) == 0:
|
||||
context = "没有找到相关文档,请更换关键词重试"
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ def weather_check(
|
|||
"- '今天':获取当前实时天气\n"
|
||||
"- '明天'/'后天':获取未来24/48小时预报\n"
|
||||
"- '未来X天':获取最多X天预报(如'未来3天'),X的抽取要符合客户意图\n"
|
||||
"- 不支持其他参数,如果是其他参数,则时间参数为None"
|
||||
"- 不支持其他参数,如果是其他参数,则时间参数为None\n"
|
||||
)
|
||||
):
|
||||
"""用这个工具获取指定地点和指定时间的天气"""
|
||||
|
|
@ -32,8 +32,7 @@ def weather_check(
|
|||
missing_params.append("日期参数")
|
||||
|
||||
if missing_params:
|
||||
return BaseToolOutput(
|
||||
error_message=f"缺少必要参数:{', '.join(missing_params)},请补充完整查询信息",
|
||||
return BaseToolOutput(data={"error_message": f"缺少必要参数:{', '.join(missing_params)},请补充完整查询信息"},
|
||||
require_additional_input=True
|
||||
)
|
||||
|
||||
|
|
@ -42,13 +41,13 @@ def weather_check(
|
|||
weather_type, number = parse_date_parameter(date)
|
||||
except ValueError as e:
|
||||
logging.error(f"日期参数解析失败: {str(e)}")
|
||||
return BaseToolOutput(str(e))
|
||||
return BaseToolOutput(data={"error_message": str(e)})
|
||||
|
||||
# 获取API配置
|
||||
tool_config = get_tool_config("weather_check")
|
||||
api_key = tool_config.get("api_key")
|
||||
if not api_key:
|
||||
return BaseToolOutput("API密钥未配置,请联系管理员")
|
||||
return BaseToolOutput(data={"error_message": "API密钥未配置,请联系管理员"})
|
||||
|
||||
# 根据天气类型调用API
|
||||
if weather_type == "daily":
|
||||
|
|
@ -56,7 +55,8 @@ def weather_check(
|
|||
elif weather_type == "future":
|
||||
return _get_future_weather(city, api_key, number)
|
||||
else:
|
||||
return BaseToolOutput("不支持的天气类型")
|
||||
return BaseToolOutput(data={"error_message": "不支持的天气类型"})
|
||||
|
||||
|
||||
def _get_current_weather(city: str, api_key: str) -> BaseToolOutput:
|
||||
"""获取当前实时天气"""
|
||||
|
|
@ -66,14 +66,15 @@ def _get_current_weather(city: str, api_key: str) -> BaseToolOutput:
|
|||
|
||||
if response.status_code != 200:
|
||||
logging.error(f"天气查询失败: {response.status_code}")
|
||||
return BaseToolOutput("天气查询API请求失败")
|
||||
return BaseToolOutput(data={"error_message": "天气查询API请求失败"})
|
||||
|
||||
data = response.json()
|
||||
weather = {
|
||||
"temperature": data["results"][0]["now"]["temperature"],
|
||||
"description": data["results"][0]["now"]["text"],
|
||||
}
|
||||
return BaseToolOutput(weather)
|
||||
return BaseToolOutput(data=weather)
|
||||
|
||||
|
||||
def _get_future_weather(city: str, api_key: str, days: int) -> BaseToolOutput:
|
||||
"""获取未来天气预报"""
|
||||
|
|
@ -115,9 +116,10 @@ def _get_future_weather(city: str, api_key: str, days: int) -> BaseToolOutput:
|
|||
"后天最高温度": daily_data[2]["high"],
|
||||
}
|
||||
else:
|
||||
return BaseToolOutput("不支持的天数参数")
|
||||
return BaseToolOutput(data={"error_message": "不支持的天数参数"})
|
||||
|
||||
return BaseToolOutput(data=weather)
|
||||
|
||||
return BaseToolOutput(weather)
|
||||
|
||||
def parse_date_parameter(date: str) -> tuple:
|
||||
"""解析日期参数,返回天气类型和天数"""
|
||||
|
|
@ -136,5 +138,6 @@ def parse_date_parameter(date: str) -> tuple:
|
|||
else:
|
||||
raise ValueError("不支持的日期参数")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
weather_check("合肥","明天")
|
||||
weather_check("合肥", "明天")
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ async def chat_completions(
|
|||
# import rich
|
||||
# rich.print(body)
|
||||
# 当调用本接口且 body 中没有传入 "max_tokens" 参数时, 默认使用配置中定义的值
|
||||
logger.info(f"body.model_config:{body.model_config},body.tools: {body.tools},body.messages:{body.messages}")
|
||||
# logger.info(f"body.model_config:{body.model_config},body.tools: {body.tools},body.messages:{body.messages}")
|
||||
if body.max_tokens in [None, 0]:
|
||||
body.max_tokens = Settings.model_settings.MAX_TOKENS
|
||||
|
||||
|
|
|
|||
|
|
@ -70,6 +70,9 @@ def list_files_from_folder(kb_name: str):
|
|||
for x in ["temp", "tmp", ".", "~$"]:
|
||||
if tail.startswith(x):
|
||||
return True
|
||||
if "_source.txt" in tail.lower() or "_split.txt" in tail.lower():
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def process_entry(entry):
|
||||
|
|
@ -422,15 +425,15 @@ class KnowledgeFile:
|
|||
docs = zh_first_title_enhance(docs)
|
||||
docs = customize_zh_title_enhance(docs)
|
||||
|
||||
# i = 1
|
||||
# outputfile = file_name_without_extension + "_split.txt"
|
||||
# # 打开文件以写入模式
|
||||
# with open(outputfile, 'w') as file:
|
||||
# for doc in docs:
|
||||
# #print(f"**********切分段{i}:{doc}")
|
||||
# file.write(f"\n**********切分段{i}")
|
||||
# file.write(doc.page_content)
|
||||
# i = i+1
|
||||
i = 1
|
||||
outputfile = file_name_without_extension + "_split.txt"
|
||||
# 打开文件以写入模式
|
||||
with open(outputfile, 'w') as file:
|
||||
for doc in docs:
|
||||
#print(f"**********切分段{i}:{doc}")
|
||||
file.write(f"\n**********切分段{i}")
|
||||
file.write(doc.page_content)
|
||||
i = i+1
|
||||
|
||||
self.splited_docs = docs
|
||||
return self.splited_docs
|
||||
|
|
@ -537,7 +540,8 @@ def format_reference(kb_name: str, docs: List[Dict], api_base_url: str="") -> Li
|
|||
f"{api_base_url}/knowledge_base/download_doc?" + parameters
|
||||
)
|
||||
page_content = doc.get("page_content")
|
||||
ref = f"""出处 [{inum + 1}] [{filename}]({url}) \n\n{page_content}\n\n"""
|
||||
ref = f"""出处 <strong>[{inum + 1}]</strong> <strong>{filename}</strong>\n\n{page_content}\n\n"""
|
||||
# ref = f"""出处 [{inum + 1}] [{filename}]({url}) \n\n{page_content}\n\n"""
|
||||
source_documents.append(ref)
|
||||
|
||||
return source_documents
|
||||
|
|
|
|||
|
|
@ -517,7 +517,7 @@ class ToolSettings(BaseFileSettings):
|
|||
},
|
||||
"top_k": 5,
|
||||
"verbose": "Origin",
|
||||
"conclude_prompt": "<指令>这是搜索到的互联网信息,请你根据这些信息进行提取并有调理,简洁的回答问题。如果无法从中得到答案,请说 “无法搜索到能回答问题的内容”。 "
|
||||
"conclude_prompt": "<指令>这是搜索到的互联网信息,请你根据这些信息进行提取并有调理,简洁的回答问题,不得包含有重复的词汇或句子。如果无法从中得到答案,请说 “无法搜索到能回答问题的内容”。 "
|
||||
"</指令>\n<已知信息>{{ context }}</已知信息>\n"
|
||||
"<问题>\n"
|
||||
"{{ question }}\n"
|
||||
|
|
@ -657,7 +657,7 @@ class PromptSettings(BaseFileSettings):
|
|||
|
||||
rag: dict = {
|
||||
"default": (
|
||||
"【指令】根据已知信息,简洁和专业的来回答问题。"
|
||||
"【指令】根据已知信息,简洁和专业的来回答问题,不得包含有重复的词汇或句子。"
|
||||
"如果无法从中得到答案,请说 “根据已知信息无法回答该问题”,不允许在答案中添加编造成分,答案请使用中文。\n\n"
|
||||
"【已知信息】{{context}}\n\n"
|
||||
"【问题】{{question}}\n"
|
||||
|
|
|
|||
Loading…
Reference in New Issue