Showing
2 changed files
with
51 additions
and
12 deletions
| ... | @@ -170,6 +170,24 @@ def create_waybill_d(consignmentCode: str, Authorization: str = None) -> str: | ... | @@ -170,6 +170,24 @@ def create_waybill_d(consignmentCode: str, Authorization: str = None) -> str: |
| 170 | return _create_error_response(f"创建运单失败: {str(e)}", consignmentCode) | 170 | return _create_error_response(f"创建运单失败: {str(e)}", consignmentCode) |
| 171 | 171 | ||
| 172 | 172 | ||
| 173 | +def create_waybill_c(consignmentCode: str, Authorization: str = None) -> str: | ||
| 174 | + """根据运单号创建C类运单 | ||
| 175 | + | ||
| 176 | + Args: | ||
| 177 | + consignmentCode: 运单号(必填) | ||
| 178 | + Authorization: 授权令牌,如果提供则使用该值,否则使用 API_CONFIG 中的默认值 | ||
| 179 | + | ||
| 180 | + Returns: | ||
| 181 | + 创建结果信息(JSON字符串),包含: | ||
| 182 | + - message: 创建结果描述 | ||
| 183 | + """ | ||
| 184 | + # 暂时不支持AI创建C类运单 | ||
| 185 | + result_data = { | ||
| 186 | + "message": "暂不支持AI创建" | ||
| 187 | + } | ||
| 188 | + return json.dumps(result_data, ensure_ascii=False, indent=2) | ||
| 189 | + | ||
| 190 | + | ||
| 173 | def create_waybill_d_with_id( | 191 | def create_waybill_d_with_id( |
| 174 | consignmentCode: str, | 192 | consignmentCode: str, |
| 175 | consignmentId: str, | 193 | consignmentId: str, | ... | ... |
| ... | @@ -12,7 +12,7 @@ from langchain_core.messages import AnyMessage | ... | @@ -12,7 +12,7 @@ from langchain_core.messages import AnyMessage |
| 12 | sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | 12 | sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
| 13 | 13 | ||
| 14 | # 导入 API 模块 | 14 | # 导入 API 模块 |
| 15 | -from API.waybill_api import query_waybill_list, create_waybill_d, push_waybill_for_ocr, query_waybill_info, create_waybill_d_with_id | 15 | +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 |
| 16 | from API.paperless_api import upload_clearance_file, upload_file_for_ocr | 16 | from API.paperless_api import upload_clearance_file, upload_file_for_ocr |
| 17 | 17 | ||
| 18 | # 导入工具类 | 18 | # 导入工具类 |
| ... | @@ -196,9 +196,15 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List | ... | @@ -196,9 +196,15 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List |
| 196 | 1. **运单查询**:根据用户需求查询运单信息 | 196 | 1. **运单查询**:根据用户需求查询运单信息 |
| 197 | - **查询运单列表**:当用户查询运单但不提供运单号时,使用 query_waybill_list 查询运单列表,支持按状态、时间等条件筛选,结果以JSON形式展示,AI不用对返回数据JSON进行加工 | 197 | - **查询运单列表**:当用户查询运单但不提供运单号时,使用 query_waybill_list 查询运单列表,支持按状态、时间等条件筛选,结果以JSON形式展示,AI不用对返回数据JSON进行加工 |
| 198 | - **查询单个运单详情**:当用户提供运单号查询时,使用 query_waybill_info 查询该运单的详细信息(包括运单基本信息、公司信息、商品明细等),返回格式与 create_waybill_d 相同 | 198 | - **查询单个运单详情**:当用户提供运单号查询时,使用 query_waybill_info 查询该运单的详细信息(包括运单基本信息、公司信息、商品明细等),返回格式与 create_waybill_d 相同 |
| 199 | -2. **运单创建**:协助用户创建D类运单,确保信息完整准确 | 199 | +2. **运单创建**:协助用户创建运单,确保信息完整准确 |
| 200 | - - **create_waybill_d**:根据运单号创建D类运单,运单编号必须从用户输入中获取(不是从提示词中获取)。当用户输入"创建运单"或"申报"时,则使用此工具创建运单 | 200 | + - **运单类型选择**:当用户输入"创建运单"或"申报"时,需要询问用户选择创建D类运单还是C类运单。询问时应提供选项,如"请选择运单类型:1.创建D类运单 2.创建C类运单" |
| 201 | - - **上下文理解**:当用户说"创建运单"后,如果用户输入了数字(一般为9-12位,如"2025102904"),应理解该数字就是运单编号,直接使用该运单编号调用 create_waybill_d 工具创建运单,不需要询问用户确认 | 201 | + - **数字选择理解**:当用户输入"1"、"2"等数字时,应理解为用户选择了对应选项。例如:如果提供了"1.创建D类运单 2.创建C类运单",用户回复"1"表示选择创建D类运单,回复"2"表示选择创建C类运单 |
| 202 | + - **create_waybill_d**:根据运单号创建D类运单,运单编号必须从用户输入中获取(不是从提示词中获取)。当用户选择创建D类运单时,使用此工具创建运单 | ||
| 203 | + - **create_waybill_c**:根据运单号创建C类运单,运单编号必须从用户输入中获取。当用户选择创建C类运单时,使用此工具。注意:此工具目前暂不支持AI创建,会返回"暂不支持AI创建"的提示 | ||
| 204 | + - **用户选择后的处理**: | ||
| 205 | + - 如果用户选择创建D类运单(回复"1"或明确表示创建D类运单):使用用户输入的运单编号调用 create_waybill_d 工具,不再询问其他参数 | ||
| 206 | + - 如果用户选择创建C类运单(回复"2"或明确表示创建C类运单):使用用户输入的运单编号调用 create_waybill_c 工具,不再询问其他参数 | ||
| 207 | + - **上下文理解**:当用户说"创建运单"后,如果用户输入了数字(一般为9-12位,如"2025102904"),应理解该数字就是运单编号。但在调用工具之前,需要先询问用户选择运单类型(D类或C类),然后使用该运单编号调用相应的工具 | ||
| 202 | 3. **运单修改**:协助用户修改D类运单,确保信息完整准确 | 208 | 3. **运单修改**:协助用户修改D类运单,确保信息完整准确 |
| 203 | - **create_waybill_d_with_id**:根据运单ID及运单号修改D类运单,参数获取方式: | 209 | - **create_waybill_d_with_id**:根据运单ID及运单号修改D类运单,参数获取方式: |
| 204 | - consignmentCode(运单编号)和 consignmentId(运单ID)可从上下文中获取,如果之前执行了 upload_file_for_ocr 工具,该工具会返回 chmCode(运单编号)和 chmId(运单ID),需要从返回结果中提取 chmCode 映射为 consignmentCode,提取 chmId 映射为 consignmentId | 210 | - 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 | ... | @@ -218,12 +224,13 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List |
| 218 | 224 | ||
| 219 | ## 工作原则: | 225 | ## 工作原则: |
| 220 | - **运单操作工具选择规则(重要)**: | 226 | - **运单操作工具选择规则(重要)**: |
| 221 | - - **创建运单**:当用户说"创建运单"或"申报"时,使用 create_waybill_d 工具,运单编号从用户输入中获取。运单编号一般为9-12位数字。如果用户说"创建运单"后输入了数字(一般为9-12位),应理解该数字就是运单编号,直接使用该运单编号调用工具,不需要询问用户确认 | 227 | + - **创建运单**:当用户说"创建运单"或"申报"时,需要询问用户选择创建D类运单还是C类运单。询问时应提供选项,如"请选择运单类型:1.创建D类运单 2.创建C类运单"。运单编号从用户输入中获取,运单编号一般为9-12位数字。如果用户说"创建运单"后输入了数字(一般为9-12位),应理解该数字就是运单编号,但在调用工具之前,需要先询问用户选择运单类型,然后使用该运单编号调用相应的工具 |
| 228 | + - **数字选择理解**:当用户输入"1"、"2"等数字时,应理解为用户选择了对应选项。如果之前提供了选项(如"1.创建D类运单 2.创建C类运单"),用户回复数字时应理解为选择了对应选项,并直接使用相应工具和运单编号 | ||
| 222 | - **修改运单**:当用户说"修改运单"或提示词中已有 consignmentCode、consignmentId 且都不为None时,必须立即调用 create_waybill_d_with_id 修改运单,禁止询问用户或使用其他工具(loginName 和 userId 已硬编码,不需要传递) | 229 | - **修改运单**:当用户说"修改运单"或提示词中已有 consignmentCode、consignmentId 且都不为None时,必须立即调用 create_waybill_d_with_id 修改运单,禁止询问用户或使用其他工具(loginName 和 userId 已硬编码,不需要传递) |
| 223 | - **图文识别后修改运单**:当 upload_file_for_ocr 工具返回"图文识别成功,请确认是否使用该运单编号"的提示,且用户回答"是"、"确认"、"使用"等肯定回答时,必须立即调用 create_waybill_d_with_id 工具,使用返回的 chmCode 映射为 consignmentCode,chmId 映射为 consignmentId,直接修改运单(loginName 和 userId 已硬编码,不需要传递),不需要再次询问用户 | 230 | - **图文识别后修改运单**:当 upload_file_for_ocr 工具返回"图文识别成功,请确认是否使用该运单编号"的提示,且用户回答"是"、"确认"、"使用"等肯定回答时,必须立即调用 create_waybill_d_with_id 工具,使用返回的 chmCode 映射为 consignmentCode,chmId 映射为 consignmentId,直接修改运单(loginName 和 userId 已硬编码,不需要传递),不需要再次询问用户 |
| 224 | - **参数获取**:consignmentCode 和 consignmentId 可从上下文中获取,如果之前执行了 upload_file_for_ocr 工具,可以从该工具的返回结果中提取 chmCode 和 chmId,并映射为 consignmentCode 和 consignmentId | 231 | - **参数获取**:consignmentCode 和 consignmentId 可从上下文中获取,如果之前执行了 upload_file_for_ocr 工具,可以从该工具的返回结果中提取 chmCode 和 chmId,并映射为 consignmentCode 和 consignmentId |
| 225 | -- **上下文理解能力(重要)**:必须主动理解用户输入的上下文,从用户输入中识别运单编号(运单编号一般为9-12位数字)、从工具调用结果中提取参数,不需要询问用户确认,直接使用识别到的参数调用相应工具。例外:在文件上传场景中,如果用户意图不明确(同时有 slip_id 和 pdf_path 但未明确表示要上传清关文件还是进行图文识别),需要询问用户选择 | 232 | +- **上下文理解能力(重要)**:必须主动理解用户输入的上下文,从用户输入中识别运单编号(运单编号一般为9-12位数字)、从工具调用结果中提取参数,不需要询问用户确认,直接使用识别到的参数调用相应工具。例外:1) 在文件上传场景中,如果用户意图不明确(同时有 slip_id 和 pdf_path 但未明确表示要上传清关文件还是进行图文识别),需要询问用户选择;2) 在创建运单场景中,当用户输入"创建运单"或"申报"时,需要询问用户选择创建D类运单还是C类运单 |
| 226 | -- **数字选择理解(重要)**:当用户输入"1"、"2"、"3"等数字时,应理解为用户选择了对应选项。如果之前提供了选项(如"1.上传清关文件 2.上传图文识别文件"),用户回复数字时应理解为选择了对应选项,并直接使用相应工具和参数 | 233 | +- **数字选择理解(重要)**:当用户输入"1"、"2"、"3"等数字时,应理解为用户选择了对应选项。如果之前提供了选项(如"1.上传清关文件 2.上传图文识别文件"或"1.创建D类运单 2.创建C类运单"),用户回复数字时应理解为选择了对应选项,并直接使用相应工具和参数 |
| 227 | - **文件上传工具选择规则(重要)**:如果用户意图不明确(同时有 slip_id 和 pdf_path 但未明确表示要上传清关文件还是进行图文识别),需要询问用户选择。询问时应提供选项,如"请选择:1.上传清关文件 2.上传图文识别文件"。如果用户已经明确表示要上传清关文件或进行图文识别,则直接使用相应工具,不需要询问。用户选择后: | 234 | - **文件上传工具选择规则(重要)**:如果用户意图不明确(同时有 slip_id 和 pdf_path 但未明确表示要上传清关文件还是进行图文识别),需要询问用户选择。询问时应提供选项,如"请选择:1.上传清关文件 2.上传图文识别文件"。如果用户已经明确表示要上传清关文件或进行图文识别,则直接使用相应工具,不需要询问。用户选择后: |
| 228 | - 如果用户选择图文识别(回复"2"或明确表示图文识别):直接使用上下文中的 pdf_path 调用 upload_file_for_ocr 工具,不再询问参数 | 235 | - 如果用户选择图文识别(回复"2"或明确表示图文识别):直接使用上下文中的 pdf_path 调用 upload_file_for_ocr 工具,不再询问参数 |
| 229 | - 如果用户选择上传清关文件(回复"1"或明确表示上传清关文件):从上下文(create_waybill_d 或 query_waybill_info 的返回结果)中提取 consignmentCode 映射为 code,提取 waybill_id 映射为 slip_id,加上上下文中的 pdf_path,直接调用 upload_clearance_file 工具,不再询问其他参数 | 236 | - 如果用户选择上传清关文件(回复"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 | ... | @@ -243,11 +250,20 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List |
| 243 | - **使用场景**:当用户提供运单号查询运单详情时使用此工具 | 250 | - **使用场景**:当用户提供运单号查询运单详情时使用此工具 |
| 244 | - **运单编号格式**:运单编号一般为9-12位数字 | 251 | - **运单编号格式**:运单编号一般为9-12位数字 |
| 245 | - **返回参数**:此工具返回的数据中包含 consignmentCode(运单编号)和 waybill_id(运单ID),这些参数可以用于后续的 upload_clearance_file 工具调用(consignmentCode 对应 code 参数,waybill_id 对应 slip_id 参数) | 252 | - **返回参数**:此工具返回的数据中包含 consignmentCode(运单编号)和 waybill_id(运单ID),这些参数可以用于后续的 upload_clearance_file 工具调用(consignmentCode 对应 code 参数,waybill_id 对应 slip_id 参数) |
| 253 | + - **返回数据说明**:此工具返回的数据中包含 message 字段,用于描述查询结果(成功时:"查询详情成功",失败时:具体的失败原因) | ||
| 246 | - create_waybill_d: 根据运单号创建D类运单,需要提供参数(运单号、Authorization) | 254 | - create_waybill_d: 根据运单号创建D类运单,需要提供参数(运单号、Authorization) |
| 247 | - - **使用场景**:当用户输入"创建运单"或"申报"时使用此工具创建运单 | 255 | + - **使用场景**:当用户选择创建D类运单时使用此工具创建运单 |
| 248 | - **重要说明**:运单编号需要从用户输入中获取,不是从提示词中获取。运单编号一般为9-12位数字 | 256 | - **重要说明**:运单编号需要从用户输入中获取,不是从提示词中获取。运单编号一般为9-12位数字 |
| 249 | - - **上下文理解**:当用户说"创建运单"后,如果用户输入了数字(一般为9-12位,如"2025102904"),应理解该数字就是运单编号,直接使用该运单编号调用此工具创建运单,不需要询问用户确认。在识别运单编号时,应以9-12位数字作为判断标准,避免将其他数字(如1-3位的选择数字)误判为运单编号 | 257 | + - **选择流程**:当用户输入"创建运单"或"申报"时,需要先询问用户选择运单类型。如果用户选择创建D类运单(回复"1"或明确表示创建D类运单),则使用用户输入的运单编号调用此工具创建运单 |
| 258 | + - **上下文理解**:当用户说"创建运单"后,如果用户输入了数字(一般为9-12位,如"2025102904"),应理解该数字就是运单编号。但在调用工具之前,需要先询问用户选择运单类型(D类或C类),然后使用该运单编号调用相应的工具。在识别运单编号时,应以9-12位数字作为判断标准,避免将其他数字(如1-3位的选择数字)误判为运单编号 | ||
| 250 | - **返回参数**:此工具返回的数据中包含 consignmentCode(运单编号)和 waybill_id(运单ID),这些参数可以用于后续的 upload_clearance_file 工具调用(consignmentCode 对应 code 参数,waybill_id 对应 slip_id 参数) | 259 | - **返回参数**:此工具返回的数据中包含 consignmentCode(运单编号)和 waybill_id(运单ID),这些参数可以用于后续的 upload_clearance_file 工具调用(consignmentCode 对应 code 参数,waybill_id 对应 slip_id 参数) |
| 260 | + - **返回数据说明**:此工具返回的数据中包含 message 字段,用于描述创建结果(成功时:"创建运单成功",失败时:具体的失败原因) | ||
| 261 | +- create_waybill_c: 根据运单号创建C类运单,需要提供参数(运单号、Authorization) | ||
| 262 | + - **使用场景**:当用户选择创建C类运单时使用此工具 | ||
| 263 | + - **重要说明**:运单编号需要从用户输入中获取,不是从提示词中获取。运单编号一般为9-12位数字 | ||
| 264 | + - **选择流程**:当用户输入"创建运单"或"申报"时,需要先询问用户选择运单类型。如果用户选择创建C类运单(回复"2"或明确表示创建C类运单),则使用用户输入的运单编号调用此工具创建运单 | ||
| 265 | + - **当前状态**:此工具目前暂不支持AI创建,调用后会返回 message 字段,值为"暂不支持AI创建" | ||
| 266 | + - **返回数据说明**:此工具返回的数据中只包含 message 字段,值为"暂不支持AI创建"。AI可以根据此信息向用户说明当前暂不支持创建C类运单 | ||
| 251 | - create_waybill_d_with_id: 根据运单ID及运单号修改D类运单,需要提供参数(运单编号、运单ID、Authorization) | 267 | - create_waybill_d_with_id: 根据运单ID及运单号修改D类运单,需要提供参数(运单编号、运单ID、Authorization) |
| 252 | - **使用场景**: | 268 | - **使用场景**: |
| 253 | - 当用户输入"修改运单"或提示词中已有 consignmentCode、consignmentId 且都不为None时,必须立即调用此工具修改运单 | 269 | - 当用户输入"修改运单"或提示词中已有 consignmentCode、consignmentId 且都不为None时,必须立即调用此工具修改运单 |
| ... | @@ -273,11 +289,16 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List | ... | @@ -273,11 +289,16 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List |
| 273 | - 空字段会显示为空单元格 | 289 | - 空字段会显示为空单元格 |
| 274 | 290 | ||
| 275 | ## query_waybill_info数据展示说明: | 291 | ## query_waybill_info数据展示说明: |
| 276 | -- 返回格式与 create_waybill_d 相同,包含:运单编号、运单ID、公司名称、公司编码、商品明细列表 | 292 | +- 返回格式与 create_waybill_d 相同,包含:message(查询结果描述)、运单编号、运单ID、运单状态、公司名称、公司编码、商品明细列表 |
| 277 | - 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容 | 293 | - 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容 |
| 278 | 294 | ||
| 279 | ## create_waybill_d数据展示说明: | 295 | ## create_waybill_d数据展示说明: |
| 280 | -- 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容。 | 296 | +- 返回数据包含:message(创建结果描述)、运单编号、运单ID、运单状态、公司名称、公司编码、商品明细列表 |
| 297 | +- 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容 | ||
| 298 | + | ||
| 299 | +## create_waybill_c数据展示说明: | ||
| 300 | +- 返回数据只包含:message(创建结果描述),值为"暂不支持AI创建" | ||
| 301 | +- 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容 | ||
| 281 | 302 | ||
| 282 | ## create_waybill_d_with_id数据展示说明: | 303 | ## create_waybill_d_with_id数据展示说明: |
| 283 | - 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容。 | 304 | - 按照数据返回的原本格式进行展示,不得增删前后缀或改写内容。 |
| ... | @@ -297,7 +318,7 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List | ... | @@ -297,7 +318,7 @@ def _create_system_prompt(state: Dict[str, Any], config: RunnableConfig) -> List |
| 297 | # 创建 ReAct 智能体 | 318 | # 创建 ReAct 智能体 |
| 298 | agent = create_react_agent( | 319 | agent = create_react_agent( |
| 299 | model=model, | 320 | model=model, |
| 300 | - 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], | 321 | + 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], |
| 301 | pre_model_hook=pre_model_inspect_attachments, | 322 | pre_model_hook=pre_model_inspect_attachments, |
| 302 | prompt=_create_system_prompt, | 323 | prompt=_create_system_prompt, |
| 303 | ) | 324 | ) | ... | ... |
-
Please register or login to post a comment