zhouhui.jiang

update

......@@ -170,6 +170,24 @@ def create_waybill_d(consignmentCode: str, Authorization: str = None) -> str:
return _create_error_response(f"创建运单失败: {str(e)}", consignmentCode)
def create_waybill_c(consignmentCode: str, Authorization: str = None) -> str:
"""根据运单号创建C类运单
Args:
consignmentCode: 运单号(必填)
Authorization: 授权令牌,如果提供则使用该值,否则使用 API_CONFIG 中的默认值
Returns:
创建结果信息(JSON字符串),包含:
- message: 创建结果描述
"""
# 暂时不支持AI创建C类运单
result_data = {
"message": "暂不支持AI创建"
}
return json.dumps(result_data, ensure_ascii=False, indent=2)
def create_waybill_d_with_id(
consignmentCode: str,
consignmentId: str,
......
......@@ -12,7 +12,7 @@ from langchain_core.messages import AnyMessage
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# 导入 API 模块
from API.waybill_api import query_waybill_list, create_waybill_d, push_waybill_for_ocr, query_waybill_info, create_waybill_d_with_id
from API.waybill_api import query_waybill_list, create_waybill_d, create_waybill_c, push_waybill_for_ocr, query_waybill_info, create_waybill_d_with_id
from API.paperless_api import upload_clearance_file, upload_file_for_ocr
# 导入工具类
......@@ -196,9 +196,15 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List
1. **运单查询**:根据用户需求查询运单信息
- **查询运单列表**:当用户查询运单但不提供运单号时,使用 query_waybill_list 查询运单列表,支持按状态、时间等条件筛选,结果以JSON形式展示,AI不用对返回数据JSON进行加工
- **查询单个运单详情**:当用户提供运单号查询时,使用 query_waybill_info 查询该运单的详细信息(包括运单基本信息、公司信息、商品明细等),返回格式与 create_waybill_d 相同
2. **运单创建**:协助用户创建D类运单,确保信息完整准确
- **create_waybill_d**:根据运单号创建D类运单,运单编号必须从用户输入中获取(不是从提示词中获取)。当用户输入"创建运单"或"申报"时,则使用此工具创建运单
- **上下文理解**:当用户说"创建运单"后,如果用户输入了数字(一般为9-12位,如"2025102904"),应理解该数字就是运单编号,直接使用该运单编号调用 create_waybill_d 工具创建运单,不需要询问用户确认
2. **运单创建**:协助用户创建运单,确保信息完整准确
- **运单类型选择**:当用户输入"创建运单"或"申报"时,需要询问用户选择创建D类运单还是C类运单。询问时应提供选项,如"请选择运单类型:1.创建D类运单 2.创建C类运单"
- **数字选择理解**:当用户输入"1"、"2"等数字时,应理解为用户选择了对应选项。例如:如果提供了"1.创建D类运单 2.创建C类运单",用户回复"1"表示选择创建D类运单,回复"2"表示选择创建C类运单
- **create_waybill_d**:根据运单号创建D类运单,运单编号必须从用户输入中获取(不是从提示词中获取)。当用户选择创建D类运单时,使用此工具创建运单
- **create_waybill_c**:根据运单号创建C类运单,运单编号必须从用户输入中获取。当用户选择创建C类运单时,使用此工具。注意:此工具目前暂不支持AI创建,会返回"暂不支持AI创建"的提示
- **用户选择后的处理**:
- 如果用户选择创建D类运单(回复"1"或明确表示创建D类运单):使用用户输入的运单编号调用 create_waybill_d 工具,不再询问其他参数
- 如果用户选择创建C类运单(回复"2"或明确表示创建C类运单):使用用户输入的运单编号调用 create_waybill_c 工具,不再询问其他参数
- **上下文理解**:当用户说"创建运单"后,如果用户输入了数字(一般为9-12位,如"2025102904"),应理解该数字就是运单编号。但在调用工具之前,需要先询问用户选择运单类型(D类或C类),然后使用该运单编号调用相应的工具
3. **运单修改**:协助用户修改D类运单,确保信息完整准确
- **create_waybill_d_with_id**:根据运单ID及运单号修改D类运单,参数获取方式:
- consignmentCode(运单编号)和 consignmentId(运单ID)可从上下文中获取,如果之前执行了 upload_file_for_ocr 工具,该工具会返回 chmCode(运单编号)和 chmId(运单ID),需要从返回结果中提取 chmCode 映射为 consignmentCode,提取 chmId 映射为 consignmentId
......@@ -218,12 +224,13 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List
## 工作原则:
- **运单操作工具选择规则(重要)**:
- **创建运单**:当用户说"创建运单"或"申报"时,使用 create_waybill_d 工具,运单编号从用户输入中获取。运单编号一般为9-12位数字。如果用户说"创建运单"后输入了数字(一般为9-12位),应理解该数字就是运单编号,直接使用该运单编号调用工具,不需要询问用户确认
- **创建运单**:当用户说"创建运单"或"申报"时,需要询问用户选择创建D类运单还是C类运单。询问时应提供选项,如"请选择运单类型:1.创建D类运单 2.创建C类运单"。运单编号从用户输入中获取,运单编号一般为9-12位数字。如果用户说"创建运单"后输入了数字(一般为9-12位),应理解该数字就是运单编号,但在调用工具之前,需要先询问用户选择运单类型,然后使用该运单编号调用相应的工具
- **数字选择理解**:当用户输入"1"、"2"等数字时,应理解为用户选择了对应选项。如果之前提供了选项(如"1.创建D类运单 2.创建C类运单"),用户回复数字时应理解为选择了对应选项,并直接使用相应工具和运单编号
- **修改运单**:当用户说"修改运单"或提示词中已有 consignmentCode、consignmentId 且都不为None时,必须立即调用 create_waybill_d_with_id 修改运单,禁止询问用户或使用其他工具(loginName 和 userId 已硬编码,不需要传递)
- **图文识别后修改运单**:当 upload_file_for_ocr 工具返回"图文识别成功,请确认是否使用该运单编号"的提示,且用户回答"是"、"确认"、"使用"等肯定回答时,必须立即调用 create_waybill_d_with_id 工具,使用返回的 chmCode 映射为 consignmentCode,chmId 映射为 consignmentId,直接修改运单(loginName 和 userId 已硬编码,不需要传递),不需要再次询问用户
- **参数获取**:consignmentCode 和 consignmentId 可从上下文中获取,如果之前执行了 upload_file_for_ocr 工具,可以从该工具的返回结果中提取 chmCode 和 chmId,并映射为 consignmentCode 和 consignmentId
- **上下文理解能力(重要)**:必须主动理解用户输入的上下文,从用户输入中识别运单编号(运单编号一般为9-12位数字)、从工具调用结果中提取参数,不需要询问用户确认,直接使用识别到的参数调用相应工具。例外:在文件上传场景中,如果用户意图不明确(同时有 slip_id 和 pdf_path 但未明确表示要上传清关文件还是进行图文识别),需要询问用户选择
- **数字选择理解(重要)**:当用户输入"1"、"2"、"3"等数字时,应理解为用户选择了对应选项。如果之前提供了选项(如"1.上传清关文件 2.上传图文识别文件"),用户回复数字时应理解为选择了对应选项,并直接使用相应工具和参数
- **上下文理解能力(重要)**:必须主动理解用户输入的上下文,从用户输入中识别运单编号(运单编号一般为9-12位数字)、从工具调用结果中提取参数,不需要询问用户确认,直接使用识别到的参数调用相应工具。例外:1) 在文件上传场景中,如果用户意图不明确(同时有 slip_id 和 pdf_path 但未明确表示要上传清关文件还是进行图文识别),需要询问用户选择;2) 在创建运单场景中,当用户输入"创建运单"或"申报"时,需要询问用户选择创建D类运单还是C类运单
- **数字选择理解(重要)**:当用户输入"1"、"2"、"3"等数字时,应理解为用户选择了对应选项。如果之前提供了选项(如"1.上传清关文件 2.上传图文识别文件"或"1.创建D类运单 2.创建C类运单"),用户回复数字时应理解为选择了对应选项,并直接使用相应工具和参数
- **文件上传工具选择规则(重要)**:如果用户意图不明确(同时有 slip_id 和 pdf_path 但未明确表示要上传清关文件还是进行图文识别),需要询问用户选择。询问时应提供选项,如"请选择:1.上传清关文件 2.上传图文识别文件"。如果用户已经明确表示要上传清关文件或进行图文识别,则直接使用相应工具,不需要询问。用户选择后:
- 如果用户选择图文识别(回复"2"或明确表示图文识别):直接使用上下文中的 pdf_path 调用 upload_file_for_ocr 工具,不再询问参数
- 如果用户选择上传清关文件(回复"1"或明确表示上传清关文件):从上下文(create_waybill_d 或 query_waybill_info 的返回结果)中提取 consignmentCode 映射为 code,提取 waybill_id 映射为 slip_id,加上上下文中的 pdf_path,直接调用 upload_clearance_file 工具,不再询问其他参数
......@@ -243,11 +250,20 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List
- **使用场景**:当用户提供运单号查询运单详情时使用此工具
- **运单编号格式**:运单编号一般为9-12位数字
- **返回参数**:此工具返回的数据中包含 consignmentCode(运单编号)和 waybill_id(运单ID),这些参数可以用于后续的 upload_clearance_file 工具调用(consignmentCode 对应 code 参数,waybill_id 对应 slip_id 参数)
- **返回数据说明**:此工具返回的数据中包含 message 字段,用于描述查询结果(成功时:"查询详情成功",失败时:具体的失败原因)
- create_waybill_d: 根据运单号创建D类运单,需要提供参数(运单号、Authorization)
- **使用场景**:当用户输入"创建运单"或"申报"时使用此工具创建运单
- **使用场景**:当用户选择创建D类运单时使用此工具创建运单
- **重要说明**:运单编号需要从用户输入中获取,不是从提示词中获取。运单编号一般为9-12位数字
- **上下文理解**:当用户说"创建运单"后,如果用户输入了数字(一般为9-12位,如"2025102904"),应理解该数字就是运单编号,直接使用该运单编号调用此工具创建运单,不需要询问用户确认。在识别运单编号时,应以9-12位数字作为判断标准,避免将其他数字(如1-3位的选择数字)误判为运单编号
- **选择流程**:当用户输入"创建运单"或"申报"时,需要先询问用户选择运单类型。如果用户选择创建D类运单(回复"1"或明确表示创建D类运单),则使用用户输入的运单编号调用此工具创建运单
- **上下文理解**:当用户说"创建运单"后,如果用户输入了数字(一般为9-12位,如"2025102904"),应理解该数字就是运单编号。但在调用工具之前,需要先询问用户选择运单类型(D类或C类),然后使用该运单编号调用相应的工具。在识别运单编号时,应以9-12位数字作为判断标准,避免将其他数字(如1-3位的选择数字)误判为运单编号
- **返回参数**:此工具返回的数据中包含 consignmentCode(运单编号)和 waybill_id(运单ID),这些参数可以用于后续的 upload_clearance_file 工具调用(consignmentCode 对应 code 参数,waybill_id 对应 slip_id 参数)
- **返回数据说明**:此工具返回的数据中包含 message 字段,用于描述创建结果(成功时:"创建运单成功",失败时:具体的失败原因)
- create_waybill_c: 根据运单号创建C类运单,需要提供参数(运单号、Authorization)
- **使用场景**:当用户选择创建C类运单时使用此工具
- **重要说明**:运单编号需要从用户输入中获取,不是从提示词中获取。运单编号一般为9-12位数字
- **选择流程**:当用户输入"创建运单"或"申报"时,需要先询问用户选择运单类型。如果用户选择创建C类运单(回复"2"或明确表示创建C类运单),则使用用户输入的运单编号调用此工具创建运单
- **当前状态**:此工具目前暂不支持AI创建,调用后会返回 message 字段,值为"暂不支持AI创建"
- **返回数据说明**:此工具返回的数据中只包含 message 字段,值为"暂不支持AI创建"。AI可以根据此信息向用户说明当前暂不支持创建C类运单
- create_waybill_d_with_id: 根据运单ID及运单号修改D类运单,需要提供参数(运单编号、运单ID、Authorization)
- **使用场景**:
- 当用户输入"修改运单"或提示词中已有 consignmentCode、consignmentId 且都不为None时,必须立即调用此工具修改运单
......@@ -273,11 +289,16 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List
- 空字段会显示为空单元格
## query_waybill_info数据展示说明:
- 返回格式与 create_waybill_d 相同,包含:运单编号、运单ID、公司名称、公司编码、商品明细列表
- 返回格式与 create_waybill_d 相同,包含:message(查询结果描述)、运单编号、运单ID、运单状态、公司名称、公司编码、商品明细列表
- 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容
## create_waybill_d数据展示说明:
- 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容。
- 返回数据包含:message(创建结果描述)、运单编号、运单ID、运单状态、公司名称、公司编码、商品明细列表
- 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容
## create_waybill_c数据展示说明:
- 返回数据只包含:message(创建结果描述),值为"暂不支持AI创建"
- 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容
## create_waybill_d_with_id数据展示说明:
- 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容。
......@@ -297,7 +318,7 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List
# 创建 ReAct 智能体
agent = create_react_agent(
model=model,
tools=[query_waybill_list, query_waybill_info, create_waybill_d, create_waybill_d_with_id, upload_clearance_file, upload_file_for_ocr, push_waybill_for_ocr],
tools=[query_waybill_list, query_waybill_info, create_waybill_d, create_waybill_c, create_waybill_d_with_id, upload_clearance_file, upload_file_for_ocr, push_waybill_for_ocr],
pre_model_hook=pre_model_inspect_attachments,
prompt=_create_system_prompt,
)
......