Compare commits
3 Commits
c4cf09a28f
...
545fbc732b
| Author | SHA1 | Date | |
|---|---|---|---|
| 545fbc732b | |||
| 56cb36dfc9 | |||
| a6c5988408 |
@@ -3,23 +3,7 @@ import os
|
|||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
class BaseConfig(BaseModel):
|
class BaseConfig(BaseModel):
|
||||||
projectInfo:str = os.getenv("PROJECT_TITLE","您好,我是博微工程理解小助手,您可以问我有关[线路工程]工程数据的相关问题!")
|
projectInfo:str = os.getenv("PROJECT_TITLE","会话提示消息")
|
||||||
|
|
||||||
def ParamterCfg(self,**args):
|
|
||||||
projectInfo = args.get('projectInfo')
|
|
||||||
questions = os.getenv("CONVERSATION_STARTERS", "dev")
|
|
||||||
return{
|
|
||||||
"opening_statement": self.projectInfo,
|
|
||||||
"suggested_questions": questions.split('\n'),
|
|
||||||
"suggested_questions_after_answer": {
|
|
||||||
"enabled": False
|
|
||||||
},
|
|
||||||
"speech_to_text": {
|
|
||||||
"enabled": False
|
|
||||||
},
|
|
||||||
"text_to_speech": {
|
|
||||||
class BaseConfig(BaseModel):
|
|
||||||
projectInfo:str = os.getenv("PROJECT_TITLE","您好,我是博微工程理解小助手,您可以问我有关[线路工程]工程数据的相关问题!")
|
|
||||||
|
|
||||||
def ParamterCfg(self):
|
def ParamterCfg(self):
|
||||||
questions = os.getenv("CONVERSATION_STARTERS", "dev")
|
questions = os.getenv("CONVERSATION_STARTERS", "dev")
|
||||||
@@ -54,7 +38,7 @@ class BaseConfig(BaseModel):
|
|||||||
"type": "select",
|
"type": "select",
|
||||||
"max_length": 48,
|
"max_length": 48,
|
||||||
"required": True,
|
"required": True,
|
||||||
"options": projectInfo
|
"options": self.projectInfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -71,9 +55,9 @@ class BaseConfig(BaseModel):
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"system_parameters": {
|
"system_parameters": {
|
||||||
"image_file_size_limit": "10"
|
"image_file_size_limit": "10",
|
||||||
"language": "",
|
"language": "",
|
||||||
"voice": ""
|
"voice": "",
|
||||||
},
|
},
|
||||||
"retriever_resource": {
|
"retriever_resource": {
|
||||||
"enabled": True
|
"enabled": True
|
||||||
@@ -84,22 +68,6 @@ class BaseConfig(BaseModel):
|
|||||||
"more_like_this": {
|
"more_like_this": {
|
||||||
"enabled": False
|
"enabled": False
|
||||||
},
|
},
|
||||||
"user_input_form": [],
|
|
||||||
"sensitive_word_avoidance": {
|
|
||||||
"enabled": False
|
|
||||||
},
|
|
||||||
"file_upload": {
|
|
||||||
"image": {
|
|
||||||
"enabled": False,
|
|
||||||
"number_limits": 3,
|
|
||||||
"transfer_methods": [
|
|
||||||
"remote_url"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"system_parameters": {
|
|
||||||
"image_file_size_limit": "10"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def ConversationCfg(self):
|
def ConversationCfg(self):
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ from llama_index.core.tools.query_engine import QueryEngineTool
|
|||||||
|
|
||||||
from app.engine.engine import create_query_engine, create_summary_query_engine
|
from app.engine.engine import create_query_engine, create_summary_query_engine
|
||||||
from app.engine.index import get_index
|
from app.engine.index import get_index
|
||||||
|
from app.engine.prompt import ReActChatFormatter_messages, tree_summary_query_engine_tool_messages, \
|
||||||
|
query_engine_tool_messages, summary_query_tool_messages
|
||||||
#from app.engine.loaders.db import makeDescriptionByEngine
|
#from app.engine.loaders.db import makeDescriptionByEngine
|
||||||
from app.engine.tools import ToolFactory
|
from app.engine.tools import ToolFactory
|
||||||
from app.api.routers.request.base import ProjectInfo
|
from app.api.routers.request.base import ProjectInfo
|
||||||
@@ -33,19 +35,20 @@ def get_chat_engine(filters=None, params:dict=None):
|
|||||||
# Add query tool if index exists
|
# Add query tool if index exists
|
||||||
index = get_index(getPrjFalg(params))
|
index = get_index(getPrjFalg(params))
|
||||||
if index is not None:
|
if index is not None:
|
||||||
|
|
||||||
|
|
||||||
summary_query_engine = create_summary_query_engine(index,top_k,use_reranker,filters)
|
summary_query_engine = create_summary_query_engine(index,top_k,use_reranker,filters)
|
||||||
summary_query_tool = QueryEngineTool.from_defaults( query_engine=summary_query_engine, name="summary_query_tool",
|
summary_query_tool = QueryEngineTool.from_defaults( query_engine=summary_query_engine, name="summary_query_tool",
|
||||||
description="适用于任何需要进行全面总结、概括的要求。",
|
description=summary_query_tool_messages,
|
||||||
)
|
)
|
||||||
|
|
||||||
query_engine = create_query_engine(index,top_k,use_reranker,filters,response_mode = "COMPACT")
|
query_engine = create_query_engine(index,top_k,use_reranker,filters,response_mode = "COMPACT")
|
||||||
query_engine_tool = QueryEngineTool.from_defaults(query_engine=query_engine, name="zj_query_tool",
|
query_engine_tool = QueryEngineTool.from_defaults(query_engine=query_engine, name="zj_query_tool",
|
||||||
description="由博微公司编制的关于电力造价知识、电力造价编制软件知识和造价工程文件结构的知识库。适用于查询电力领域、电力造价领域、博微、博微电力、博微造价等业务等内容。如果本知识库没有直接答案但有解决思路的可以返回解决办法后建议使用“zjdata_query_tool”工具。",
|
description=query_engine_tool_messages)
|
||||||
)
|
|
||||||
|
|
||||||
query_engine = create_query_engine(index,top_k,use_reranker,filters,response_mode = "TREE_SUMMARIZE")
|
query_engine = create_query_engine(index,top_k,use_reranker,filters,response_mode = "TREE_SUMMARIZE")
|
||||||
query_engine_tool_1 = QueryEngineTool.from_defaults(query_engine=query_engine, name="zj_query_tool_1",
|
query_engine_tool_1 = QueryEngineTool.from_defaults(query_engine=query_engine, name="zj_query_tool_1",
|
||||||
description="由博微公司编制的关于电力造价知识、电力造价编制软件知识和造价工程文件结构的知识库。适用于查询电力领域、电力造价领域、博微、博微电力、博微造价等业务等内容。如果本知识库没有直接答案但有解决思路的可以返回解决办法后,且在询问工程中单位的具体数值,例如用量,费率,合计,金额等的时候建议使用“zj_query_tool_1”工具。",
|
description=tree_summary_query_engine_tool_messages)
|
||||||
)
|
|
||||||
|
|
||||||
tools.append(summary_query_tool)
|
tools.append(summary_query_tool)
|
||||||
tools.append(query_engine_tool)
|
tools.append(query_engine_tool)
|
||||||
@@ -54,8 +57,7 @@ def get_chat_engine(filters=None, params:dict=None):
|
|||||||
# Add additional tools
|
# Add additional tools
|
||||||
tools += ToolFactory.from_env()
|
tools += ToolFactory.from_env()
|
||||||
|
|
||||||
prefix_messages = ("""您的设计旨在帮助完成各种任务,从回答问题到提供其他类型分析的摘要。\n\n##工具\n\n你可以访问各种工具。你有责任按照你认为合适的顺序使用这些工具来完成当前的任务。\n这可能需要将任务分解为子任务,并使用不同的工具来完成每个子任务。\n\n你可以访问以下工具:\n{tool_desc}\n\n\n##输出格式\n\n请用与问题相同的语言回答,并使用以下格式:\n\n \nThought: 用户当前的语言是:(user's language)。我需要使用工具来帮助我回答问题。\nAction: 如果使用工具,则为工具名称(one of {tool_names})。\nAction Input: 输入给工具的内容,使用JSON格式表示kwargs(例如{{\"input\": \"hello world\", \"num_beams\": 5}})\n \n\n请始终以Thought开始。\n\n请始终以Thought开始。\n\n请始终以Thought开始。\n\n请始终以Thought开始。\n\n切勿用Markdown代码标记包围你的响应。如果需要,可以在响应中使用代码标记。\n\n请为Action Input使用有效的JSON格式。不要这样做{{\'input\': \'hello world\', \'num_beams\': 5}}。\n\n如果使用此格式,用户将以下面的格式进行回应:\n\n \nObservation: 工具响应\n \n\n你应该继续重复上述格式,直到你有足够的信息来回答问题而无需使用更多工具。此时,你必须使用以下两种格式之一进行回答:\n\n \nThought: 我可以不用任何工具来回答。我将使用用户的语言来回答。\nAnswer: [你的答案(与用户问题相同的语言)]\n \n\n \nThought: 我无法使用提供的工具回答问题。\nAnswer: [你的答案(与用户问题相同的语言)]\n \n\n##如果从工具中得到的回应是Empty Response,那么只需要回答“我不知道”,不需要额外回答别的内容。## 当前对话\n\n以下是当前对话,由人类和助手的消息交替组成。\n""")
|
react_chat_formatter = ReActChatFormatter.from_defaults(ReActChatFormatter_messages)
|
||||||
react_chat_formatter = ReActChatFormatter.from_defaults(prefix_messages)
|
|
||||||
agentrunner = AgentRunner.from_llm(
|
agentrunner = AgentRunner.from_llm(
|
||||||
llm=Settings.llm,
|
llm=Settings.llm,
|
||||||
tools=tools,
|
tools=tools,
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ text_qa_template_str = (
|
|||||||
"你的回复: "
|
"你的回复: "
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
text_qa_template = PromptTemplate(text_qa_template_str)
|
text_qa_template = PromptTemplate(text_qa_template_str)
|
||||||
|
|
||||||
refine_template_str = (
|
refine_template_str = (
|
||||||
@@ -93,3 +92,43 @@ simple_template_str = (
|
|||||||
"{query_str}"
|
"{query_str}"
|
||||||
)
|
)
|
||||||
simple_template = PromptTemplate(simple_template_str)
|
simple_template = PromptTemplate(simple_template_str)
|
||||||
|
|
||||||
|
ReActChatFormatter_messages = (
|
||||||
|
"您的设计旨在帮助完成各种任务,从回答问题到提供其他类型分析的摘要。\n\n"
|
||||||
|
"##工具\n\n"
|
||||||
|
"你可以访问各种工具。你有责任按照你认为合适的顺序使用这些工具来完成当前的任务。\n"
|
||||||
|
"这可能需要将任务分解为子任务,并使用不同的工具来完成每个子任务。\n\n"
|
||||||
|
"你可以访问以下工具:\n"
|
||||||
|
"{tool_desc}\n\n\n"
|
||||||
|
"##输出格式\n\n"
|
||||||
|
"请用与问题相同的语言回答,并使用以下格式:\n\n"
|
||||||
|
"'''\n"
|
||||||
|
"Thought: 用户当前的语言是:(user's language)。我需要使用工具来帮助我回答问题。\n"
|
||||||
|
"Action: 如果使用工具,则为工具名称(one of {tool_names})。\n"
|
||||||
|
"Action Input: 输入给工具的内容,使用JSON格式表示kwargs(例如{{\"input\": \"hello world\", \"num_beams\": 5}})\n"
|
||||||
|
"'''\n\n"
|
||||||
|
"请始终以Thought开始。\n\n"
|
||||||
|
"请始终以Thought开始。\n\n"
|
||||||
|
"请始终以Thought开始。\n\n"
|
||||||
|
"请始终以Thought开始。\n\n"
|
||||||
|
"切勿用Markdown代码标记包围你的响应。如果需要,可以在响应中使用代码标记。\n\n"
|
||||||
|
"请为Action Input使用有效的JSON格式。不要这样做{{\'input\': \'hello world\', \'num_beams\': 5}}。\n\n"
|
||||||
|
"如果使用此格式,用户将以下面的格式进行回应:\n\n"
|
||||||
|
"'''\n"
|
||||||
|
"Observation: 工具响应\n"
|
||||||
|
"'''\n\n"
|
||||||
|
"你应该继续重复上述格式,直到你有足够的信息来回答问题而无需使用更多工具。此时,你必须使用以下两种格式之一进行回答:\n\n"
|
||||||
|
"'''\nThought: 我可以不用任何工具来回答。我将使用用户的语言来回答。\n"
|
||||||
|
"Answer: [你的答案(与用户问题相同的语言)]\n"
|
||||||
|
"'''\n\n"
|
||||||
|
"'''\n"
|
||||||
|
"Thought: 我无法使用提供的工具回答问题。\n"
|
||||||
|
"Answer: [你的答案(与用户问题相同的语言)]\n"
|
||||||
|
"'''\n\n##如果从工具中得到的回应是Empty Response,那么只需要回答“我不知道”,不需要额外回答别的内容。## 当前对话\n\n"
|
||||||
|
"以下是当前对话,由人类和助手的消息交替组成。\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
summary_query_tool_messages = "适用于任何需要进行全面总结、概括的要求。"
|
||||||
|
query_engine_tool_messages = "由博微公司编制的关于电力造价知识、电力造价编制软件知识和造价工程文件结构的知识库。适用于查询电力领域、电力造价领域、博微、博微电力、博微造价等业务等内容。如果本知识库没有直接答案但有解决思路的可以返回解决办法后建议使用“zjdata_query_tool”工具。",
|
||||||
|
tree_summary_query_engine_tool_messages = "由博微公司编制的关于电力造价知识、电力造价编制软件知识和造价工程文件结构的知识库。适用于查询电力领域、电力造价领域、博微、博微电力、博微造价等业务等内容。如果本知识库没有直接答案但有解决思路的可以返回解决办法后,且在询问工程中单位的具体数值,例如用量,费率,合计,金额等的时候建议使用“zj_query_tool_1”工具。",
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from llama_index.core.node_parser import SentenceSplitter
|
|
||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user