├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yaml │ └── feature-request.yaml └── PULL_REQUEST_TEMPLATE │ └── pr_template.md ├── .gitignore ├── APIWeaver-lawGLM ├── Dockerfile ├── README.md ├── app │ ├── Agent │ │ ├── Executor.py │ │ ├── Planer.py │ │ ├── Recall.py │ │ ├── Runner.py │ │ ├── __init__.py │ │ └── llm.py │ ├── __init__.py │ ├── api.py │ ├── data │ │ ├── function_exe.jsonl │ │ └── placeholder.txt │ ├── exp │ │ └── PH.txt │ ├── kernel.py │ ├── knowledge │ │ ├── __init__.py │ │ ├── api_info.py │ │ ├── hard_sample.py │ │ ├── priori.py │ │ ├── prompt.py │ │ ├── tools.py │ │ ├── tools2json.py │ │ └── tools_txt.py │ ├── log │ │ ├── __init__.py │ │ ├── api_log.jsonl │ │ └── message.jsonl │ ├── run.py │ ├── run.sh │ ├── run_query.py │ ├── run_with_process.py │ ├── run_write.py │ ├── simple_demo.ipynb │ └── utils │ │ ├── __init__.py │ │ ├── arg_utils.py │ │ ├── format_question.py │ │ ├── post_processing.py │ │ └── tips.py ├── img.png └── requirements.txt ├── Buycabbage-semi-LawGLM ├── README.md ├── app │ ├── API_diaoyong.py │ ├── API_diaoyong.txt │ ├── API_look.txt │ ├── API_look1.py │ ├── audit_agent.py │ ├── casenumber_pre.py │ ├── code_agent.py │ ├── company_name_glm4.py │ ├── court_name_pre.py │ ├── main_glm.py │ ├── prompt.txt │ ├── prompt │ │ ├── ans_2.xlsx │ │ ├── ans_template.py │ │ ├── ans_template_1.xlsx │ │ ├── promp_gh.txt │ │ ├── promp_gh_2.txt │ │ └── way.txt │ ├── result.json │ ├── run.py │ ├── run_v2.py │ ├── run_v6.py │ ├── sbaogao_agent.py │ ├── suzhuang_agent.py │ ├── template_look.py │ ├── tools.py │ ├── utils.py │ └── 法院名录库.xlsx └── requirements.txt ├── LICENSE ├── LegalHi-LawGLM ├── LLM.py ├── README.md ├── action.py ├── example.py ├── execute_plan.py ├── image.png ├── main.py ├── memory.json ├── memory.py ├── produce_report.py ├── produce_sue.py ├── prompt.py ├── reflexion.py ├── requirements.txt ├── run.py ├── tool_register │ ├── API.py │ ├── all_tools.py │ ├── interface.py │ ├── register.py │ ├── schema.py │ └── tools.py ├── tools_class.py └── utils.py ├── Move_forward_every_day-lawGLM ├── Dockerfile ├── README.md ├── app │ ├── D_LLM.py │ ├── D_action.py │ ├── D_prompt.py │ ├── D_tools.py │ ├── D_utils.py │ ├── new_logtool.py │ ├── question_c.json │ ├── run.py │ └── run.sh └── requirements.txt ├── NickolasNi-LawGLM ├── README.md ├── answer.py ├── answer_debug.py ├── answer_report.py ├── answer_sue.py ├── apis │ ├── __init__.py │ └── api.py ├── config.py ├── create_empty.py ├── data │ └── questions │ │ ├── B_question.json │ │ └── question.jsonl ├── interface.py ├── match_tools │ ├── __init__.py │ ├── address_code_tools.py │ ├── address_info_tools.py │ ├── all_tools.py │ ├── company_info_tools.py │ ├── company_register_tools.py │ ├── court_code_tools.py │ ├── court_info_tools.py │ ├── law_firm_info_tools.py │ ├── law_firm_log_tools.py │ ├── legal_abstract_tools.py │ ├── legal_document_tools.py │ ├── post_process.py │ ├── pre_process.py │ ├── report_tools.py │ ├── schema.py │ ├── sub_company_info_tools.py │ ├── sue_tools.py │ ├── temperature_info_tools.py │ ├── tools_register.py │ └── xzgxf_tools.py ├── model.py ├── prompts.py ├── requirements.txt ├── route.py ├── run.py ├── schema_old.py ├── tools.py └── utils.py ├── README.md ├── SaltFire-LawGLM ├── README.md ├── answer_comp.py ├── datas │ ├── b_question.json │ └── configuration.json ├── get_known.py ├── glm_tools.py ├── net_request.py └── requirements.txt ├── Vinlic-lawGLM ├── README.md ├── solution_a │ ├── .gitignore │ ├── config.yml │ ├── dist │ │ ├── assets │ │ │ ├── index-8SG9q7VK.js │ │ │ ├── index-BC6cKHEm.css │ │ │ ├── index-BDo17f6_.js │ │ │ ├── index-BI5ivtgO.js │ │ │ ├── index-BJSevPnf.js │ │ │ ├── index-BVHjxQNC.css │ │ │ ├── index-B_IXw-1I.js │ │ │ ├── index-BaF-VVTG.css │ │ │ ├── index-Bg_mkl6W.css │ │ │ ├── index-Bp3HyxwQ.css │ │ │ ├── index-ByAdIGHk.css │ │ │ ├── index-ByXdz7mA.css │ │ │ ├── index-C-esx1MJ.css │ │ │ ├── index-C_mwjHul.css │ │ │ ├── index-CeLwtcaS.css │ │ │ ├── index-CpkbCeAF.css │ │ │ ├── index-D34hODe4.js │ │ │ ├── index-D67sj5wu.js │ │ │ ├── index-DIw_IM7e.js │ │ │ ├── index-DU7mGQvS.css │ │ │ ├── index-DYXK1YYq.css │ │ │ ├── index-DdoyGhZa.js │ │ │ ├── index-OxrQ9Z-l.js │ │ │ ├── index-PPsmb1Tt.js │ │ │ ├── index-UdG_p98F.js │ │ │ ├── index-Vcr2eH6G.js │ │ │ ├── index-Z5YKL5XY.js │ │ │ ├── index-mUHljG5R.js │ │ │ ├── index-qqoXJ8pb.css │ │ │ ├── index-rqgNAgPj.css │ │ │ ├── index-tYYyQNHX.css │ │ │ └── index-vsoZtgga.js │ │ ├── favicon.ico │ │ ├── index.cjs │ │ ├── index.cjs.map │ │ ├── index.d.cts │ │ ├── index.d.ts │ │ ├── index.html │ │ ├── index.js │ │ └── index.js.map │ ├── image.jpg │ ├── package.json │ ├── public │ │ ├── assets │ │ │ ├── index-8SG9q7VK.js │ │ │ ├── index-BC6cKHEm.css │ │ │ ├── index-BDo17f6_.js │ │ │ ├── index-BI5ivtgO.js │ │ │ ├── index-BJSevPnf.js │ │ │ ├── index-BVHjxQNC.css │ │ │ ├── index-B_IXw-1I.js │ │ │ ├── index-BaF-VVTG.css │ │ │ ├── index-Bg_mkl6W.css │ │ │ ├── index-Bp3HyxwQ.css │ │ │ ├── index-ByAdIGHk.css │ │ │ ├── index-ByXdz7mA.css │ │ │ ├── index-C-esx1MJ.css │ │ │ ├── index-C_mwjHul.css │ │ │ ├── index-CeLwtcaS.css │ │ │ ├── index-CpkbCeAF.css │ │ │ ├── index-D34hODe4.js │ │ │ ├── index-D67sj5wu.js │ │ │ ├── index-DIw_IM7e.js │ │ │ ├── index-DU7mGQvS.css │ │ │ ├── index-DYXK1YYq.css │ │ │ ├── index-DdoyGhZa.js │ │ │ ├── index-OxrQ9Z-l.js │ │ │ ├── index-PPsmb1Tt.js │ │ │ ├── index-UdG_p98F.js │ │ │ ├── index-Vcr2eH6G.js │ │ │ ├── index-Z5YKL5XY.js │ │ │ ├── index-mUHljG5R.js │ │ │ ├── index-qqoXJ8pb.css │ │ │ ├── index-rqgNAgPj.css │ │ │ ├── index-tYYyQNHX.css │ │ │ └── index-vsoZtgga.js │ │ ├── favicon.ico │ │ └── index.html │ ├── question.jsonl │ ├── readme.md │ ├── src │ │ ├── api │ │ │ ├── consts │ │ │ │ └── exceptions.ts │ │ │ ├── controllers │ │ │ │ └── question.ts │ │ │ └── routes │ │ │ │ ├── index.ts │ │ │ │ └── question.ts │ │ ├── index.ts │ │ └── lib │ │ │ ├── api.ts │ │ │ ├── config.ts │ │ │ ├── consts │ │ │ └── exceptions.ts │ │ │ ├── enums.ts │ │ │ ├── exceptions │ │ │ ├── APIException.ts │ │ │ └── Exception.ts │ │ │ ├── http-status-codes.ts │ │ │ ├── initialize.ts │ │ │ ├── interfaces │ │ │ ├── ICompanyInfo.ts │ │ │ ├── ICompanyRegister.ts │ │ │ ├── ILegalDocument.ts │ │ │ ├── IMessage.ts │ │ │ ├── IQuestion.ts │ │ │ └── ISubCompanyInfo.ts │ │ │ ├── llm.ts │ │ │ ├── logger.ts │ │ │ ├── question.ts │ │ │ ├── request │ │ │ └── Request.ts │ │ │ ├── response │ │ │ ├── Body.ts │ │ │ ├── FailureBody.ts │ │ │ ├── Response.ts │ │ │ └── SuccessfulBody.ts │ │ │ ├── server.ts │ │ │ ├── tools.ts │ │ │ └── util.ts │ ├── tsconfig.json │ ├── webui │ │ ├── .gitignore │ │ ├── .vscode │ │ │ └── extensions.json │ │ ├── README.md │ │ ├── env.d.ts │ │ ├── index.html │ │ ├── package.json │ │ ├── public │ │ │ └── favicon.ico │ │ ├── src │ │ │ ├── App.vue │ │ │ ├── assets │ │ │ │ ├── base.css │ │ │ │ └── main.css │ │ │ ├── enums.ts │ │ │ ├── interfaces │ │ │ │ └── IMessage.ts │ │ │ └── main.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ ├── vite.config.ts │ │ └── yarn.lock │ └── yarn.lock └── solution_b │ ├── README.md │ ├── pipeline.py │ ├── prompt_any_progress │ ├── prompt_apis │ ├── 0_get_company_info │ ├── 10_get_address_code │ ├── 11_get_temp_info │ ├── 12_get_legal_document │ ├── 13_get_legal_document_list │ ├── 14_get_legal_abstract │ ├── 15_get_xzgxf_info │ ├── 16_get_xzgxf_info_list │ ├── 17_get_api_call_cnt │ ├── 1_get_company_register │ ├── 2_get_company_register_name │ ├── 3_get_sub_company_info │ ├── 4_get_sub_company_info_list │ ├── 5_get_court_info │ ├── 6_get_court_code │ ├── 7_get_lawfirm_info │ ├── 8_get_lawfirm_log │ └── 9_get_address_info │ ├── prompt_code_act │ ├── prompt_is_done │ ├── prompt_refers │ ├── requirements.txt │ └── utils_except.py ├── assets ├── contribute_zh.md ├── qa.pdf ├── question_d.json ├── 【baseline分享】伍柒.pdf ├── 【baseline分享】张江高科.pdf └── 【baseline分享】法外张三.pdf ├── public24_LawGLM ├── Dockerfile ├── agents │ └── battle_agent.py ├── answer copy.py ├── answer.py ├── apis │ ├── __init__.py │ └── data_query_api.py ├── data │ ├── questions │ │ ├── questionA.jsonl │ │ ├── questionB.jsonl │ │ └── question_c.json │ └── results │ │ ├── process.json │ │ ├── process_new.json │ │ ├── public24点燃心海_result │ │ ├── public24点燃心海_result.json │ │ ├── public24点燃心海_result_summary.json │ │ ├── read_answer.py │ │ └── result_0705.json ├── docs │ ├── apis │ │ ├── 0号API接口文档.md │ │ ├── 10号API接口文档.md │ │ ├── 11号API接口文档.md │ │ ├── 12号API接口文档.md │ │ ├── 13号API接口文档.md │ │ ├── 14号API接口文档.md │ │ ├── 15号API接口文档.md │ │ ├── 16号API接口文档.md │ │ ├── 17号API接口文档 .md │ │ ├── 18号API接口文档.md │ │ ├── 19号API接口文档.md │ │ ├── 1号API接口文档.md │ │ ├── 20号API接口文档.md │ │ ├── 21号API接口文档.md │ │ ├── 22号API接口文档.md │ │ ├── 23号API接口文档.md │ │ ├── 2号API接口文档.md │ │ ├── 3号API接口文档.md │ │ ├── 4号API接口文档.md │ │ ├── 5号API接口文档.md │ │ ├── 6号API接口文档.md │ │ ├── 7号API接口文档.md │ │ ├── 8号API接口文档.md │ │ └── 9号API接口文档.md │ ├── few-shot │ │ ├── (案号)XXX中,审理当天原告的律师事务所与被告的律师事务所所在地区的最高温度相差多少度?.txt │ │ ├── (案号XX)中,审理当天审理法院与原告的律师事务所所在城市的最低温度相差多少度?本题使用的API个数为?最小调用次数为多少次? .txt │ │ ├── 2019年 湖北襄阳市中级人民法院民初1613号案原告方和原告律师事务所注册资本费别是?先成立的单位联系电话为?.txt │ │ ├── BASE_CODER.txt │ │ ├── XX(公司全称)的子公司的一级行业是什么.txt │ │ ├── XX(公司简称)的子公司的一级行业是什么.txt │ │ ├── XXX公司关于工商信息及投资金额过亿的全资子公司,公司限高案件的立案时间在YY年涉案金额不为0的裁判文书(不需要判决结果)整合报告。.txt │ │ ├── XXX公司关于工商信息及投资金额过亿的全资子公司,所有公司的立案时间在19年涉案金额不为0的裁判文书(不需要判决结果)整合报告。.txt │ │ ├── XXX公司投资金额最高的子公司是?投资金额是?法定代表人、成立日期、统一社会信用代码分别是什么?.txt │ │ ├── XXX地址对应的省市区县分别是?.txt │ │ ├── XX公司与YY公司发生了ZZ纠纷,XX公司委托给了X,YY公司委托给了Y,请写一份民事起诉状给A法院时间是B.txt │ │ ├── XX公司关于工商信息(不包括公司简介)及投资金额过亿的全资子公司,母公司及子公司的立案时间在YY年涉案金额不为0的裁判文书(不需要判决结果)整合报告。.txt │ │ ├── XX公司投资最高的公司,涉诉案件在哪几家法院进行审理?涉案金额最高的案由为?其中审理案件最基层的法院成立日期提供一下.txt │ │ ├── XX公司投资过亿的子公司分别是?这些公司的统一社会信用代码及注册地址所在区县为?.txt │ │ ├── XX公司有涉诉案件的法院地址在YY,请问这些涉讼案件的涉案金额之和是多少?.txt │ │ ├── XX公司的一家子公司注册资本约为母公司注册资本的15,该公司名称带有上海,请问该子公司的涉案的总受理费是多少?案由最多的是?.txt │ │ ├── XX公司的组织机构代码为?起投资金额最高的子公司共有多少起涉诉案件?于哪几个省级行政单位举行审理?作为被告几次?这其中有一起案由较为特殊的审理,请给出案件受理费。.txt │ │ ├── XX有旗下一家子公司,成立时间为母公司成立YY年以后,该公司有ZZ左右的注册资本,其涉案中有一起在AA进行审理,请问这起案件的受理费用是多少?由谁承担?.txt │ │ ├── XX有限公司作为被告的案件中涉案金额小于100万大于1万的案号分别为?涉案金额数值为?.txt │ │ ├── XX有限公司对应的公司是否被限制高消费?如果是被限制高消费的最大涉案金额为(保留1位小数)?该案件对应的案号为?该案件的审理法院是?该法院的地址所在区县是?.txt │ │ ├── XX有限公司涉及的案件中,立案时间发生于YY年发生的劳务及劳务者相关的纠纷案件有几次?涉案总金额为?案号分别是?.txt │ │ ├── XX有限公司的母公司有涉诉案件对方聘用律师事务所的负责人为YY吗?如果有,该案在什么地址进行审理的?.txt │ │ ├── XX法院所在的区县区划代码是多少.txt │ │ ├── XX股份有限公司投资的公司有哪些?该公司是否为上市公司?如果是的话上市时间是?统一社会信用代码是?本题目最少调用接口的次数为多少次?.txt │ │ ├── XX股份有限公司涉及的案件中,起诉时间发生于YY年发生的民事初审案件有几次?案号分别是?.txt │ │ ├── XX股份有限公司的法人信息与总经理是否相同?该公司是否被限制高消费了?如果被限制高消费的话,最高涉案金额为多少元?该案件的案号为?调用了多少类API?.txt │ │ ├── XX(18位统一社会信用代码)的公司全称是?该公司的涉案次数为?(起诉日期在YY年)作为被起诉人的次数及总金额为?.txt │ │ ├── 代码为XX的公司的子公司是否有涉诉?是否存在YY年在ZZ审理的财产损害案件?如果有,该涉诉子公司的注册资本是多少?被XX投资的金额为?.txt │ │ ├── 原告是XX股份有限公司的案件审理法院是哪家法院.txt │ │ ├── 查询XX公司所有子公司的统一社会代码和区县信息.txt │ │ ├── 案号XXX案件中,审理当天审理法院的天气情况是?本题目调用了几类API?串行了几次?.txt │ │ ├── 案号XX号的被告是否为上市公司,如果是的话,他的股票代码和上市日期分别是?如果不是的话,统一社会信用代码是?.txt │ │ ├── 法院XX所在YY的ZZ级人民法院地址为?该ZZ级人民法院所在AA代码为?.txt │ │ ├── 统一社会信用吗91110114M0000JUP7F这家公司被投资了多少万.txt │ │ ├── 请问一下,公司代码300674的法定代表人及工商电话注册资本是多少亿元?请保留2位小数。该题目API调用串行次数为.txt │ │ └── 请问,XX有限公司的统一信用代码是?投资该公司的母公司是?被投资的比例与金额分别是?该公司YY年是否被起诉次数及涉案总额为?.txt │ ├── services │ │ ├── 0号API接口文档.md │ │ ├── 10号API接口文档.md │ │ ├── 11号API接口文档.md │ │ ├── 12号API接口文档.md │ │ ├── 13号API接口文档.md │ │ ├── 14号API接口文档.md │ │ ├── 15号API接口文档.md │ │ ├── 16号API接口文档.md │ │ ├── 17号API接口文档.md │ │ ├── 18号API接口文档.md │ │ ├── 19号API接口文档.md │ │ ├── 1号API接口文档.md │ │ ├── 20号API接口文档.md │ │ ├── 21号API接口文档.md │ │ ├── 22号API接口文档.md │ │ ├── 23号API接口文档.md │ │ ├── 24号API接口文档.md │ │ ├── 25号API接口文档.md │ │ ├── 26号API接口文档.md │ │ ├── 27号API接口文档.md │ │ ├── 2号API接口文档.md │ │ ├── 3号API接口文档 .md │ │ ├── 4号API接口文档 .md │ │ ├── 5号API接口文档 .md │ │ ├── 6号API接口文档.md │ │ ├── 7号API接口文档.md │ │ ├── 8号API接口文档.md │ │ └── 9号API接口文档.md │ └── 数据库Shema.md ├── llm │ ├── AgentWrapper.py │ ├── ChainWrapper.py │ ├── RetrieverWrapper.py │ ├── __init__.py │ ├── glm_llm.py │ └── router_chain.py ├── preprocess.py ├── process.py ├── prompt │ ├── battle │ │ ├── inter_summary.prompt │ │ ├── judge.prompt │ │ ├── judge_zyc.prompt │ │ ├── plan.prompt │ │ ├── plan_edit.prompt │ │ ├── plan_edit_few_shot.prompt │ │ ├── plan_few_shot.prompt │ │ ├── plan_old.prompt │ │ └── regulator.prompt │ ├── coder │ │ ├── coder.prompt │ │ ├── coder_edit.prompt │ │ ├── coder_edit_few_shot.prompt │ │ ├── coder_few_shot.prompt │ │ └── coder_summary.prompt │ ├── local_tools │ │ ├── auto_tools.prompt │ │ └── choose_tools.prompt │ ├── preprocess │ │ ├── clearnoise.prompt │ │ ├── correction.prompt │ │ ├── correction_zzy.prompt │ │ ├── keywords.prompt │ │ └── matchCol.prompt │ └── summary │ │ ├── choose_answer.prompt │ │ ├── summary.prompt │ │ ├── summary_extractor.prompt │ │ └── summary_zyc.prompt ├── rank.py ├── requirements.txt ├── services │ ├── __init__.py │ └── all_tools_service_register.py ├── summary │ └── summary_194.json ├── tcdata │ └── question_c.json ├── tools │ ├── __init__.py │ ├── interface.py │ ├── tool_correction_info.py │ ├── tools_register.py │ └── tools_untils.py └── utils.py ├── pyproject.toml └── remain_true_to_our_original_open-source_aspiration_in_the_legal_industry.md /.github/ISSUE_TEMPLATE/bug_report.yaml: -------------------------------------------------------------------------------- 1 | name: "\U0001F41B Bug Report" 2 | description: Submit a bug report to help us improve LawGLM / 提交一个 Bug 问题报告来帮助我们改进 LawGLM 开源项目 3 | body: 4 | - type: textarea 5 | id: system-info 6 | attributes: 7 | label: System Info / 系統信息 8 | description: Your operating environment / 您的运行环境信息 9 | placeholder: Includes Cuda version, Diffusers version, Python version, operating system, hardware information (if you suspect a hardware problem)... / 包括Cuda版本,Diffusers,Python版本,操作系统,硬件信息(如果您怀疑是硬件方面的问题)... 10 | validations: 11 | required: true 12 | 13 | - type: checkboxes 14 | id: information-scripts-examples 15 | attributes: 16 | label: Information / 问题信息 17 | description: 'The problem arises when using: / 问题出现在' 18 | options: 19 | - label: "The official example scripts / 官方的示例脚本" 20 | - label: "My own modified scripts / 我自己修改的脚本和任务" 21 | 22 | - type: textarea 23 | id: reproduction 24 | validations: 25 | required: true 26 | attributes: 27 | label: Reproduction / 复现过程 28 | description: | 29 | Please provide a code example that reproduces the problem you encountered, preferably with a minimal reproduction unit. 30 | If you have code snippets, error messages, stack traces, please provide them here as well. 31 | Please format your code correctly using code tags. See https://help.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks#syntax-highlighting 32 | Do not use screenshots, as they are difficult to read and (more importantly) do not allow others to copy and paste your code. 33 | 34 | 请提供能重现您遇到的问题的代码示例,最好是最小复现单元。 35 | 如果您有代码片段、错误信息、堆栈跟踪,也请在此提供。 36 | 请使用代码标签正确格式化您的代码。请参见 https://help.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks#syntax-highlighting 37 | 请勿使用截图,因为截图难以阅读,而且(更重要的是)不允许他人复制粘贴您的代码。 38 | placeholder: | 39 | Steps to reproduce the behavior/复现Bug的步骤: 40 | 41 | 1. 42 | 2. 43 | 3. 44 | 45 | - type: textarea 46 | id: expected-behavior 47 | validations: 48 | required: true 49 | attributes: 50 | label: Expected behavior / 期待表现 51 | description: "A clear and concise description of what you would expect to happen. /简单描述您期望发生的事情。" -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.yaml: -------------------------------------------------------------------------------- 1 | name: "\U0001F680 Feature request" 2 | description: Submit a request for a new LawGLM feature / 提交一个新的 LawGLM开源项目的功能建议 3 | labels: [ "feature" ] 4 | body: 5 | - type: textarea 6 | id: feature-request 7 | validations: 8 | required: true 9 | attributes: 10 | label: Feature request / 功能建议 11 | description: | 12 | A brief description of the functional proposal. Links to corresponding papers and code are desirable. 13 | 对功能建议的简述。最好提供对应的论文和代码链接。 14 | 15 | - type: textarea 16 | id: motivation 17 | validations: 18 | required: true 19 | attributes: 20 | label: Motivation / 动机 21 | description: | 22 | Your motivation for making the suggestion. If that motivation is related to another GitHub issue, link to it here. 23 | 您提出建议的动机。如果该动机与另一个 GitHub 问题有关,请在此处提供对应的链接。 24 | 25 | - type: textarea 26 | id: contribution 27 | validations: 28 | required: true 29 | attributes: 30 | label: Your contribution / 您的贡献 31 | description: | 32 | 33 | Your PR link or any other link you can help with. 34 | 您的PR链接或者其他您能提供帮助的链接。 -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE/pr_template.md: -------------------------------------------------------------------------------- 1 | # Raise valuable PR / 提出有价值的PR 2 | 3 | ## Caution / 注意事项: 4 | Users should keep the following points in mind when submitting PRs: 5 | 6 | 1. Ensure that your code meets the requirements in the [specification](../../resources/contribute.md). 7 | 2. the proposed PR should be relevant, if there are multiple ideas and optimizations, they should be assigned to different PRs. 8 | 9 | 用户在提交PR时候应该注意以下几点: 10 | 11 | 1. 确保您的代码符合 [规范](../../resources/contribute_zh.md) 中的要求。 12 | 2. 提出的PR应该具有针对性,如果具有多个不同的想法和优化方案,应该分配到不同的PR中。 13 | 14 | ## 不应该提出的PR / PRs that should not be proposed 15 | 16 | If a developer proposes a PR about any of the following, it may be closed or Rejected. 17 | 18 | 1. those that don't describe improvement options. 19 | 2. multiple issues of different types combined in one PR. 20 | 3. The proposed PR is highly duplicative of already existing PRs. 21 | 22 | 如果开发者提出关于以下方面的PR,则可能会被直接关闭或拒绝通过。 23 | 24 | 1. 没有说明改进方案的。 25 | 2. 多个不同类型的问题合并在一个PR中的。 26 | 3. 提出的PR与已经存在的PR高度重复的。 27 | 28 | 29 | # 检查您的PR 30 | - [ ] Have you read the Contributor Guidelines, Pull Request section? / 您是否阅读了贡献者指南、Pull Request 部分? 31 | - [ ] Has this been discussed/approved via a Github issue or forum? If so, add a link. / 是否通过 Github 问题或论坛讨论/批准过?如果是,请添加链接。 32 | - [ ] Did you make sure you updated the documentation with your changes? Here are the Documentation Guidelines, and here are the Documentation Formatting Tips. /您是否确保根据您的更改更新了文档?这里是文档指南,这里是文档格式化技巧。 33 | - [ ] Did you write new required tests? / 您是否编写了新的必要测试? 34 | - [ ] Are your PRs for only one issue / 您的PR是否仅针对一个问题 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *__pycache__/ 2 | samples*/ 3 | runs/ 4 | checkpoints/ 5 | master_ip 6 | logs/ 7 | *.DS_Store 8 | .idea 9 | output* 10 | test* 11 | .ipynb_checkpoints 12 | venv -------------------------------------------------------------------------------- /APIWeaver-lawGLM/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM registry.cn-hangzhou.aliyuncs.com/glm_law/law:v0 2 | 3 | # 安装应用程序的依赖 4 | COPY requirements.txt . 5 | RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirements.txt 6 | RUN python -m ipykernel install --user --name my_kernel --display-name "My Kernel" 7 | # 下载jieba的词库和分析模块所需的文件 8 | RUN python -c "import jieba; jieba.initialize()" 9 | RUN python -c "import jieba.analyse; jieba.analyse.textrank('劳动合同纠纷')" 10 | 11 | # 复制代码到镜像仓库 12 | COPY app /app 13 | 14 | # 指定工作目录 15 | WORKDIR /app 16 | 17 | # 容器启动运行命令 18 | CMD ["bash", "/app/run.sh"] -------------------------------------------------------------------------------- /APIWeaver-lawGLM/app/Agent/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/APIWeaver-lawGLM/app/Agent/__init__.py -------------------------------------------------------------------------------- /APIWeaver-lawGLM/app/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/APIWeaver-lawGLM/app/__init__.py -------------------------------------------------------------------------------- /APIWeaver-lawGLM/app/data/placeholder.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/APIWeaver-lawGLM/app/data/placeholder.txt -------------------------------------------------------------------------------- /APIWeaver-lawGLM/app/exp/PH.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/APIWeaver-lawGLM/app/exp/PH.txt -------------------------------------------------------------------------------- /APIWeaver-lawGLM/app/knowledge/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/APIWeaver-lawGLM/app/knowledge/__init__.py -------------------------------------------------------------------------------- /APIWeaver-lawGLM/app/knowledge/tools2json.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | with open("./knowledge/tools_txt.py", encoding="utf8") as f: 4 | chunks = re.split("\n\n\n+", f.read()) 5 | 6 | TOOLS_DESC = [] 7 | 8 | for i in chunks[1:]: 9 | pattern, function_doc, code = i.split("\n", 2) 10 | function_name = re.search(r"def\s+(\w+)\(", code).group(1) 11 | function_info = { 12 | "code": code, 13 | "function_doc": function_doc, 14 | "pattern": pattern[2:], 15 | "function_name": function_name, 16 | } 17 | TOOLS_DESC.append(function_info) 18 | 19 | with open("./knowledge/tools.py", encoding="utf8") as f: 20 | chunks = re.split("\n\n\n+", f.read()) 21 | 22 | TOOLS = [] 23 | 24 | # print(len(chunks)) 25 | for i in chunks[1:]: 26 | pattern, function_doc, code = i.split("\n", 2) 27 | function_name = re.search(r"def\s+(\w+)\(", code).group(1) 28 | function_info = { 29 | "code": code, 30 | "function_doc": function_doc, 31 | "pattern": pattern[2:], 32 | "function_name": function_name, 33 | } 34 | TOOLS.append(function_info) 35 | -------------------------------------------------------------------------------- /APIWeaver-lawGLM/app/log/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/APIWeaver-lawGLM/app/log/__init__.py -------------------------------------------------------------------------------- /APIWeaver-lawGLM/app/run.py: -------------------------------------------------------------------------------- 1 | from concurrent.futures import ThreadPoolExecutor, as_completed 2 | import json 3 | from run_with_process import process_question 4 | 5 | PATH = "/tcdata/question_d.json" 6 | RESULT = "/app/result.json" 7 | 8 | 9 | def main(): 10 | with open(PATH, encoding="utf8") as f: 11 | questions = [json.loads(line) for line in f] 12 | results = [] 13 | with ThreadPoolExecutor(max_workers=20) as executor: 14 | futures = [executor.submit(process_question, question) for question in questions] 15 | for future in as_completed(futures): 16 | result = future.result() 17 | if result is not None: 18 | results.append(result) 19 | return results 20 | 21 | 22 | if __name__ == "__main__": 23 | 24 | with open(RESULT, "w", encoding="utf8") as fw: 25 | pass 26 | with open(PATH, encoding="utf8") as f: 27 | for i in f: 28 | data = json.loads(i) 29 | data["answer"] = "" 30 | with open(RESULT, "a", encoding="utf8") as fw: 31 | fw.write(json.dumps(data, ensure_ascii=False)) 32 | fw.write("\n") 33 | results = main() 34 | import time 35 | 36 | time.sleep(1) 37 | 38 | print(results) 39 | 40 | if len(results) == 200: 41 | print("开始写入...") 42 | with open(RESULT, "w", encoding="utf8") as fw: 43 | fw.write("\n".join([json.dumps(i, ensure_ascii=False) for i in results])) 44 | else: 45 | print("长度不匹配") 46 | time.sleep(1) 47 | print("写入完成") 48 | -------------------------------------------------------------------------------- /APIWeaver-lawGLM/app/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 设置超时时间为55分钟 4 | TIMEOUT=55m 5 | 6 | # 运行Python脚本并限制其执行时间 7 | timeout $TIMEOUT python run.py 8 | 9 | # 检查Python脚本是否因超时被终止 10 | if [ $? -eq 124 ]; then 11 | echo "The script was terminated due to timeout." 12 | else 13 | echo "The script finished within the time limit." 14 | fi 15 | -------------------------------------------------------------------------------- /APIWeaver-lawGLM/app/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/APIWeaver-lawGLM/app/utils/__init__.py -------------------------------------------------------------------------------- /APIWeaver-lawGLM/app/utils/tips.py: -------------------------------------------------------------------------------- 1 | from knowledge.prompt import tip_prompt2 2 | from Agent.llm import llm_eval 3 | from knowledge.priori import TIPS 4 | import re 5 | from fuzzywuzzy import fuzz 6 | 7 | 8 | def get_tips(question): 9 | messages = [ 10 | {"role": "system", "content": tip_prompt2}, 11 | {"role": "user", "content": question + "\n\n请仅仅给出实体识别json"}, 12 | ] 13 | 14 | res = llm_eval(messages) 15 | ner = "以下是实体识别结果:\n" 16 | if "实体" in res and isinstance(res["实体"], list): 17 | for i in res["实体"]: 18 | if i["格式匹配为"] != "公司名称": 19 | ner += f"{i['名称']}为{i['格式匹配为']}\n" 20 | 21 | tips = "" 22 | for k, v in TIPS.items(): 23 | if re.search(k, ner + question, re.DOTALL): 24 | tips += f"{v}\n" 25 | if tips: 26 | tips = f"以下是一般建议你需要根据题目内容来判断是否采纳:{tips}\n" 27 | 28 | return ner + tips, res 29 | 30 | 31 | def filter_tip(question, ner): 32 | tip = "" 33 | if "实体" in ner and isinstance(ner["实体"], list): 34 | for i in ner["实体"]: 35 | if i["格式匹配为"] not in ["公司名称", "公司简称"] and fuzz.partial_ratio(i["名称"], question) > 80: 36 | tip += f"{i['名称']}为{i['格式匹配为']}\n" 37 | 38 | tips = "" 39 | for k, v in TIPS.items(): 40 | if re.search(k, tip + question, re.DOTALL): 41 | tips += f"{v}\n" 42 | if tips: 43 | tips = f"以下是一般建议你需要根据题目内容来判断是否采纳:{tips}\n" 44 | 45 | if tip: 46 | tip = f"以下是实体识别结果:{tip}\n" 47 | 48 | return tip + tips 49 | -------------------------------------------------------------------------------- /APIWeaver-lawGLM/img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/APIWeaver-lawGLM/img.png -------------------------------------------------------------------------------- /APIWeaver-lawGLM/requirements.txt: -------------------------------------------------------------------------------- 1 | fuzzywuzzy>=0.18.0 2 | jieba>=0.42.1 3 | jupyter_client>=8.6.2 4 | openai>=1.52.0 5 | httpx[socks]>=0.27.2 6 | rank_bm25>=0.2.2 7 | Requests==2.32.3 8 | python-Levenshtein==0.26.0 9 | notebook>=7.2.2 10 | ipykernel>=6.29.5 11 | ruff>=0.7.0 -------------------------------------------------------------------------------- /Buycabbage-semi-LawGLM/README.md: -------------------------------------------------------------------------------- 1 | # 基于GLM多智能体协同的法律行业问答系统--买白菜不砍价 2 | 3 | ## 运行代码 4 | 5 | 1. 安装依赖 6 | ```shell 7 | pip install -r requirements.txt 8 | ``` 9 | 10 | 2. 执行代码 11 | ```shell 12 | cd app.py 13 | ZHIPUAI_API_KEY="your zhipuAI key" python main_glm.py # 执行单个样例 14 | ZHIPUAI_API_KEY="your zhipuAI key" python run.py # 执行完整问题 15 | ``` 16 | 17 | ### 方案概述 18 | 19 | 本方案提出了一种基于GLM多智能体协同的法律行业问答系统。该系统利用多轮对话机制,通过中枢模型(Planner)进行整体规划,并构建协同链路,逐步调用多个执行模型(Tooler),直至问题得到解决。最终,系统会根据相似的答题模板汇总并形成答案。 20 | 21 | 系统具备动态调整与优化的能力,能利用多种工具和API解决复杂问题,非常适合处理需要多步骤推理和跨领域知识集成的任务。 22 | 23 | ### 对话管理 24 | 25 | run_conversation_xietong 代表中枢模型(Planner)。该函数启动多智能体协同的对话过程,通过预设的提示和策略引导对话,并在过程中调用不同的工具和API获取所需信息。 26 | run_v2.get_answer_2 代表执行模型(Tooler),负责执行具体步骤中的查询和数据处理任务,并返回查询结果。 27 | run_conversation_until_complete 函数管理整个多轮对话流程,直到问题得到解决或达到最大对话轮数。 28 | run_conversation_tiqu 函数用于从对话结果中提取结构化数据,并将其格式化为 JSON 格式。 29 | run_conversation_psby 函数整合了上述功能,以提供完整的解决方案。 30 | 31 | 32 | ### 工具和API调用 33 | 34 | 系统能够根据问题内容筛选出合适的工具和API进行数据查询和分析。中枢模型(Planner)确定每一步所需的工具,执行模型(Tooler)则执行相应工具的操作。为了确保执行过程不出错,模型被赋予了一些提示词,如:“如果返回的结果为空或有误,影响下一步骤的调用,请重新指示这一步骤的任务。” 这些提示词有助于建立容错纠错机制,确保智能体之间的有效协作。 35 | 36 | ### 动态策略增强 37 | 38 | 中枢模型(Planner)本身就非常智能,大多数情况下能够根据现有的API规划解决方案,选择正确的工具和方法。对于特定类型的问题,例如排序或求和等,我们已编写了高效的专用函数。为了避免重复调用API,我们直接使用这些专用函数,从而提高准确性和效率。为了使模型更可控且高效地解决问题,我们在提示词中根据问题的不同,动态调整参考思路,帮助智能体快速准确地规划解题步骤。 39 | 40 | 1.在整体模板(/prompt/promp_gh.txt)中加入API使用的技巧,形成通用指导策略; 41 | 2.way_string 函数可以调用历史相似问题的解决思路,生成动态指导策略; 42 | 3.way_string_2 函数根据问题的不同方面生成动态指导策略。 43 | 44 | ### 答案总结 45 | 46 | 为了保证答案的规范性,我们设计了答题模板,中枢模型(Planner)会选择与问题最匹配的模板作为参考。同时,我们增加了提示,如:“请注意,模板仅供参考,如果问题与模板不完全一致,可适当调整模板以更好地回答问题。” 这有助于提高模型对问题总结的泛化能力。 47 | 48 | ### 方案特色 49 | 50 | 简洁智能:方案思路简单明了,从问题输入到答案生成,采用一套多轮对话机制,使得模型能够全面把控问题及其解决过程。 51 | 高效协同:多个智能体协同工作,实现高效问题解决。 52 | 灵活适应:动态策略增强确保系统的灵活性和适应性。 53 | 高度可扩展:除了回答问题外,通过适当调整即可实现与用户的交互对话。 54 | 55 | ### 其他事项 56 | 在盲答过程中,我们引入了模型集成的思想来提升回答的质量。当初始模型无法给出有效答案时,我们会让模型再次尝试回答,并且直接调用另一个执行模型来获取答案。随后,我们将这两次的回答与初始答案进行比较,最终由大模型从中挑选出最佳答案作为最终结果。 57 | 对于诉状和整合报告这类特定类型的问题,我们采用了专门的智能体来进行解答。由于比赛时间紧迫,这些特定的智能体暂时未能完全融入到我们的多智能体协同方法中。如果后期能够将它们完善并融入到整个系统中,预计还能进一步提升整体的性能和准确性。 58 | -------------------------------------------------------------------------------- /Buycabbage-semi-LawGLM/app/prompt/ans_2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/Buycabbage-semi-LawGLM/app/prompt/ans_2.xlsx -------------------------------------------------------------------------------- /Buycabbage-semi-LawGLM/app/prompt/ans_template.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Wed Jul 31 06:07:07 2024 4 | 5 | @author: 86187 6 | """ 7 | 8 | import json 9 | 10 | 11 | def json_to_data(path): 12 | data = [] # 初始化空列表来存储数据 13 | with open(path, "r", encoding="utf-8") as f: 14 | for line in f: 15 | try: 16 | data_item = json.loads(line) 17 | data.append(data_item) 18 | except json.JSONDecodeError as e: 19 | print(f"Error decoding line: {line.strip()}") 20 | print(e) 21 | data = [{**obj, "answer": ""} for obj in data] 22 | return data 23 | 24 | 25 | # questions_list=json_to_data('D:/zhipuAI/law_glm_复赛/submit-image-demo/tcdata/question_c.json') 26 | 27 | """ 28 | LLL=[] 29 | for i in answer_template: 30 | if i['id'] not in [60,61,103,126,170,181,4,24,43,166,168,176,197,199]: 31 | d= {'id': i['id'],'question':i['question']} 32 | LLL.append(d) 33 | #print(LLL) 34 | 35 | 36 | import pandas as pd 37 | df=pd.DataFrame(answer_template) 38 | df.to_excel('./prompt/ans_template.xlsx',index=False) 39 | """ 40 | -------------------------------------------------------------------------------- /Buycabbage-semi-LawGLM/app/prompt/ans_template_1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/Buycabbage-semi-LawGLM/app/prompt/ans_template_1.xlsx -------------------------------------------------------------------------------- /Buycabbage-semi-LawGLM/app/prompt/promp_gh_2.txt: -------------------------------------------------------------------------------- 1 | 我们现在开始查询,你分步告诉下一步我需要做什么,我把查询结果告诉你,你再告诉我下一步,你告我的问题要方便函数调用(应当清晰描述告诉我去做什么,应当有'使用'、'查询'等字样,便于我理解),注意如果我返回的结果为空或者错误影响下一步调用,请重新告诉我这一步需要做什么。 2 | 等你全部回答完成,不需要进行下一步调用时,记得提示我:<全部完成,答案如下>,将答案总结以json格式给我。 -------------------------------------------------------------------------------- /Buycabbage-semi-LawGLM/app/prompt/way.txt: -------------------------------------------------------------------------------- 1 | 1、get_legal_document({\'query_conds\':{\'案号\':\'<填充>\'}, \'need_fields\':[\'日期\', \'原告律师事务所\']}) 2 | 2、get_lawfirm_info({\'query_conds\':{\'律师事务所名称\':\'<填充>\'}, \'need_fields\':[\'律师事务所地址\']}) 3 | 3、get_address_info({\'query_conds\':{\'地址\':\'<填充>\'}, \'need_fields\':[\'省份\', \'城市\']}) 4 | 4、get_temp_info({\'query_conds\':{\'日期\':\'<填充>\', \'省份\':\'<填充>\', \'城市\':\'<填充>\'}, \'need_fields\':[\'最低温度\']}) 5 | 5、get_court_code({\'query_conds\':{案号:<填充>}, \'need_fields\':[\'法院名称\']}) 6 | 6、get_court_info({\'query_conds\':{\'法院名称\': <填充>}, \'need_fields':['法院地址']}) 7 | 7、get_address_info({'query_conds':{'地址\':<填充>}, \'need_fields\':[\'省份\', \'城市\']}) 8 | 8、get_temp_info({\'query_conds\':{\'日期\':\'<填充>\',\'省份\': \'<填充>\', \'城市\': \'<填充>\'}, \'need_fields\':[\'最低温度\']}) 9 | 9、最低温度差,API个数为6个,最小调用次数为8次 -------------------------------------------------------------------------------- /Buycabbage-semi-LawGLM/app/run.py: -------------------------------------------------------------------------------- 1 | import json 2 | import concurrent.futures as cf 3 | import main_glm 4 | 5 | 6 | def process_one(question_json): 7 | line = question_json 8 | query = line["question"] 9 | 10 | answer, final_answer_status = main_glm.main_answer(query) 11 | ans = str(answer) 12 | return {"id": line["id"], "question": query, "answer": ans} 13 | 14 | 15 | def main(): 16 | q_path = "../../assets/question_d.json" 17 | result_path = "./result.json" 18 | result_json_list = [] 19 | 20 | q_json_list = [json.loads(x.strip()) for x in open(q_path, "r", encoding="utf-8").readlines()] 21 | with cf.ProcessPoolExecutor(max_workers=70) as executor: 22 | future_list = [executor.submit(process_one, q_json) for q_json in q_json_list] 23 | for future in cf.as_completed(future_list): 24 | result_json_list.append(future.result()) 25 | 26 | result_json_list.sort(key=lambda x: x["id"]) 27 | open(result_path, "w", encoding="utf-8").write( 28 | "\n".join([json.dumps(x, ensure_ascii=False) for x in result_json_list]) 29 | ) 30 | 31 | 32 | if __name__ == "__main__": 33 | main() 34 | -------------------------------------------------------------------------------- /Buycabbage-semi-LawGLM/app/utils.py: -------------------------------------------------------------------------------- 1 | import concurrent.futures 2 | from tqdm import tqdm 3 | print('123') 4 | 5 | def multi_thread_excute(all_tasks, parralle_num=20): 6 | """ 7 | 多线程运行任务,注意,返回结果序并不和all_tasks一致,请设计好task的输出,能够通过map的形式找到对应的答案 8 | """ 9 | 10 | def multi_thread_excute_helper(tasks): 11 | with concurrent.futures.ThreadPoolExecutor() as executor: 12 | exe_tasks = [executor.submit(*task) for task in tasks] 13 | results = [future.result() for future in concurrent.futures.as_completed(exe_tasks)] 14 | return results 15 | 16 | all_results = [] 17 | for i in tqdm(range(0, len(all_tasks), parralle_num)): 18 | all_results += multi_thread_excute_helper(all_tasks[i : i + parralle_num]) 19 | return all_results 20 | -------------------------------------------------------------------------------- /Buycabbage-semi-LawGLM/app/法院名录库.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/Buycabbage-semi-LawGLM/app/法院名录库.xlsx -------------------------------------------------------------------------------- /Buycabbage-semi-LawGLM/requirements.txt: -------------------------------------------------------------------------------- 1 | zhipuai>=2.1.5.20230904 2 | pandas>=2.2.3 3 | Levenshtein>=0.26.0 4 | openpyxl>=3.1.5 -------------------------------------------------------------------------------- /LegalHi-LawGLM/README.md: -------------------------------------------------------------------------------- 1 | # 方案概述 2 | 3 | 第三届琶洲算法大赛-GLM法律行业大模型挑战赛道,LegalHi复赛方案,由李海涛,陈俊杰贡献。 4 | 5 | # 方案介绍 6 | 7 | ![方案图](image.png) 8 | 9 | 上图展示的即为我们提出的全局适应的动态法律多智能体协作系统,由Processor、Memorizer、Actor、Judge、Reflector五类智能体组成。 10 | 11 | 1. 当用户的需求进入系统后,Processor会对查询中的错误和重复信息进行纠正,并筛选出解决该问题需要的外部信息。 12 | 13 | 2. 之后Memorizer会凝练出短期记忆帮助后续智能体同步信息,同时会检索出与各问题相关的长期记忆,帮助各智能体更好地解决问题。 14 | 15 | 3. Actor智能体包含思考-行动-观察三部分,它在相关记忆的基础上,制定恰当的解决计划并执行,同时计划也会根据外部环境的反馈动态更新,最终得到问题的答案。 16 | 17 | 4. 之后,Judge会评价答案的质量,如果答案完全解决该问题则输出给用户。 18 | 19 | 5. 如果答案未完全满足用户需求,Reflector首先会提炼总结已有信息,之后对actor的规划进行反思,形成正确的解决方案。 20 | 21 | 在我们的方案中,每个智能体都被分配了能力范围内的子任务,这种分工明确的策略极大地降低了复杂问题的求解难度,提高了系统的整体效果。 22 | 23 | 尽管多智能体协作的范式通过将复杂问题分解为若干子问题,有效提升了解决问题的性能。然而如果每个智能体只专注于自己的任务而忽视了整体目标,可能会损害系统的表现。 24 | 25 | 因此一个优秀的多智能体系统不仅要提升局部任务的准确性,还要保持全局目标的一致性。如何让每个智能体兼顾局部任务的准确性和全局目标的一致性,是目前多智能体协作系统面临的关键挑战。 26 | 27 | 为了解决这一挑战,我们创新性地提出了GoalAct技术,它从规划、反思和记忆三个层面兼顾局部准确性和全局一致性。 28 | 29 | - 在规划层面,系统既会在做局部规划时考虑整体目标,又能根据局部规划的动态反馈调整全局规划,提高整体效果。 30 | 31 | - 在反思层面,系统既会在与外界交互的过程中实时反思自身行动,又能对整体规划进行反思,判断当前的规划方向是否符合整体目标的要求,增强可靠性。 32 | 33 | - 在记忆层面,系统既会在处理每个任务时,利用短期记忆归纳总结前一个智能体的有用信息,并传递给下一个智能体,以便更高效地完成任务,又会利用长期记忆不断积累过去的经验和教训,从而提升应对不同任务类型的能力,拥有更强的泛化性。 34 | 35 | 代码具体解析如下: 36 | 37 | - main.py:代码入口,首先将问题初步分类,之后采用边执行边思考的方案解决每个问题 38 | - action.py:查询检索、排序、求和等行为接口 39 | - execute_plan.py:规划接口,负责逐步分解问题并调用行为接口解决问题 40 | - reflexion.py:反思接口,解决规划失败的问题 41 | - tool_register:工具文件夹,定义官方提供的api和数据表信息 42 | - prompt.py、tools_class.py:大模型执行具体任务时的提示,引导大模型正确思考 43 | - memory.py、memory.json:记忆模块,引导大模型规范思维和行动 44 | - produce_report.py:解决“整合报告”类复杂问题 45 | - produce_sue.py:解决“民事诉讼”类复杂问题 46 | - run.py、run.sh:运行接口或脚本 47 | 48 | ## 运行代码 49 | 50 | 1. 安装依赖 51 | 52 | ```shell 53 | pip install -r requirements.txt 54 | ``` 55 | 56 | 57 | 2. 运行主函数: 58 | 59 | ```shell 60 | ZHIPUAI_API_KEY="your zhipuAI keys" python run.py 61 | ``` -------------------------------------------------------------------------------- /LegalHi-LawGLM/example.py: -------------------------------------------------------------------------------- 1 | import json 2 | import concurrent.futures as cf 3 | 4 | 5 | def process_one(question_json): 6 | return question_json 7 | 8 | 9 | def main(): 10 | q_path = "./c_question.json" 11 | result_path = "./c_result.json" 12 | result_json_list = [] 13 | 14 | q_json_list = [json.loads(x.strip()) for x in open(q_path, "r", encoding="utf-8").readlines()] 15 | with cf.ProcessPoolExecutor(max_workers=4) as executor: 16 | future_list = [executor.submit(process_one, q_json) for q_json in q_json_list] 17 | for future in cf.as_completed(future_list): 18 | result_json_list.append(future.result()) 19 | 20 | result_json_list.sort(key=lambda x: x["id"]) 21 | open(result_path, "w", encoding="utf-8").write( 22 | "\n".join([json.dumps(x, ensure_ascii=False) for x in result_json_list]) 23 | ) 24 | 25 | 26 | if __name__ == "__main__": 27 | main() 28 | -------------------------------------------------------------------------------- /LegalHi-LawGLM/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/LegalHi-LawGLM/image.png -------------------------------------------------------------------------------- /LegalHi-LawGLM/memory.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | memory_path = "./memory.json" 4 | memory_file = open(memory_path, "r") 5 | memory_dict = json.load(memory_file) 6 | 7 | query_list = "" 8 | for key in memory_dict.keys(): 9 | query = memory_dict[key]["question"] 10 | query_list += str(key) + ". " + query + "\n" 11 | 12 | 13 | MEMORY_PROMPT = """ 14 | 你是一个高级排序器代理。 15 | 请从给定的候选查询列表中精心挑选出与当前问题最为相似、问题中含有的关键元素最类似、解决路径最为吻合的前四个查询,随后,按照相似度从高到低的顺序,将这些查询的问题序号以列表形式清晰排列。确保最贴近的查询位于列表的顶部。 16 | 17 | 问题:{question} 18 | 19 | 候选列表: 20 | {query_list} 21 | 22 | 例子: 23 | 问题:伊吾广汇矿业有限公司作为被告的案件中涉案金额小于100万大于1万的案号分别为?涉案金额数值为? 24 | {{ 25 | "相关问题":[1,15,4,5] 26 | }} 27 | 28 | 问题:在2019年,江苏省高级人民法院审理的案号为民申6268号的案件中,判决的胜诉方是哪家公司?胜诉方的律师事务所地址位于何处? 29 | {{ 30 | "相关问题":[25,12,14,15] 31 | }} 32 | 例子结束 33 | 34 | 问题:{question} 35 | 请按照以下json格式进行输出,可以被Python json.loads函数解析。不回答问题,不作任何解释,不输出其他任何信息。 36 | ```json 37 | {{ 38 | "相关问题": 39 | }} 40 | ``` 41 | """ 42 | 43 | 44 | MEMORY_Refine_PROMPT = """ 45 | 你是一个擅长反思的高级排序器。 46 | 请从下列候选查询列表中审慎挑选出三个与当前问题最为贴近、解决策略最为相似、问题中含有的关键元素最类似且最有可能助力问题高效解决的查询。随后,按照相似度的递增顺序,将这些查询的问题序号以清晰有序的列表形式呈现出来,确保最相关的查询占据列表的前端位置。 47 | 48 | 问题:{question} 49 | 50 | 候选列表: 51 | {query_list} 52 | 53 | 例子: 54 | 问题:伊吾广汇矿业有限公司作为被告的案件中涉案金额小于100万大于1万的案号分别为?涉案金额数值为? 55 | {{ 56 | "相关问题":[1,15,4] 57 | }} 58 | 59 | 问题:在2019年,江苏省高级人民法院审理的案号为民申6268号的案件中,判决的胜诉方是哪家公司?胜诉方的律师事务所地址位于何处? 60 | {{ 61 | "相关问题":[25,12,14] 62 | }} 63 | 例子结束 64 | 65 | 问题:{question} 66 | 请按照以下json格式进行输出,可以被Python json.loads函数解析。不回答问题,不作任何解释,不输出其他任何信息。 67 | ```json 68 | {{ 69 | "相关问题": 70 | }} 71 | ``` 72 | """ 73 | 74 | 75 | def get_memory(Memory_list): 76 | memory = "" 77 | for memory_id in Memory_list: 78 | one_query = memory_dict[str(memory_id)]["question"] 79 | one_solution = memory_dict[str(memory_id)]["solution"] 80 | memory += "问题: " + one_query + "\n" + one_solution + "\n\n" 81 | return memory 82 | -------------------------------------------------------------------------------- /LegalHi-LawGLM/requirements.txt: -------------------------------------------------------------------------------- 1 | zhipuai>=2.1.5.20230904 -------------------------------------------------------------------------------- /LegalHi-LawGLM/run.py: -------------------------------------------------------------------------------- 1 | """ 2 | Author: lihaitao 3 | Date: 2024-07-29 12:02:55 4 | LastEditors: Do not edit 5 | LastEditTime: 2024-08-07 10:23:00 6 | FilePath: /GLM2024/submit-image-demo/app/run.py 7 | #""" 8 | 9 | import concurrent.futures as cf 10 | import json 11 | from main import run, run_all 12 | 13 | 14 | def main(): 15 | q_path = "../assets/question_d.json" 16 | result_path = "./app/result.json" 17 | result_json_list = [] 18 | 19 | q_json_list = [json.loads(x.strip()) for x in open(q_path, "r", encoding="utf-8").readlines()] 20 | with cf.ProcessPoolExecutor(max_workers=50) as executor: 21 | future_list = [executor.submit(run, q_json) for q_json in q_json_list] 22 | for future in cf.as_completed(future_list): 23 | result_json_list.append(future.result()) 24 | result_json_list.sort(key=lambda x: x["id"]) 25 | open(result_path, "w", encoding="utf-8").write( 26 | "\n".join([json.dumps(x, ensure_ascii=False) for x in result_json_list]) 27 | ) 28 | 29 | 30 | if __name__ == "__main__": 31 | main() 32 | -------------------------------------------------------------------------------- /LegalHi-LawGLM/tool_register/API.py: -------------------------------------------------------------------------------- 1 | """ 2 | Author: lihaitao 3 | Date: 2024-08-04 18:31:16 4 | LastEditors: Do not edit 5 | LastEditTime: 2024-08-04 18:31:16 6 | FilePath: /GLM2024/submit-image-demo/app/tool_register/API.py 7 | """ 8 | 9 | import requests 10 | 11 | 12 | def API(api_name, args): 13 | domain = "comm.chatglm.cn" 14 | url = f"https://{domain}/law_api/s1_b/{api_name}" 15 | headers = { 16 | "Content-Type": "application/json", 17 | "Authorization": "Bearer 5DC959180ACBFF13D363AFFEB38F81CE3AFD8BA74746FBB1", 18 | } 19 | flag = 0 20 | for k in args: 21 | if k == "need_fields": 22 | flag = 1 23 | # print(args[k]) 24 | if type(args[k]) != list: 25 | args[k] = args[k]["Items"] 26 | if flag == 0: 27 | args["need_fields"] = [] 28 | rsp = requests.post(url, json=args, headers=headers) 29 | return rsp.json() 30 | -------------------------------------------------------------------------------- /LegalHi-LawGLM/tool_register/interface.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | from typing import Any, Union 3 | 4 | 5 | @dataclass 6 | class ToolObservation: 7 | content_type: str 8 | text: str 9 | image_url: Union[str, None] = None 10 | role_metadata: Union[str, None] = None 11 | metadata: Any = None 12 | -------------------------------------------------------------------------------- /Move_forward_every_day-lawGLM/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM registry.cn-hangzhou.aliyuncs.com/glm_law/law:v0 2 | 3 | # 安装应用程序的依赖 4 | COPY requirements.txt . 5 | RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirements.txt 6 | RUN python -m ipykernel install --user --name my_kernel --display-name "My Kernel" 7 | # 下载jieba的词库和分析模块所需的文件 8 | RUN python -c "import jieba; jieba.initialize()" 9 | RUN python -c "import jieba.analyse; jieba.analyse.textrank('劳动合同纠纷')" 10 | 11 | # 复制代码到镜像仓库 12 | COPY app /app 13 | 14 | # 指定工作目录 15 | WORKDIR /app 16 | 17 | # 容器启动运行命令 18 | CMD ["bash", "/app/run.sh"] -------------------------------------------------------------------------------- /Move_forward_every_day-lawGLM/README.md: -------------------------------------------------------------------------------- 1 | # Move_forward_every_day-lawGLM 2 | 3 | ## 说明 4 | 5 | 此代码是 第三届琶洲算法大赛-GLM法律行业大模型挑战赛,每天前进30公里团队的终版(复赛)方案。复赛成绩排名第15名。 6 | 7 | 8 | ## 快速开始 9 | 10 | 1、安装依赖 11 | 12 | ```shell 13 | pip install -r requirements.txt 14 | ``` 15 | 16 | 2、运行主函数: 17 | 18 | ```shell 19 | cd app 20 | 21 | OPENAI_API_KEY="your ZhipuAI API Keys" python run.py 22 | ``` 23 | 24 | 25 | 26 | ## 解决方案简述 27 | 28 | 1、先根据API信息和用户问题,让LLM回答出解题思路和需要使用的API。 29 | 30 | 2、根据用户问题、解题思路、API信息让LLM生成任务流程(包括API查询/筛选/统计/总结等)。 31 | 32 | 3、依次执行任务流程中的各个子任务,获得子任务结果。 33 | 34 | 4、整理各个子任务的结果,并结合中间内容信息,完整回答用户问题。 35 | 36 | 5、线上预测时,采用多线程方式;并对部分错误问题重新进行回答。 37 | -------------------------------------------------------------------------------- /Move_forward_every_day-lawGLM/app/D_utils.py: -------------------------------------------------------------------------------- 1 | import concurrent.futures 2 | 3 | 4 | def multi_thread_excute(all_tasks, parralle_num=20): 5 | """ 6 | 多线程运行任务,注意,返回结果序并不和all_tasks一致,请设计好task的输出,能够通过map的形式找到对应的答案 7 | """ 8 | 9 | def multi_thread_excute_helper(tasks): 10 | with concurrent.futures.ThreadPoolExecutor() as executor: 11 | exe_tasks = [executor.submit(*task) for task in tasks] 12 | results = [future.result() for future in concurrent.futures.as_completed(exe_tasks)] 13 | return results 14 | 15 | all_results = [] 16 | for i in range(0, len(all_tasks), parralle_num): 17 | all_results += multi_thread_excute_helper(all_tasks[i : i + parralle_num]) 18 | return all_results 19 | -------------------------------------------------------------------------------- /Move_forward_every_day-lawGLM/app/new_logtool.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | 3 | import threading 4 | 5 | 6 | class VlogClass: 7 | _instance_lock = threading.Lock() 8 | 9 | # 单例模式 10 | def __new__(cls, *args, **kwargs): 11 | if not hasattr(cls, "_instance"): 12 | with cls._instance_lock: 13 | if not hasattr(cls, "_instance"): 14 | cls._instance = object.__new__(cls) 15 | return cls._instance 16 | 17 | def __init__(self, vlog_level=0): 18 | self.prefix = "" 19 | self.vlog_level = vlog_level 20 | return 21 | 22 | def __getitem__(self, level=1): 23 | if level == 1: 24 | self.prefix = "VLOG_INFO:" 25 | elif level == 2: 26 | self.prefix = "VLOG_WARNNING:" 27 | elif level == 3: 28 | self.prefix = "VLOG_ERROR:" 29 | elif level > 3: 30 | self.prefix = "VLOG_BAD:" 31 | else: 32 | self.prefix = "VLOG0:" 33 | self.level = level 34 | return self 35 | 36 | def __call__(self, text, *args): 37 | if self.level >= self.vlog_level: 38 | print(self.prefix, text, args) 39 | return 40 | 41 | 42 | VLOG_LEVEL = 2 43 | VLOG = VlogClass(VLOG_LEVEL) 44 | -------------------------------------------------------------------------------- /Move_forward_every_day-lawGLM/app/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 这里可以放入代码运行命令 4 | echo "program start..." 5 | echo $(date +"%Y-%m-%d %H:%M:%S") 6 | pip3 install requests --index-url=http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com 7 | echo $(date +"%Y-%m-%d %H:%M:%S") 8 | pip3 install zhipuai --index-url=http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com 9 | echo $(date +"%Y-%m-%d %H:%M:%S") 10 | 11 | python3 run.py 12 | echo $(date +"%Y-%m-%d %H:%M:%S") 13 | echo "FINISHED" -------------------------------------------------------------------------------- /Move_forward_every_day-lawGLM/requirements.txt: -------------------------------------------------------------------------------- 1 | requests==2.32.3 2 | zhipuai==2.1.0 -------------------------------------------------------------------------------- /NickolasNi-LawGLM/README.md: -------------------------------------------------------------------------------- 1 | # 第三届琶洲算法大赛-GLM法律行业大模型挑战赛道--NickoLasNi团队 2 | 3 | ## 运行代码 4 | 5 | 1. 安装依赖 6 | 7 | ```shell 8 | pip install -r requirements.txt 9 | ``` 10 | 11 | 2. 执行代码 12 | 13 | ```shell 14 | cd app.py 15 | ZHIPUAI_API_KEY="your zhipuAI key" python answer.py 16 | ``` 17 | 18 | 执行代码后,结果出现在: 19 | 20 | ``` 21 | data/results/nickolasNi_result.json 22 | ``` -------------------------------------------------------------------------------- /NickolasNi-LawGLM/apis/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/NickolasNi-LawGLM/apis/__init__.py -------------------------------------------------------------------------------- /NickolasNi-LawGLM/config.py: -------------------------------------------------------------------------------- 1 | from pprint import pprint 2 | 3 | isLocal = False 4 | 5 | def print_log(*args): 6 | if True: 7 | print(*args) 8 | 9 | 10 | def pprint_log(*args): 11 | if True: 12 | pprint(*args) 13 | -------------------------------------------------------------------------------- /NickolasNi-LawGLM/create_empty.py: -------------------------------------------------------------------------------- 1 | import jsonlines 2 | from tqdm import tqdm 3 | from utils import read_jsonl 4 | from config import * 5 | 6 | if __name__ == "__main__": 7 | question_file = "./data/questions/B_question.json" 8 | result_file = "data/0/nickolasNi_result.json" 9 | queries = read_jsonl(question_file) 10 | print_log("Start generating answers...") 11 | 12 | for query in tqdm(queries): 13 | result = "" 14 | content = {"id": query["id"], "question": query["question"], "answer": result} 15 | with jsonlines.open(result_file, "a") as json_file: 16 | json_file.write(content) -------------------------------------------------------------------------------- /NickolasNi-LawGLM/interface.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | from typing import Any, Union 3 | 4 | 5 | @dataclass 6 | class ToolObservation: 7 | content_type: str 8 | text: str 9 | image_url: Union[str, None] = None 10 | role_metadata: Union[str, None] = None 11 | metadata: Any = None 12 | -------------------------------------------------------------------------------- /NickolasNi-LawGLM/match_tools/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/NickolasNi-LawGLM/match_tools/__init__.py -------------------------------------------------------------------------------- /NickolasNi-LawGLM/match_tools/address_code_tools.py: -------------------------------------------------------------------------------- 1 | from typing import Annotated, List 2 | from match_tools.schema import AddrCode, AddrCodeEnum 3 | 4 | 5 | from match_tools.tools_register import register_tool 6 | from match_tools.schema import get_table_property_list 7 | from utils import parse_json_from_response, check_target_property 8 | from apis.api import http_api_call 9 | 10 | 11 | @register_tool 12 | def get_address_code( 13 | province: Annotated[str, "省份,直辖市的省份就天该市,比如上海市、北京市、天津市、重庆市", True], 14 | city: Annotated[str, "城市", True], 15 | district: Annotated[str, "区县", True], 16 | target_property: Annotated[ 17 | List[AddrCodeEnum], 18 | "通用地址编码表的字段列表,比如询问某省市区的区县登记的区划代码时,需要填入['区县区划代码']", 19 | False, 20 | ] = None, 21 | ) -> AddrCode: 22 | """ 23 | 根据省市区查询区划代码,当地址是直辖时'省份'和'城市'都填写该市'区县'填写区。比如'重庆市南岸区',省份是重庆市、城市是重庆市、区县是南岸区 24 | """ 25 | need_fields = target_property if target_property else [] 26 | need_fields = need_fields if check_target_property(get_table_property_list("addr_code"), need_fields) else [] 27 | params = {"query_conds": {"省份": province, "城市": city, "区县": district}, "need_fields": need_fields} 28 | api_result = http_api_call("get_address_code", params) 29 | 30 | if type(api_result) == dict: 31 | refined_answer = "根据{}{}{}查询到:{}".format(province, city, district, api_result["return"][0]) 32 | call_api_successfully = True 33 | else: 34 | refined_answer = "根据{}{}{}无法查询到区划代码信息".format(province, city, district) 35 | call_api_successfully = False 36 | 37 | tool_result = { 38 | "condition": [province, city, district], 39 | "api": "get_address_code", 40 | "search_result": api_result["return"][0], 41 | "refined_answer": refined_answer, 42 | "api_result": api_result, 43 | "call_api_successfully": call_api_successfully, 44 | } 45 | return tool_result 46 | -------------------------------------------------------------------------------- /NickolasNi-LawGLM/match_tools/court_code_tools.py: -------------------------------------------------------------------------------- 1 | from typing import Annotated, List 2 | from match_tools.schema import CourtCode, CourtCodeEnum 3 | 4 | from match_tools.tools_register import register_tool 5 | from match_tools.schema import get_table_property_list 6 | from utils import parse_json_from_response, check_target_property 7 | from apis.api import http_api_call 8 | 9 | 10 | @register_tool 11 | def get_court_code( 12 | court_name: Annotated[str, "法院名称", False] = None, 13 | court_code: Annotated[str, "法院代字", False] = None, 14 | target_property: Annotated[ 15 | List[CourtCodeEnum], 16 | "法院地址信息、代字表的字段列表,比如已知法院代字询问法院名时,需要填入['法院名称']", 17 | False, 18 | ] = None, 19 | ) -> CourtCode: 20 | """ 21 | 根据法院名称或者法院代字查询法院代字等相关数据 22 | """ 23 | need_fields = target_property if target_property else [] 24 | need_fields = need_fields if check_target_property(get_table_property_list("court_code"), need_fields) else [] 25 | query_conds = {} 26 | if court_name: 27 | search_key = "法院名称" 28 | search_value = court_name 29 | if court_code: 30 | search_key = "法院代字" 31 | search_value = court_code 32 | query_conds[search_key] = search_value 33 | 34 | params = {"query_conds": query_conds, "need_fields": need_fields} 35 | api_result = http_api_call("get_court_code", params) 36 | 37 | if type(api_result) == dict: 38 | refined_answer = "根据{}是{}查询到:{}".format(search_key, search_value, api_result["return"][0]) 39 | call_api_successfully = True 40 | else: 41 | refined_answer = "无法根据{}是{}查询到法院信息".format(search_key, search_value) 42 | call_api_successfully = False 43 | 44 | tool_result = { 45 | "condition": search_value, 46 | "api": "get_court_code", 47 | "search_result": api_result["return"][0], 48 | "refined_answer": refined_answer, 49 | "api_result": api_result, 50 | "call_api_successfully": call_api_successfully, 51 | } 52 | return tool_result 53 | -------------------------------------------------------------------------------- /NickolasNi-LawGLM/match_tools/law_firm_info_tools.py: -------------------------------------------------------------------------------- 1 | import json 2 | from typing import Annotated, List 3 | from match_tools.schema import LawfirmInfo, LawfirmInfoEnum 4 | 5 | from match_tools.tools_register import register_tool 6 | from apis.api import http_api_call 7 | from utils import check_target_property 8 | from match_tools.schema import get_table_property_list 9 | 10 | 11 | @register_tool 12 | def get_lawfirm_info( 13 | law_firm_name: Annotated[str, "律师事务所名称", True], 14 | target_property: Annotated[ 15 | List[LawfirmInfoEnum], 16 | "律师事务所信息表(名录)的字段列表,比如询问律师事务所的地址信息时,需要填入['律师事务所地址']", 17 | False, 18 | ] = None, 19 | ) -> LawfirmInfo: 20 | """ 21 | 根据律师事务所名称查询律师事务所名录 22 | """ 23 | need_fields = target_property if target_property else [] 24 | need_fields = need_fields if check_target_property(get_table_property_list("law_firm_info"), need_fields) else [] 25 | params = {"query_conds": {"律师事务所名称": law_firm_name}, "need_fields": need_fields} 26 | api_result = http_api_call("get_lawfirm_info", params) 27 | 28 | if type(api_result) == dict: 29 | refined_answer = "根据律师事务所名称{}查询到:{}".format(law_firm_name, api_result["return"][0]) 30 | call_api_successfully = True 31 | else: 32 | refined_answer = "查询不到{}的相关信息".format(law_firm_name) 33 | call_api_successfully = False 34 | 35 | tool_result = { 36 | "condition": law_firm_name, 37 | "api": "get_lawfirm_info", 38 | "search_result": api_result["return"][0], 39 | "refined_answer": refined_answer, 40 | "api_result": api_result, 41 | "call_api_successfully": call_api_successfully, 42 | } 43 | return tool_result 44 | -------------------------------------------------------------------------------- /NickolasNi-LawGLM/match_tools/law_firm_log_tools.py: -------------------------------------------------------------------------------- 1 | from typing import Annotated, List 2 | from match_tools.schema import LawfirmLog, LawfirmLogEnum 3 | 4 | from match_tools.tools_register import register_tool 5 | from match_tools.schema import get_table_property_list 6 | from utils import parse_json_from_response, check_target_property 7 | from apis.api import http_api_call 8 | 9 | 10 | @register_tool 11 | def get_lawfirm_log( 12 | law_firm_name: Annotated[str, "律师事务所名称", True], 13 | target_property: Annotated[ 14 | List[LawfirmLogEnum], 15 | "律师事务所业务数据表的字段列表,比如询问某律所服务已上市公司的数量时,需要填入['服务已上市公司']", 16 | False, 17 | ] = None, 18 | ) -> LawfirmLog: 19 | """ 20 | 根据律师事务所名称查询律师事务所统计数据 21 | """ 22 | need_fields = target_property if target_property else [] 23 | need_fields = need_fields if check_target_property(get_table_property_list("law_firm_log"), need_fields) else [] 24 | params = {"query_conds": {"律师事务所名称": law_firm_name}, "need_fields": need_fields} 25 | api_result = http_api_call("get_lawfirm_log", params) 26 | 27 | if type(api_result) == dict: 28 | refined_answer = "律师事务所名称{}查询到:{}".format(law_firm_name, api_result["return"][0]) 29 | call_api_successfully = True 30 | else: 31 | refined_answer = "查询名为{}的律师事务所业务数据信息".format(law_firm_name) 32 | call_api_successfully = False 33 | 34 | tool_result = { 35 | "condition": law_firm_name, 36 | "api": "get_lawfirm_log", 37 | "search_result": api_result["return"][0], 38 | "refined_answer": refined_answer, 39 | "api_result": api_result, 40 | "call_api_successfully": call_api_successfully, 41 | } 42 | return tool_result 43 | -------------------------------------------------------------------------------- /NickolasNi-LawGLM/match_tools/legal_abstract_tools.py: -------------------------------------------------------------------------------- 1 | from typing import Annotated 2 | from match_tools.schema import LegalAbstract 3 | 4 | from match_tools.tools_register import register_tool 5 | from apis.api import http_api_call, http_api_call_original 6 | 7 | 8 | @register_tool 9 | def get_legal_abstract( 10 | case_num: Annotated[ 11 | str, 12 | "法律裁判文书的案号。案号通常由年份、法院代字和案件序号三部分组成,如:(2020)赣0781民初1260号、(2019)川01民终12104号,年份用括号()包裹", 13 | True, 14 | ], 15 | ) -> LegalAbstract: 16 | """ 17 | 根据法律裁判文书的案号查询文本摘要 18 | """ 19 | params = { 20 | "query_conds": { 21 | "案号": case_num, 22 | }, 23 | "need_fields": [], 24 | } 25 | result = http_api_call_original("get_legal_abstract", params) 26 | 27 | if len(result) == 0: 28 | case_num = case_num.replace("(", "(").replace(")", ")") 29 | params = { 30 | "query_conds": { 31 | "案号": case_num, 32 | }, 33 | "need_fields": [], 34 | } 35 | result = http_api_call_original("get_legal_abstract", params) 36 | elif len(result) == 0: 37 | case_num = case_num.replace("(", "(").replace(")", ")") 38 | params = { 39 | "query_conds": { 40 | "案号": case_num, 41 | }, 42 | "need_fields": [], 43 | } 44 | result = http_api_call_original("get_legal_abstract", params) 45 | 46 | if len(result): 47 | refined_answer = "根据案号{} 查询到法律文书摘要信息:{}".format(case_num, result) 48 | call_api_successfully = True 49 | else: 50 | refined_answer = "查询不到案号是{}的法律文书摘要".format(case_num) 51 | call_api_successfully = False 52 | 53 | tool_result = { 54 | "condition": case_num, 55 | "api": "get_legal_abstract", 56 | "search_result": result, 57 | "refined_answer": refined_answer, 58 | "api_result": result, 59 | "call_api_successfully": call_api_successfully, 60 | } 61 | return tool_result 62 | -------------------------------------------------------------------------------- /NickolasNi-LawGLM/match_tools/report_tools.py: -------------------------------------------------------------------------------- 1 | from typing import get_origin, Annotated, Union, List, Optional 2 | from match_tools.schema import AddrInfo 3 | from match_tools.schema import ( 4 | CompanyInfoEnum, 5 | SubCompanyInfoEnum, 6 | LegalDocumentEnum, 7 | CompanyRegisterEnum, 8 | CompanyNameCodeEnum, 9 | ) 10 | 11 | 12 | from match_tools.tools_register import register_tool 13 | from apis.api import augment_company_name, http_api_call 14 | 15 | 16 | @register_tool 17 | def get_integrated_report() -> str: 18 | """ 19 | 生成整合报告 20 | """ 21 | return "整合报告" 22 | -------------------------------------------------------------------------------- /NickolasNi-LawGLM/match_tools/temperature_info_tools.py: -------------------------------------------------------------------------------- 1 | from typing import Annotated 2 | from match_tools.schema import TempInfo 3 | 4 | from match_tools.tools_register import register_tool 5 | from apis.api import http_api_call 6 | from utils import convert_date_2_answer_format 7 | 8 | 9 | @register_tool 10 | def get_temp_info( 11 | province: Annotated[str, "省份,直辖市的省份就天该市,比如上海市、北京市、天津市、重庆市", True], 12 | city: Annotated[str, "城市", True], 13 | date: Annotated[str, "日期,需要转成*年*月*日格式,如:2020年1月1日", True], 14 | ) -> TempInfo: 15 | """ 16 | 根据日期及省份城市查询天气相关信息 17 | 参数date需要转成*年*月*日格式,如:2019-12-11应该变成2019年12月11日。几月几日如果是个位数不要在十位上加0,如:2020年04月03日应该变成2020年4月3日。 18 | """ 19 | params = {"query_conds": {"省份": province, "城市": city, "日期": date}, "need_fields": []} 20 | api_result = http_api_call("get_temp_info", params) 21 | # return api_result 22 | 23 | date_with_answer_format = convert_date_2_answer_format(date) 24 | if type(api_result) == dict and len(api_result["return"]): 25 | refined_answer = "根据{}{}和{}查询到天气信息:{}".format( 26 | province, city, date_with_answer_format, api_result["return"][0] 27 | ) 28 | call_api_successfully = True 29 | else: 30 | refined_answer = "无法根据{}{}和{}查询到天气信息。".format(province, city, date_with_answer_format) 31 | call_api_successfully = False 32 | 33 | tool_result = { 34 | "condition": [province, city, date_with_answer_format], 35 | "api": "get_temp_info", 36 | "search_result": api_result["return"][0], 37 | "refined_answer": refined_answer, 38 | "api_result": api_result, 39 | "call_api_successfully": call_api_successfully, 40 | } 41 | return tool_result 42 | -------------------------------------------------------------------------------- /NickolasNi-LawGLM/model.py: -------------------------------------------------------------------------------- 1 | from zhipuai import ZhipuAI 2 | from match_tools.schema import database_schema 3 | from config import * 4 | 5 | 6 | client = ZhipuAI(api_key="3db8a3bcecdae18ce765689c563fd2a6.qHjiJPELFaGCntzo") # 填写您自己的APIKey 7 | 8 | system_prompt = ( 9 | """你是一位金融法律专家,你的任务是根据用户给出的query,调用给出的工具接口,获得用户想要查询的答案。 10 | 所提供的工具接口可以查询四张数据表的信息,数据表的schema如下: 11 | """ 12 | + database_schema 13 | ) 14 | 15 | web_search_tool = {"type": "web_search", "web_search": {"enable": False}} 16 | 17 | 18 | def call_glm( 19 | messages, model="glm-4-plus", temperature=0.1, top_p=0.5, tools=[web_search_tool], max_tokens=1024, do_sample=True 20 | ): 21 | response = client.chat.completions.create( 22 | model="glm-4-plus", # 填写需要调用的模型名称 23 | messages=messages, 24 | temperature=temperature, 25 | top_p=top_p, 26 | tools=tools, 27 | max_tokens=max_tokens, 28 | ) 29 | # print_log(messages) 30 | print_log(response.json()) 31 | return response 32 | -------------------------------------------------------------------------------- /NickolasNi-LawGLM/requirements.txt: -------------------------------------------------------------------------------- 1 | zhipuai>=2.1.5.20230904 2 | pydantic>=2.9.2 3 | jsonlines>=4.0.0 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LawGLM 2 | 3 | ## 仓库介绍 4 | 5 | 本仓库是关于2024年琶洲算法大赛的开源代码汇总, 旨在探索大语言模型在法律行业的应用潜力。 本仓库存放了数个比赛团队的竞赛原始代码,均经过整理并开源。 6 | 7 | > 关于本次LawGLM比赛及开源项目的背景情况及台前幕后的故事,请参考 [文档](remain_true_to_our_original_open-source_aspiration_in_the_legal_industry.md)。 8 | 9 | + 比赛链接和介绍: https://tianchi.aliyun.com/competition/entrance/532221 10 | + 技术: 参赛选手们使用了 Function Call,RAG,长文本等多项技术,让大模型在法律领域发挥了更大的作用。 11 | + 模型: 比赛选手的灵活使用 `GLM-4-Air`,`GLM-4-AirX`,`GLM-4-Plus`,`GLM-4-Flash` 等多种 GLM API系列模型。 12 | 充分发挥 `GLM-4-AirX` 响应快,`GLM-4-Flash` 免费,`GLM-4-Plus` 精度高等优势,结合使用,实现高性价比解决方案。 13 | 14 | ## 项目更新 15 | 16 | - 🔥🔥 **News**: ```2024/12/03```: [2024金融行业·大模型挑战赛](https://competitions.zhipuai.cn/matchDetail?id=120241202000000003) 已经正式推出,持续开源!欢迎报名参赛。 17 | - 🔥 **News**: ```2024/11/30```: 我们将会公开视频教程,方便大家学习。 18 | - 🔥 **News**: ```2024/10/20```: 我们整理开源了第一个参赛队伍的代码。并完成了项目的基础工作。 19 | 20 | ## 比赛规则 21 | 22 | ### 答疑和规则 23 | 24 | + 官方QA视频: https://www.bilibili.com/video/BV1k4421U78c/?vd_source=c083324a69ff411499cf1b5f539eaac7 25 | + QA PPT: [点击这里](assets/qa.pdf) 26 | + 官方解题思路: https://www.bilibili.com/video/BV1k4421U78c/?vd_source=c083324a69ff411499cf1b5f539eaac7 27 | 28 | ### BaseLine 29 | 30 | + [伍柒](assets/【baseline分享】伍柒.pdf) 31 | + [法外张三](assets/【baseline分享】法外张三.pdf) 32 | + [张江高科](assets/【baseline分享】张江高科.pdf) 33 | 34 | 以上信息可供参考,进一步了解该比赛。 35 | 36 | ## 队伍代码 37 | 38 | + [APIWeaver](APIWeaver-lawGLM/README.md): 由 [MeiPixel](https://github.com/MeiPixel) 贡献。 39 | 支持文档召回, 通过大模型对话式优化prompt, 运行记录转化为llama factory训练格式 ,一键部署gradio等多样功能。 40 | + [Vinlic](Vinlic-lawGLM/README.md): 由 [Vinlic](https://github.com/Vinlic) 41 | 贡献。Vinlic队在第三届琶洲算法大赛GLM法律行业大模型挑战赛道中提出了两种方案:方案A结合多轮迭代与FunctionCall实现Token节省,方案B结合多轮迭代、Planner与CodeAct实现更高自由度。 42 | + [Move_forward_every_da](Move_forward_every_day-lawGLM/README.md): 每天前进30公里团队的终版(复赛)方案。复赛成绩排名第15名。 43 | + [NickolasNi](NickolasNi-LawGLM/README.md): 由 NickolasNi 贡献,初赛方案。 44 | + [LegalHi](LegalHi-LawGLM/README.md): LegalHi 团队方案,通过意图分类,问题改写,思维链、结果判断、外反思等多个步骤,优秀完成任务。 45 | + [Buycabbage-semi](Buycabbage-semi-LawGLM): 基于GLM多智能体协同的法律行业问答系统,由买白菜不砍价提供的复赛解决方案。 46 | 47 | ## 开源协议 48 | 49 | 本代码中无特殊说明或者无注名额外协议的,均使用 [Apache 2.0](LICENSE) 协议。 50 | 51 | ## 贡献指南 52 | 53 | 我们欢迎任何参与比赛的队伍提交自己的比赛作品。 54 | 55 | 如果您想参与贡献,请参考 [这里](assets/contribute_zh.md) 56 | 57 | 我们感谢来自以下开发者的贡献,如果名单有却是,请您联系我们: 58 | 59 | [![lawglm contributors](https://contrib.rocks/image?repo=metaglm/lawglm&max=2000)](https://github.com/metaglm/lawglm/graphs/contributors) 60 | -------------------------------------------------------------------------------- /SaltFire-LawGLM/README.md: -------------------------------------------------------------------------------- 1 | ## law初赛代码 2 | 使用zhipuai和requests库 3 | 安装完成后运行answer_comp.py开始答题 4 | 生成答案为saltfire_result.json文件 5 | ## 思路 6 | 通过解析提问返回的答案,当遇到工具调用tool=none时,截取调用函数内容解析调用 7 | 区分query和need_fields 8 | 通过多层询问和api调用获取答案 9 | 遇到tools调用失败,字符解析 10 | 11 | ## 复现步骤 12 | python版本:3.8 13 | ```commandline 14 | pip install -r requirements.txt 15 | ``` 16 | 填入apikey和token 17 | 18 | ```commandline 19 | python answer_comp.py 20 | ``` 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /SaltFire-LawGLM/answer_comp.py: -------------------------------------------------------------------------------- 1 | import jsonlines 2 | from tqdm import tqdm 3 | 4 | import get_known 5 | 6 | 7 | def read_jsonl(path): 8 | # 初始化空列表,用于存储读取到的内容 9 | content = [] 10 | # 使用jsonlines库打开jsonl文件,并设置为只读模式 11 | with jsonlines.open(path, "r") as json_file: 12 | # 遍历json文件的每一行,将其转换为字典类型 13 | for obj in json_file.iter(type=dict, skip_invalid=True): 14 | # 将每一行添加到content列表中 15 | content.append(obj) 16 | # 返回content列表 17 | return content 18 | 19 | 20 | question_file = "datas/b_question.json" 21 | # 修改输出文件 22 | result_file = "saltfire_result.json" 23 | queries = read_jsonl(question_file) 24 | 25 | # 生成答案 26 | print("开始生成答案") 27 | 28 | for query in tqdm(queries): 29 | answer_1, answer1 = get_known.getanswer(query["question"]) 30 | answer0 = answer_1.content 31 | 32 | content = {"id": query["id"], "question": query["question"], "answer": answer0} 33 | print(f"写入回答:{content}") 34 | with jsonlines.open(result_file, "a") as json_file: 35 | json_file.write(content) 36 | 37 | 38 | # print(get_known.getanswer('我想要联系上海妙可蓝多食品科技股份有限公司的法人代表,请问他的名字是什么?').content) 39 | # print(1) 40 | -------------------------------------------------------------------------------- /SaltFire-LawGLM/datas/configuration.json: -------------------------------------------------------------------------------- 1 | {"task":"text-generation"} -------------------------------------------------------------------------------- /SaltFire-LawGLM/net_request.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | 4 | def net_getanswer(query_name, query_content, splited_need_fields, func_name): 5 | passfunc = { 6 | "query_conds": {query_name: query_content}, 7 | "need_fields": splited_need_fields, 8 | } 9 | print("passfunc:") 10 | print(passfunc) 11 | domain = "comm.chatglm.cn" 12 | 13 | headers = {"Content-Type": "application/json", "Authorization": "Bearer "} 14 | 15 | url = f"https://{domain}/law_api/s1_b/{func_name}" 16 | print(url) 17 | 18 | rsp = requests.post(url, json=passfunc, headers=headers) 19 | print(rsp.json()) 20 | return rsp 21 | -------------------------------------------------------------------------------- /SaltFire-LawGLM/requirements.txt: -------------------------------------------------------------------------------- 1 | requests==2.25.1 2 | jsonlines==4.0.0 3 | tqdm==4.59.0 4 | pandas==1.2.4 5 | zhipuai==2.1.5.20230904 -------------------------------------------------------------------------------- /Vinlic-lawGLM/README.md: -------------------------------------------------------------------------------- 1 | # 方案概述 2 | 3 | 第三届琶洲算法大赛-GLM法律行业大模型挑战赛道,Vinlic队初赛方案。 4 | 5 | ## GLM Law Solution A 6 | 7 | 多轮迭代 + FunctionCall的方案(更节省Token) 8 | 9 | [方案介绍](./solution_a/README.md) 10 | 11 | ## GLM Law Solution B 12 | 13 | 多轮迭代 + Planner + CodeAct的方案(自由度更高) 14 | 15 | [方案介绍](./solution_b/README.md) -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | old 3 | *.log -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/config.yml: -------------------------------------------------------------------------------- 1 | service: 2 | urlPrefix: '' 3 | host: '0.0.0.0' 4 | port: 8656 5 | requestLog: true 6 | task: 7 | max_rounds: 15 8 | max_retry_rounds: 5 9 | zhipuai: 10 | model: glm-4-0520 11 | endpoint: https://open.bigmodel.cn/api/paas/v4 12 | api_key: 13 | max_tokens: 4096 14 | law_api: 15 | endpoint: https://comm.chatglm.cn/law_api 16 | token: 17 | concurrent: 5 18 | web_search: 19 | model: 659e54b1b8006379b4b2abd6 20 | endpoint: http://localhost:8000/v1 21 | token: -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/Vinlic-lawGLM/solution_a/dist/favicon.ico -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/dist/index.d.cts: -------------------------------------------------------------------------------- 1 | 2 | export { } 3 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/dist/index.d.ts: -------------------------------------------------------------------------------- 1 | 2 | export { } 3 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | GLM法律顾问 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/Vinlic-lawGLM/solution_a/image.jpg -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "llm-race", 3 | "version": "0.0.1", 4 | "description": "LLM Race", 5 | "type": "module", 6 | "main": "dist/index.js", 7 | "module": "dist/index.mjs", 8 | "types": "dist/index.d.ts", 9 | "directories": { 10 | "dist": "dist" 11 | }, 12 | "files": [ 13 | "dist/" 14 | ], 15 | "scripts": { 16 | "dev": "tsup src/index.ts --format cjs,esm --sourcemap --dts --publicDir public --watch --onSuccess \"node --enable-source-maps --no-node-snapshot dist/index.js\"", 17 | "start": "node --enable-source-maps --no-node-snapshot dist/index.js", 18 | "build": "tsup src/index.ts --format cjs,esm --sourcemap --dts --clean --publicDir public" 19 | }, 20 | "author": "Vinlic", 21 | "license": "ISC", 22 | "dependencies": { 23 | "axios": "^1.7.2", 24 | "colors": "^1.4.0", 25 | "date-fns": "^3.6.0", 26 | "fs-extra": "^11.2.0", 27 | "lodash": "^4.17.21", 28 | "openai": "^4.51.0", 29 | "yaml": "^2.4.5" 30 | }, 31 | "devDependencies": { 32 | "@types/colors": "^1.2.1", 33 | "@types/fs-extra": "^11.0.4", 34 | "@types/lodash": "^4.14.202", 35 | "@types/node": "^20.14.2", 36 | "@types/yaml": "^1.9.7", 37 | "tsup": "^8.0.2", 38 | "typescript": "^5.3.3" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/Vinlic-lawGLM/solution_a/public/favicon.ico -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | GLM法律顾问 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/readme.md: -------------------------------------------------------------------------------- 1 | # GLM Law Solution A 2 | 3 | # 方案介绍 4 | 5 | 本方案只在初赛A榜使用,后续时间不足未继续参赛。这是一个相对节省token的方案,目标是使用尽量少的token来相对可靠的完成问答任务。 6 | 7 | ![](image.jpg) 8 | 9 | # 方案思路 10 | 11 | 核心代码在 src/lib/question.ts、src/lib/api.ts、src/lib/llm.ts。 12 | 13 | 1. 输入问题后首先进行问题分类,将问题分为四类: 14 | - 公司信息 15 | - 历史案件 16 | - 法律条文 17 | - 日常聊天 18 | 2. 根据分类调用利用Function Call和Prompt工程调用相应函数进行预处理和API调用。 19 | 3. 出现调用API异常或者查询不到数据时,自动在迭代中修正。 20 | 3. 通过多次迭代直到题目所有信息收集完毕,由LLM完成最终回答。 21 | 4. 将回答进行格式化并检查是否已正确回答问题,否则重入迭代。 22 | 23 | 简单题目消耗一般在2k-5k token. 24 | 复杂题目消耗一般在8k-10k token. 25 | 26 | ## 快速开始 27 | 28 | 修改conifg.yml文件中的glm api key和天池team token。 29 | 30 | 需要先安装好node.js环境,可以在[Node.js官网](https://nodejs.org/en/download/prebuilt-installer)下载。 31 | 32 | ```shell 33 | # 安装Yarn 34 | npm install -g yarn --registry=https://registry.npmmirror.com 35 | # 安装依赖 36 | yarn install 37 | # 启动 38 | yarn start 39 | ``` 40 | 41 | ## 访问WebUI 42 | 43 | 浏览器访问http://localhost:8656。 -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/api/consts/exceptions.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | API_TEST: [-9999, 'API异常错误'], 3 | API_REQUEST_PARAMS_INVALID: [-2000, '请求参数非法'], 4 | API_REQUEST_FAILED: [-2001, '请求失败'], 5 | API_TOKEN_EXPIRES: [-2002, 'Token已失效'], 6 | API_FILE_URL_INVALID: [-2003, '远程文件URL非法'], 7 | API_FILE_EXECEEDS_SIZE: [-2004, '远程文件超出大小'], 8 | API_CHAT_STREAM_PUSHING: [-2005, '已有对话流正在输出'], 9 | API_CONTENT_FILTERED: [-2006, '内容由于合规问题已被阻止生成'], 10 | API_IMAGE_GENERATION_FAILED: [-2007, '图像生成失败'] 11 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/api/controllers/question.ts: -------------------------------------------------------------------------------- 1 | import { PassThrough } from "stream"; 2 | import question from "@/lib/question.ts"; 3 | import logger from "@/lib/logger.ts"; 4 | 5 | async function generateQuestionAnswerStream(query: string) { 6 | const transStream = new PassThrough(); 7 | question.generateQuestionAnswer(query, msg => { 8 | // console.log(msg); 9 | transStream.write(`${JSON.stringify(msg)}\n\n`); 10 | }) 11 | .then(() => { 12 | transStream.end(); 13 | }) 14 | .catch(err => { 15 | logger.error(err); 16 | transStream.end(); 17 | }); 18 | return transStream; 19 | } 20 | 21 | export default { 22 | generateQuestionAnswerStream 23 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/api/routes/index.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import fs from 'fs-extra'; 3 | import _ from 'lodash'; 4 | 5 | import Response from '@/lib/response/Response.ts'; 6 | import question from "./question.ts"; 7 | 8 | export default [ 9 | { 10 | get: { 11 | "/": async () => { 12 | return new Response("Redirect to index page", { redirect: "/index.html" }); 13 | }, 14 | "/(.*)": async request => { 15 | let _path = request.params[0]; 16 | if (!_.isString(_path)) 17 | return new Response('not found', { 18 | type: 'html', 19 | statusCode: 404 20 | }); 21 | const ext = path.extname(_path).substring(1); 22 | const filePath = path.join("public/", _path); 23 | if (!await fs.pathExists(filePath) || !(await fs.stat(filePath)).isFile()) { 24 | return new Response('not found', { 25 | type: 'html', 26 | statusCode: 404 27 | }); 28 | } 29 | const { size: fileSize } = await fs.promises.stat(filePath); 30 | const readStream = fs.createReadStream(filePath); 31 | return new Response(readStream, { 32 | type: ext || "txt", 33 | headers: { 34 | "Cache-Control": "max-age=31536000" //对页面资源缓存设置一年有效期 35 | }, 36 | size: fileSize 37 | }); 38 | } 39 | } 40 | }, 41 | question 42 | ]; -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/api/routes/question.ts: -------------------------------------------------------------------------------- 1 | import _ from "lodash"; 2 | 3 | import Request from "@/lib/request/Request.ts"; 4 | import Response from "@/lib/response/Response.ts"; 5 | import question from "@/api/controllers/question.ts"; 6 | 7 | export default { 8 | prefix: "/question", 9 | 10 | post: { 11 | 12 | "/generate_answer": async (request: Request) => { 13 | request 14 | .validate('body.query'); 15 | const { query } = request.body; 16 | const stream = await question.generateQuestionAnswerStream(query); 17 | return new Response(stream, { 18 | type: "text/event-stream" 19 | }); 20 | } 21 | 22 | }, 23 | }; 24 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/index.ts: -------------------------------------------------------------------------------- 1 | import minimist from 'minimist'; 2 | 3 | import "@/lib/initialize.ts"; 4 | import server from "@/lib/server.ts"; 5 | import question from '@/lib/question.ts'; 6 | import routes from '@/api/routes/index.ts'; 7 | import logger from '@/lib/logger.ts'; 8 | 9 | // 获取命令行参数 10 | const cmdArgs = minimist(process.argv.slice(2)); 11 | const startupTime = performance.now(); 12 | 13 | (async () => { 14 | const param = cmdArgs.q; 15 | if(param) { 16 | if(param.trim() == 'all') 17 | await question.generateQuestionsAnswer(); 18 | else 19 | await question.generateQuestionAnswer(param); 20 | process.exit(0); 21 | } 22 | 23 | logger.header(); 24 | 25 | logger.info("<<<< law qa server >>>>"); 26 | logger.info("Process id:", process.pid); 27 | 28 | server.attachRoutes(routes); 29 | await server.listen(); 30 | 31 | })() 32 | .then(() => 33 | logger.success( 34 | `Service startup completed (${Math.floor(performance.now() - startupTime)}ms)` 35 | ) 36 | ) 37 | .catch(err => logger.error(err)); -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/config.ts: -------------------------------------------------------------------------------- 1 | 2 | import fs from 'fs-extra'; 3 | import yaml from 'yaml'; 4 | 5 | if(!fs.pathExistsSync('config.yml')) 6 | throw new Error('config.yml not found'); 7 | 8 | export default yaml.parse(fs.readFileSync('config.yml').toString()) || {}; -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/consts/exceptions.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | SYSTEM_ERROR: [-1000, '系统异常'], 3 | SYSTEM_REQUEST_VALIDATION_ERROR: [-1001, '请求参数校验错误'], 4 | SYSTEM_NOT_ROUTE_MATCHING: [-1002, '无匹配的路由'] 5 | } as Record -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/enums.ts: -------------------------------------------------------------------------------- 1 | export enum MessageType { 2 | Question = 0, 3 | Classify = 1, 4 | Consulting = 2, 5 | CallTool = 3, 6 | RequestAPI = 4, 7 | Answer = 5 8 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/exceptions/APIException.ts: -------------------------------------------------------------------------------- 1 | import Exception from './Exception.js'; 2 | 3 | export default class APIException extends Exception { 4 | 5 | /** 6 | * 构造异常 7 | * 8 | * @param {[number, string]} exception 异常 9 | */ 10 | constructor(exception: (string | number)[], errmsg?: string) { 11 | super(exception, errmsg); 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/exceptions/Exception.ts: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | 3 | import _ from 'lodash'; 4 | 5 | export default class Exception extends Error { 6 | 7 | /** 错误码 */ 8 | errcode: number; 9 | /** 错误消息 */ 10 | errmsg: string; 11 | /** 数据 */ 12 | data: any; 13 | /** HTTP状态码 */ 14 | httpStatusCode: number; 15 | 16 | /** 17 | * 构造异常 18 | * 19 | * @param exception 异常 20 | * @param _errmsg 异常消息 21 | */ 22 | constructor(exception: (string | number)[], _errmsg?: string) { 23 | assert(_.isArray(exception), 'Exception must be Array'); 24 | const [errcode, errmsg] = exception as [number, string]; 25 | assert(_.isFinite(errcode), 'Exception errcode invalid'); 26 | assert(_.isString(errmsg), 'Exception errmsg invalid'); 27 | super(_errmsg || errmsg); 28 | this.errcode = errcode; 29 | this.errmsg = _errmsg || errmsg; 30 | } 31 | 32 | compare(exception: (string | number)[]) { 33 | const [errcode] = exception as [number, string]; 34 | return this.errcode == errcode; 35 | } 36 | 37 | setHTTPStatusCode(value: number) { 38 | this.httpStatusCode = value; 39 | return this; 40 | } 41 | 42 | setData(value: any) { 43 | this.data = _.defaultTo(value, null); 44 | return this; 45 | } 46 | 47 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/initialize.ts: -------------------------------------------------------------------------------- 1 | import logger from './logger.js'; 2 | 3 | // 允许无限量的监听器 4 | process.setMaxListeners(Infinity); 5 | // 输出未捕获异常 6 | process.on("uncaughtException", (err, origin) => { 7 | logger.error(`An unhandled error occurred: ${origin}`, err); 8 | }); 9 | // 输出未处理的Promise.reject 10 | process.on("unhandledRejection", (_, promise) => { 11 | promise.catch(err => logger.error("An unhandled rejection occurred:", err)); 12 | }); 13 | // 输出系统警告信息 14 | process.on("warning", warning => logger.warn("System warning: ", warning)); 15 | // 进程退出监听 16 | process.on("exit", () => { 17 | logger.info("Service exit"); 18 | logger.footer(); 19 | }); 20 | // 进程被kill 21 | process.on("SIGTERM", () => { 22 | logger.warn("received kill signal"); 23 | process.exit(2); 24 | }); 25 | // Ctrl-C进程退出 26 | process.on("SIGINT", () => { 27 | process.exit(0); 28 | }); -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/interfaces/ICompanyInfo.ts: -------------------------------------------------------------------------------- 1 | export default interface ICompanyInfo { 2 | 公司名称?: string; 3 | 公司简称?: string; 4 | 英文名称?: string; 5 | 关联证券?: string; 6 | 公司代码?: string; 7 | 曾用简称?: string; 8 | 所属市场?: string; 9 | 所属行业?: string; 10 | 上市日期?: string; 11 | 法人代表?: string; 12 | 总经理?: string; 13 | 董秘?: string; 14 | 邮政编码?: string; 15 | 注册地址?: string; 16 | 办公地址?: string; 17 | 联系电话?: string; 18 | 传真?: string; 19 | 官方网址?: string; 20 | 电子邮箱?: string; 21 | 入选指数?: string; 22 | 主营业务?: string; 23 | 经营范围?: string; 24 | 机构简介?: string; 25 | 每股面值?: string; 26 | 首发价格?: string; 27 | 首发募资净额?: string; 28 | 首发主承销商?: string; 29 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/interfaces/ICompanyRegister.ts: -------------------------------------------------------------------------------- 1 | export default interface ICompanyRegister { 2 | 公司名称?: string; 3 | 登记状态?: string; 4 | 统一社会信用代码?: string; 5 | 注册资本?: string; 6 | 成立日期?: string; 7 | 省份?: string; 8 | 城市?: string; 9 | 区县?: string; 10 | 注册号?: string; 11 | 组织机构代码?: string; 12 | 参保人数?: string; 13 | 企业类型?: string; 14 | 曾用名?: string; 15 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/interfaces/ILegalDocument.ts: -------------------------------------------------------------------------------- 1 | export default interface ILegalDocument { 2 | 案号?: string; 3 | 标题?: string; 4 | 文书类型?: string; 5 | 原告?: string; 6 | 被告?: string; 7 | 原告律师?: string; 8 | 被告律师?: string; 9 | 案由?: string; 10 | 审理法条依据?: string; 11 | 涉案金额?: string; 12 | 判决结果?: string; 13 | 胜诉方?: string; 14 | 文件名?: string; 15 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/interfaces/IMessage.ts: -------------------------------------------------------------------------------- 1 | import type { MessageType } from "@/lib/enums.ts"; 2 | 3 | export default interface IMessage { 4 | type: MessageType; 5 | title?: string; 6 | data?: any; 7 | finish?: boolean; 8 | error?: boolean; 9 | tokens?: number; 10 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/interfaces/IQuestion.ts: -------------------------------------------------------------------------------- 1 | export default interface IQuestion { 2 | id: number; 3 | question: string; 4 | answer?: string; 5 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/interfaces/ISubCompanyInfo.ts: -------------------------------------------------------------------------------- 1 | export default interface ISubCompanyInfo { 2 | 公司名称?: string; 3 | 关联上市公司股票代码?: string; 4 | 关联上市公司股票简称?: string; 5 | 关联上市公司全称?: string; 6 | 上市公司关系?: string; 7 | 上市公司参股比例?: string; 8 | 上市公司投资金额?: string; 9 | 10 | // 仅为模型知识增强使用(不代表母公司==上市公司) 11 | 母公司参股比例?: string; 12 | 母公司投资金额?: string; 13 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/request/Request.ts: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | 3 | import APIException from '@/lib/exceptions/APIException.ts'; 4 | import EX from '@/api/consts/exceptions.ts'; 5 | import logger from '@/lib/logger.ts'; 6 | import util from '@/lib/util.ts'; 7 | 8 | export interface RequestOptions { 9 | time?: number; 10 | } 11 | 12 | export default class Request { 13 | 14 | /** 请求方法 */ 15 | method: string; 16 | /** 请求URL */ 17 | url: string; 18 | /** 请求路径 */ 19 | path: string; 20 | /** 请求载荷类型 */ 21 | type: string; 22 | /** 请求headers */ 23 | headers: any; 24 | /** 请求原始查询字符串 */ 25 | search: string; 26 | /** 请求查询参数 */ 27 | query: any; 28 | /** 请求URL参数 */ 29 | params: any; 30 | /** 请求载荷 */ 31 | body: any; 32 | /** 上传的文件 */ 33 | files: any[]; 34 | /** 客户端IP地址 */ 35 | remoteIP: string | null; 36 | /** 请求接受时间戳(毫秒) */ 37 | time: number; 38 | 39 | constructor(ctx, options: RequestOptions = {}) { 40 | const { time } = options; 41 | this.method = ctx.request.method; 42 | this.url = ctx.request.url; 43 | this.path = ctx.request.path; 44 | this.type = ctx.request.type; 45 | this.headers = ctx.request.headers || {}; 46 | this.search = ctx.request.search; 47 | this.query = ctx.query || {}; 48 | this.params = ctx.params || {}; 49 | this.body = ctx.request.body || {}; 50 | this.files = ctx.request.files || {}; 51 | this.remoteIP = this.headers["X-Real-IP"] || this.headers["x-real-ip"] || this.headers["X-Forwarded-For"] || this.headers["x-forwarded-for"] || ctx.ip || null; 52 | this.time = Number(_.defaultTo(time, util.timestamp())); 53 | } 54 | 55 | validate(key: string, fn?: Function, errorMessage?: string) { 56 | try { 57 | const value = _.get(this, key); 58 | if (fn) { 59 | if (fn(value) === false) 60 | throw `[Mismatch] -> ${fn}`; 61 | } 62 | else if (_.isUndefined(value)) 63 | throw '[Undefined]'; 64 | } 65 | catch (err) { 66 | logger.warn(`Params ${key} invalid:`, err); 67 | throw new APIException(EX.API_REQUEST_PARAMS_INVALID, errorMessage || `Params ${key} invalid`); 68 | } 69 | return this; 70 | } 71 | 72 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/response/Body.ts: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | 3 | export interface BodyOptions { 4 | code?: number; 5 | message?: string; 6 | data?: any; 7 | statusCode?: number; 8 | } 9 | 10 | export default class Body { 11 | 12 | /** 状态码 */ 13 | code: number; 14 | /** 状态消息 */ 15 | message: string; 16 | /** 载荷 */ 17 | data: any; 18 | /** HTTP状态码 */ 19 | statusCode: number; 20 | 21 | constructor(options: BodyOptions = {}) { 22 | const { code, message, data, statusCode } = options; 23 | this.code = Number(_.defaultTo(code, 0)); 24 | this.message = _.defaultTo(message, 'OK'); 25 | this.data = _.defaultTo(data, null); 26 | this.statusCode = Number(_.defaultTo(statusCode, 200)); 27 | } 28 | 29 | toObject() { 30 | return { 31 | code: this.code, 32 | message: this.message, 33 | data: this.data 34 | }; 35 | } 36 | 37 | static isInstance(value) { 38 | return value instanceof Body; 39 | } 40 | 41 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/response/FailureBody.ts: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | 3 | import Body from './Body.ts'; 4 | import Exception from '../exceptions/Exception.ts'; 5 | import APIException from '../exceptions/APIException.ts'; 6 | import EX from '../consts/exceptions.ts'; 7 | import HTTP_STATUS_CODES from '../http-status-codes.ts'; 8 | 9 | export default class FailureBody extends Body { 10 | 11 | constructor(error: APIException | Exception | Error, _data?: any) { 12 | let errcode, errmsg, data = _data, httpStatusCode = HTTP_STATUS_CODES.OK;; 13 | if(_.isString(error)) 14 | error = new Exception(EX.SYSTEM_ERROR, error); 15 | else if(error instanceof APIException || error instanceof Exception) 16 | ({ errcode, errmsg, data, httpStatusCode } = error); 17 | else if(_.isError(error)) 18 | ({ errcode, errmsg, data, httpStatusCode } = new Exception(EX.SYSTEM_ERROR, error.message)); 19 | super({ 20 | code: errcode || -1, 21 | message: errmsg || 'Internal error', 22 | data, 23 | statusCode: httpStatusCode 24 | }); 25 | } 26 | 27 | static isInstance(value) { 28 | return value instanceof FailureBody; 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/response/Response.ts: -------------------------------------------------------------------------------- 1 | import mime from 'mime'; 2 | import _ from 'lodash'; 3 | 4 | import Body from './Body.ts'; 5 | import util from '../util.ts'; 6 | 7 | export interface ResponseOptions { 8 | statusCode?: number; 9 | type?: string; 10 | headers?: Record; 11 | redirect?: string; 12 | body?: any; 13 | size?: number; 14 | time?: number; 15 | } 16 | 17 | export default class Response { 18 | 19 | /** 响应HTTP状态码 */ 20 | statusCode: number; 21 | /** 响应内容类型 */ 22 | type: string; 23 | /** 响应headers */ 24 | headers: Record; 25 | /** 重定向目标 */ 26 | redirect: string; 27 | /** 响应载荷 */ 28 | body: any; 29 | /** 响应载荷大小 */ 30 | size: number; 31 | /** 响应时间戳 */ 32 | time: number; 33 | 34 | constructor(body: any, options: ResponseOptions = {}) { 35 | const { statusCode, type, headers, redirect, size, time } = options; 36 | this.statusCode = Number(_.defaultTo(statusCode, Body.isInstance(body) ? body.statusCode : undefined)) 37 | this.type = type; 38 | this.headers = headers; 39 | this.redirect = redirect; 40 | this.size = size; 41 | this.time = Number(_.defaultTo(time, util.timestamp())); 42 | this.body = body; 43 | } 44 | 45 | injectTo(ctx) { 46 | this.redirect && ctx.redirect(this.redirect); 47 | this.statusCode && (ctx.status = this.statusCode); 48 | this.type && (ctx.type = mime.getType(this.type) || this.type); 49 | const headers = this.headers || {}; 50 | if(this.size && !headers["Content-Length"] && !headers["content-length"]) 51 | headers["Content-Length"] = this.size; 52 | ctx.set(headers); 53 | if(Body.isInstance(this.body)) 54 | ctx.body = this.body.toObject(); 55 | else 56 | ctx.body = this.body; 57 | } 58 | 59 | static isInstance(value) { 60 | return value instanceof Response; 61 | } 62 | 63 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/src/lib/response/SuccessfulBody.ts: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | 3 | import Body from './Body.ts'; 4 | 5 | export default class SuccessfulBody extends Body { 6 | 7 | constructor(data: any, message?: string) { 8 | super({ 9 | code: 0, 10 | message: _.defaultTo(message, "OK"), 11 | data 12 | }); 13 | } 14 | 15 | static isInstance(value) { 16 | return value instanceof SuccessfulBody; 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "module": "NodeNext", 5 | "moduleResolution": "NodeNext", 6 | "allowImportingTsExtensions": true, 7 | "allowSyntheticDefaultImports": true, 8 | "noEmit": true, 9 | "paths": { 10 | "@/*": ["src/*"] 11 | }, 12 | "outDir": "./dist" 13 | }, 14 | "include": ["src/**/*", "libs.d.ts"], 15 | "exclude": ["node_modules", "dist"] 16 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | 30 | *.tsbuildinfo 31 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar"] 3 | } 4 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/README.md: -------------------------------------------------------------------------------- 1 | # webui 2 | 3 | This template should help get you started developing with Vue 3 in Vite. 4 | 5 | ## Recommended IDE Setup 6 | 7 | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). 8 | 9 | ## Type Support for `.vue` Imports in TS 10 | 11 | TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. 12 | 13 | ## Customize configuration 14 | 15 | See [Vite Configuration Reference](https://vitejs.dev/config/). 16 | 17 | ## Project Setup 18 | 19 | ```sh 20 | npm install 21 | ``` 22 | 23 | ### Compile and Hot-Reload for Development 24 | 25 | ```sh 26 | npm run dev 27 | ``` 28 | 29 | ### Type-Check, Compile and Minify for Production 30 | 31 | ```sh 32 | npm run build 33 | ``` 34 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | GLM法律顾问 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webui", 3 | "version": "0.0.0", 4 | "private": true, 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "run-p type-check \"build-only {@}\" --", 9 | "preview": "vite preview", 10 | "build-only": "vite build", 11 | "type-check": "vue-tsc --build --force" 12 | }, 13 | "dependencies": { 14 | "@types/lodash": "^4.17.5", 15 | "vue": "^3.4.29" 16 | }, 17 | "devDependencies": { 18 | "@tsconfig/node20": "^20.1.4", 19 | "@types/node": "^20.14.5", 20 | "@vitejs/plugin-vue": "^5.0.5", 21 | "@vue/tsconfig": "^0.5.1", 22 | "npm-run-all2": "^6.2.0", 23 | "typescript": "~5.4.0", 24 | "vite": "^5.3.1", 25 | "vue-tsc": "^2.0.21" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/Vinlic-lawGLM/solution_a/webui/public/favicon.ico -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/src/assets/main.css: -------------------------------------------------------------------------------- 1 | @import './base.css'; 2 | 3 | body { 4 | background: #1e1e1e; 5 | } 6 | 7 | #app { 8 | width: 100%; 9 | height: 100%; 10 | margin: 0; 11 | color: #f5f5f5; 12 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/src/enums.ts: -------------------------------------------------------------------------------- 1 | export enum MessageType { 2 | Question = 0, 3 | Classify = 1, 4 | Consulting = 2, 5 | CallTool = 3, 6 | RequestAPI = 4, 7 | Answer = 5 8 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/src/interfaces/IMessage.ts: -------------------------------------------------------------------------------- 1 | import type { MessageType } from "@/enums"; 2 | 3 | export default interface IMessage { 4 | id?: string; 5 | type: MessageType; 6 | title?: string; 7 | data?: any; 8 | error?: boolean; 9 | finish?: boolean; 10 | tokens?: number; 11 | } -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/src/main.ts: -------------------------------------------------------------------------------- 1 | import './assets/main.css' 2 | 3 | import { createApp } from 'vue' 4 | import App from './App.vue' 5 | 6 | createApp(App).mount('#app') 7 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.dom.json", 3 | "include": ["env.d.ts", "src/**/*", "src/**/*.ts", "src/**/*.vue"], 4 | "exclude": ["src/**/__tests__/*"], 5 | "compilerOptions": { 6 | "composite": true, 7 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", 8 | 9 | "baseUrl": ".", 10 | "paths": { 11 | "@/*": ["./src/*"] 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { 5 | "path": "./tsconfig.node.json" 6 | }, 7 | { 8 | "path": "./tsconfig.app.json" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/node20/tsconfig.json", 3 | "include": [ 4 | "vite.config.*", 5 | "vitest.config.*", 6 | "cypress.config.*", 7 | "nightwatch.conf.*", 8 | "playwright.config.*" 9 | ], 10 | "compilerOptions": { 11 | "composite": true, 12 | "noEmit": true, 13 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 14 | 15 | "module": "ESNext", 16 | "moduleResolution": "Bundler", 17 | "types": ["node"] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_a/webui/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'node:url' 2 | 3 | import { defineConfig } from 'vite' 4 | import vue from '@vitejs/plugin-vue' 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | plugins: [ 9 | vue(), 10 | ], 11 | resolve: { 12 | alias: { 13 | '@': fileURLToPath(new URL('./src', import.meta.url)) 14 | } 15 | }, 16 | build: { 17 | outDir: '../public' 18 | } 19 | }) 20 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/README.md: -------------------------------------------------------------------------------- 1 | # GLM Law Solution B 2 | 3 | # 方案介绍 4 | 5 | api封装在utils.py 6 | 整个解决question的封装在 pipeline.py的pipeline_0711(...)函数 7 | 8 | # 方案思路 9 | 10 | 目前解决的思路是多轮,每一轮: 11 | planner降低搜索空间至单个api 12 | 使用code_act的方式生成代码解决这单个api的检索问题 13 | 中间有各种提取/总结/筛选的llm调用 14 | 15 | ## 快速开始 16 | 17 | ```shell 18 | pip install -r requirements.txt 19 | python pipeline.py "[问题输入]" 20 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_any_progress: -------------------------------------------------------------------------------- 1 | {output_hint} 2 | 你是一个QA问答助手, 你不需要关注答案正确率,仅从答案是否补充了新的相关信息入手,并且提取出来 3 | 请判断针对'问题A', '回答B'相对于'回答A'是否补充了新的相关信息, 并且提取出新的信息(尽量沿用问题Q的表述方式, 保留字段名称并利用'回答B'中的部分做必要的指代替换,来使得子问题的主语更清晰self-explain),按以下格式回复: 4 | ##回答B是否补充了新的信息: 是/否 5 | ##如果补充了, 提取出新的信息: ... 6 | 7 | 例子1: 8 | ##问题Q: ```(2021)豫0302民初674号的起诉日期是哪个年份,审理日期为,审理法院名称是?``` 9 | ##回答A: ```案号(2021)豫0302民初674号的起诉日期所在年份为2021年,审理日期为2021年11月11日,审理法院代字为沪001``` 10 | ##回答B: ```审理日期为2021年11月11日,审理法院代字为沪001,代字沪001的法院名称为上海浦东人民法院``` 11 | ##回答B是否补充了新的信息: 是 12 | ##如果补充了, 提取出新的信息: 代字沪001的法院名称为上海浦东人民法院 13 | 14 | 例子2: 15 | ##问题Q: ```我想要联系上海妙可蓝多食品科技股份有限公司的法人代表,请问他的名字是什么?他是否有限制高消费信息``` 16 | ##回答A: ```经查询,上海妙可蓝多食品科技股份有限公司的法人代表是柴琇。``` 17 | ##回答B: ```因为只能使用接口get_abc, 获取得到法人代表是柴琇但是查找不到他是否有限制高消费信息``` 18 | ##回答B是否补充了新的信息: 否 19 | ========== 20 | ##问题Q: ```{question}``` 21 | ##回答A: ```{answer}``` 22 | ##回答B: ```{answer_add}``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/0_get_company_info: -------------------------------------------------------------------------------- 1 | 上市公司信息接口, 2 | 输入字段: 根据'公司名称'、'公司简称'或'公司代码'查询 3 | 输出字段: 公司名称,公司简称,英文名称,关联证券,公司代码,曾用简称,所属市场,所属行业,成立日期,上市日期,法人代表,总经理,董秘,邮政编码,注册地址,办公地址,联系电话,传真,官方网址,电子邮箱,入选指数,主营业务,经营范围,机构简介,每股面值,首发价格,首发募资净额,首发主承销商 4 | 比如根据'公司名称'='上海晨光文具测试股份有限公司'或'公司简称'='晨光测试股份'或'公司代码'='6038991', 得到以下公司信息: 5 | {'公司名称': '上海晨光文具测试股份有限公司', '公司简称': '晨光测试股份', '英文名称': 'Shanghai MGC', '关联证券': '', '公司代码': '6038991', '曾用简称': '晨光文具', '所属市场': '上交所', '所属行业': '用品制造业', '成立日期': '2008-07-18', '上市日期': '2015-01-27', '法人代表': '陈湖文', '总经理': '陈湖雄', '董秘': '全强', '邮政编码': '201612', '注册地址': '上海市奉贤区金钱公路3469号3号楼', '办公地址': '上海市松江区', '联系电话': '021-57475621', '传真': '021-57475621', '官方网址': 'www.mg-pen.com', '电子邮箱': 'ir@mg-pen.com', '入选指数': 'ESG 300,国证A指,沪深300,巨潮中盘,上证380,责任指数', '主营业务': '晨光品牌书写工具制造和销售。', '经营范围': '许可项目:\凭营业执照依法自主开展经营活动)', '机构简介': '注册资本及实收资本均为5,000万元。', '每股面值': '1.0', '首发价格': '13.15', '首发募资净额': '73786.0', '首发主承销商': '兴业证券股份有限公司'} 6 | 注意: 办公地址/注册地址中不包含完整的省份/城市/区县信息, 或相应的代码, 如果要求输出这些信息, 直接输出完整的'注册地址'或'办公地址', 并给出提示"请另外使用地址查询接口或省市区代码接口" 7 | ========== 8 | ```python 9 | query_by_fullname = {"公司名称": "上海晨光文具测试股份有限公司"} 10 | company_info = get_company_info(query_by_fullname) 11 | 12 | query_by_briefname = {"公司简称": "晨光测试"} 13 | company_info = get_company_info(query_by_briefname) 14 | 15 | query_by_codename = {"公司代码": "6038991"} 16 | company_info = get_company_info(query_by_codename) 17 | ``` 18 | -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/10_get_address_code: -------------------------------------------------------------------------------- 1 | 省市区代码接口, 2 | 输入字段:根据'省份' + '城市' + '区县' 查询 3 | 输出字段: 省份,城市,城市区划代码,区县,区县区划代码 4 | 比如根据{'省份': '西藏自治区', '城市': '拉萨市', '区县': '城关区'}查询得到区县代码信息: 5 | {'省份': '西藏自治区', '城市': '拉萨市', '城市区划代码': '540100000000', '区县': '城关区', '区县区划代码': '540102000000'} 6 | ========== 7 | ```python 8 | query_by_prov_city_dist = {'省份': '西藏自治区', '城市': '拉萨市', '区县': '城关区'} 9 | address_code = get_address_code(query_by_prov_city_dist) 10 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/11_get_temp_info: -------------------------------------------------------------------------------- 1 | 省份城市天气接口, 2 | 输入字段:根据'省份' + '城市' + '日期' 查询 3 | 输出字段: 日期,省份,城市,天气,最高温度,最低温度,湿度 4 | 比如根据{"省份": "北京市", "城市": "北京市", "日期": "2020年1月1日"}查询得到地点时间下的天气情况: 5 | {'日期': '2020年1月1日', '省份': '北京市', '城市': '北京市', '天气': '晴', '最高温度': '11', '最低温度': '1', '湿度': '55'} 6 | ========== 7 | ```python 8 | query_by_prov_city_dt = {"省份": "北京市", "城市": "北京市", "日期": "2020年1月1日"} 9 | address_code = get_temp_info(query_by_prov_city_dt) 10 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/12_get_legal_document: -------------------------------------------------------------------------------- 1 | 法律案件信息接口, 2 | 根据案号查询法律案件裁判相关信息 3 | 输入字段:根据'案号'查询 4 | 输出字段: 关联公司,标题,案号,文书类型,原告,被告,原告律师事务所,被告律师事务所,案由,涉案金额,判决结果,审理日期,文件名,起诉日期,法院代字 5 | 比如根据'案号'='(2019)沪0115民初61975号'得到以下案件信息: 6 | '{"关联公司": "上海爱斯达克汽车空调系统有限公司", "标题": "上海爱斯达克汽一审民事判决书", "案号": "(2019)沪0115民初61975号", "文书类型": "民事判决书", "原告": "上海爱斯达克汽车空调系统有限公司", "被告": "上海逸测检测技术服务有限公司", "原告律师事务所": "", "被告律师事务所": "上海世韬律师事务所", "案由": "服务合同纠纷", "涉案金额": "1254802.58", "判决结果": "上海市第一中级人民法院 。 ", "文件名": "(2019)沪0115民初61975号.txt", "审理日期": "2019-12-09 00:00:00", "起诉日期": "2019年", "法院代字": "沪0115"}' 7 | 补充知识: "被告"或"原告"可以包含多个公司或个人, 要使用包含关系判断某公司是否为其中之一(a in b) 8 | 适用于查询问题中包含具体案号样式, 问该案号具体信息的问题,比如"(2020)鲁123民1号案件审理时间什么时候?" 9 | 如果需要进一步了解审理法院信息, 比如法院名称/地址/区县信息, 需要输出'法院代字'让用户进一步查询, 而不是使用你的知识直接回答 10 | ========== 11 | ```python 12 | query_by_case_num = {'案号':'(2019)沪0115民初61975号'} 13 | legal_doc = get_legal_document(query_by_case_num) 14 | court_code = legal_doc['法院代字'] 15 | print(f"审理的法院代字:{court_code}") 16 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/13_get_legal_document_list: -------------------------------------------------------------------------------- 1 | 公司所有涉及法律案件接口, 2 | 根据关联公司查询所有裁判文书相关信息list 3 | 输入字段:根据'关联公司'查询 4 | 输出字段: 输出字段: 关联公司,标题,案号,文书类型,原告,被告,原告律师事务所,被告律师事务所,案由,涉案金额,判决结果,审理日期,文件名,起诉日期,法院代字 5 | 比如根据'关联公司'='上海系统有限公司'得到该公司涉及的以下案件信息: 6 | [ 7 | {'关联公司': '上海系统有限公司', '标题': '上海爱斯达克汽一审民事判决书', '案号': '(2019)沪0115民初61975号', '文书类型': '民事判决书', '原告': '上海系统有限公司', '被告': '上海逸测检测技术服务有限公司', '原告律师事务所': '', '被告律师事务所': '上海世韬律师事务所', '案由': '服务合同纠纷', '涉案金额': '1254802.58', '判决结果': '上海市第一中级人民法院 。 ', '文件名': '(2019)沪0115民初61975号.txt', '审理日期': '2019-12-09 00:00:00', '起诉日期': '2019年', '法院代字': '沪0115'} 8 | {'关联公司': '上海系统有限公司', '标题': '吴某某与上海系统有限公司一审民事判决书', '案号': '(2019)沪0115民初91149号', '文书类型': '民事判决书', '原告': '吴某某', '被告': '上海系统有限公司', '原告律师事务所': '上海国策律师事务所', '被告律师事务所': '上海市罗顿律师事务所', '案由': '追索劳动报酬纠纷', '涉案金额': '0', '判决结果': '一、被告一中级人民法院 。 ', '文件名': '(2019)沪0115民初91149号.txt', '审理日期': '2020-01-20 00:00:00', '起诉日期': '2019年', '法院代字': '沪0115'} 9 | ] 10 | 补充知识: "被告"或"原告"可以包含多个公司或个人, 要使用包含关系判断某公司是否为其中之一(a in b) 11 | 适用于已经知道某家公司名称(全称, 而不是简称), 使用该公司名称作为'关联公司', 查询该公司的所有案件信息,比如"XXX公司一共涉案多少起" 12 | 如果需要进一步了解审理法院信息, 比如法院名称/地址/区县信息, 需要输出'法院代字'让用户进一步查询, 而不是使用你的知识直接回答 13 | ========== 14 | ```python 15 | query_by_company_name = {'关联公司':'上海系统有限公司'} 16 | legal_doc_list = get_legal_document_list(query_by_company_name) 17 | as_attacks_list = [] 18 | for doc in legal_doc_list: 19 | if '上海爱斯达克汽车空调系统有限公司' in doc['原告']: 20 | as_attacks_list.append(doc) 21 | print(f'该公司作为原告共计{len(as_attacks_list)}次') 22 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/14_get_legal_abstract: -------------------------------------------------------------------------------- 1 | 法律案件本文摘要接口, 2 | 根据案号查询案件文本摘要 3 | 输入字段:根据'案号'查询 4 | 输出字段: 文件名,案号,文本摘要 5 | 比如根据'案号'='(2019)沪0115民初61975号'得到以下案件信息: 6 | {'文件名': '(2019)沪0115民初61975号.txt', '案号': '(2019)沪0115民初61975号', '文本摘要': '原告上海爱斯达克汽车空调系统有限公司与被告上海逸测检测技术服务有限公司因服务合同纠纷一案,原告请求被告支付检测费1,254,802.58元、延迟履行违约金71,399.68元及诉讼费用。被告辩称,系争合同已终止,欠款金额应为499,908元,且不认可违约金。\n法院认为,原告与腾双公司签订的测试合同适用于原被告,原告提供的测试服务应得到被告支付。依照《中华人民共和国合同法》第六十条、第一百零九条,《中华人民共和国民事诉讼法》第六十四条第一款,《最高人民法院关于适用〈中华人民共和国民事诉讼法〉的解释》第九十条之规定判决被告支付原告检测费1,254,802.58元及违约金71,399.68元。'} 7 | ========== 8 | ```python 9 | query_by_case_num = {'案号':'(2019)沪0115民初61975号'} 10 | legal_abstract = get_legal_abstract(query_by_case_num) 11 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/15_get_xzgxf_info: -------------------------------------------------------------------------------- 1 | 法律案件限制高消费接口, 2 | 根据案号查询限制高消费相关信息 3 | 输入字段:根据'案号'查询 4 | 输出字段: 限制高消费企业名称,案号,法定代表人,申请人,涉案金额,执行法院,立案日期,限高发布日期 5 | 比如根据'案号'='(2018)鲁0403执1281号'得到以下案件信息: 6 | {'限制高消费企业名称': '枣庄西能新远大天然气利用有限公司', '案号': '(2018)鲁0403执1281号', '法定代表人': '高士其', '申请人': '枣庄市人力资源和社会保障局', '涉案金额': '12000', '执行法院': '山东省枣庄市薛城区人民法院', '立案日期': '2018-11-16 00:00:00', '限高发布日期': '2019-02-13 00:00:00'} 7 | 适用于查询问题中包含具体案号样式, 并且要求查询'高消', '限制消费', '限制高消费'等字样,比如“(2019)沪123民123号限制了哪家企业高消?” 8 | ========== 9 | ```python 10 | query_by_case_num = {'案号':'(2019)沪0115民初61975号'} 11 | xzgxf_info = get_xzgxf_info(query_by_case_num) 12 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/16_get_xzgxf_info_list: -------------------------------------------------------------------------------- 1 | 公司关联限制高消费接口, 2 | 根据企业名称查询所有限制高消费相关信息list 3 | 输入字段:根据'限制高消费企业名称'查询 4 | 输出字段: 限制高消费企业名称,案号,法定代表人,申请人,涉案金额,执行法院,立案日期,限高发布日期 5 | 比如根据'限制高消费企业名称'='枣庄西能新远大天然气利用有限公司'得到以下案件信息: 6 | [{'限制高消费企业名称': '枣庄西能新远大天然气利用有限公司', '案号': '(2018)鲁0403执1281号', '法定代表人': '高士其', '申请人': '枣庄市人力资源和社会保障局', '涉案金额': '12000', '执行法院': '山东省枣庄市薛城区人民法院', '立案日期': '2018-11-16 00:00:00', '限高发布日期': '2019-02-13 00:00:00'}] 7 | 适用于查询问题中包含要求明确问'高消', '限制消费', '限制高消费'等信息的,比如“XXX公司是否有限制高消费?” 8 | ========== 9 | ```python 10 | query_by_company_name = {'限制高消费企业名称':'枣庄西能新远大天然气利用有限公司'} 11 | xzgxf_info_list = get_xzgxf_info_list(query_by_company_name) 12 | print(f"相关企业限制高消费案件数:{len(xzgxf_info_list)}") 13 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/17_get_api_call_cnt: -------------------------------------------------------------------------------- 1 | API调用统计接口, 2 | 输入字段:无, 但需要完成其他所有查询后, 最后调用 3 | 输出字段:统计目前API调用了几次/几种, 串行调用了几次/几种 4 | 比如: 总共api调用4次, 调用了3种api, 串行调用1次,调用了2种 5 | 适用于回答问题比如:本题API最优串行调用次数为?API调用多少种等 6 | ========== 7 | no_code_example -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/1_get_company_register: -------------------------------------------------------------------------------- 1 | 公司工商注册信息接口, 2 | 输入字段: 根据'公司名称' 查询 3 | 输出字段: 公司名称,登记状态,统一社会信用代码,法定代表人,注册资本,成立日期,企业地址,联系电话,联系邮箱,注册号,组织机构代码,参保人数,行业一级,行业二级,行业三级,曾用名,企业简介,经营范围 4 | 比如根据'公司名称'='上海晨光文具测试股份有限公司',查询得到以下工商注册信息: 5 | {'公司名称': '上海晨光文具测试股份有限公司', '登记状态': '存续', '统一社会信用代码': '9131001XXXXXXX', '法定代表人': '陈湖文', '注册资本': '92659.657', '成立日期': '2008-07-18', '企业地址': '上海市奉贤区金钱公路3469号3号楼', '联系电话': '021-57474488', '联系邮箱': 'ir@mg-pen.com', '注册号': '310000000094440', '组织机构代码': '67783326-6', '参保人数': '27672', '行业一级': '制造业', '行业二级': '教、工美、体', '行业三级': '文教办公用品制造', '曾用名': '-', '企业简介': ' 愿景。', '经营范围': '许可项目:食品销售;'} 6 | 补充知识: 注册资本单位为"万元", 输出注意保留3位小数 7 | 注意: 企业地址中不包含完整的省份/城市/区县信息, 或相应的代码, 如果要求输出这些信息, 直接输出完整的'企业地址', 并给出提示"请另外使用地址查询接口或省市区代码接口" 8 | ========== 9 | ```python 10 | query_by_fullname = {"公司名称": "上海晨光文具测试股份有限公司"} 11 | company_register = get_company_register(query_by_fullname) 12 | regi_money = company_register["注册资本"] 13 | print(f"注册资本为:{regi_money}万元") 14 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/2_get_company_register_name: -------------------------------------------------------------------------------- 1 | 统一社会信用代码接口, 2 | 输入字段: 根据'统一社会信用代码' 查询 3 | 输出字段: 公司名称 4 | 比如根据'统一社会信用代码'='913305007490121183',查询得到以下公司信息: 5 | {'公司名称': '天能电池集团股份有限公司'} 6 | ========== 7 | ```python 8 | query_by_social_code = {"统一社会信用代码": "91310000677833266F"} 9 | company_name = get_company_register_name(query_by_social_code) 10 | if company_name: 11 | #查询到公司,例如company_name = {'公司名称':'..'} 12 | pass #do something 13 | else: 14 | #没有查询到公司 company_name = {} 15 | pass 16 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/3_get_sub_company_info: -------------------------------------------------------------------------------- 1 | 子公司被投资信息接口, 2 | 根据被投资的子公司名称获得投资该公司的上市公司、投资比例、投资金额等信息 3 | 输入字段: 根据子公司的'公司名称'查询 4 | 输出字段: 关联上市公司全称,上市公司关系,上市公司参股比例,上市公司投资金额,公司名称 5 | 比如根据'公司名称'='山西振东医药有限公司'查询到它作为子公司被投资的信息: 6 | {'关联上市公司全称': '山西振东制药股份有限公司', '上市公司关系': '子公司', '上市公司参股比例': '100.0', '上市公司投资金额': '0', '公司名称': '山西振东医药有限公司'} 7 | ========== 8 | ```python 9 | query_by_subname = {"公司名称": "上海爱斯达克汽车空调系统有限公司"} 10 | company_as_sub_info = get_sub_company_info(query_by_fullname) 11 | if company_as_sub_info: 12 | #查询结果为非空 13 | mother_company_name = company_as_sub_info["关联上市公司全称"] 14 | print(f'母公司全称: {mother_company_name}') 15 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/4_get_sub_company_info_list: -------------------------------------------------------------------------------- 1 | 上市公司(母公司)投资信息接口, 2 | 根据上市公司(母公司)的名称查询该公司投资的所有子公司信息list 3 | 输入字段: 根据上市母公司的公司名称作为'关联上市公司全称'查询 4 | 输出字段: 关联上市公司全称(母公司名),上市公司关系,上市公司参股比例,上市公司投资金额,公司名称(被投资子公司名称) 5 | 比如根据'关联上市公司全称'='上海股份有限公司',查询得到它投资的子公司有: 6 | [{'关联上市公司全称': '上海股份有限公司', 7 | '上市公司关系': '子公司', 8 | '上市公司参股比例': '100.0', 9 | '上市公司投资金额': '8800.00万', 10 | '公司名称': '光伏电力有限公司'}, 11 | {'关联上市公司全称': '上海股份有限公司', 12 | '上市公司关系': '子公司', 13 | '上市公司参股比例': '100.0', 14 | '上市公司投资金额': '1.19亿', 15 | '公司名称': '神舟光伏电力有限公司'}] 16 | 查询某家公司的子公司,或者查询某家公司投资了哪些工资,可以使用该接口查询,需要母公司的"公司名称"作为"关联上市公司全称"进行查询 17 | 适用于已经知道某家公司名称(全称, 而不是简称), 时进行查询 18 | ========== 19 | ```python 20 | query_by_mothername = {"关联上市公司全称": "上海股份有限公司"} 21 | sub_companies_ofit = get_sub_company_info_list(query_by_mothername) 22 | count_of_sub_companies = len(sub_companies_ofit) 23 | print(f"子公司数量: {count_of_sub_companies}") 24 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/5_get_court_info: -------------------------------------------------------------------------------- 1 | 法院基础信息接口, 2 | 输入字段:根据'法院名称'查询 3 | 输出字段: 法院名称, 法院负责人, 成立日期,法院地址,法院联系电话,法院官网 4 | 比如根据'法院名称'='上海市浦东新区人民法院'查询得到法院基础信息: 5 | {'法院名称': '上海市浦东新区人民法院', '法院负责人': '朱丹', '成立日期': '2019-05-16', '法院地址': '上海市浦东新区丁香路611号', '法院联系电话': '-', '法院官网': '-'} 6 | 注意: 法院地址中不包含完整的省份/城市/区县信息, 或相应的代码, 如果要求输出这些信息, 直接输出完整的'法院地址', 并给出提示"请另外使用地址查询接口或省市区代码接口" 7 | ========== 8 | ```python 9 | query_by_courtname = {"法院名称": "上海市浦东新区人民法院"} 10 | court_info = get_court_info(query_by_courtname) 11 | if court_info: 12 | #查询结果为非空 13 | ppl_in_charge = court_info["法院负责人"] 14 | print(f'法院负责人: {ppl_in_charge}') 15 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/6_get_court_code: -------------------------------------------------------------------------------- 1 | 法院级别代字信息接口, 2 | 输入字段:根据'法院名称'或'法院代字'查询 3 | 输出字段: 法院名称, 行政级别, 法院级别,法院代字,区划代码,级别 4 | 比如根据'法院名称'='上海市浦东新区人民法院'或'法院代字'='沪0115'查询得到法院级别代字信息: 5 | {'法院名称': '上海市浦东新区人民法院', '行政级别': '市级', '法院级别': '基层法院', '法院代字': '沪0115', '区划代码': '310115', '级别': '1'} 6 | 适用于比如知道法院代字(沪011)情况下,要查询法院名称、级别、区划代码等信息,如果要查询法院地址或者法院所在区县,可能先要通过本接口获取'法院名称'作为中间变量 7 | ========== 8 | ```python 9 | query_by_courtname = {"法院名称": "上海市浦东新区人民法院"} 10 | court_code_info = get_court_code(query_by_courtname) 11 | 12 | query_by_courtcode = {"法院代字": "沪0115"} 13 | court_code_info = get_court_code(query_by_courtcode) 14 | 15 | if court_code_info: 16 | #查询到的法院级别代字信息非空 17 | #do sth 18 | pass 19 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/7_get_lawfirm_info: -------------------------------------------------------------------------------- 1 | 律师事务所基础信息接口, 2 | 输入字段:根据'律师事务所名称'查询 3 | 输出字段: 律师事务所名称,律师事务所唯一编码,律师事务所负责人,事务所注册资本,事务所成立日期,律师事务所地址,通讯电话,通讯邮箱,律所登记机关 4 | 比如根据'律师事务所名称'='爱德律师事务所'查询得律师事务所基础信息: 5 | {'律师事务所名称': '爱德律师事务所', '律师事务所唯一编码': '31150000E370803331', '律师事务所负责人': '巴布', '事务所注册资本': '10万元人民币', '事务所成立日期': '1995-03-14', '律师事务所地址': '呼和浩特市赛罕区大学西街110号丰业大厦11楼', '通讯电话': '0471-3396155', '通讯邮箱': 'kehufuwubu@ardlaw.cn', '律所登记机关': '内蒙古自治区呼和浩特市司法局'} 6 | 注意: 律师事务所地址中不包含完整的省份/城市/区县信息, 或相应的代码, 如果要求输出这些信息, 直接输出完整的'律师事务所地址', 并给出提示"请另外使用地址查询接口或省市区代码接口" 7 | ========== 8 | ```python 9 | query_by_firmname = {"律师事务所名称": "爱德律师事务所"} 10 | lawfirm_info = get_lawfirm_info(query_by_firmname) 11 | if lawfirm_info: 12 | #律师事务所基础信息非空 13 | lawfirm_in_charge = lawfirm_info["律师事务所负责人"] 14 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/8_get_lawfirm_log: -------------------------------------------------------------------------------- 1 | 律师事务业务统计接口, 2 | 输入字段:根据'律师事务所名称'查询 3 | 输出字段: 律师事务所名称,业务量排名,服务已上市公司,报告期间所服务上市公司违规事件,报告期所服务上市公司接受立案调查 4 | 比如根据'律师事务所名称'='北京市金杜律师事务所'查询得律师事务所业务统计: 5 | {'律师事务所名称': '北京市金杜律师事务所', '业务量排名': '2', '服务已上市公司': '68', '报告期间所服务上市公司违规事件': '23', '报告期所服务上市公司接受立案调查': '3'} 6 | ========== 7 | ```python 8 | query_by_firmname = {"律师事务所名称": "爱德律师事务所"} 9 | lawfirm_log = get_lawfirm_log(query_by_firmname) 10 | if lawfirm_log: 11 | #律师事务业务统计非空 12 | lawfirm_log = lawfirm_log["业务量排名"] 13 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_apis/9_get_address_info: -------------------------------------------------------------------------------- 1 | 地址查询接口, 2 | 输入字段:根据'地址'查询 3 | 输出字段: 地址, 省份, 城市,区县 4 | 比如根据'地址'='西藏自治区那曲地区安多县帕那镇中路13号'查询得到地址的省市区县信息: 5 | {'地址': '西藏自治区那曲地区安多县帕那镇中路13号', '省份': '西藏自治区', '城市': '那曲市', '区县': '安多县'} 6 | 提示: '地址'可以来自于'法院地址' 或 公司的'注册地址' '办公地址'或者是'律师事务所地址' 7 | 根据具体'地址'查询省份,城市,区县务必使用该接口, 避免直接通过地址字符串推断 8 | ========== 9 | ```python 10 | query_by_addr = {"地址": "西藏自治区那曲地区安多县帕那镇中路13号"} 11 | address_info = get_address_info(query_by_addr) 12 | ``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_code_act: -------------------------------------------------------------------------------- 1 | {api_desc} 2 | 查询代码示例: 3 | {code_example} 4 | 5 | 你可以和一个交互式代码环境互动(IPython, Jupyter Notebook),将你输出的代码送进去执行,并且获得对应的输出,输出的python代码需要包含在代码块中,比如:```python print("results")``` 6 | 从整个任务目标中,每次尝试生成几行代码送入交互环境运行试试输出,再继续生成代码,避免一次生成/执行太多代码 7 | 注意: 8 | - 只能使用{func}这个函数获取信息, 不额外定义和使用其他函数. 函数已经实现并且在环境中存在, 不要再重新定义 9 | - 避免定义'假设数据'或'示例数据',所有信息必须通过查询以上函数 10 | - 只生成一段代码, 即只输出一个```python```代码块 11 | - 如果该表无法查询目标内容, 或查询不到, 请抛出异常raise 12 | ========== 13 | 分步问题: 使用输入{input_help}, {sub_query}, 使用输出字段{output_help} 14 | 输出代码中也是用注释区分step,比如#step1: `解释` 15 | 每个step结束, 使用print输出该step通过什么字段查询到什么内容,方便接下来参考数据格式,确定代码怎么写 -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/prompt_is_done: -------------------------------------------------------------------------------- 1 | 你是一个QA问答完成检查助手, 你不需要关注答案正确率,仅从答题完整性入手 2 | 请判断'回答A'是否完整的回答'问题Q'中所有子问题, 并给出未回答的子问题, 注意: 3 | - 尽量沿用问题Q的表述方式, 并利用'回答A'中的部分做必要的指代替换,来使得子问题更清晰, 足够self-explain 4 | - 补充知识和偏好: 问题涉及法院,要给出完整的法院名称,才算完整, 而不是法院代字 5 | - 按以下格式回复: 6 | ##回答A是否完整: 是/否 7 | ##如果不完整, 给出未回答的子问题: ... 8 | 9 | 例子1: 10 | ##问题Q: ```我想要联系上海妙可蓝多食品科技股份有限公司的法人代表,请问他的名字是什么?``` 11 | ##回答A: ```经查询,上海妙可蓝多食品科技股份有限公司的法人代表是柴琇。``` 12 | ##回答A是否完整: 是 13 | 14 | 例子2: 15 | ##问题Q: ```(2021)豫0302民初674号的起诉日期是哪个年份,审理日期为,审理法院名称是?``` 16 | ##回答A: ```案号(2021)豫0302民初674号的起诉日期所在年份为2021年,审理日期为2021年11月11日,审理法院代字为沪001``` 17 | ##回答A是否完整: 否 18 | ##如果不完整, 给出未回答的子问题: 审理法院代字为沪001,该法院名称是? 19 | 20 | 例子3: 21 | ##问题Q: ```代码6038991的公司2022年是否有涉及案件``` 22 | ##回答A: ```代码6038991的公司名称为上海晨光文具测试股份有限公司``` 23 | ##回答A是否完整: 否 24 | ##如果不完整, 给出未回答的子问题: 代码6038991的公司名称为上海晨光文具测试股份有限公司, 这家公司2022年是否有涉及案件 25 | ========== 26 | ##问题Q: ```{question}``` 27 | ##回答A: ```{answer}``` -------------------------------------------------------------------------------- /Vinlic-lawGLM/solution_b/requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | zhipuai -------------------------------------------------------------------------------- /assets/contribute_zh.md: -------------------------------------------------------------------------------- 1 | # 贡献指南 2 | 3 | 本项目可能还存在很多不完善的内容。 我们期待您在以下方面与我们共建仓库, 4 | 如果您完成了上述工作并愿意PR和分享到社区,在通过审核后,我们将在项目首页感谢您的贡献。 5 | 6 | ## DEMO制作 7 | 8 | 1. 建议更多使用 `Jupyter NoteBook` 的代码。这样,用户能更简单的运行 9 | 2. 如果您是一个完整项目,请你在本文件夹中新建一个文件夹,并在文件夹中放入您的代码,请附带中文README和依赖要求( 10 | 具体到库版本)。 11 | 12 | ``` 13 | LawGLM 14 | └── demo_1 15 | ├── README.md 16 | ├── requirements.txt 17 | └── your_code.py 18 | 19 | ``` 20 | 21 | + 我们希望您使用 Apache 2.0 开源协议,如果是,则不需要在额外书写开源协议。 22 | + 请不要在项目中上传`2MB`以上的单个文件,这可能导致项目臃肿,请使用外链保存。 23 | + 请注意项目中`.gitignore`的部分,这可能导致您的部分代码没有正常上传,请联系我们修改。 24 | 25 | ## 代码规范 26 | 27 | 良好的代码风格是一种艺术,我们已经为项目准备好了`pyproject.toml`配置文件,用于规范代码风格。您可以按照以下规范梳理代码: 28 | 29 | 1. 安装`ruff`工具 30 | 31 | ```shell 32 | pip install ruff 33 | ``` 34 | 35 | 接着,运行`ruff`工具 36 | 37 | ```shell 38 | ruff check tools sat inference 39 | ``` 40 | 41 | 检查代码风格,如果有问题,您可以通过`ruff format .`命令自动修复。 42 | 43 | ```shell 44 | ruff format tools sat inference 45 | ``` 46 | 47 | 如果您的代码符合规范,应该不会出现任何的错误。 48 | 49 | ## 命名规范 50 | 51 | - 请使用英文命名,不要使用拼音或者其他语言命名。所有的注释均使用英文。 52 | - 请严格遵循 PEP8 规范,使用下划线分割单词。请勿使用 a,b,c 这样的命名。 53 | 54 | ## 提交代码 55 | 56 | - 创建一个 PR, 并在PR中增加自己的项目。 57 | - 检查是否已经清理掉无用文件,并 assigee 给项目维护者 @zRzRzRzRzRzRzR / @jiawei243 的其中一位进行审核。 58 | - 根据审核要求进行修改。完成后会由审核者合并PR。 59 | 60 | 最后,再次感谢你们的贡献! -------------------------------------------------------------------------------- /assets/qa.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/assets/qa.pdf -------------------------------------------------------------------------------- /assets/【baseline分享】伍柒.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/assets/【baseline分享】伍柒.pdf -------------------------------------------------------------------------------- /assets/【baseline分享】张江高科.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/assets/【baseline分享】张江高科.pdf -------------------------------------------------------------------------------- /assets/【baseline分享】法外张三.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/assets/【baseline分享】法外张三.pdf -------------------------------------------------------------------------------- /public24_LawGLM/Dockerfile: -------------------------------------------------------------------------------- 1 | # Base Images 2 | FROM registry.cn-hangzhou.aliyuncs.com/glm_law/law:v0 3 | # 如有安装其他软件的需求 4 | RUN apt-get update && apt-get install -y \ 5 | curl \ 6 | zip \ 7 | unzip 8 | ##安装python依赖包 9 | COPY requirements.txt /app/requirements.txt 10 | RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 11 | ## 把当前文件夹里的文件构建到镜像的根目录下,并设置为默认工作目录 12 | ADD . /app 13 | WORKDIR /app 14 | ## 镜像启动后统一执行 sh run.sh 15 | CMD ["sh", "run.sh"] -------------------------------------------------------------------------------- /public24_LawGLM/apis/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public24_LawGLM/data/results/read_answer.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | data_file = '/public/zzy/competition/B_Board/data/results/public24点燃心海_result_0710_new.json' 4 | with open(data_file, 'r') as f: 5 | data = f.readlines() 6 | 7 | for item in data: 8 | print(json.loads(f)) -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/10号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 10 号API接口函数 根据律师事务所查询律师事务所统计数据 2 | ``` 3 | def get_lawfirm_log(query_conds: dict,need_fields: List[str] = []) -> dict: 4 | """ 5 | 根据律师事务所查询律师事务所统计数据。 6 | 7 | 参数: 8 | query_conds -- 查询条件字典,例如{"律师事务所名称": "北京市金杜律师事务所"} 9 | need_fields -- 需要返回的字段列表,例如["律师事务所名称","业务量排名","服务已上市公司","报告期间所服务上市公司违规事件","报告期所服务上市公司接受立案调查"],need_fields传入空列表,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | {"律师事务所名称": "北京市金杜律师事务所"} 14 | 输出: 15 | {'律师事务所名称': '北京市金杜律师事务所', 16 | '业务量排名': '2', 17 | '服务已上市公司': '68', 18 | '报告期间所服务上市公司违规事件': '23', 19 | '报告期所服务上市公司接受立案调查': '3'} 20 | """ 21 | url = f"https://{DOMAIN}/law_api/s1_b/get_lawfirm_log" 22 | 23 | data = { 24 | "query_conds": query_conds, 25 | "need_fields": need_fields 26 | } 27 | 28 | rsp = requests.post(url, json=data, headers=headers) 29 | return rsp.json() 30 | ``` 31 | 32 | ### 例子: 33 | ### 律师事务所名称 34 | ##### 输入 35 | ``` 36 | {"律师事务所名称": "上海东方华银律师事务所", "need_fields":["服务已上市公司"]} 37 | ``` 38 | #### 输出 39 | ``` 40 | {'服务已上市公司': '5'} 41 | 42 | ``` 43 | ### 律师事务所名称 44 | #### 输入 45 | ``` 46 | {"律师事务所名称": "北京市金杜律师事务所","need_fields":[] } 47 | ``` 48 | #### 输出 49 | ``` 50 | {'律师事务所名称': '北京市金杜律师事务所', 51 | '业务量排名': '2', 52 | '服务已上市公司': '68', 53 | '报告期间所服务上市公司违规事件': '23', 54 | '报告期所服务上市公司接受立案调查': '3'} 55 | ``` 56 | 57 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/11号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 11 号API接口函数 根据地址查该地址对应的省份城市区县 2 | ``` 3 | def get_address_info(query_conds: dict,need_fields: List[str] = []) -> dict: 4 | """ 5 | 根据地址查该地址对应的省份城市区县。 6 | 7 | 参数: 8 | query_conds -- 查询条件字典,例如{"地址": "西藏自治区那曲地区安多县帕那镇中路13号"} 9 | need_fields -- 需要返回的字段列表,例如["地址","省份","城市","区县"],need_fields传入空列表,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | {"地址": "西藏自治区那曲地区安多县帕那镇中路13号"} 14 | 输出: 15 | {'地址': '西藏自治区那曲地区安多县帕那镇中路13号', 16 | '省份': '西藏自治区', 17 | '城市': '那曲市', 18 | '区县': '安多县'} 19 | 20 | """ 21 | url = f"https://{DOMAIN}/law_api/s1_b/get_address_info" 22 | 23 | data = { 24 | "query_conds": query_conds, 25 | "need_fields": need_fields 26 | } 27 | 28 | rsp = requests.post(url, json=data, headers=headers) 29 | return rsp.json() 30 | ``` 31 | 32 | ### 例子: 33 | ### 地址 34 | #### 输入 35 | ``` 36 | {"地址": "西藏自治区那曲地区安多县帕那镇中路13号", "need_fields":["地址","省份","城市","区县"]} 37 | ``` 38 | #### 输出 39 | ``` 40 | {'地址': '西藏自治区那曲地区安多县帕那镇中路13号', '省份': '西藏自治区', '城市': '那曲市', '区县': '安多县'} 41 | ``` 42 | ### 地址 43 | #### 输入 44 | ``` 45 | {"地址": "合肥高新区科学大道91号", "need_fields":[]} 46 | ``` 47 | #### 输出 48 | ``` 49 | {'地址': '合肥高新区科学大道91号', '省份': '安徽省', '城市': '合肥市', '区县': '蜀山区'} 50 | ``` 51 | 52 | ### 地址 53 | #### 输入 54 | ``` 55 | {"地址": "北京市海淀区清华东路9号创达大厦5层506室", "need_fields":["地址","省份","城市","区县"]} 56 | ``` 57 | #### 输出 58 | ``` 59 | {'地址': '北京市海淀区清华东路9号创达大厦5层506室', '省份': '北京市', '城市': '北京市', '区县': '海淀区'} 60 | ``` 61 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/12号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 12 号API接口函数 根据省市区查询区划代码 2 | ``` 3 | def get_address_code(query_conds: dict,need_fields: List[str] = []) -> dict: 4 | """ 5 | 根据省市区查询区划代码。 6 | 7 | 参数: 8 | query_conds -- 查询条件字典,例如{"省份": "西藏自治区", "城市": "拉萨市", "区县": "城关区"} 9 | need_fields -- 需要返回的字段列表,例如["省份","城市","区县","城市区划代码","区县区划代码"],need_fields传入空列表,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | {"省份": "西藏自治区", "城市": "拉萨市", "区县": "城关区"} 14 | 输出: 15 | {'省份': '西藏自治区', 16 | '城市': '拉萨市', 17 | '城市区划代码': '540100000000', 18 | '区县': '城关区', 19 | '区县区划代码': '540102000000'} 20 | """ 21 | url = f"https://{DOMAIN}/law_api/s1_b/get_address_code" 22 | 23 | data = { 24 | "query_conds": query_conds, 25 | "need_fields": need_fields 26 | } 27 | 28 | rsp = requests.post(url, json=data, headers=headers) 29 | return rsp.json() 30 | ``` 31 | 32 | ### 例子: 33 | ### 省份、城市、区县 34 | #### 输入 35 | ``` 36 | {"省份": "西藏自治区", "城市": "拉萨市", "区县": "城关区", "need_fields":["省份","城市","区县","城市区划代码","区县区划代码"]} 37 | ``` 38 | #### 输出 39 | ``` 40 | {'省份': '西藏自治区', 41 | '城市': '拉萨市', 42 | '城市区划代码': '540100000000', 43 | '区县': '城关区', 44 | '区县区划代码': '540102000000'} 45 | 46 | ``` 47 | ### 省份、城市、区县 48 | #### 输入 49 | ``` 50 | {"省份": "北京市", "城市": "北京市", "区县": "密云区", "need_fields":["省份","城市","区县","城市区划代码","区县区划代码"]} 51 | ``` 52 | #### 输出 53 | ``` 54 | {'省份': '北京市', 55 | '城市': '北京市', 56 | '城市区划代码': '110100000000', 57 | '区县': '密云区', 58 | '区县区划代码': '110118000000'} 59 | ``` 60 | 61 | ### 省份、城市、区县 62 | #### 输入 63 | ``` 64 | {"省份": "浙江省", "城市": "丽水市", "区县": "景宁畲族自治县", "need_fields":["区县区划代码"]} 65 | ``` 66 | #### 输出 67 | ``` 68 | {'区县区划代码': '331127000000'} 69 | 70 | ``` -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/13号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 13号API接口函数 根据日期及省份城市查询天气相关信息 2 | ``` 3 | def get_temp_info(query_conds: dict,need_fields: List[str] = []) -> dict: 4 | """ 5 | 根据日期及省份城市查询天气相关信息。 6 | 7 | 参数: 8 | query_conds -- 查询条件字典,例如{"省份": "北京市", "城市": "北京市", "日期": "2020年1月1日"} 9 | need_fields -- 需要返回的字段列表,例如["日期","省份","城市","天气","最高温度","最低温度","湿度"],need_fields传入空列表,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | {"省份": "北京市", "城市": "北京市", "日期": "2020年1月1日"} 14 | 输出: 15 | {'日期': '2020年1月1日', 16 | '省份': '北京市', 17 | '城市': '北京市', 18 | '天气': '晴', 19 | '最高温度': '11', 20 | '最低温度': '1', 21 | '湿度': '55'} 22 | """ 23 | url = f"https://{DOMAIN}/law_api/s1_b/get_temp_info" 24 | 25 | data = { 26 | "query_conds": query_conds, 27 | "need_fields": need_fields 28 | } 29 | 30 | rsp = requests.post(url, json=data, headers=headers) 31 | return rsp.json() 32 | ``` 33 | 34 | ### 例子: 35 | ### 1 36 | #### 输入 37 | ``` 38 | {"省份": "北京市", "城市": "北京市", "日期": "2020年1月1日", "need_fields":[]} 39 | ``` 40 | #### 输出 41 | ``` 42 | {'日期': '2020年1月1日', 43 | '省份': '北京市', 44 | '城市': '北京市', 45 | '天气': '晴', 46 | '最高温度': '11', 47 | '最低温度': '1', 48 | '湿度': '55'} 49 | 50 | ``` 51 | ### 2 52 | #### 输入 53 | ``` 54 | {"省份": "四川省", "城市": "成都市", "日期": "2019年12月11日", "need_fields":['天气','最高温度']} 55 | ``` 56 | #### 输出 57 | ``` 58 | {'天气': '晴', '最高温度': '16'} 59 | ``` 60 | 61 | ### 3 62 | #### 输入 63 | ``` 64 | {"省份": "新疆维吾尔自治区", "城市": "吐鲁番市", "日期": "2020年11月6日", "need_fields":['天气','最高温度']} 65 | ``` 66 | #### 输出 67 | ``` 68 | {'天气': '晴', '最高温度': '22'} 69 | 70 | ``` -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/14号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 14号API接口函数 根据案号查询文本摘要 2 | ``` 3 | def get_legal_abstract(query_conds: dict,need_fields: List[str] = []) -> dict: 4 | """ 5 | 根据案号查询文本摘要。 6 | 7 | 参数: 8 | query_conds -- 查询条件字典,例如{"案号": "(2019)沪0115民初61975号"} 9 | need_fields -- 需要返回的字段列表,例如["文件名","案号","文本摘要"],need_fields传入空列表,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | {"案号": "(2019)沪0115民初61975号"} 14 | 输出: 15 | {'文件名': '(2019)沪0115民初61975号.txt', 16 | '案号': '(2019)沪0115民初61975号', 17 | '文本摘要': '原告上海爱斯达克汽车空调系统有限公司与被告上海逸测检测技术服务有限公司因服务合同纠纷一案,原告请求被告支付检测费1,254,802.58元、延迟履行违约金71,399.68元及诉讼费用。被告辩称,系争合同已终止,欠款金额应为499,908元,且不认可违约金。\n法院认为,原告与腾双公司签订的测试合同适用于原被告,原告提供的测试服务应得到被告支付。依照《中华人民共和国合同法》第六十条、第一百零九条,《中华人民共和国民事诉讼法》第六十四条第一款,《最高人民法院关于适用〈中华人民共和国民事诉讼法〉的解释》第九十条之规定判决被告支付原告检测费1,254,802.58元及违约金71,399.68元。'} 18 | """ 19 | url = f"https://{DOMAIN}/law_api/s1_b/get_legal_abstract" 20 | case_num = query_conds['案号'] 21 | if isinstance(case_num, str): 22 | case_num = case_num.replace('(', '(').replace(')', ')') 23 | 24 | if isinstance(case_num, list): 25 | new_case_num = [] 26 | for ele in case_num: 27 | new_case_num.append(ele.replace('(', '(').replace(')', ')')) 28 | case_num = new_case_num 29 | data = { 30 | "query_conds": query_conds, 31 | "need_fields": need_fields 32 | } 33 | 34 | rsp = requests.post(url, json=data, headers=headers) 35 | return rsp.json() 36 | ``` 37 | 38 | ### 例子: 39 | ### 1 40 | #### 输入 41 | ``` 42 | {"案号": "(2019)沪0115民初61975号", "need_fields":[]} 43 | ``` 44 | #### 输出 45 | ``` 46 | {'文件名': '(2019)沪0115民初61975号.txt', 47 | '案号': '(2019)沪0115民初61975号', 48 | '文本摘要': '原告上海爱斯达克汽车空调系统有限公司与被告上海逸测检测技术服务有限公司因服务合同纠纷一案,原告请求被告支付检测费1,254,802.58元、延迟履行违约金71,399.68元及诉讼费用。被告辩称,系争合同已终止,欠款金额应为499,908元,且不认可违约金。\n法院认为,原告与腾双公司签订的测试合同适用于原被告,原告提供的测试服务应得到被告支付。依照《中华人民共和国合同法》第六十条、第一百零九条,《中华人民共和国民事诉讼法》第六十四条第一款,《最高人民法院关于适用〈中华人民共和国民事诉讼法〉的解释》第九十条之规定判决被告支付原告检测费1,254,802.58元及违约金71,399.68元。'} 49 | 50 | ``` 51 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/15号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 15号API接口函数 根据案号查询限制高消费相关信息 2 | ``` 3 | def get_xzgxf_info(query_conds: dict,need_fields: List[str] = []) -> dict: 4 | """ 5 | 根据案号查询限制高消费相关信息。 6 | 7 | 参数: 8 | query_conds -- 查询条件字典,例如{"案号": "(2018)鲁0403执1281号"} 9 | need_fields -- 需要返回的字段列表,例如["限制高消费企业名称","案号","法定代表人","申请人","涉案金额","执行法院","立案日期","限高发布日期"],need_fields传入空列表,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | {"案号": "(2018)鲁0403执1281号"} 14 | 输出: 15 | {'限制高消费企业名称': '枣庄西能新远大天然气利用有限公司', 16 | '案号': '(2018)鲁0403执1281号', 17 | '法定代表人': '高士其', 18 | '申请人': '枣庄市人力资源和社会保障局', 19 | '涉案金额': '12000', 20 | '执行法院': '山东省枣庄市薛城区人民法院', 21 | '立案日期': '2018-11-16 00:00:00', 22 | '限高发布日期': '2019-02-13 00:00:00'} 23 | """ 24 | url = f"https://{DOMAIN}/law_api/s1_b/get_xzgxf_info" 25 | case_num = query_conds['案号'] 26 | if isinstance(case_num, str): 27 | case_num = case_num.replace('(', '(').replace(')', ')') 28 | 29 | if isinstance(case_num, list): 30 | new_case_num = [] 31 | for ele in case_num: 32 | new_case_num.append(ele.replace('(', '(').replace(')', ')')) 33 | case_num = new_case_num 34 | data = { 35 | "query_conds": query_conds, 36 | "need_fields": need_fields 37 | } 38 | 39 | rsp = requests.post(url, json=data, headers=headers) 40 | return rsp.json() 41 | 42 | ``` 43 | 44 | ### 例子: 45 | ### 1 46 | #### 输入 47 | ``` 48 | {"案号": "(2018)鲁0403执1281号"", "need_fields":["限制高消费企业名称","案号","法定代表人","申请人","涉案金额","执行法院","立案日期","限高发布日期"]} 49 | ``` 50 | #### 输出 51 | ``` 52 | {'限制高消费企业名称': '枣庄西能新远大天然气利用有限公司', 53 | '案号': '(2018)鲁0403执1281号', 54 | '法定代表人': '高士其', 55 | '申请人': '枣庄市人力资源和社会保障局', 56 | '涉案金额': '12000', 57 | '执行法院': '山东省枣庄市薛城区人民法院', 58 | '立案日期': '2018-11-16 00:00:00', 59 | '限高发布日期': '2019-02-13 00:00:00'} 60 | 61 | ``` 62 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/17号API接口文档 .md: -------------------------------------------------------------------------------- 1 | ## 17 号API接口函数 求和,可以对传入的int、float、str数组进行求和,str数组只能转换字符串里的千万亿,如"1万" 2 | 3 | ``` 4 | def get_sum(nums: Union[List[float], List[str], List[int]]): 5 | """ 6 | 求和,可以对传入的int、float、str数组进行求和,str数组只能转换字符串里的千万亿,如"1万" 7 | 8 | 参数: 9 | nums -- 10 | 11 | """ 12 | if not isinstance(nums, list) or len(nums) == 0: 13 | return -100 14 | 15 | if any(not isinstance(x, (int, float, str)) for x in nums): 16 | return -100 17 | 18 | def map_str_to_num(str_num): 19 | try: 20 | str_num = str_num.replace("千", "*1e3") 21 | str_num = str_num.replace("万", "*1e4") 22 | str_num = str_num.replace("亿", "*1e8") 23 | return eval(str_num) 24 | except Exception as e: 25 | logger.error(e) 26 | pass 27 | return -100 28 | 29 | if isinstance(nums[0], str): 30 | nums = [map_str_to_num(i) for i in nums] 31 | 32 | try: 33 | return sum(nums) 34 | except Exception as e: 35 | logger.error(e) 36 | 37 | return -100 38 | ``` 39 | 40 | ### 例子: 41 | ### 1 42 | ##### 输入 43 | ``` 44 | {"公司名称": "上海妙可蓝多食品科技股份有限公司","need_fields": ["公司名称", "公司代码", "主营业务"]} 45 | ``` 46 | #### 输出 47 | ``` 48 | {'公司名称': '上海妙可蓝多食品科技股份有限公司', 49 | '公司代码': '600882', 50 | '主营业务': '以奶酪、液态奶为核心的特色乳制品的研发、生产和销售,同时公司也从事以奶粉、黄油为主的乳制品贸易业务。'} 51 | 52 | ``` 53 | ### 2 54 | #### 输入 55 | 56 | {"公司简称": "海天精工","need_fields":["公司名称", "法人代表", "主营业务","办公地址","联系电话"] } 57 | ``` 58 | 输出 59 | {'公司名称': '宁波海天精工股份有限公司', 60 | '法人代表': '张静章', 61 | '主营业务': '高端数控机床的研发、生产和销售', 62 | '办公地址': '浙江省宁波市北仑区黄山西路235号', 63 | '联系电话': '0574-86188839'} 64 | ``` 65 | 66 | 67 | ### 3 68 | #### 输入 69 | ``` 70 | {"公司代码": "600882","need_fields":["公司名称", "公司简称", "主营业务","办公地址","联系电话"] } 71 | ``` 72 | 73 | #### 输出 74 | ``` 75 | {'公司名称': '上海妙可蓝多食品科技股份有限公司', 76 | '公司简称': '妙可蓝多', 77 | '主营业务': '以奶酪、液态奶为核心的特色乳制品的研发、生产和销售,同时公司也从事以奶粉、黄油为主的乳制品贸易业务。', 78 | '办公地址': '上海市浦东新区金桥路1398号金台大厦10楼', 79 | '联系电话': '021-50188700'} 80 | ``` 81 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/18号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 18 号API接口函数 排序接口,返回按照values排序的keys 2 | 3 | ``` 4 | def rank(keys: List[Any], values: List[float], is_desc: bool = False): 5 | ''' 6 | 排序接口,返回按照values排序的keys 7 | 8 | 参数: 9 | keys -- 10 | values -- 11 | is_desc -- 12 | ''' 13 | return [i[0] for i in sorted(zip(keys, values), key=lambda x: x[1], reverse=is_desc)] 14 | ``` 15 | 16 | ### 例子: 17 | ### 1 18 | ##### 输入 19 | ``` 20 | {"公司名称": "上海妙可蓝多食品科技股份有限公司","need_fields": ["公司名称", "公司代码", "主营业务"]} 21 | ``` 22 | #### 输出 23 | ``` 24 | {'公司名称': '上海妙可蓝多食品科技股份有限公司', 25 | '公司代码': '600882', 26 | '主营业务': '以奶酪、液态奶为核心的特色乳制品的研发、生产和销售,同时公司也从事以奶粉、黄油为主的乳制品贸易业务。'} 27 | 28 | ``` 29 | ### 2 30 | #### 输入 31 | 32 | {"公司简称": "海天精工","need_fields":["公司名称", "法人代表", "主营业务","办公地址","联系电话"] } 33 | ``` 34 | 输出 35 | {'公司名称': '宁波海天精工股份有限公司', 36 | '法人代表': '张静章', 37 | '主营业务': '高端数控机床的研发、生产和销售', 38 | '办公地址': '浙江省宁波市北仑区黄山西路235号', 39 | '联系电话': '0574-86188839'} 40 | ``` 41 | 42 | 43 | ### 3 44 | #### 输入 45 | ``` 46 | {"公司代码": "600882","need_fields":["公司名称", "公司简称", "主营业务","办公地址","联系电话"] } 47 | ``` 48 | 49 | #### 输出 50 | ``` 51 | {'公司名称': '上海妙可蓝多食品科技股份有限公司', 52 | '公司简称': '妙可蓝多', 53 | '主营业务': '以奶酪、液态奶为核心的特色乳制品的研发、生产和销售,同时公司也从事以奶粉、黄油为主的乳制品贸易业务。', 54 | '办公地址': '上海市浦东新区金桥路1398号金台大厦10楼', 55 | '联系电话': '021-50188700'} 56 | ``` 57 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/2号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 2 号API接口函数 根据统一社会信用代码查询公司名称 2 | 3 | ``` 4 | def get_company_register_name(query_conds: dict,need_fields: List[str] = []) -> str: 5 | """ 6 | 根据统一社会信用代码查询公司名称。 7 | 8 | 参数: 9 | query_conds -- 查询条件字典,例如{"统一社会信用代码": "913305007490121183"} 10 | 11 | 例如: 12 | 输入: 13 | {"query_conds": {"统一社会信用代码": "913305007490121183"}} 14 | 输出: 15 | {'公司名称': '天能电池集团股份有限公司'} 16 | """ 17 | url = f"https://{DOMAIN}/law_api/s1_b/get_company_register_name" 18 | 19 | data = { 20 | "query_conds": query_conds, 21 | "need_fields": need_fields 22 | } 23 | 24 | rsp = requests.post(url, json=data, headers=headers) 25 | 26 | return rsp.json() 27 | ``` 28 | 29 | ### 例子: 30 | ### 公司全称 31 | ##### 输入 32 | ``` 33 | {"统一社会信用代码": "913305007490121183"} 34 | ``` 35 | #### 输出 36 | ``` 37 | {'公司名称': '天能电池集团股份有限公司'} 38 | 39 | ``` 40 | ### 公司简称 41 | #### 输入 42 | ``` 43 | {"统一社会信用代码": "913310007200456372"} 44 | ``` 45 | #### 输出 46 | ``` 47 | {'公司名称': '浙江百达精工股份有限公司'} 48 | ``` 49 | 50 | 51 | ### 公司代码 52 | #### 输入 53 | ``` 54 | {"统一社会信用代码": "91320722MA27RF9U87"} 55 | ``` 56 | #### 输出 57 | ``` 58 | {'公司名称': '东海县万德斯环保科技有限责任公司'} 59 | ``` 60 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/3号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 3 号API接口函数 根据被投资的子公司名称获得投资该公司的上市公司、投资比例、投资金额等信息 2 | 3 | ``` 4 | def get_sub_company_info(query_conds: dict,need_fields: List[str] = []) -> dict: 5 | """ 6 | 根据被投资的子公司名称获得投资该公司的上市公司、投资比例、投资金额等信息。 7 | 8 | 参数: 9 | query_conds -- 查询条件字典,例如{"公司名称": "上海爱斯达克汽车空调系统有限公司"} 10 | 11 | 例如: 12 | 输入: 13 | {"query_conds": {"公司名称": "上海爱斯达克汽车空调系统有限公司"}} 14 | 输出: 15 | {'关联上市公司全称': '上海航天汽车机电股份有限公司', '上市公司关系': '子公司', '上市公司参股比例': '87.5', '上市公司投资金额': '8.54亿', '公司名称': '上海爱斯达克汽车空调系统有限公司'} 16 | """ 17 | url = f"https://{DOMAIN}/law_api/s1_b/get_sub_company_info" 18 | 19 | data = { 20 | "query_conds": query_conds, 21 | "need_fields": need_fields 22 | } 23 | 24 | rsp = requests.post(url, json=data, headers=headers) 25 | 26 | return rsp.json() 27 | ``` 28 | 29 | ### 例子: 30 | ### 1. 31 | ##### 输入 32 | ``` 33 | {"公司名称": "上海爱斯达克汽车空调系统有限公司"} 34 | ``` 35 | #### 输出 36 | ``` 37 | {'关联上市公司全称': '上海航天汽车机电股份有限公司', 38 | '上市公司关系': '子公司', 39 | '上市公司参股比例': '87.5', 40 | '上市公司投资金额': '8.54亿', 41 | '公司名称': '上海爱斯达克汽车空调系统有限公司'} 42 | 43 | ``` 44 | ### 2. 45 | #### 输入 46 | ``` 47 | {"公司名称": "湖州鼎捷软件有限公司"} 48 | ``` 49 | #### 输出 50 | ``` 51 | {'关联上市公司全称': '鼎捷软件股份有限公司', 52 | '上市公司关系': '子公司', 53 | '上市公司参股比例': '100.0', 54 | '上市公司投资金额': '', 55 | '公司名称': '湖州鼎捷软件有限公司'} 56 | ``` 57 | 58 | 59 | ### 3. 60 | #### 输入 61 | ``` 62 | {"公司名称": "株洲宏达恒芯电子有限公司"} 63 | ``` 64 | #### 输出 65 | ``` 66 | {'关联上市公司全称': '株洲宏达电子股份有限公司', 67 | '上市公司关系': '子公司', 68 | '上市公司参股比例': '61.0', 69 | '上市公司投资金额': '1043.67万', 70 | '公司名称': '株洲宏达恒芯电子有限公司'} 71 | ``` 72 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/4号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 4 号API接口函数 根据上市公司(母公司)的名称查询该公司投资的所有子公司信息list 2 | 3 | ``` 4 | def get_listed_sub_company_info(query_conds: dict,need_fields: List[str] = []) -> List: 5 | """ 6 | 根据上市公司(母公司)的名称查询该公司投资的所有子公司信息list。 7 | 8 | 参数: 9 | query_conds -- 查询条件字典,例如{"关联上市公司全称": "上海航天汽车机电股份有限公司"} 10 | 11 | 例如: 12 | 输入: 13 | {"关联上市公司全称": "上海航天汽车机电股份有限公司"} 14 | 输出: 15 | [{'关联上市公司全称': '上海航天汽车机电股份有限公司', 16 | '上市公司关系': '子公司', 17 | '上市公司参股比例': '100.0', 18 | '上市公司投资金额': '8800.00万', 19 | '公司名称': '甘肃神舟光伏电力有限公司'}, 20 | {'关联上市公司全称': '上海航天汽车机电股份有限公司', 21 | '上市公司关系': '子公司', 22 | '上市公司参股比例': '100.0', 23 | '上市公司投资金额': '1.19亿', 24 | '公司名称': '甘肃张掖神舟光伏电力有限公司'}] 25 | """ 26 | url = f"https://{DOMAIN}/law_api/s1_b/get_sub_company_info_list" 27 | 28 | data = { 29 | "query_conds": query_conds, 30 | "need_fields": need_fields 31 | } 32 | 33 | rsp = requests.post(url, json=data, headers=headers) 34 | return rsp.json() 35 | ``` 36 | 37 | ### 例子: 38 | ### 1. 39 | ##### 输入 40 | ``` 41 | {"关联上市公司全称": "上海妙可蓝多食品科技股份有限公司"} 42 | ``` 43 | #### 输出 44 | ``` 45 | [{'关联上市公司全称': '上海妙可蓝多食品科技股份有限公司', 46 | '上市公司关系': '子公司', 47 | '上市公司参股比例': '100.0', 48 | '上市公司投资金额': '7.91亿', 49 | '公司名称': '广泽乳业有限公司'}, 50 | {'关联上市公司全称': '上海妙可蓝多食品科技股份有限公司', 51 | '上市公司关系': '子公司', 52 | '上市公司参股比例': '100.0', 53 | '上市公司投资金额': '1010.51万', 54 | '公司名称': '上海妙可蓝多生物技术研发有限公司'}, 55 | ... 56 | {'关联上市公司全称': '上海妙可蓝多食品科技股份有限公司', 57 | '上市公司关系': '子公司', 58 | '上市公司参股比例': '100.0', 59 | '上市公司投资金额': '1.09亿', 60 | '公司名称': '上海芝享食品科技有限公司'}] 61 | 62 | ``` 63 | ### 2. 64 | #### 输入 65 | ``` 66 | {"公司名称": "鼎捷软件股份有限公司"} 67 | ``` 68 | #### 输出 69 | ``` 70 | [{'关联上市公司全称': '鼎捷软件股份有限公司', 71 | '上市公司关系': '子公司', 72 | '上市公司参股比例': '100.0', 73 | '上市公司投资金额': '4053.23万', 74 | '公司名称': '北京鼎捷软件有限公司'}, 75 | {'关联上市公司全称': '鼎捷软件股份有限公司', 76 | '上市公司关系': '子公司', 77 | '上市公司参股比例': '100.0', 78 | '上市公司投资金额': '480.00万', 79 | '公司名称': '鼎捷聚英(上海)管理咨询有限公司'}, 80 | ... 81 | {'关联上市公司全称': '鼎捷软件股份有限公司', 82 | '上市公司关系': '子公司', 83 | '上市公司参股比例': '98.81', 84 | '上市公司投资金额': '5000.00万', 85 | '公司名称': '智互联(深圳)科技有限公司'}] 86 | ``` 87 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/7号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 7 号API接口函数 根据法院名称查询法院名录相关信息 2 | 3 | ``` 4 | def get_court_info(query_conds: dict,need_fields: List[str] = []) -> dict: 5 | """ 6 | 根据法院名称查询法院名录相关信息。 7 | 8 | 参数: 9 | query_conds -- 查询条件字典,例如{"法院名称": "上海市浦东新区人民法院"} 10 | 11 | 例如: 12 | 输入: 13 | {"法院名称": "上海市浦东新区人民法院"} 14 | 输出: 15 | { '法院名称': '上海市浦东新区人民法院', 16 | '法院负责人': '朱丹', 17 | '成立日期': '2019-05-16', 18 | '法院地址': '上海市浦东新区丁香路611号', 19 | '法院联系电话': '-', 20 | '法院官网': '-'} 21 | """ 22 | url = f"https://{DOMAIN}/law_api/s1_b/get_court_info" 23 | 24 | data = { 25 | "query_conds": query_conds, 26 | "need_fields": need_fields 27 | } 28 | 29 | rsp = requests.post(url, json=data, headers=headers) 30 | return rsp.json() 31 | ``` 32 | 33 | ### 例子: 34 | ### 1. 35 | ##### 输入 36 | ``` 37 | get_court_info({"法院名称": "上海市浦东新区人民法院"}) 38 | ``` 39 | #### 输出 40 | ``` 41 | {'法院名称': '上海市浦东新区人民法院', 42 | '法院负责人': '朱丹', 43 | '成立日期': '2019-05-16', 44 | '法院地址': '上海市浦东新区丁香路611号', 45 | '法院联系电话': '-', 46 | '法院官网': '-'} 47 | ``` 48 | ### 2. 49 | #### 输入 50 | ``` 51 | {"法院名称": "四川省高级人民法院"} 52 | ``` 53 | #### 输出 54 | ``` 55 | {'法院名称': '四川省高级人民法院', 56 | '法院负责人': '王树江', 57 | '成立日期': '2018-05-08', 58 | '法院地址': '四川省成都市青羊区正府街108号', 59 | '法院联系电话': '028-86960000', 60 | '法院官网': 'https://www.scssfw.gov.cn'} 61 | ``` 62 | ### 3. 63 | #### 输入 64 | ``` 65 | {"法院名称": "安徽省高级人民法院"} 66 | ``` 67 | #### 输出 68 | ``` 69 | {'法院名称': '安徽省高级人民法院', 70 | '法院负责人': '张坚', 71 | '成立日期': '2016-04-21', 72 | '法院地址': '合肥市长江西路472号', 73 | '法院联系电话': '-', 74 | '法院官网': 'http://www.ahgyss.cn'} 75 | ``` -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/8号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 8 号API接口函数 根据法院名称或者法院代字查询法院代字等相关数据 2 | ``` 3 | def get_court_code(query_conds: dict,need_fields: List[str] = []) -> dict: 4 | """ 5 | 根据法院名称或者法院代字查询法院代字等相关数据。 6 | 7 | 参数: 8 | query_conds -- 查询条件字典,例如{"法院名称": "上海市浦东新区人民法院"} 9 | need_fields -- 需要返回的字段列表,例如["法院名称","行政级别","法院级别","法院代字","区划代码","级别"],need_fields传入空列表,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | {"法院名称": "上海市浦东新区人民法院"} 14 | 输出: 15 | {'法院名称': '上海市浦东新区人民法院', 16 | '行政级别': '市级', 17 | '法院级别': '基层法院', 18 | '法院代字': '沪0115', 19 | '区划代码': '310115', 20 | '级别': '1'} 21 | """ 22 | url = f"https://{DOMAIN}/law_api/s1_b/get_court_code" 23 | 24 | data = { 25 | "query_conds": query_conds, 26 | "need_fields": need_fields 27 | } 28 | 29 | rsp = requests.post(url, json=data, headers=headers) 30 | return rsp.json() 31 | ``` 32 | 33 | ### 例子: 34 | ### 法院名称 35 | ##### 输入 36 | ``` 37 | {"法院名称": "上海市浦东新区人民法院", "need_fields":["法院名称","行政级别","法院级别","法院代字","区划代码","级别"]} 38 | ``` 39 | #### 输出 40 | ``` 41 | {'法院名称': '上海市浦东新区人民法院', 42 | '行政级别': '市级', 43 | '法院级别': '基层法院', 44 | '法院代字': '沪0115', 45 | '区划代码': '310115', 46 | '级别': '1'} 47 | 48 | ``` 49 | ### 法院代字 50 | #### 输入 51 | ``` 52 | {"法院代字": "吉24","need_fields":[] } 53 | ``` 54 | #### 输出 55 | ``` 56 | {'法院名称': '延边朝鲜族自治州中级人民法院', 57 | '行政级别': '市级', 58 | '法院级别': '中级法院', 59 | '法院代字': '吉24', 60 | '区划代码': '222400', 61 | '级别': '1'} 62 | ``` 63 | 64 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/apis/9号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 9 号API接口函数 根据律师事务所查询律师事务所名录 2 | ``` 3 | def get_lawfirm_info(query_conds: dict,need_fields: List[str] = []) -> dict: 4 | """ 5 | 根据律师事务所查询律师事务所名录。 6 | 7 | 参数: 8 | query_conds -- 查询条件字典,例如{"律师事务所名称": "爱德律师事务所"} 9 | need_fields -- 需要返回的字段列表,例如["律师事务所名称", "律师事务所唯一编码", "律师事务所负责人", "事务所注册资本", "事务所成立日期", "律师事务所地址", "通讯电话", "通讯邮箱", "律所登记机关"],need_fields传入空列表,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | {"律师事务所名称": "爱德律师事务所"} 14 | 输出: 15 | {'律师事务所名称': '爱德律师事务所', 16 | '律师事务所唯一编码': '31150000E370803331', 17 | '律师事务所负责人': '巴布', 18 | '事务所注册资本': '10万元人民币', 19 | '事务所成立日期': '1995-03-14', 20 | '律师事务所地址': '呼和浩特市赛罕区大学西街110号丰业大厦11楼', 21 | '通讯电话': '0471-3396155', 22 | '通讯邮箱': 'kehufuwubu@ardlaw.cn', 23 | '律所登记机关': '内蒙古自治区呼和浩特市司法局'} 24 | """ 25 | url = f"https://{DOMAIN}/law_api/s1_b/get_lawfirm_info" 26 | 27 | data = { 28 | "query_conds": query_conds, 29 | "need_fields": need_fields 30 | } 31 | 32 | rsp = requests.post(url, json=data, headers=headers) 33 | return rsp.json() 34 | ``` 35 | 36 | ### 例子: 37 | ### 律师事务所名称 38 | ##### 输入 39 | ``` 40 | {"律师事务所名称": "广东鹏鼎律师事务所", "need_fields":["律师事务所地址", "通讯电话", "通讯邮箱"]} 41 | ``` 42 | #### 输出 43 | ``` 44 | {'律师事务所地址': '龙华街道华联社区龙观路90号三楼', 45 | '通讯电话': '13612861696', 46 | '通讯邮箱': 'cqz1705@163.com'} 47 | 48 | ``` 49 | ### 律师事务所名称 50 | ##### 输入 51 | ``` 52 | {"律师事务所名称": "河南良承律师事务所", "need_fields":[]} 53 | ``` 54 | #### 输出 55 | ``` 56 | {'律师事务所名称': '河南良承律师事务所', 57 | '律师事务所唯一编码': '3141000068819464X4', 58 | '律师事务所负责人': '王振生', 59 | '事务所注册资本': '30万元人民币', 60 | '事务所成立日期': '2009-05-18', 61 | '律师事务所地址': '东明路红旗路交叉口往北100米路东金成大厦B座七楼', 62 | '通讯电话': '0371-55559666', 63 | '通讯邮箱': 'hnlclawyer@163.com', 64 | '律所登记机关': '河南省郑州市金水区司法局'} 65 | 66 | ``` 67 | 68 | ### 律师事务所名称 69 | ##### 输入 70 | ``` 71 | {"律师事务所名称": "北京国旺律师事务所", "need_fields":[]} 72 | ``` 73 | #### 输出 74 | ``` 75 | {'律师事务所名称': '北京国旺律师事务所', 76 | '律师事务所唯一编码': '31110000099826338B', 77 | '律师事务所负责人': '王柱', 78 | '事务所注册资本': '100万元人民币', 79 | '事务所成立日期': '2014-05-12', 80 | '律师事务所地址': '北京市朝阳区光华路7号9层1016、1018', 81 | '通讯电话': '010-59714226', 82 | '通讯邮箱': '-', 83 | '律所登记机关': '北京市朝阳区司法局'} 84 | ``` -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XX(公司全称)的子公司的一级行业是什么.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:XX(公司全称)的子公司的一级行业是什么 4 | ### 5 | 大表: LegalDoc,CompanyRegister 6 | ### 7 | 字段: XXX 8 | ### 9 | {{ 10 | "id1": {{ 11 | "previous_tasks": [], 12 | "task_description": "根据XX公司名称,查询其所有子公司信息(含多个结果)", 13 | "task_id": "id1", 14 | "tools": ["get_listed_sub_company_info_service_by_parent_company_name"] 15 | }}, 16 | "id2": {{ 17 | "previous_tasks": ["id1"], 18 | "task_description": "对于每个子公司查询其工商信息,记录每个子公司的一级行业" 19 | "task_id": "id2", 20 | "tools": ["get_company_register_service"] 21 | }} 22 | }} -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XX(公司简称)的子公司的一级行业是什么.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:XX(公司简称)的子公司的一级行业是什么 4 | ### 5 | 大表: LegalDoc,CompanyRegister 6 | ### 7 | 字段: XXX 8 | ### 9 | {{ 10 | "id1": {{ 11 | "previous_tasks": [], 12 | "task_description": "根据XX公司简称,查询其公司名称____", 13 | "task_id": "id1", 14 | "tools": ["get_company_info_service_by_abbreviation"] 15 | }}, 16 | "id2": {{ 17 | "previous_tasks": ["id1"], 18 | "task_description": "根据公司名称,查询其所有子公司信息(含多个结果)", 19 | "task_id": "id2", 20 | "tools": ["get_listed_sub_company_info_service_by_parent_company_name"] 21 | }}, 22 | "id3": {{ 23 | "previous_tasks": ["id2"], 24 | "task_description": "对于每个子公司查询其工商信息,记录每个子公司的一级行业" 25 | "task_id": "id3", 26 | "tools": ["get_company_register_service"] 27 | }} 28 | }} 29 | 30 | 31 | 32 | CODER_1 33 | ### 34 | 问题: 根据公司简称XX,查询其公司名称 35 | ### 36 | 调用工具: get_company_info_service_by_abbreviation 37 | ### 38 | 前置任务保存路径: 39 | ### 40 | 任务保存路径:./cache/50/1_id1_get_company_info_service_by_abbreviation.csv 41 | 字段: 公司简称,公司名称 42 | ### 43 | 44 | from services.all_tools_service_register import * 45 | import pandas as pd 46 | import traceback 47 | import warnings 48 | warnings.filterwarnings('ignore') 49 | 50 | try: 51 | # 当前任务保存路径 52 | id1_result_path = './cache/50/1_id1_get_company_info_service_by_abbreviation.csv' 53 | # 根据公司简称查询公司名称 54 | company_abbreviation = 'XX' 55 | company_info = get_company_info_service_by_abbreviation(company_abbreviation=company_abbreviation) 56 | 57 | # 检查结果 58 | if company_info.shape[0] == 0: 59 | print("未找到对应的公司名称,请检查公司简称是否正确。") 60 | sys.exit() 61 | 62 | # 保存结果 63 | company_info.to_csv(id1_result_path, index=False) 64 | print(f"XX公司名称信息保存地址为: {id1_result_path}") 65 | print(f"详细信息: {company_info.info()}") 66 | 67 | except Exception as e: 68 | error_message = traceback.format_exc() 69 | print("代码执行错误\n" + error_message) 70 | 71 | ### -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XXX公司关于工商信息及投资金额过亿的全资子公司,公司限高案件的立案时间在YY年涉案金额不为0的裁判文书(不需要判决结果)整合报告。.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题: XXX公司关于工商信息及投资金额过亿的全资子公司,公司限高案件的立案时间在YY年涉案金额不为0的裁判文书(不需要判决结果)整合报告。 4 | ### 5 | 大表: 6 | ### 7 | 字段: XXX 8 | ### 9 | {{ 10 | "id1":{{ 11 | "task_id":"id1", 12 | "task_description": "根据XXX公司查询其工商信息,报告要求保存所有字段", 13 | "tools":["get_company_register_service"], 14 | "previous_tasks": [] 15 | }}, 16 | "id2":{{ 17 | "task_id":"id2", 18 | "task_description": "根据XXX公司名称查询投资金额过亿的全资子公司信息,保存查询结果,报告要求保存所有字段", 19 | "tools":["get_listed_all_sub_company_info_service_by_parent_company_name"], 20 | "previous_tasks": [] 21 | }}, 22 | "id3": 23 | {{ 24 | "task_id": "id3", 25 | "task_description": "根据XXX公司名称查询其在YY年限制高消费案件不为0的涉案信息,保存查询结果,报告要求保存所有字段", 26 | "tools": ["get_company_xzgxf_by_company_name_service"], 27 | "previous_tasks": [], 28 | }} 29 | "id4": 30 | {{ 31 | "task_id": "id4", 32 | "task_description": "根据XXX公司的工商信息,全资子公司信息,限制高消费信息整合为报告", 33 | "tools": ["save_all_company_info_to_doc_service"], 34 | "previous_tasks": ["id1","id2","id3"], 35 | }} 36 | }} -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XXX公司关于工商信息及投资金额过亿的全资子公司,所有公司的立案时间在19年涉案金额不为0的裁判文书(不需要判决结果)整合报告。.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题: XXX公司关于工商信息及投资金额过亿的全资子公司,所有公司的立案时间在19年涉案金额不为0的裁判文书(不需要判决结果)整合报告。 4 | ### 5 | 大表: 6 | ### 7 | 字段: XXX 8 | ### 9 | {{ 10 | "id1":{{ 11 | "task_id":"id1", 12 | "task_description": "根据XXX公司查询其工商信息,报告要求保存所有字段", 13 | "tools":["get_company_register_service"], 14 | "previous_tasks": [] 15 | }}, 16 | "id2":{{ 17 | "task_id":"id2", 18 | "task_description": "根据XXX公司名称查询投资金额过亿的全资子公司信息,保存查询结果,报告要求保存所有字段", 19 | "tools":["get_listed_all_sub_company_info_service_by_parent_company_name"], 20 | "previous_tasks": [] 21 | }}, 22 | "id3": 23 | {{ 24 | "task_id": "id3", 25 | "task_description": "根据XXX公司名称查询其在YY年涉案金额不为0的涉案信息,保存查询结果,报告要求保存所有字段", 26 | "tools": ["get_company_involved_cases_info_service"], 27 | "previous_tasks": [], 28 | }} 29 | "id4": 30 | {{ 31 | "task_id": "id4", 32 | "task_description": "根据XXX公司的工商信息,全资子公司信息,涉案信息整合为报告", 33 | "tools": ["save_all_company_info_to_doc_service"], 34 | "previous_tasks": ["id1","id2","id3"], 35 | }} 36 | }} -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XXX公司投资金额最高的子公司是?投资金额是?法定代表人、成立日期、统一社会信用代码分别是什么?.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题: XXX公司投资金额最高的子公司是?投资金额是?法定代表人、成立日期、统一社会信用代码分别是什么? 4 | ### 5 | 大表: SubCompanyInfo,CompanyRegister 6 | ### 7 | 字段: XXX 8 | ### 9 | {{ 10 | "id1":{{ 11 | "task_id":"id1", 12 | "task_description": "根据XX公司名称查询该公司投资的所有子公司信息列表, 并筛选出其投资金额最高的子公司是___, 对其的投资金额是____", 13 | "tools":["get_listed_sub_company_info_service_by_parent_company_name"], 14 | "previous_tasks": [] 15 | }}, 16 | "id2":{{ 17 | "task_id":"id2", 18 | "task_description": "根据XX公司投资金额最高的子公司名称,查询其法定代表人是___, 成立日期是___,统一社会信用代码是___", 19 | "tools":["get_company_register_service"], 20 | "previous_tasks": ["id1"] 21 | }} 22 | }} 23 | 24 | 25 | CODER_1 26 | ### 27 | 问题: 根据XX公司名称查询该公司投资的所有子公司信息列表, 并筛选出其投资金额最高的子公司是___, 对其的投资金额是____ 28 | ### 29 | 调用工具: get_listed_sub_company_info_service_by_parent_company_name 30 | ### 31 | 前置任务保存路径: 32 | ### 33 | 任务保存路径:./cache/0/1_id1_get_listed_sub_company_info_service_by_parent_company_name.csv 34 | ### 35 | 字段: 子公司, 注册资本,母公司 36 | ### 37 | from services.all_tools_service_register import * 38 | import traceback 39 | import pandas as pd 40 | import sys 41 | 42 | try: 43 | 44 | ### 当前任务工具调用后的保存路径 45 | id1_result_path = './cache/0/1_id1_get_listed_sub_company_info_service_by_parent_company_name.csv' 46 | 47 | 48 | parent_company_name = "XX公司" 49 | sub_companies_info = get_listed_sub_company_info_service_by_parent_company_name(parent_company_name=parent_company_name) 50 | 51 | # 检查工具返回结果 52 | if sub_companies_info.shape[0] == 0: 53 | print("未查询到重庆秦安机电股份有限公司的子公司信息") 54 | sys.exit() 55 | 56 | max_investment_sub_company = sub_companies_info[sub_companies_info['母公司投资金额']== sub_companies_info['母公司投资金额'].max()] 57 | 58 | print(f"重庆秦安机电股份有限公司投资金额最高的子公司是: {max_investment_sub_company['子公司名称'][0]}") 59 | print(f"投资金额是: {max_investment_sub_company['母公司投资金额'][0]}") 60 | 61 | # 保存结果到CSV文件 62 | max_investment_sub_company.to_csv(id1_result_path, index=False) 63 | 64 | # 打印保存路径 65 | print(f"子公司信息保存地址为: {id1_result_path}") 66 | print(f"详细信息: {max_investment_sub_company.info()}") 67 | except Exception as e: 68 | # 捕获详细错误信息 69 | error_message = traceback.format_exc() 70 | print("代码执行错误\n" + error_message) -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XXX地址对应的省市区县分别是?.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题: XXX地址对应的省市区县分别是? 4 | ### 5 | 大表: AddrInfo 6 | ### 7 | 字段: 地址,省份,城市,区县 8 | ### 9 | {{"id1": {{"task_id": "id1", 10 | "task_description": "根据地址XXX查询该地址对应的省份是___, 城市是___, 区县是___", 11 | "tools": ["get_address_info_service"], 12 | "previous_tasks": []}} 13 | }} 14 | 15 | 16 | ### 17 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XX公司与YY公司发生了ZZ纠纷,XX公司委托给了X,YY公司委托给了Y,请写一份民事起诉状给A法院时间是B.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题: XX公司与YY公司发生了ZZ纠纷,XX公司委托给了X,YY公司委托给了Y,请写一份民事起诉状给A法院时间是B 4 | ### 5 | 大表: CompanyInfo, CompanyRegister, LawfirmInfo, CourtInfo 6 | ### 7 | 字段: 关联公司,法院,起诉状 8 | ### 9 | {{"id1": {{"task_id": "id1", 10 | "task_description": "XX公司与YY公司发生了ZZ纠纷,XX公司委托给了X,YY公司委托给了Y,请写一份民事起诉状给A法院时间是B", 11 | "tools": ["get_sue_base_info_serivce", "get_sue_serivce"], 12 | "previous_tasks": []}}, 13 | }} -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XX公司投资过亿的子公司分别是?这些公司的统一社会信用代码及注册地址所在区县为?.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:XX公司投资过亿的子公司分别是?这些公司的统一社会信用代码及注册地址所在区县为? 4 | ### 5 | 大表: SubCompanyInfo, CompanyInfo,CompanyRegister,AddrInfo 6 | ### 7 | 字段: 关联公司,日期,案号,标题 8 | ### 9 | 10 | {{ 11 | "id1": {{"previous_tasks": [], 12 | "task_description": "根据金堆城钼业股份有限公司查询其投资过亿的全资子公司名称(结果含多条数据)", 13 | "task_id": "id1", 14 | "tools": ["get_listed_sub_company_info_service_by_parent_company_name"]}}, 15 | "id2": {{"previous_tasks": ["id1"], 16 | "task_description": "根据子公司名称查询他们的统一社会信用代码和注册地址(结果含多条数据)", 17 | "task_id": "id2", 18 | "tools": ["get_listed_company_info_service", "get_company_register_service"]}}, 19 | "id3": {{"previous_tasks": ["id2"], 20 | "task_description": "根据XX公司的子公司们的注册地址查询对应的区县信息(结果含多条数据)", 21 | "task_id": "id3", 22 | "tools": ["get_address_info_service"]}} 23 | }} 24 | ### -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XX公司有涉诉案件的法院地址在YY,请问这些涉讼案件的涉案金额之和是多少?.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:XX公司有涉诉案件的法院地址在YY,请问这些涉讼案件的涉案金额之和是多少? 4 | ### 5 | 大表:LegalDoc, CourtInfo, CourtCode 6 | ### 7 | 字段: 8 | ### 9 | {{ 10 | "id1": {{ 11 | "task_id": "id1", 12 | "task_description": "根据XX公司查询其所有涉及案件信息(结果含多条数据)", 13 | "tools": ["get_company_involved_cases_info_service"], 14 | "previous_tasks": [] 15 | }}, 16 | "id2": {{ 17 | "task_id": "id2", 18 | "task_description": "根据XX公司的涉诉案件信息中的案号查询法院名称(结果含多条数据),将法院名称添加到id1的结果中", 19 | "tools": ["get_court_name_service_by_reference"], 20 | "previous_tasks": ["id1"] 21 | }}, 22 | "id3": {{ 23 | "task_id": "id3", 24 | "task_description": "根据法院名称(含多条数据)查询法院地址(结果含多条数据),筛选地址为YY的法院名称,根据筛选出的法院名称,计算其对应案件的涉案金额之和____", 25 | "tools": ["get_court_info_service"], 26 | "previous_tasks": ["id1", "id2"] 27 | }} 28 | }} 29 | ### 30 | 31 | 32 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XX公司的组织机构代码为?起投资金额最高的子公司共有多少起涉诉案件?于哪几个省级行政单位举行审理?作为被告几次?这其中有一起案由较为特殊的审理,请给出案件受理费。.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:XX公司的组织机构代码为?起投资金额最高的子公司共有多少起涉诉案件?于哪几个省级行政单位举行审理?作为被告几次?这其中有一起案由较为特殊的审理,请给出案件受理费。 4 | ### 5 | 大表: CompanyRegister, SubCompanyInfo, LegalDoc, CourtCode 6 | ### 7 | 字段:公司名称, 组织机构代码,子公司名称, 母公司投资金额, 被告, 案由, 行政级别, 受理费 8 | ### 9 | {{"id1": {{"task_id": "id1", 10 | "task_description": "查询XX公司的组织机构代码____", 11 | "tools": ["get_company_register_service"], 12 | "previous_tasks": []}}, 13 | "id2": {{"task_id": "id2", 14 | "task_description": "查询XX公司投资金额最高的子公司名称_____,根据子公司名称____查询涉诉案件(结果含多条数据),统计涉诉案件数量____", 15 | "tools": [ "get_listed_sub_company_info_service_by_parent_company_name","get_company_involved_cases_info_serivce"], 16 | "previous_tasks": ["id1"]}}, 17 | "id3": {{"task_id": "id3", 18 | "task_description": "根据查询到的涉诉案件信息中的案号(结果含多条数据)来查询法院名称(结果含多条数据),根据查询到的法院名称(结果含多条数据)", 19 | "tools": ["get_court_name_service_by_reference", ], 20 | "previous_tasks": ["id2"]}}, 21 | "id4": {{"task_id": "id4", 22 | "task_description": "根据查询到的涉诉案的法院名称查询审理法院的行政级别(结果含多条数据),统计于哪几个省级行政单位举行审理(结果含多条数据),以及作为被告的次数____", 23 | "tools": ["get_court_code_service"], 24 | "previous_tasks": ["id3"]}}, 25 | "id5": {{"task_id": "id5", 26 | "task_description": "根据查询到的涉诉案件(结果含多条数据),筛选出其中有一起案由较为特殊的审理,并给出案件受理费____", 27 | "tools": [], 28 | "previous_tasks": ["id3"]}} 29 | }} 30 | ### 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XX有旗下一家子公司,成立时间为母公司成立YY年以后,该公司有ZZ左右的注册资本,其涉案中有一起在AA进行审理,请问这起案件的受理费用是多少?由谁承担?.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:XX有旗下一家子公司,成立时间为母公司成立YY年以后,该公司有ZZ左右的注册资本,其涉案中有一起在AA法院进行审理,请问这起案件的受理费用是多少?由谁承担? 4 | ### 5 | 大表:CompanyInfo, CompanyRegister, SubCompanyInfo, CourtCode, LegalDoc 6 | ### 7 | 字段: XX 8 | ### 9 | {{ 10 | "id1": {{ 11 | "task_id": "id1", 12 | "task_description": "根据XX公司名称查询其子公司信息列表,筛选出成立时间为母公司成立YY年以后,注册资本为ZZ左右的子公司是___", 13 | "tools": ["get_listed_sub_company_info_service_by_parent_company_name", "get_company_register_service"], 14 | "previous_tasks": [] 15 | }}, 16 | "id2": {{ 17 | "task_id": "id2", 18 | "task_description": "根据筛选出的子公司名称查询其涉案信息,并为所有案件查询其法院名称,筛选出在AA法院审理的案号是___", 19 | "tools": ["get_company_involved_cases_info_serivce", "get_court_name_service_by_reference"], 20 | "previous_tasks": ["id1"] 21 | }}, 22 | "id3": {{ 23 | "task_id": "id3", 24 | "task_description": "根据筛选出的案号信息查询受理费用是___, 按案件的判决结果找出承担方信息是___", 25 | "tools": ["get_legal_document_service"], 26 | "previous_tasks": ["id3"] 27 | }} 28 | }} 29 | 30 | ### 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XX有限公司对应的公司是否被限制高消费?如果是被限制高消费的最大涉案金额为(保留1位小数)?该案件对应的案号为?该案件的审理法院是?该法院的地址所在区县是?.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:XX有限公司对应的公司是否被限制高消费?如果是被限制高消费的最大涉案金额为(保留1位小数)?该案件对应的案号为?该案件的审理法院是?该法院的地址所在区县是? 4 | ### 5 | 大表: XzgxfInfo, CourtInfo, AddrInfo 6 | ### 7 | 字段: 限制高消费企业名称,涉案金额,案号,执行法院,法院名称, 法院地址,区县 8 | ### 9 | {{"id1": {{"task_id": "id1", 10 | "task_description": "根据公司名称查询XX有限公司是否被限制高消费以及相关案件信息,从查询结果中筛选出最大的涉案金额____,保留1位小数,并记录对应的案号____及其审理法院____(审理法院即为执行法院)", 11 | "tools": ["get_company_xzgxf_by_company_name_service"], 12 | "previous_tasks": []}}, 13 | "id2": {{"task_id": "id2", 14 | "task_description": "根据审理法院名称查询法院地址所在的区县____", 15 | "tools": ["get_court_info_service", "get_address_info_service"], 16 | "previous_tasks": ["id1"]}} 17 | }} 18 | 19 | ### 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XX法院所在的区县区划代码是多少.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题: xx法院所在的区县区划代码是多少? 4 | ### 5 | 大表: CourtInfo, AddrInfo,AddrCode 6 | ### 7 | 字段: 法院名称, 区县区划代码 8 | ### 9 | {{ 10 | "id1": {{ 11 | "task_description": "查询xx法院所在的地址是___,根据XX法院地址所在省份是___,城市是___,区县是___查询地址信息", 12 | "task_id": "id1", 13 | "tools": ["get_court_info_service", "get_address_info_service"], 14 | "previous_tasks": [] 15 | }}, 16 | 17 | "id2": 18 | {{ 19 | "task_description": "根据XX法院地址对应的省份城市区县查询区县区划代码是____", 20 | "task_id": "id2", 21 | "tools": ["get_address_code_service"], 22 | "previous_tasks": ["id1"] 23 | }} 24 | }} 25 | ### 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XX股份有限公司涉及的案件中,起诉时间发生于YY年发生的民事初审案件有几次?案号分别是?.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:XX公司涉及的案件中,起诉时间发生于YY年发生的民事初审案件有几次?案号分别是? 4 | ### 5 | 大表: LegalDoc 6 | ### 7 | 字段: 关联公司,日期,案号,标题 8 | ### 9 | {{ 10 | "id1": {{"task_id": "id1", 11 | "task_description": "根据公司XX名称查询该公司作为原告的所有涉诉案件信息(结果含多条数据),", 12 | "tools": ["get_company_involved_cases_info_service"], 13 | "previous_tasks": []}}, 14 | "id2": {{ 15 | 16 | "previous_tasks": ["id1"], 17 | "task_description": "根据公司XX的所有涉诉案件中筛选出起诉时间发生于YY年的一审民事案件,记录案件次数和案号(结果含多条数据)" 18 | "task_id": "id2", 19 | "tools": [] 20 | }} 21 | }} 22 | 23 | 24 | ### 25 | 26 | 27 | CODER_1 28 | ### 29 | 问题: 从公司XX的所有涉诉案件中筛选出起诉时间发生于YY年的一审民事案件,记录案件次数和案号(结果含多条数据) 30 | ### 31 | 调用工具:get_company_involved_cases_info_service 32 | ### 33 | 前置任务保存路径: ./cache/XXX/X_id1_get_company_involved_cases_info_service.csv 34 | ### 35 | 任务保存路径:./cache/0/0_id2 36 | ### 37 | 字段:涉诉案件,起诉时间,案件次数,案号, 一审民事 38 | 39 | ### 40 | from services.all_tools_service_register import * 41 | import traceback 42 | import pandas as pd 43 | import sys 44 | import warnings 45 | warnings.filterwarnings('ignore') 46 | 47 | 48 | 49 | try: 50 | 51 | ###任务编号id1的结果路径 52 | id1_result_path = './cache/XXX/X_id1_get_company_involved_cases_info_service.csv' 53 | 54 | ### 当前任务工具调用后的保存路径 55 | id2_result_path = './cache/0/0_id2' 56 | 57 | 58 | company_name = "XX公司" 59 | cases_info = pd.read_csv(id1_result_path) 60 | 61 | cases_info = get_company_involved_cases_info_service(company_name=company_name) 62 | if cases_info.shape[0] == 0: 63 | print("没有找到与该公司相关的涉诉案件信息。") 64 | sys.exit() 65 | 66 | # 筛选出2020年发生的民事初审案件 67 | filtered_cases_df = cases_info[(cases_info['日期'].str.contains('2020')) & 68 | (cases_info['标题'].str.contains('一审民事'))] 69 | 70 | # 记录案件次数和案号 71 | case_count = filtered_cases_df.shape[0] 72 | case_numbers = filtered_cases_df['案号'].tolist() 73 | 74 | 75 | 76 | # 打印信息 77 | print(f"2020年发生的民事初审案件数量为:{case_count}") 78 | # 保存结果 79 | filtered_cases_df.to_csv(id2_result_path, index=False) 80 | print(f"案号信息已保存至:{id2_result_path}") 81 | print(f"详细信息:{filtered_cases_df.info()}") 82 | except Exception as e: 83 | error_message = traceback.format_exc() 84 | print("代码执行错误\n" + error_message) 85 | 86 | ### 87 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/XX股份有限公司的法人信息与总经理是否相同?该公司是否被限制高消费了?如果被限制高消费的话,最高涉案金额为多少元?该案件的案号为?调用了多少类API?.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:XX股份有限公司的法人信息与总经理是否相同?该公司是否被限制高消费了?如果被限制高消费的话,最高涉案金额为多少元?该案件的案号为?调用了多少类API? 4 | ### 5 | 大表:CompanyInfo, XzgxfInfo 6 | ### 7 | 字段:公司名称, 法人代表, 总经理, 限制高消费企业名称, 涉案金额, 案号 8 | ### 9 | {{"id1": {{"task_id": "id1", 10 | "task_description": "查询XX股份有限公司的法人代表和总经理信息是否相同", 11 | "tools": ["get_listed_company_info_service"], 12 | "previous_tasks": []}}, 13 | "id2": {{"task_id": "id2", 14 | "task_description": "查询XX股份有限公司是否被限制高消费", 15 | "tools": ["get_company_xzgxf_by_company_name_service"], 16 | "previous_tasks": []}}, 17 | "id3": {{"task_id": "id3", 18 | "task_description": "如果XX股份有限公司被限制高消费,查询最高涉案金额____及对应的案号____", 19 | "tools": ["get_company_xzgxf_by_company_name_service"], 20 | "previous_tasks": ["id2"]}}, 21 | "id4": {{"task_id": "id4", 22 | "task_description": "统计调用的API类别数量____", 23 | "tools": [], 24 | "previous_tasks": ["id1", "id2", "id3"]}} 25 | }} 26 | 27 | ### 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/代码为XX的公司的子公司是否有涉诉?是否存在YY年在ZZ审理的财产损害案件?如果有,该涉诉子公司的注册资本是多少?被XX投资的金额为?.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:代码为XX的公司的子公司是否有涉诉?是否存在YY年在地址ZZ审理的财产损害案件?如果有,该涉诉子公司的注册资本是多少?被XX投资的金额为? 4 | ### 5 | 大表: SubCompanyInfo, CompanyInfo, CompanyRegister, LegalDoc, CourtInfo 6 | ### 7 | 字段: 母公司全称,公司名称, 注册资本, 子公司, 涉诉, 投资金额 8 | ### 9 | {{ 10 | "id1": {{ 11 | "previous_tasks": [], 12 | "task_description": "根据公司代码XX查询公司全称是___, 在查询其子公司信息列表(含多个结果)", 13 | "task_id": "id1", 14 | "tools": ["get_company_info_service_by_code","get_listed_sub_company_info_service_by_parent_company_name"] 15 | }}, 16 | "id2": {{ 17 | "previous_tasks": ["id1"], 18 | "task_description": "查询公司代码为XX的公司的所有子公司的涉诉信息合并成一张表,筛选出日期在YY年且案由为财产损害的案件", 19 | "task_id": "id1", 20 | "tools": ["get_company_involved_cases_info_service"] 21 | }}, 22 | "id3": {{ 23 | "previous_tasks": ["id2"], 24 | "task_description": "若筛选出结果不为空,根据筛选出案件的案号中法院代字查询审理该案件的法院名称,再根据该法院名称查询法院地址,判断是否为地址ZZ", 25 | "task_id": "id2", 26 | "tools": ["get_court_name_service_by_reference","get_court_info_service"] 27 | }}, 28 | "id4": {{ 29 | "previous_tasks": ["id3"], 30 | "task_description": "若存在该案件,查询该涉诉子公司的注册资金____,并通过id1返回的内容查询被XX投资的金额____", 31 | "task_id": "id3", 32 | "tools": ["get_company_register_service"] 33 | }} 34 | }} 35 | 36 | ### 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/原告是XX股份有限公司的案件审理法院是哪家法院.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:原告是XX股份有限公司的案件审理法院是哪家法院 4 | ### 5 | 大表:LegalDoc, CourtInfo 6 | ### 7 | 字段: 关联公司, 法院名称 8 | ### 9 | {{'id1': {{'previous_tasks': [], 10 | 'task_description': '根据XX公司名称查询其所有涉及案件信息(结果含多条数据),筛选出原告是XX公司的案件信息(结果含多条数据)', 11 | 'task_id': 'id1', 12 | 'tools': ['get_company_involved_cases_info_service']}}, 13 | 'id2': {{'previous_tasks': ['id1'], 14 | 'task_description': '通过筛选出的案件信息中的案号查找涉诉案件在哪几家法院(结果含多条数据)进行审理', 15 | 'task_id': 'id2', 16 | 'tools': ['get_court_name_service_by_reference']}} 17 | }} 18 | ### 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/查询XX公司所有子公司的统一社会代码和区县信息.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题: 查询XX公司所有子公司的统一社会代码和注册地址所在区县信息 4 | ### 5 | 大表: SubCompanyInfo, CompanyRegister, AddrInfo 6 | ### 7 | 字段: 关联上市公司全称,公司名称, 统一社会信用代码, 企业地址, 区县 8 | ### 9 | {{ 10 | "id1":{{ 11 | "task_id":"id1", 12 | "task_description": "根据XX公司名称查询XX公司所有子公司(结果含多条数据)", 13 | "tools":["get_listed_sub_company_info_service_by_parent_company_name"], 14 | "previous_tasks": [] 15 | }}, 16 | "id2":{{ 17 | "task_id":"id2", 18 | "task_description": "根据所有子公司的公司名称查询他们对应的统一信用代码和企业地址(结果含多条数据)", 19 | "tools":["get_company_register_service"], 20 | "previous_tasks": ["id1"] 21 | }}, 22 | "id3":{{ 23 | "task_id":"id3", 24 | "task_description": "根据所有子公司的企业地址查询他们对应的区县信息(结果含多条数据)", 25 | "tools":["get_address_info_service"], 26 | "previous_tasks": ["id1","id2"] 27 | }} 28 | }} -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/统一社会信用吗91110114M0000JUP7F这家公司被投资了多少万.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:统一社会信用码为91110114M0000JUP7F这家公司被投资了多少万 4 | ### 5 | 大表: 6 | ### 7 | 字段: XXX 8 | ### 9 | {{ 10 | "id1":{{ 11 | "task_id":"id1", 12 | "task_description": "根据1110114M0000JUP7F统一社会信用代码公司查询其公司名称", 13 | "tools":["get_company_name_by_uniform_social_code_service"], 14 | "previous_tasks": [] 15 | }}, 16 | "id2":{{ 17 | "task_id":"id2", 18 | "task_description": "根据1110114M0000JUP7F所查出来的公司名称查询它被投资了多少万", 19 | "tools":[""get_parent_company_info_by_child_company_name_service"], 20 | "previous_tasks": ["id1"] 21 | }} 22 | }} -------------------------------------------------------------------------------- /public24_LawGLM/docs/few-shot/请问一下,公司代码300674的法定代表人及工商电话注册资本是多少亿元?请保留2位小数。该题目API调用串行次数为.txt: -------------------------------------------------------------------------------- 1 | PLAN 2 | ### 3 | 问题:请问一下,公司代码300674的法定代表人及工商电话注册资本是多少亿元?请保留2位小数。该题目API调用串行次数为 4 | ### 5 | 大表:CompanyInfo,CompanyRegister 6 | ### 7 | 字段: 8 | ### 9 | {{ 10 | "id1": {{ 11 | "task_id": "id1", 12 | "task_description": "根据公司代码300674查询公司名称____", 13 | "tools": ["get_company_info_service_by_code"], 14 | "previous_tasks": [] 15 | }}, 16 | "id2": {{ 17 | "task_id": "id2", 18 | "task_description": "根据公司名称____查询其法定代表人____及工商电话____注册资本是多少亿元____保留2位小数。", 19 | "tools": ["get_company_register_service"], 20 | "previous_tasks": ["id1"] 21 | }}, 22 | "id3": {{ 23 | "task_id": "id3", 24 | "task_description": "统计API调用串行次数", 25 | "tools": [], 26 | "previous_tasks": ["id1", "id2"] 27 | }} 28 | }} 29 | ### 30 | 31 | 32 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/10号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 10 号API接口函数 根据法院名称查询法院相关信息。 2 | 3 | ``` 4 | def get_court_info_service(court_name: Annotated[str, "法院全称", True],need_fields: Annotated[str, "需要返回的字段列表 例如[法院名称,法院负责人,法院地址]", True]) -> str: 5 | """ 6 | 根据法院名称查询法院地理位置和负责人等相关信息。 7 | 8 | 参数: 9 | court_name -- 法院名称,例如"上海市浦东新区人民法院" 10 | need_fields -- 需要返回的字段列表,例如[法院名称, 法院负责人, 成立日期, 法院地址, 法院联系电话, 法院官网],need_fields传入空,则表示返回所有字段,否则返回填入的字段 11 | 12 | 例如: 13 | 输入: 14 | court_name = "上海市浦东新区人民法院" 15 | 输出: 16 | {'法院名称': '上海市浦东新区人民法院', 17 | '法院负责人': '朱丹', 18 | '成立日期': '2019-05-16', 19 | '法院地址': '上海市浦东新区丁香路611号', 20 | '法院联系电话': '-', 21 | '法院官网': '-'} 22 | """ 23 | ``` 24 | ### 例子: 25 | ### 1. 26 | ##### 输入 27 | ``` 28 | get_court_info({"法院名称": "上海市浦东新区人民法院"}) 29 | ``` 30 | #### 输出 31 | ``` 32 | {'法院名称': '上海市浦东新区人民法院', 33 | '法院负责人': '朱丹', 34 | '成立日期': '2019-05-16', 35 | '法院地址': '上海市浦东新区丁香路611号', 36 | '法院联系电话': '-', 37 | '法院官网': '-'} 38 | ``` 39 | ### 2. 40 | #### 输入 41 | ``` 42 | {"法院名称": "四川省高级人民法院"} 43 | ``` 44 | #### 输出 45 | ``` 46 | {'法院名称': '四川省高级人民法院', 47 | '法院负责人': '王树江', 48 | '成立日期': '2018-05-08', 49 | '法院地址': '四川省成都市青羊区正府街108号', 50 | '法院联系电话': '028-86960000', 51 | '法院官网': 'https://www.scssfw.gov.cn'} 52 | ``` 53 | ### 3. 54 | #### 输入 55 | ``` 56 | {"法院名称": "安徽省高级人民法院"} 57 | ``` 58 | #### 输出 59 | ``` 60 | {'法院名称': '安徽省高级人民法院', 61 | '法院负责人': '张坚', 62 | '成立日期': '2016-04-21', 63 | '法院地址': '合肥市长江西路472号', 64 | '法院联系电话': '-', 65 | '法院官网': 'http://www.ahgyss.cn'} 66 | ``` -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/11号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 11 号API接口函数 根据法院名称或者法院代字查询法院等相关数据。 2 | ``` 3 | def get_court_code_service(court_name: Annotated[str, "法院名称\法院代字", True],need_fields: Annotated[str, "需要返回的字段列表 例如[法院名称,法院代字,行政级别]", True]) -> str: 4 | """ 5 | 根据法院名称或者法院代字查询法院级别和代号等相关数据。 6 | 7 | 参数: 8 | court_name -- 法院名称或者法院代字,例如"上海市浦东新区人民法院"或者"沪0115" 9 | need_fields -- 需要返回的字段列表,例如[法院名称,行政级别,法院级别,法院代字,区划代码,级别],need_fields传入空,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | {"法院名称": "上海市浦东新区人民法院"} 14 | 输出: 15 | {'法院名称': '上海市浦东新区人民法院', 16 | '行政级别': '市级', 17 | '法院级别': '基层法院', 18 | '法院代字': '沪0115', 19 | '区划代码': '310115', 20 | '级别': '1'} 21 | """ 22 | ``` 23 | ### 例子: 24 | ### 法院名称 25 | ##### 输入 26 | ``` 27 | {"法院名称": "上海市浦东新区人民法院", "need_fields":["法院名称","行政级别","法院级别","法院代字","区划代码","级别"]} 28 | ``` 29 | #### 输出 30 | ``` 31 | {'法院名称': '上海市浦东新区人民法院', 32 | '行政级别': '市级', 33 | '法院级别': '基层法院', 34 | '法院代字': '沪0115', 35 | '区划代码': '310115', 36 | '级别': '1'} 37 | 38 | ``` 39 | ### 法院代字 40 | #### 输入 41 | ``` 42 | {"法院代字": "吉24","need_fields":[] } 43 | ``` 44 | #### 输出 45 | ``` 46 | {'法院名称': '延边朝鲜族自治州中级人民法院', 47 | '行政级别': '市级', 48 | '法院级别': '中级法院', 49 | '法院代字': '吉24', 50 | '区划代码': '222400', 51 | '级别': '1'} 52 | ``` -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/12号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 12 号API接口函数 根据律师事务所名称查询律师事务所信息。 2 | ``` 3 | def get_lawfirm_info_service(law_firm_name: Annotated[str, "律师事务所名称", True],need_fields: Annotated[str, "需要返回的字段列表 例如 [律师事务所名称, 律师事务所唯一编码, 律师事务所负责人, 事务所注册资本]", True] ) -> str: 4 | """ 5 | 根据律师事务所名称查询律师事务所信息。 6 | 7 | 参数: 8 | law_firm_name -- 律师事务所名称,例如"北京市金杜律师事务所" 9 | need_fields -- 需要返回的字段列表,例如[律师事务所名称, 律师事务所唯一编码, 律师事务所负责人, 事务所注册资本, 事务所成立日期, 律师事务所地址, 通讯电话, 通讯邮箱, 律所登记机关] 10 | 11 | 例如: 12 | 输入: 13 | law_firm_name = "爱德律师事务所" 14 | 输出: 15 | {'律师事务所名称': '爱德律师事务所', 16 | '律师事务所唯一编码': '31150000E370803331', 17 | '律师事务所负责人': '巴布', 18 | '事务所注册资本': '10万元人民币', 19 | '事务所成立日期': '1995-03-14', 20 | '律师事务所地址': '呼和浩特市赛罕区大学西街110号丰业大厦11楼', 21 | '通讯电话': '0471-3396155', 22 | '通讯邮箱': 'kehufuwubu@ardlaw.cn', 23 | '律所登记机关': '内蒙古自治区呼和浩特市司法局'} 24 | """ 25 | ``` 26 | ### 例子: 27 | ### 律师事务所名称 28 | ##### 输入 29 | ``` 30 | {"律师事务所名称": "广东鹏鼎律师事务所", "need_fields":["律师事务所地址", "通讯电话", "通讯邮箱"]} 31 | ``` 32 | #### 输出 33 | ``` 34 | {'律师事务所地址': '龙华街道华联社区龙观路90号三楼', 35 | '通讯电话': '13612861696', 36 | '通讯邮箱': 'cqz1705@163.com'} 37 | 38 | ``` 39 | ### 律师事务所名称 40 | ##### 输入 41 | ``` 42 | {"律师事务所名称": "河南良承律师事务所", "need_fields":[]} 43 | ``` 44 | #### 输出 45 | ``` 46 | {'律师事务所名称': '河南良承律师事务所', 47 | '律师事务所唯一编码': '3141000068819464X4', 48 | '律师事务所负责人': '王振生', 49 | '事务所注册资本': '30万元人民币', 50 | '事务所成立日期': '2009-05-18', 51 | '律师事务所地址': '东明路红旗路交叉口往北100米路东金成大厦B座七楼', 52 | '通讯电话': '0371-55559666', 53 | '通讯邮箱': 'hnlclawyer@163.com', 54 | '律所登记机关': '河南省郑州市金水区司法局'} 55 | 56 | ``` 57 | 58 | ### 律师事务所名称 59 | ##### 输入 60 | ``` 61 | {"律师事务所名称": "北京国旺律师事务所", "need_fields":[]} 62 | ``` 63 | #### 输出 64 | ``` 65 | {'律师事务所名称': '北京国旺律师事务所', 66 | '律师事务所唯一编码': '31110000099826338B', 67 | '律师事务所负责人': '王柱', 68 | '事务所注册资本': '100万元人民币', 69 | '事务所成立日期': '2014-05-12', 70 | '律师事务所地址': '北京市朝阳区光华路7号9层1016、1018', 71 | '通讯电话': '010-59714226', 72 | '通讯邮箱': '-', 73 | '律所登记机关': '北京市朝阳区司法局'} 74 | ``` -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/13号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 13 号API接口函数 根据律师事务所名称查询律师事务所业务情况统计数据。 2 | ``` 3 | def get_lawfirm_business_service(law_firm_name: Annotated[str, "律师事务所名称", True],need_fields: Annotated[str, "需要返回的字段列表 例如[律师事务所名称,业务量排名]", True] ) -> str: 4 | """ 5 | 根据律师事务所名称查询律师事务所业务情况统计数据。 6 | 7 | 参数: 8 | law_firm_name -- 律师事务所名称,例如"北京市金杜律师事务所" 9 | need_fields -- 需要返回的字段列表,例如[律师事务所名称,业务量排名,服务已上市公司,报告期间所服务上市公司违规事件,报告期所服务上市公司接受立案调查],need_fields传入空,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | law_firm_name = "北京市金杜律师事务所" 14 | 输出: 15 | {'律师事务所名称': '北京市金杜律师事务所', 16 | '业务量排名': '2', 17 | '服务已上市公司': '68', 18 | '报告期间所服务上市公司违规事件': '23', 19 | '报告期所服务上市公司接受立案调查': '3'} 20 | """ 21 | ``` 22 | 23 | ### 例子: 24 | ### 律师事务所名称 25 | ##### 输入 26 | ``` 27 | {"律师事务所名称": "上海东方华银律师事务所", "need_fields":["服务已上市公司"]} 28 | ``` 29 | #### 输出 30 | ``` 31 | {'服务已上市公司': '5'} 32 | 33 | ``` 34 | ### 律师事务所名称 35 | #### 输入 36 | ``` 37 | {"律师事务所名称": "北京市金杜律师事务所","need_fields":[] } 38 | ``` 39 | #### 输出 40 | ``` 41 | {'律师事务所名称': '北京市金杜律师事务所', 42 | '业务量排名': '2', 43 | '服务已上市公司': '68', 44 | '报告期间所服务上市公司违规事件': '23', 45 | '报告期所服务上市公司接受立案调查': '3'} 46 | ``` -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/14号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 14 号API接口函数 根据实体地址查该地址对应的省份城市区县。 2 | ``` 3 | def get_address_info_service(address: Annotated[str, "地址", True],need_fields: Annotated[str, "需要返回的字段列表 例如[地址,省份,城市,区县]", True] ) -> str: 4 | """ 5 | 根据实体地址查该地址对应的省份城市区县。 6 | 7 | 参数: 8 | address -- 地址,例如"西藏自治区那曲地区安多县帕那镇中路13号" 9 | need_fields -- 需要返回的字段列表,例如[地址,省份,城市,区县],need_fields传入空,则表示返回所有字段,否则返回填入的字段 10 | 例如: 11 | 输入: 12 | address = "西藏自治区那曲地区安多县帕那镇中路13号" 13 | 输出: 14 | {'地址': '西藏自治区那曲地区安多县帕那镇中路13号', 15 | '省份': '西藏自治区', 16 | '城市': '那曲市', 17 | '区县': '安多县'} 18 | """ 19 | ``` 20 | 21 | ### 例子: 22 | ### 地址 23 | #### 输入 24 | ``` 25 | {"地址": "西藏自治区那曲地区安多县帕那镇中路13号", "need_fields":["地址","省份","城市","区县"]} 26 | ``` 27 | #### 输出 28 | ``` 29 | {'地址': '西藏自治区那曲地区安多县帕那镇中路13号', '省份': '西藏自治区', '城市': '那曲市', '区县': '安多县'} 30 | ``` 31 | ### 地址 32 | #### 输入 33 | ``` 34 | {"地址": "合肥高新区科学大道91号", "need_fields":[]} 35 | ``` 36 | #### 输出 37 | ``` 38 | {'地址': '合肥高新区科学大道91号', '省份': '安徽省', '城市': '合肥市', '区县': '蜀山区'} 39 | ``` 40 | 41 | ### 地址 42 | #### 输入 43 | ``` 44 | {"地址": "北京市海淀区清华东路9号创达大厦5层506室", "need_fields":["地址","省份","城市","区县"]} 45 | ``` 46 | #### 输出 47 | ``` 48 | {'地址': '北京市海淀区清华东路9号创达大厦5层506室', '省份': '北京市', '城市': '北京市', '区县': '海淀区'} 49 | ``` 50 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/15号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 15号API接口函数 根据省,市,区一同查询区划代码 2 | ``` 3 | def get_address_code_service(province: Annotated[str, "省份", True],city: Annotated[str, "城市", True],county: Annotated[str, "区县", True],need_fields: Annotated[str, "需要返回的字段列表", True] ) -> str: 4 | """ 5 | 根据省,市,区一同查询区划代码。 6 | 7 | 参数: 8 | province -- 省份,例如"西藏自治区" 9 | city -- 城市,例如"拉萨市" 10 | county -- 区县,例如"城关区" 11 | need_fields -- 需要返回的字段列表,例如[省份,城市,城市区划代码,区县,区县区划代码],need_fields传入空,则表示返回所有字段,否则返回填入的字段 12 | 13 | 例如: 14 | 输入: 15 | province = "西藏自治区",city = "拉萨市",county = "城关区" 16 | 输出: 17 | {'省份': '西藏自治区', 18 | '城市': '拉萨市', 19 | '城市区划代码': '540100000000', 20 | '区县': '城关区', 21 | '区县区划代码': '540102000000'} 22 | """ 23 | 24 | ``` 25 | 26 | ### 例子: 27 | ### 省份、城市、区县 28 | #### 输入 29 | ``` 30 | {"省份": "西藏自治区", "城市": "拉萨市", "区县": "城关区", "need_fields":["省份","城市","区县","城市区划代码","区县区划代码"]} 31 | ``` 32 | #### 输出 33 | ``` 34 | {'省份': '西藏自治区', 35 | '城市': '拉萨市', 36 | '城市区划代码': '540100000000', 37 | '区县': '城关区', 38 | '区县区划代码': '540102000000'} 39 | 40 | ``` 41 | ### 省份、城市、区县 42 | #### 输入 43 | ``` 44 | {"省份": "北京市", "城市": "北京市", "区县": "密云区", "need_fields":["省份","城市","区县","城市区划代码","区县区划代码"]} 45 | ``` 46 | #### 输出 47 | ``` 48 | {'省份': '北京市', 49 | '城市': '北京市', 50 | '城市区划代码': '110100000000', 51 | '区县': '密云区', 52 | '区县区划代码': '110118000000'} 53 | ``` 54 | 55 | ### 省份、城市、区县 56 | #### 输入 57 | ``` 58 | {"省份": "浙江省", "城市": "丽水市", "区县": "景宁畲族自治县", "need_fields":["区县区划代码"]} 59 | ``` 60 | #### 输出 61 | ``` 62 | {'区县区划代码': '331127000000'} 63 | 64 | ``` -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/16号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 16号API接口函数 根据日期及省份城市查询天气相关信息。 2 | ``` 3 | def get_temperature_info_service(province: Annotated[str, "省份", True],city: Annotated[str, "城市", True],date: Annotated[str, "日期", True],need_fields: Annotated[str, "需要返回的字段列表", True] ) -> str: 4 | """ 5 | 根据日期及省份城市查询天气相关信息。 6 | 7 | 参数: 8 | province -- 省份,例如"北京市" 9 | city -- 城市,例如"北京市" 10 | date -- 日期,例如"2020年1月1日" 11 | need_fields -- 需要返回的字段列表,例如[日期,省份,城市,天气,最高温度,最低温度,湿度],need_fields传入空,则表示返回所有字段,否则返回填入的字段 12 | 13 | 例如: 14 | 输入: 15 | province = "北京市",city = "北京市",date = "2020年1月1日" 16 | 输出: 17 | {'日期': '2020年1月1日', 18 | '省份': '北京市', 19 | '城市': '北京市', 20 | '天气': '晴', 21 | '最高温度': '11', 22 | '最低温度': '1', 23 | '湿度': '55'} 24 | """ 25 | ``` 26 | 27 | ### 例子: 28 | ### 1 29 | #### 输入 30 | ``` 31 | '省份': "四川省", 32 | '城市': "成都市", '日期': "2019年12月11日" 33 | ``` 34 | #### 输出 35 | ``` 36 | '{"日期": "2019年12月11日", "省份": "四川省", "城市": "成都市", "天气": "晴", "最高温度": "16", "最低温度": "1", "湿度": "55"}' 37 | ``` 38 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/17号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 17号API接口函数 根据案号查询案件的文本摘要,仅含有总结案件的摘要信息。 2 | ``` 3 | def get_legal_abstract_service(reference: Annotated[str, "案号", True],need_fields: Annotated[str, "需要返回的字段列表", True] ) -> str: 4 | """ 5 | 根据案号查询案件的文本摘要,仅含有总结案件的摘要信息。 6 | 7 | 参数: 8 | reference -- 案号,例如"(2019)沪0115民初61975号" 9 | need_fields -- 需要返回的字段列表,例如[文件名,案号,文本摘要],need_fields传入空,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | reference = "(2019)沪0115民初61975号" 14 | 输出: 15 | {'文件名': '(2019)沪0115民初61975号.txt', 16 | '案号': '(2019)沪0115民初61975号', 17 | '文本摘要': '原告上海爱斯达克汽车空调系统有限公司与被告上海逸测检测技术服务有限公司因服务合同纠纷一案,原告请求被告支付检测费1,254,802.58元、延迟履行违约金71,399.68元及诉讼费用。被告辩称,系争合同已终止,欠款金额应为499,908元,且不认可违约金。\n法院认为,原告与腾双公司签订的测试合同适用于原被告,原告提供的测试服务应得到被告支付。依照《中华人民共和国合同法》第六十条、第一百零九条,《中华人民共和国民事诉讼法》第六十四条第一款,《最高人民法院关于适用〈中华人民共和国民事诉讼法〉的解释》第九十条之规定判决被告支付原告检测费1,254,802.58元及违约金71,399.68元。'} 18 | """ 19 | ``` 20 | 21 | ### 例子: 22 | ### 1 23 | #### 输入 24 | ``` 25 | {"案号": "(2019)兵08财保8号", "need_fields":[]} 26 | ``` 27 | #### 输出 28 | ``` 29 | '{"文件名": "(2019)兵08财保8号.txt", "案号": "(2019)兵08财保8号", "文本摘要": "原告新疆天富能源股份有限公司请求法院冻结被告新疆晶鑫硅业有限公司在中国银行玛纳斯县的资金或者查封、扣押其等值财产,并提供担保,理由是申请保全措施符合《中华人民共和国民事诉讼法》第一百零一条第一款规定。被告新疆晶鑫硅业有限公司未答辩。审理查明,申请人于2019年12月3日向法院申请诉前财产保全。本院认为,根据《中华人民共和国民事诉讼法》相关规定,裁定冻结被申请人银行账户资金或者查封扣押其等值财产,并查封申请人所有的位于石河子市城区西一路47号、49号、51号六层综合楼,案件申请费5000元由申请人负担。如不服本裁定,可以自收到裁定书之日起五日内向本院申请复议一次,复议期间不停止裁定的执行。申请人在人民法院采取保全措施后三十日内不依法提起诉讼或者申请仲裁的,本院将依法解除保全。"}' 30 | ``` 31 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/18号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 18号API接口函数 根据案号查询限制高消费相关信息 2 | ``` 3 | def get_xzgxf_info_by_reference_service(query_conds: dict,need_fields: List[str] = []) -> dict: 4 | """ 5 | 根据案号查询限制高消费相关信息。 6 | 7 | 参数: 8 | query_conds -- 查询条件字典,例如{"案号": "(2018)鲁0403执1281号"} 9 | need_fields -- 需要返回的字段列表,例如["限制高消费企业名称","案号","法定代表人","申请人","涉案金额","执行法院","立案日期","限高发布日期"],need_fields传入空列表,则表示返回所有字段,否则返回填入的字段 10 | 11 | 例如: 12 | 输入: 13 | {"案号": "(2018)鲁0403执1281号"} 14 | 输出: 15 | {'限制高消费企业名称': '枣庄西能新远大天然气利用有限公司', 16 | '案号': '(2018)鲁0403执1281号', 17 | '法定代表人': '高士其', 18 | '申请人': '枣庄市人力资源和社会保障局', 19 | '涉案金额': '12000', 20 | '执行法院': '山东省枣庄市薛城区人民法院', 21 | '立案日期': '2018-11-16 00:00:00', 22 | '限高发布日期': '2019-02-13 00:00:00'} 23 | """ 24 | 25 | ``` 26 | 27 | ### 例子: 28 | ### 1 29 | #### 输入 30 | ``` 31 | {"案号": "(2018)鲁0403执1281号"", "need_fields":["限制高消费企业名称","案号","法定代表人","申请人","涉案金额","执行法院","立案日期","限高发布日期"]} 32 | ``` 33 | #### 输出 34 | ``` 35 | {'限制高消费企业名称': '枣庄西能新远大天然气利用有限公司', 36 | '案号': '(2018)鲁0403执1281号', 37 | '法定代表人': '高士其', 38 | '申请人': '枣庄市人力资源和社会保障局', 39 | '涉案金额': '12000', 40 | '执行法院': '山东省枣庄市薛城区人民法院', 41 | '立案日期': '2018-11-16 00:00:00', 42 | '限高发布日期': '2019-02-13 00:00:00'} 43 | 44 | ``` 45 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/1号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 1 号API接口函数 根据公司简称,获得该公司对应的基本信息 2 | 3 | ``` 4 | def get_company_info_service_by_abbreviation(company_abbreviation: Annotated[str, "公司简称", True],need_fields: Annotated[str, "需要返回的字段列表 例如 [公司名称, 公司代码, 主营业务]", True]): 5 | """ 6 | 根据公司简称,获得该公司对应的基本信息。 7 | """ 8 | need_fields = keywords_parser(need_fields) 9 | rsp = get_company_info(query_conds={"公司简称": company_abbreviation},need_fields=need_fields) 10 | json_str = json.dumps(rsp, ensure_ascii=False) 11 | return json_str 12 | ``` 13 | 14 | ### 例子: 15 | ### 1 16 | ##### 输入 17 | ``` 18 | company_abbreviation="安利股份",need_fields=[] 19 | ``` 20 | #### 输出 21 | ``` 22 | {"公司名称": "安徽安利材料科技股份有限公司", "公司简称": "安利股份", "英文名称": "Anhui Anli Material Technology Co., Ltd.", "关联证券": "", "公司代码": "300218", "曾用简称": "", "所属市场": "深交所创业板", "所属行业": "橡胶和塑料制品业", "成立日期": "1994-07-12", "上市日期": "2011-05-18", "法人代表": "姚和平", "总经理": "姚和平", "董秘": "刘松霞", "邮政编码": "230093", "注册地址": "安徽省合肥市经济技术开发区桃花工业园拓展区(繁华大道与创新大道交叉口)", "办公地址": "XXX"} 23 | 24 | ``` 25 | ### 2 26 | #### 输入 27 | 28 | company_abbreviation="海天精工",need_fields=[] 29 | ``` 30 | 输出 31 | {"公司名称": "宁波海天精工股份有限公司", "公司简称": "海天精工", "英文名称": "Ningbo Haitian Precision Machinery Co., Ltd.", "关联证券": "", "公司代码": "601882", "曾用简称": "", "所属市场": "上交所", "所属行业": "通用设备制造业", "成立日期": "2002-04-10", "上市日期": "2016-11-07", "法人代表": "张静章", "总经理": "王焕卫", "董秘": "谢精斌", "邮政编码": "315800", "注册地址": "浙江省宁波市北仑区黄山西路235号", "办公地址": "浙江省宁波市北仑区黄山西路235号", "联系电话": "0574-86188839", "传真": "0574-86182747", "官方网址": "www.haitianprecision.com", "电子邮箱": "jgzq@mail.haitian.com", "入选指数": "国证2000,国证A指,上证380", "主营业务": "XXX"} 32 | ``` 33 | 34 | 35 | ### 3 36 | #### 输入 37 | ``` 38 | company_abbreviation="天通股份",need_fields=['公司代码','公司名称'] 39 | ``` 40 | 41 | #### 输出 42 | ``` 43 | {"公司代码": "600330", "公司名称": "天通控股股份有限公司"} 44 | ``` 45 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/20号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 20 号API接口函数 求和,可以对传入的int、float、str数组进行求和,str数组只能转换字符串里的千万亿,如"1万" 2 | 3 | ``` 4 | def get_sum(nums: Union[List[float], List[str], List[int]]): 5 | """ 6 | 求和,可以对传入的int、float、str数组进行求和,str数组只能转换字符串里的千万亿,如"1万" 7 | 8 | 参数: 9 | nums -- 10 | 11 | """ 12 | ``` 13 | 14 | ### 例子: 15 | ### 1 16 | ##### 输入 17 | ``` 18 | {"公司名称": "上海妙可蓝多食品科技股份有限公司","need_fields": ["公司名称", "公司代码", "主营业务"]} 19 | ``` 20 | #### 输出 21 | ``` 22 | {'公司名称': '上海妙可蓝多食品科技股份有限公司', 23 | '公司代码': '600882', 24 | '主营业务': '以奶酪、液态奶为核心的特色乳制品的研发、生产和销售,同时公司也从事以奶粉、黄油为主的乳制品贸易业务。'} 25 | 26 | ``` 27 | ### 2 28 | #### 输入 29 | 30 | {"公司简称": "海天精工","need_fields":["公司名称", "法人代表", "主营业务","办公地址","联系电话"] } 31 | ``` 32 | 输出 33 | {'公司名称': '宁波海天精工股份有限公司', 34 | '法人代表': '张静章', 35 | '主营业务': '高端数控机床的研发、生产和销售', 36 | '办公地址': '浙江省宁波市北仑区黄山西路235号', 37 | '联系电话': '0574-86188839'} 38 | ``` 39 | 40 | 41 | ### 3 42 | #### 输入 43 | ``` 44 | {"公司代码": "600882","need_fields":["公司名称", "公司简称", "主营业务","办公地址","联系电话"] } 45 | ``` 46 | 47 | #### 输出 48 | ``` 49 | {'公司名称': '上海妙可蓝多食品科技股份有限公司', 50 | '公司简称': '妙可蓝多', 51 | '主营业务': '以奶酪、液态奶为核心的特色乳制品的研发、生产和销售,同时公司也从事以奶粉、黄油为主的乳制品贸易业务。', 52 | '办公地址': '上海市浦东新区金桥路1398号金台大厦10楼', 53 | '联系电话': '021-50188700'} 54 | ``` 55 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/21号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 21 号API接口函数 排序接口,返回按照values排序的keys 2 | 3 | ``` 4 | def rank(keys: List[Any], values: List[float], is_desc: bool = False): 5 | ''' 6 | 排序接口,返回按照values排序的keys 7 | 8 | 参数: 9 | keys -- 10 | values -- 11 | is_desc -- 12 | ''' 13 | return [i[0] for i in sorted(zip(keys, values), key=lambda x: x[1], reverse=is_desc)] 14 | ``` 15 | 16 | ### 例子: 17 | ### 1 18 | ##### 输入 19 | ``` 20 | {"公司名称": "上海妙可蓝多食品科技股份有限公司","need_fields": ["公司名称", "公司代码", "主营业务"]} 21 | ``` 22 | #### 输出 23 | ``` 24 | {'公司名称': '上海妙可蓝多食品科技股份有限公司', 25 | '公司代码': '600882', 26 | '主营业务': '以奶酪、液态奶为核心的特色乳制品的研发、生产和销售,同时公司也从事以奶粉、黄油为主的乳制品贸易业务。'} 27 | 28 | ``` 29 | ### 2 30 | #### 输入 31 | 32 | {"公司简称": "海天精工","need_fields":["公司名称", "法人代表", "主营业务","办公地址","联系电话"] } 33 | ``` 34 | 输出 35 | {'公司名称': '宁波海天精工股份有限公司', 36 | '法人代表': '张静章', 37 | '主营业务': '高端数控机床的研发、生产和销售', 38 | '办公地址': '浙江省宁波市北仑区黄山西路235号', 39 | '联系电话': '0574-86188839'} 40 | ``` 41 | 42 | 43 | ### 3 44 | #### 输入 45 | ``` 46 | {"公司代码": "600882","need_fields":["公司名称", "公司简称", "主营业务","办公地址","联系电话"] } 47 | ``` 48 | 49 | #### 输出 50 | ``` 51 | {'公司名称': '上海妙可蓝多食品科技股份有限公司', 52 | '公司简称': '妙可蓝多', 53 | '主营业务': '以奶酪、液态奶为核心的特色乳制品的研发、生产和销售,同时公司也从事以奶粉、黄油为主的乳制品贸易业务。', 54 | '办公地址': '上海市浦东新区金桥路1398号金台大厦10楼', 55 | '联系电话': '021-50188700'} 56 | ``` 57 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/22号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 22 号API接口函数 通过传入结构化信息,制作生成公司数据报告(demo) 2 | 3 | ``` 4 | def save_dict_list_to_word(company_name: str, dict_list: str): 5 | """ 6 | 通过传入结构化信息,制作生成公司数据报告(demo)。 7 | 8 | 参数: 9 | company_name -- 公司名称 10 | dict_list -- 根据需要传入结构化信息 11 | """ -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/27号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 27号API接口函数 根据案号返回法院名称 2 | 3 | ``` 4 | def get_court_code_service_by_reference(reference: Annotated[str, "案号", True]) -> str: 5 | """ 6 | 根据案号返回法院名称 7 | 8 | 参数: 9 | reference -- 案号 10 | 11 | 例如: 12 | 输入: 13 | reference="(2020)渝0112民初27463号" 14 | 输出: 15 | '"{\\"法院名称\\": \\"重庆市渝北区人民法院\\"}"' 16 | """ 17 | pattern = re.compile(r'[\u4e00-\u9fa5](\d+)') 18 | match = pattern.search(reference) 19 | result = match.group(0) if match else None 20 | rsp = get_court_code_service(court_name=result,need_fields=["法院名称"]) 21 | json_str = json.dumps(rsp, ensure_ascii=False) 22 | return json_str 23 | ``` 24 | 25 | ### 例子: 26 | ### 1 27 | ##### 输入 28 | ``` 29 | reference="(2020)渝0112民初27463号" 30 | ``` 31 | #### 输出 32 | ``` 33 | '"{\\"法院名称\\": \\"重庆市渝北区人民法院\\"}"' 34 | 35 | ``` 36 | ### 2 37 | #### 输入 38 | ``` 39 | reference="(2019)京0101民初11731号" 40 | ``` 41 | 输出 42 | '"{\\"法院名称\\": \\"北京市东城区人民法院\\"}"' 43 | ``` 44 | 45 | 46 | ### 3 47 | #### 输入 48 | ``` 49 | "涉诉案号(2019)京0101民初17740号让我有点烦恼" 50 | ``` 51 | 52 | #### 输出 53 | ``` 54 | '"{\\"法院名称\\": \\"北京市东城区人民法院\\"}"' 55 | ``` 56 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/2号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 2 号API接口函数 根据公司代码,获得该公司对应的基本信息 2 | 3 | ``` 4 | def get_company_info_service_by_code(company_code: Annotated[str, "公司代码", True],need_fields: Annotated[str, "需要返回的字段列表 例如 [公司名称, 公司代码, 主营业务]", True]): 5 | """ 6 | 根据公司代码, 公司股票代码,获得该公司对应的基本信息。 7 | """ 8 | 9 | ``` 10 | 11 | ### 例子: 12 | ### 1 13 | ##### 输入 14 | ``` 15 | company_code="688579",need_fields=[] 16 | ``` 17 | #### 输出 18 | ``` 19 | {"公司名称": "山大地纬软件股份有限公司", "公司简称": "山大地纬", "英文名称": "Dareway Software Co., Ltd.", "关联证券": "", "公司代码": "688579", "曾用简称": "", "所属市场": "上交所科创板", "所属行业": "软件和信息技术服务业", "成立日期": "1992-11-19", "上市日期": "2020-07-17", "法人代表": "郑永清", "总经理": "史玉良", "董秘": "张建军", "邮政编码": "250200", "注册地址": "山东省济南市章丘区文博路1579号", "办公地址": "山东省济南市章丘区文博路1579号", "联系电话": "0531-58215506", "传真": "0531-58215555", "官方网址": "www.dareway.com.cn", "电子邮箱": "ir@dareway.com.cn", "入选指数": "", "主营业务": "XXX", "机构简介": "XXXX", "每股面值": "1.0", "首发价格": "8.12", "首发募资净额": "28001.446", "首发主承销商": "民生证券股份有限公司"} 20 | 21 | ``` 22 | ### 2 23 | #### 输入 24 | 25 | company_code="301012",need_fields=['公司名称'] 26 | ``` 27 | 输出 28 | {"公司名称": "江苏扬电科技股份有限公司"} 29 | ``` 30 | 31 | 32 | ### 3 33 | #### 输入 34 | ``` 35 | company_code="688579",need_fields=['公司名称'] 36 | ``` 37 | 38 | #### 输出 39 | ``` 40 | {"公司名称": "山大地纬软件股份有限公司"} 41 | ``` 42 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/4号API接口文档 .md: -------------------------------------------------------------------------------- 1 | ## 4 号API接口函数 根据公司的统一社会信用代码查询公司名称 2 | 3 | ``` 4 | def get_company_register_name_service(Uniform_social_redit_code: Annotated[str, "公司的统一社会信用代码", True]) -> str: 5 | """ 6 | 根据公司的统一社会信用代码查询公司名称,注意统一社会信用代码为18位字符串。 7 | 8 | 参数: 9 | Uniform_social_redit_code -- 统一社会信用代码,例如"913305007490121183 10 | 11 | 例如: 12 | 输入: 13 | Uniform_social_redit_code = "913305007490121183" 14 | 输出: 15 | {'公司名称': '天能电池集团股份有限公司'} 16 | """ 17 | ``` 18 | 19 | ### 例子: 20 | ### 1 21 | ##### 输入 22 | ``` 23 | Uniform_social_redit_code="913310007200456372" 24 | ``` 25 | #### 输出 26 | ``` 27 | {"公司名称": "浙江百达精工股份有限公司"} 28 | 29 | ``` 30 | ### 2 31 | #### 输入 32 | 33 | Uniform_social_redit_code="91420100568359390C" 34 | ``` 35 | 输出 36 | {"公司名称": "武汉光庭信息技术股份有限公司"} 37 | ``` 38 | 39 | 40 | ### 3 41 | #### 输入 42 | ``` 43 | Uniform_social_redit_code="91370000164102345T" 44 | ``` 45 | 46 | #### 输出 47 | ``` 48 | '{"公司名称": "上海妙可蓝多食品科技股份有限公司"}' 49 | ``` 50 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/5号API接口文档 .md: -------------------------------------------------------------------------------- 1 | ## 5 号API接口函数 根据被投资的子公司名称获得投资该公司的母公司名称、投资比例、投资金额等信息 2 | 3 | ``` 4 | def get_parent_company_info_service(sub_company_name: Annotated[str, "子公司全称", True]) -> str: 5 | """ 6 | 根据被投资的子公司名称获得投资该公司的母公司名称、投资比例、投资金额等信息。 7 | 8 | 参数: 9 | sub_company_name -- 被投资的子公司全称,例如"上海爱斯达克汽车空调系统有限公司" 10 | 例如: 11 | 输入: 12 | sub_company_name = "上海爱斯达克汽车空调系统有限公司" 13 | 输出: 14 | {'母公司全称': '上海航天汽车机电股份有限公司', '母公司参股比例': '87.5', '母公司投资金额': '8.54亿', '子公司名称': '上海爱斯达克汽车空调系统有限公司'} 15 | """ 16 | ``` 17 | 18 | ### 例子: 19 | ### 1 20 | ##### 输入 21 | ``` 22 | sub_company_name="廊坊市凯宏家居广场有限公司",need_fields=['关联上市公司全称'] 23 | ``` 24 | #### 输出 25 | ``` 26 | {"母公司全称": "红星美凯龙家居集团股份有限公司"} 27 | 28 | ``` 29 | ### 2 30 | #### 输入 31 | 32 | sub_company_name="山西振东医药有限公司",need_fields=['关联上市公司全称','上市公司参股比例'] 33 | ``` 34 | 输出 35 | {"母公司全称": "山西振东制药股份有限公司", "母公司参股比例": "100.0"} 36 | ``` 37 | 38 | 39 | ### 3 40 | #### 输入 41 | ``` 42 | sub_company_name="湖州鼎捷软件有限公司",need_fields=['关联上市公司全称','上市公司参股比例','上市公司投资金额'] 43 | ``` 44 | 45 | #### 输出 46 | ``` 47 | {"母公司全称": "鼎捷软件股份有限公司", "母公司参股比例": "100.0", "母公司投资金额": ""} 48 | ``` 49 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/6号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 6 号API接口函数 根据上市公司查找上市公司信息 2 | 3 | ``` 4 | def get_listed_sub_company_info_service_by_parent_company_name(parent_company_name: Annotated[str, "母公司全称", True],need_fields: Annotated[str, "需要返回的字段列表 例如 [关联上市公司全称,上市公司关系,上市公司参股比例]", True],money_threshold: Annotated[str, "投资金额下界", True] = "0万",rank_name: Annotated[str, "排序字段", True] = "母公司参股比例") -> str: 5 | """ 6 | 根据母公司的名称查询该公司投资的所有子公司信息list。 7 | 8 | 参数: 9 | parent_company_name -- 母公司名称,例如"天能电池集团股份有限公司" 10 | money_threshold -- 投资金额下界,例如"8800.00万",默认值为"0万" 11 | rank_name -- 排序字段,从小到大排列,例如"母公司参股比例",默认值为"母公司参股比例" 12 | 13 | 例如: 14 | 输入: 15 | parent_company_name = "天能电池集团股份有限公司" 16 | 输出: 17 | [{'母公司全称': '上海航天汽车机电股份有限公司', 18 | '母公司关系': '子公司', 19 | '母公司参股比例': '100.0', 20 | '母公司投资金额': '8800.00万', 21 | '子公司名称': '甘肃神舟光伏电力有限公司'}, 22 | {'母公司全称': '上海航天汽车机电股份有限公司', 23 | '母公司关系': '子公司', 24 | '母公司参股比例': '100.0', 25 | '母公司投资金额': '1.19亿', 26 | '子公司名称': '甘肃张掖神舟光伏电力有限公司'}] 27 | """ 28 | ``` 29 | 30 | ### 例子: 31 | ### 1 32 | ##### 输入 33 | ``` 34 | parent_company_name="中山华利实业集团股份有限公司",need_fields=[] 35 | ``` 36 | #### 输出 37 | ``` 38 | '[{"母公司全称": "中山华利实业集团股份有限公司", "母公司关系": "子公司", "母公司参股比例": "0", "母公司投资金额": "2500.00万", "子公司名称": "中山丽锦鞋业有限公司"}, {"母公司全称": "中山华利实业集团股份有限公司", "母公司关系": "子公司", "母公司参股比例": "100.0", "母公司投资金额": "0万", "子公司名称": "中山精美鞋业有限公司"}, {"母公司全称": "中山华利实业集团股份有限公司", "母公司关系": "子公司", "母公司参股比例": "100.0", "母公司投资金额": "7247.52万", "子公司名称": "中山市腾星纺织科技有限公司"}, {"母公司全称": "中山华利实业集团股份有限公司", "母公司关系": "子公司", "母公司参股比例": "100.0", "母公司投资金额": "7532.43万", "子公司名称": "中山市志捷鞋业技术服务有限公司"}, {"母公司全称": "中山华利实业集团股份有限公司", "母公司关系": "子公司", "母公司参股比例": "100.0", "母公司投资金额": "100.00万", "子公司名称": "中山统益贸易有限公司"}]\n子公司总数量:5\n总投资金额:173799500.0' 39 | 40 | ``` 41 | -------------------------------------------------------------------------------- /public24_LawGLM/docs/services/8号API接口文档.md: -------------------------------------------------------------------------------- 1 | ## 8 号API接口函数 根据案号查询该案件的裁判文书相关信息,包括案件的涉案公司,原告,被告,涉案金额,原告律师事务所,被告律师事务所 (常用)。 2 | 3 | ``` 4 | @register_tool 5 | def get_legal_document_service(reference: Annotated[str, "案号", True],need_fields: Annotated[str, "需要返回的字段列表 [关联公司,案号,案由,涉案金额,原告,被告]", True] ) -> str: 6 | """ 7 | 根据案号查询该案件的裁判文书相关信息,包括案件的涉案公司,原告,被告,涉案金额,原告律师事务所,被告律师事务所 (常用)。 8 | 9 | 参数: 10 | reference -- 案号,例如"(2019)沪0115民初61975号" 11 | need_fields -- 需要返回的字段列表,例如[关联公司, 标题, 案号,原告,被告,原告律师事务所,被告律师事务所,案由,涉案金额,判决结果,日期,文件名],need_fields传入空,则表示返回所有字段,否则返回填入的字段 12 | 13 | 例如: 14 | 输入: 15 | reference = "(2019)沪0115民初61975号" 16 | 输出: 17 | {'关联公司': '上海爱斯达克汽车空调系统有限公司', 18 | '标题': '上海爱斯达克汽车空调系统有限公司与上海逸测检测技术服务有限公司服务合同纠纷一审民事判决书', 19 | '案号': '(2019)沪0115民初61975号', '文书类型': '民事判决书', 20 | '原告': '上海爱斯达克汽车空调系统有限公司', 21 | '被告': '上海逸测检测技术服务有限公司', 22 | '原告律师事务所': '', 23 | '被告律师事务所': '上海世韬律师事务所', 24 | '案由': '服务合同纠纷', 25 | '涉案金额': '1254802.58', 26 | '判决结果': '一、被告上海逸测检测技术服务有限公司应于本判决生效之日起十日内支付原告上海爱斯达克汽车空调系统有限公司测试费1,254,802.58元; \\n \\n二、被告上海逸测检测技术服务有限公司应于本判决生效之日起十日内支付原告上海爱斯达克汽车空调系统有限公司违约金71,399.68元 。 \\n \\n负有金钱给付义务的当事人如未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百五十三条之规定,加倍支付迟延履行期间的债务利息 。 \\n \\n案件受理费16,736元,减半收取计8,368元,由被告上海逸测检测技术服务有限公司负担 。 \\n \\n如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于上海市第一中级人民法院 。 ', 27 | '日期': '2019-12-09 00:00:00', 28 | '文件名': '(2019)沪0115民初61975号.txt'} 29 | """ 30 | ``` 31 | 32 | 33 | ### 例子: 34 | ### 1. 35 | ##### 输入 36 | ``` 37 | {"案号": "(2019)沪0115民初61975号"},need_fields=["关联公司", "案号","原告","被告","原告律师事务所","被告律师事务所"] 38 | ``` 39 | #### 输出 40 | ``` 41 | {'关联公司': '上海爱斯达克汽车空调系统有限公司', 42 | '标题': '上海爱斯达克汽车空调系统有限公司与上海逸测检测技术服务有限公司服务合同纠纷一审民事判决书', 43 | '案号': '(2019)沪0115民初61975号', 44 | '原告': '上海爱斯达克汽车空调系统有限公司', 45 | '被告': '上海逸测检测技术服务有限公司', 46 | '原告律师事务所': '', 47 | '被告律师事务所': '上海世韬律师事务所'} 48 | ``` 49 | ### 2. 50 | #### 输入 51 | ``` 52 | {"案号": "(2020)皖0321执保119号"},need_fields=["关联公司", "案号",'涉案金额'] 53 | ``` 54 | #### 输出 55 | ``` 56 | {'关联公司': '安徽壹石通材料科技股份有限公司', '案号': '(2020)皖0321执保119号', '涉案金额': '106500'} 57 | ``` 58 | ### 3. 59 | #### 输入 60 | ``` 61 | {"案号": "(2019)沪民终34号"},need_fields=["关联公司", "案号",'涉案金额', '标题'] 62 | ``` 63 | #### 输出 64 | ``` 65 | {'关联公司': '上海大智慧股份有限公司', 66 | '案号': '(2019)沪民终34号', 67 | '涉案金额': '74375', 68 | '标题': '上海大智慧股份有限公司、立信会计师事务所与何某某、席某某等证券虚假陈述责任纠纷二审民事判决书'} 69 | ``` 70 | -------------------------------------------------------------------------------- /public24_LawGLM/llm/AgentWrapper.py: -------------------------------------------------------------------------------- 1 | 2 | from llm.glm_llm import glm 3 | from agents.battle_agent import BattleAgent 4 | from llm.ChainWrapper import ChainWrapper 5 | from llm.RetrieverWrapper import RetrieverWrapper 6 | from utils import * 7 | 8 | class AgentWrapper: 9 | def __init__(self, prompt_path: str, tools_retriever: RetrieverWrapper, planing_chain:ChainWrapper , inter_summary_chain:ChainWrapper ,judge_chain:ChainWrapper ,log_path = None, parser_func=None, ): 10 | 11 | """ 12 | Initialize a new instance of the ChainWrapper class. 13 | :param llm_config: The config for the LLM 14 | :param prompt_path: A path to the prompt file (text file) 15 | :param parser_func: A function to parse the output of the LLM 16 | """ 17 | self.llm = glm 18 | 19 | self.parser_func = parser_func 20 | self.prompt = load_prompt(prompt_path, is_template=False) 21 | self.tools_retriever = tools_retriever 22 | self.log_path = log_path 23 | self.judge_chain = judge_chain 24 | self.planing_chain = planing_chain 25 | self.inter_summary_chain = inter_summary_chain 26 | self.build_agent() 27 | 28 | 29 | def build_agent(self): 30 | self.agent = BattleAgent(self.prompt, self.tools_retriever, self.planing_chain, self.inter_summary_chain, self.judge_chain,log_path=self.log_path) 31 | 32 | 33 | def invoke(self, query: str,judge_turn_num:int = 15, player_turn_num:int = 10): 34 | messages = self.agent.invoke(query,judge_turn_num,player_turn_num ) 35 | return messages 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /public24_LawGLM/llm/ChainWrapper.py: -------------------------------------------------------------------------------- 1 | import time 2 | from llm.glm_llm import glm, client 3 | import logging 4 | import logging 5 | import time 6 | from utils import * 7 | 8 | 9 | class ChainWrapper: 10 | """ 11 | A wrapper for a LLM chain 12 | """ 13 | 14 | def __init__(self, prompt_path: str, parser_func=None): 15 | 16 | """ 17 | Initialize a new instance of the ChainWrapper class. 18 | :param llm_config: The config for the LLM 19 | :param prompt_path: A path to the prompt file (text file) 20 | :param parser_func: A function to parse the output of the LLM 21 | """ 22 | self.llm = glm 23 | self.parser_func = parser_func 24 | self.prompt = load_prompt(prompt_path) 25 | self.prompt_path = prompt_path 26 | self.save_path = None 27 | self.build_chain() 28 | 29 | def build_chain(self): 30 | # print("normal chaim") 31 | self.chain = self.prompt | self.llm 32 | 33 | 34 | def set_save_folder(self, save_path): 35 | self.save_path = save_path 36 | 37 | 38 | def invoke(self, chain_input: dict) -> dict: 39 | """ 40 | Invoke the chain on a single input 41 | :param chain_input: The input for the chain 42 | :return: A dict with the defined json schema 43 | """ 44 | count = 0 45 | while 1: 46 | try: 47 | 48 | result = self.chain.invoke(chain_input) 49 | # print(result.content) 50 | if self.parser_func is not None and self.save_path == None: 51 | result = self.parser_func(result) 52 | elif self.parser_func is not None and self.save_path != None: 53 | result = self.parser_func(result, self.save_path) 54 | self.save_path = None 55 | # print(result) 56 | break 57 | except Exception as e: 58 | if "" not in str(e): 59 | print("Here is a error\n" ,str(e)) 60 | count += 1 61 | result = None 62 | time.sleep(5) 63 | if count >= 5: 64 | logging.error('Error in chain invoke: {}'.format(e.user_message)) 65 | result = None 66 | break 67 | return result -------------------------------------------------------------------------------- /public24_LawGLM/llm/RetrieverWrapper.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | import re 4 | from langchain_community.vectorstores import FAISS 5 | # from tools.all_tools import com_all_tools 6 | from tools.tools_register import get_tools, register_tool 7 | from services.all_tools_service_register import * 8 | from utils import * 9 | 10 | com_all_tools = get_tools() 11 | 12 | class RetrieverWrapper: 13 | 14 | def __init__(self, embedding_model, vector_path, log_path = None): 15 | self.embedding_model = embedding_model 16 | self.vector_path = vector_path 17 | self.log_path = log_path 18 | self.build_retriever() 19 | 20 | 21 | def build_retriever(self): 22 | 23 | self.retriever = FAISS.load_local(self.vector_path, self.embedding_model,allow_dangerous_deserialization=True) 24 | 25 | 26 | def invoke(self, query: str, num_k: int = 10): 27 | 28 | embedding_vector = self.embedding_model.embed_query(query) 29 | docs = self.retriever.similarity_search_by_vector(embedding_vector, k = num_k ) 30 | docs_text = [doc.page_content for doc in docs] 31 | # print(docs_text) 32 | return "\n".join(docs_text) 33 | 34 | def invoke_for_tools(self, query: str, choosed_tool, num_k: int = 8): 35 | 36 | embedding_vector = self.embedding_model.embed_query(query) 37 | docs = self.retriever.similarity_search_by_vector(embedding_vector, k = num_k ) 38 | 39 | num_tools = [1,2,4,9,27] 40 | for tool in choosed_tool: 41 | if tool not in num_tools: 42 | num_tools.append(tool) 43 | 44 | for doc in docs: 45 | doc_file = doc.metadata['source'] 46 | number = re.findall(r'(\d+)', doc_file )[0] 47 | # print(doc) 48 | if int(number) not in num_tools: 49 | num_tools.append(int(number)) 50 | 51 | # print(num_tools) 52 | print("总工具数量:",len(com_all_tools)) 53 | num_tools = sorted(num_tools, reverse=True) 54 | print(num_tools) 55 | return [com_all_tools[number] for number in num_tools] -------------------------------------------------------------------------------- /public24_LawGLM/llm/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/public24_LawGLM/llm/__init__.py -------------------------------------------------------------------------------- /public24_LawGLM/llm/glm_llm.py: -------------------------------------------------------------------------------- 1 | from langchain_openai import ChatOpenAI 2 | from zhipuai import ZhipuAI 3 | import json 4 | import logging 5 | import time 6 | 7 | 8 | api_key = "6b91e9144289ecd7939ad6c7382e758d.PGrPAwI3SfhllE3d" 9 | glm = ChatOpenAI( 10 | temperature=0.1, 11 | # model="glm-4", 12 | model="glm-4-air", 13 | # model = 'glm-4', 14 | openai_api_key=api_key, 15 | openai_api_base="https://open.bigmodel.cn/api/paas/v4/" 16 | ) 17 | 18 | 19 | client = ZhipuAI(api_key=api_key) 20 | 21 | 22 | def call_embedding(str_list): 23 | 24 | response = client.embeddings.create( 25 | model="embedding-2", #填写需要调用的模型编码 26 | input=str_list 27 | ) 28 | print(response) 29 | return response.data 30 | 31 | def call_glm4(prompt): 32 | from langchain_openai import ChatOpenAI 33 | glm = ChatOpenAI( 34 | temperature=0.1, 35 | model="glm-4", 36 | # model="glm-4-air", 37 | openai_api_key=api_key, 38 | openai_api_base="https://open.bigmodel.cn/api/paas/v4/" 39 | ) 40 | 41 | try: 42 | response = glm.invoke(prompt) 43 | return response.content 44 | except Exception as e: 45 | print(f"Error calling GLM-4: {e}") 46 | return None -------------------------------------------------------------------------------- /public24_LawGLM/prompt/battle/inter_summary.prompt: -------------------------------------------------------------------------------- 1 | 假定你是一个在法律领域具有高度的专业素养,对法律条文和案例判例有深入的理解和广泛的掌握,能够运用严谨的法律思维分析问题,并在实践中积累了丰富的经验的法律专家。 2 | 现在你在和队友打比赛,比赛使用关键词匹配的方法评分,比赛要求选手不仅要正确回答问题,而且要把关键的中间步骤获得答案也罗列在总结中。 3 | 你的任务是在队友回答问题失败时,罗列他回答问题过程中所有真实可靠的中间步骤结果,以便给下一位队友参考。请确保你的总结准确无误,并且能够帮助队友更好地理解问题和答案。 4 | ###问题: 5 | {question} 6 | ###已有的中间步骤结果: 7 | {intermediate_results} 8 | ###队友的答题过程: 9 | {answer_process} 10 | ###裁判的判决: 11 | {judge_comment} 12 | 注意依据裁判的判决,来保证中间步骤结果真实可靠, 注意继承已有的中间步骤结果。 13 | 请仅仅简洁列出队友答题过程中所有具体实体的中间步骤结果,不要写任何关于后续操作的信息和他任何错误操作信息,不要省略任何信息,但有太多公司名称和案号信息,可以仅仅提供公司名称和案号。 14 | 例如: 15 | 1. 已经使用 `get_legal_document_service` 工具获取: 16 | - 原告:北京天桥有限公司 17 | - 原告律师事务所:浙江百方律师事务所 18 | - 案号:(2018)赣222民初121号 19 | 20 | 2. 已经使用 `get_court_code_service` 工具获取: 21 | - 审理法院名称:赣州县人民法院 22 | 23 | 3. 已经使用 `get_court_info_service` 工具获取: 24 | - 审理法院地址:江西省赣州市宁都县宁都镇人民路1号 25 | 26 | ###所有中间步骤结果: 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/battle/judge.prompt: -------------------------------------------------------------------------------- 1 | 你是一位严格公正的裁判,负责评判选手是否正确回答了给定的问题。请仔细审阅以下信息, 满分为100分: 2 | 3 | 现有的工具信息: 4 | {tools_info} 5 | 6 | 问题: 7 | {question} 8 | 9 | 计划: 10 | {plan} 11 | 12 | 已有的计划结果: 13 | {intermediate_results} 14 | 15 | 请根据以上信息,评判选手的回答是否正确,并给出详细的判断依据。评判时请按下面流程给选手答案打分: 16 | 17 | 1. 审视选手的计划中是否完全涵盖了问题的所有筛选条件, 若选手有忽视任一筛选条件,直接0分,指出缺少的筛选条件并提供修改意见。 18 | 2. (**常见错误,重点检查**)仔细检查选手的回答是否能够完整回答了问题, 记住不存在问题无结果的情况,若选手不能完整回答,则直接0分,指出回答缺少的部分并提供修改意见。 19 | 3. 注意一般除了整合成报告类型的问题,其他问题都有结果一般不为空,若回答中出现未能查询,不能找到某些信息时,则直接0分,指出回答缺少的部分并提供修改意见。 20 | 4. 仔细检查选手的能回答问题的结果是否保存为文件,若选手没有保存或者缺少保存,直接0分,指出缺少的保存部分并提供修改意见。 21 | 5. 审视选手的计划中的工具分配是否正确, 是否有分配工具不恰当导致回答缺失,若选手有不恰当,直接0分,指出回答缺失部分所需要的具体工具名称,并提供修改意见。 22 | 6. 若以上错误4点选手都没触发,根据选手的回答的质量和完整度给分,给分区间为70-100,选手回答的越完整,质量越高,得分越高。 23 | 24 | (*重点*)注意: 你只关注选手的计划和计划结果是否完整回答问题,不要质疑选手是如何做的和得出答案的过程, 不要质疑选手结果在数值上的合理性(比赛会设置比较怪的结果)。 25 | 请以 JSON 格式提供你的评判结果,不要做其他多余的输出: 26 | {{ 27 | "remark": "XXX..." # 按照打分流程给出判断依据和改进建议,简洁明了,写成一段,不要分点作答。 28 | "judge": "XX", # 给选手的分数 29 | "error_steps": "idY, idY,..." # 哪些子任务是错误的,请列出子任务编号,如果子任务全部正确则填写'None' 30 | }} 31 | 32 | 评判结果: 33 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/battle/judge_zyc.prompt: -------------------------------------------------------------------------------- 1 | 你是一位严格公正的裁判,负责评判选手是否正确回答了给定的问题。请仔细审阅以下信息: 2 | 3 | 工具信息: 4 | {tools_info} 5 | 6 | 问题: 7 | {question} 8 | 9 | 计划: 10 | {plan} 11 | 12 | 已有的中间步骤结果: 13 | {intermediate_results} 14 | 15 | 请根据以上信息,评判选手的回答是否正确,并给出详细的判断依据。评判时请特别注意以下几点: 16 | 17 | 1. 重点审视计划中的工具使用是否正确,是否有工具被错误调用。 18 | 2. 关注选手实际执行的操作,而非仅仅是计划本身。 19 | 3. 不需要考虑CSV文件的真实性。 20 | 4. 严格检查是否存在虚假信息或无中生有的内容。如发现,请指出具体内容。 21 | 5. 仔细核对工具调用的参数,确保没有使用错误示例或包含多余、缺失、拼写错误的信息。 22 | 6. 确保回答完整性,尤其是涉及公司案件和子母公司查询时。 23 | 7. 如果回答不正确,请提供具体、有建设性的改进建议,包括可能需要调用的工具。 24 | 25 | 请以 JSON 格式提供你的评判结果: 26 | {{ 27 | "judge": "Yes/No", // Yes 表示回答正确,No 表示回答错误 28 | "error_step": "第几个子任务出错了,如果没有错误则填写'None'", # 只有judge结果为No的时候才需要具体指出错误步骤 29 | "correct_steps": "哪些子任务是正确的,请列出子任务编号,如果全部错误则填写'None'", 30 | "remark": "给出详细的判断依据和改进建议" 31 | }} -------------------------------------------------------------------------------- /public24_LawGLM/prompt/battle/plan_edit_few_shot.prompt: -------------------------------------------------------------------------------- 1 | 你是一个专业法律领域的信息检索员,能够准确识别问题中的筛选条件,且擅长通过调用工具来检索信息。 2 | 现在你在和队友一起打比赛,你负责制定调用工具的计划,现在你的上一个计划只有部分正确,请你依照裁判意见继续接着正确的部分补全你的计划。注意比赛问题中可能存在无关信息,请准确识别需要你回答的问题。 3 | 已有工具信息: 4 | {tools_info} 5 | 6 | 一些值得参考的计划: 7 | 8 | {few_shot_examples} 9 | 10 | 下面是补全计划所需的注意事项: 11 | 注意: 12 | 1.(**重点**) 参考裁判意见请紧接着上一个计划正确的部分补全你的计划。 13 | 2.(**重点**) 任务描述中若结果为单条信息则使用"____"代替描述,若结果为多条则需在最后标注"(结果含多条数据)"。 14 | 3.当有较多子任务时,当子任务不冲突时,应先执行返回结果较多的子任务,再执行返回结果较少的子任务,以提高工具调用效率。 15 | 4.(**重点**)为减少子任务数量,请从代码角度分解问题,使每个子任务能从逻辑角度调用多个工具,以更好地编写成代码。 16 | 17 | # 问题: 18 | {question} 19 | 队友做出的计划: 20 | {last_plan} 21 | 队友已完成的任务编码和其对应结果 22 | {context_res} 23 | 裁判意见: 24 | {judge_opinion} 25 | ### 26 | 需要补全的计划: 27 | {require_fixed_plan} 28 | 29 | # 补全上述计划应该按JSON格式如下输出, 注意把完整的计划从id1开始输出: 30 | '''json 31 | {{ 32 | "id1":{{ 33 | "task_id":"id1", # 任务ID 34 | "task_description": "XXX", #具体任务描述 35 | "tools":["tool1", "tool2", ... ], # 分配使用的工具 36 | "previous_tasks": ["idX", "idY", ....] # 所需前置任务 37 | }}, 38 | ...... 39 | "id_N":{{ 40 | "task_id":"idN", # 任务ID 41 | "task_description": "XXX", #具体任务描述 42 | "tools":["tool1", "tool2", ... ], # 分配使用的工具 43 | "previous_tasks": ["idX", "idY", ....] # 所需前置任务 44 | }} 45 | }} 46 | ''' 47 | # 补全后从id1开始计划: 48 | 49 | 50 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/battle/plan_few_shot.prompt: -------------------------------------------------------------------------------- 1 | 你是一个专业法律领域的信息检索员,能够准确识别问题中的筛选条件,且擅长通过调用工具来检索信息。 2 | 现在你在和队友一起打比赛,你的队友负责调用工具,你负责制定调用工具的计划,以便完成比赛的问题。注意比赛问题中可能存在无关信息,请准确识别需要你回答的问题。 3 | 现在你有以下工具: 4 | {tools_info} 5 | 请根据比赛的问题,仔细查看工具返回内容里面的信息,返回内容的信息有且仅有这些,不要遗漏、添加和曲解返回内容的信息,并选择合适的工具来检索信息,并且制定一个合理、详细且完备的计划完成用户的问题,计划的每一步写出与那些关键词关联,使得工具调用更加简单。 6 | 注意: 7 | 1.(**重点**) 仔细甄别出问题中的关键筛选条件,筛选条件要在子任务中体现不能有遗漏,且制作计划时考虑先做简单的筛选条件,再考虑复杂的筛选条件,以提高工具调用效率。 8 | 2.(**重点**) 对于非工具调用的逻辑处理(如工具调用后的筛选、求和、排序等操作),请不要将其分解为单个子任务。 9 | 3.(**重点**) 注意分配子任务时,尤其是id1的子任务,请把问题中要查询的实体名(公司名,公司代码,案号,法院等信息)称在task_description写出,以便工具调用时能准确识别。 10 | 4.(**重点**) 任务描述中若结果为单条信息则使用"____"代替描述,若结果为多条则需在最后标注"(结果含多条数据)"。 11 | 5. 当有较多子任务时,当子任务不冲突时,应先执行返回结果较多的子任务,再执行返回结果较少的子任务,以提高工具调用效率。 12 | 6. (**重点**)涉及查询公司非案件信息问题时,由于上市公司和非上市公司的存在,请多考虑冗余使用get_listed_company_info_service和get_company_register_service获取信息。 13 | 14 | 参考例子如下: 15 | 16 | {few_shot_examples} 17 | 18 | 19 | # 问题: 20 | {question} 21 | 22 | # 你的回答应该成JSON格式如下 ,除此之外,不要有任何多余的输出: 23 | '''json 24 | {{ 25 | "id1":{{ 26 | "task_id":"id1", # 任务ID 27 | "task_description": "XXX", #具体任务描述 28 | "tools":["tool1", "tool2", ... ], # 分配使用的工具 29 | "previous_tasks": ["idX", "idY", ....] # 所需前置任务 30 | }}, 31 | ...... 32 | "id_N":{{ 33 | "task_id":"idN", # 任务ID 34 | "task_description": "XXX", #具体任务描述 35 | "tools":["tool1", "tool2", ... ], # 分配使用的工具 36 | "previous_tasks": ["idX", "idY", ....] # 所需前置任务 37 | }} 38 | }} 39 | ''' 40 | # 回答: 41 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/battle/regulator.prompt: -------------------------------------------------------------------------------- 1 | 你是一个专业技术支持,精通python语言,熟练掌握pandas库,并且你对法律知识也有一部分了解,现在你的同事针对某个问题已经写出了一段代码,请你判断这段代码输出的结果是否正确回答问题, 对这份代码和代码结果进行打分,满分100分。 2 | ### 代码中使用的工具信息: 3 | {tools_info} 4 | 评分流程如下如下: 5 | 1. (常见错误,重点纠正) 若读取CSV文件后出现KEYError报错,直接0分,此时若已有信息中含有多个文件路径,请先指出读取的文件是否正确,若不正确请指出,之后再看代码中读取的文件是否含有KEY。 6 | 2. 若代码结果报错其他ERROR信息,直接0分,请指出错误原因,并给出简单的修改意见。 7 | 3. 代码是否完整体现了涵盖了的筛选条件(无视数据格式转换等条件),若没有直接0分,请指出缺少的筛选条件,并给出简单的修改意见,注意当条件中出现了大约等模糊性词时,请放宽条件,不要否认你同事的代码中的筛选条件。。 8 | 5. 代码中是否无中生有,包含虚假信息,对任何没有具体来源的数据(问题,工具返回结果,已有信息),若有直接0分指出虚假内容,并给出简单的修改意见。 9 | 6. 完成当前任务的代码是否为它的下一个任务保存了所需要的信息,若没有直接0分,请指出并给出它下一个任务的需要的信息。 10 | 7. 代码是否存储了了中间结果文件,若没有直接0分,请指出并给出存储中间结果文件的路径,并给出简单的修改意见。 11 | 8. 检查代码的打印出的结果是否能完整的回答当前任务问题,若不能直接0分,请指出缺少的信息,并给出简单的修改意见。 12 | 9. 若以上8点选手都没触发,请根据同事的回答的质量给分,给分区间为70-100,分数表示选手回答的质量所得分值, 选手回答的越完整,质量越高,得分越高。 13 | 14 | 注意: 请严格遵循上述9个流程做出评分,你不要做出任何可能的假设下错误,你的重点是代码返回的结果,而不是代码(**重点**)。 15 | ## 总体计划: 16 | {plan_str} 17 | ### 当前任务问题: 18 | {question} 19 | ### 已有的信息: 20 | {context} 21 | ### 现有代码: 22 | {code} 23 | ### 代码输出信息: 24 | {error_info} 25 | # 你的回答应该成JSON格式如下, 不要输出除了JSON数据外的其他数据: 26 | '''json 27 | {{ 28 | "remark": "XXX", # 反馈意见要求简洁明了, 不要写让选手自行检查等的意见,而是给出具体的指示如修改读取文件路径为XX等,100字内,不能写代码. 29 | "judge": "XX" # 同事代码运行结果得分。 30 | }} 31 | ''' 32 | 33 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/coder/coder_edit_few_shot.prompt: -------------------------------------------------------------------------------- 1 | 你是一个专业的资深码农,精通python语言,熟练掌握pandas库,你正在处理你的同事在完成任务时所写出的一个错误,请根据以下信息,给出修复后的代码, 2 | ### 代码中使用的工具信息: 3 | {tools_info} 4 | 5 | 修复过程中注意: 6 | 1.(**重点**)在代码开头按当前任务保存路径写出当前任务的所有结果保存路径。 7 | 2.(**重点**)在代码开头根据你的任务编号打印出当前任务所需要的前置任务编号结果路径。 8 | 3.(**重点**)根据你的任务编号,关注你的下一个任务所需要的信息,保证你保存的文件涵盖下一个任务需要的信息。 9 | 4. 调用工具函数时,严格按照工具函数参数的具体含义对参数进行调用,不要随意填写模糊字段进入,并无视数据格式转换等条件如金额保留几位小数,保留为万,亿。 10 | 5.(**重点**)保存结果时把问题中含有的信息和结果信息一起保存,确保中间结果连贯。 11 | 6.(**重点**)完成每次任务时,请把对他进行条件处理后的结果按保存路径进行保存,没有条件处理的直接保存,注意使用.info()打印存储的字段信息. 12 | 7.(**重点**)注意调用工具返回结果数量为1时,调用该变量的值需要加索引[0],例如: 13 | carrer_df = get_company_info_service(company_name=plaintiff) 14 | if carrer_df.shape[0] == 0: 15 | print("工具调用错误,请检查输入参数是否正确") 16 | sys.exit() 17 | carrer = carrer_df['所属行业'][0] 18 | 8. (**重点**)注意调用工具返回结果数量为多条时, 调用该变量的值时尽量使用pandas的集体操作如apply等例如: 19 | def get_court_name_by_reference(row): 20 | reference = row['案号'] 21 | court_name = get_court_name_service_by_reference(reference=reference)['审理法院名称'][0] 22 | return court_name 23 | filtered_cases_df['审理法院名称'] = filtered_cases_df.apply(get_court_name_by_reference, axis=1) 24 | 25 | 9.(**重点**)请依据示例在代码中写好工具结果检查模块,利用try写报错处理模块,利用warning写消除警告模块。 26 | 10.(**非常重点**)完成当前任务时,在代码中请把对他进行条件处理后的结果按保存路径使用to_csv函数进行保存,并在其后面打印其路径和info()信息增加文件可读性,格式例如: 27 | cases_info.to_csv(id3_result_path_2, index=False) 28 | # 打印保存路径和文件信息 29 | print(f"X股份有限公司子公司的VVV信息,保存地址为: {{id3_result_path_2}}") 30 | print(f"详细信息: {{cases_info.info()}}") 31 | 32 | 修复后的代码例子参考: 33 | 34 | {few_shot_examples} 35 | 36 | 37 | {plan_str} 38 | 39 | ## 前置任务保存路径: {pre_task_save_path} 40 | ### 当前任务保存路径:{current_task_save_path} 41 | ### {question} 42 | ### 已有的信息: 43 | {context} 44 | 45 | ### 现有代码: 46 | {code} 47 | ### 结果: 48 | {error_info} 49 | ### 技术支持给出的意见: 50 | {suggestion} 51 | 请依据技术支持给出的意见检讨自己出错的原因并修改现有代码,尤其遇到keyerror问题,请根据已有信息判断现有代码是否读取了正确的文件,正确的文件应该有相应的字段,若没有请在代码中修正,修复后的代码请以如下格式返回: 52 | ```python 53 | your fixed_code 54 | ``` 55 | ### 注意 56 | 1. 请针对出错代码段进行修改,不要增添任何假设性输出,任何数据都应该由已有信息和调用工具生成,注意工具返回的格式。 57 | 2. (**重点**)不要新增加任何解释性的print输出。 58 | ### 给出出错的的原因和修复后的代码: 59 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/coder/coder_few_shot.prompt: -------------------------------------------------------------------------------- 1 | 你是一个专业法律领域的信息检索员同时十分擅长python代码,你能够准确识别问题中的筛选条件,且擅长通过写python代码调用工具来检索信息,现在你的领导制定了一个计划,你负责完成其中的一个部分,现在你有以下工具: 2 | {tools_info} 3 | 现有比赛规定了工具返回结果为DataFrame格式。 4 | 导入本地工具包你只需要写from services.all_tools_service_register import * 5 | 现在你要写python代码通过调用工具的方式来检索信息回答问题,注意 6 | 1.(**重点**)在代码开头按当前任务保存路径写出当前任务的所有结果保存路径。 7 | 2.(**重点**)在代码开头根据你的任务编号打印出当前任务所需要的前置任务编号结果路径。 8 | 3.(**重点**)根据你的任务编号,关注你的后置任务所需要的信息,调用工具时若有need_fields参数需求,请注意need_fields中填写的参数不仅能回答你的问题,而且需要涵盖你的后置任务需要的信息。 9 | 4.调用工具函数时,严格按照工具函数参数的具体含义对参数进行调用,不要随意填写模糊字段进入,并无视数据格式转换等条件如金额保留几位小数,保留为万,亿。 10 | 5.(**重点**)注意调用工具返回结果数量为1时,调用该变量的值需要加索引[0],例如: 11 | carrer_df = get_company_info_service(company_name=plaintiff) 12 | if carrer_df.shape[0] == 0: 13 | print("工具调用错误,请检查输入参数是否正确") 14 | sys.exit() 15 | carrer = carrer_df['所属行业'][0] 16 | 6. (**重点**)注意调用工具返回结果数量为多条时, 调用该变量的值时尽量使用pandas的集体操作如apply等, 不要打印全部结果,仅打印保存文件路径和并利用info函数打印信息例如: 17 | def get_court_name_by_reference(row): 18 | reference = row['案号'] 19 | court_name = get_court_name_service_by_reference(reference=reference)['审理法院名称'][0] 20 | return court_name 21 | filtered_cases_df['审理法院名称'] = filtered_cases_df.apply(get_court_name_by_reference, axis=1) 22 | 23 | 7.(**重点**)请依据示例在代码中写好工具结果检查模块,利用try写报错处理模块,利用warning写消除警告模块。 24 | 8.(**非常重点**)完成当前任务时,在代码中请把对他进行条件处理后的结果按保存路径使用to_csv函数进行保存,并在其后面打印其路径和info()信息增加文件可读性,格式例如: 25 | cases_info.to_csv(id3_result_path_2, index=False) 26 | # 打印保存路径和文件信息 27 | print(f"X股份有限公司子公司的VVV信息,保存地址为: {{id3_result_path_2}}") 28 | print(f"详细信息: {{cases_info.info()}}") 29 | 代码参考例子如下: 30 | 31 | {few_shot_examples} 32 | 33 | 34 | {plan_str} 35 | ## 前置任务保存路径: {pre_task_save_path} 36 | ## 当前任务保存路径:{current_task_save_path} 37 | ## {question} 38 | ## 已有中间结果: 39 | {context} 40 | 41 | 给出的代码请以如下格式返回: 42 | ```python 43 | your code 44 | ``` 45 | ##你的回答: 46 | 47 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/local_tools/auto_tools.prompt: -------------------------------------------------------------------------------- 1 | 你是一个专业法律领域的信息检索员,能够准确识别问题中的筛选条件,且擅长通过调用工具来检索信息,会通过调用工具来检索信息。 2 | 现在你在打一个检索信息相关的比赛,请灵活利用提供工具,并严格遵循现有的问题计划准确回答用户问题。 3 | 注意: 4 | 1. (重点) 不要随意修改工具返回的数值数据,尤其如涉案金额,不要随意加千分点,这些数据是真实可靠的,除非裁判明确要求你修改。 5 | 2. 请优先查询使用get_company_register_service查询公司信息,若查询结果为空或者报错,则表明该公司未上市,再使用get_company_info_service查询公司信息。 6 | 3. 调用参数请参考具体的问题和具体问题的关键字,调用参数请小心选择,牢记在调用工具时使用的参数数值真实可靠,必须在问题或者调用的工具中生成。 7 | 4. 工具调用的参数need fields仅能调用工具提供的need fields的参数,填写need fields参数请小心选择,不要填错和漏填,依据计划中的关键字填写。 8 | 5. 工具调用正确时,结果真实可靠,工具调用错误时,不要使用此时工具返回错误提示里的例子信息,这些时虚假信息。 9 | 6. 请不要重复查询已有的中间过程步骤信息,它们是可信赖的。 10 | 7. 请仔细考虑裁判和工具的返回意见,来修改你调用工具的操作。 11 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/local_tools/choose_tools.prompt: -------------------------------------------------------------------------------- 1 | 你是一个专业法律领域的信息检索员,能够准确识别问题中的筛选条件,且擅长通过调用工具来检索信息。 2 | 现在你有以下工具: 3 | {tools_info} 4 | 请根据用户的问题,仔细查看工具返回内容里面的信息,返回内容的信息有且仅有这些,不要遗漏、添加和曲解返回内容的信息,并选择合适的工具来检索信息,并且制定一个合理、详细且完备的计划完成用户的问题,计划的每一步写出与那些关键词关联,使得工具调用更加简单。 5 | ###注意 当你的计划下一步需要上一步结果时,请把下一步的关键词放在上一步的计划中。例子如下: 6 | 例子1: 7 | 问题:爱玛科技集团股份有限公司涉案金额最高的法院的负责人是? 8 | 可能涉及到的字段 9 | "爱玛科技集团股份有限公司": ["CompanyInfo.公司名称", "CompanyRegister.公司名称"], 10 | "涉案金额最高": ["LegalDoc.涉案金额"], 11 | "法院": ["CourtInfo.法院名称"], 12 | "负责人": ["CourtInfo.法院负责人"] 13 | 回答:{{ 14 | "plan": "1. 使用 get_company_involved_cases_info 工具查询爱玛科技集团股份有限公司涉案金额最高的案件相关信息(爱玛科技集团股份有限公司, 涉案金额最高, 案号) 2. 使用 get_court_code_service_by_reference 工具根据案件案号获取法院名称(案号) 3. 使用 get_court_info_service 工具查询该法院的负责人(法院名称, 法院负责人)。", 15 | "tools": [5, 10] 16 | }} 17 | 18 | # 问题:{question} 19 | # 你的回答应该成JSON格式如下 : 20 | {{ 21 | "plan": "1. XX(keyword1, keyword2) 2. XX(keyword1, keyword2).... ", # 回答问题需要的调用工具计划 22 | "tools": [1, 4, 7, ..] # 调用工具的序号 23 | }} 24 | # 回答: 25 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/preprocess/clearnoise.prompt: -------------------------------------------------------------------------------- 1 | 目标:根据给定的关键字,进一步提取出关键词中包含具体信息的关键词。 2 | 注意: 3 | 1.确保保留问题和提示中使用的原始措辞或术语。 4 | 2.有关日期的关键词不在筛选范围之内。 5 | 例子1: 问题: 华仁药业股份有限公司控股的子公司,超过50%的有几家? 回答:['华仁药业股份有限公司'] 6 | 例子2: 问题: 请问在(2020)沪0104民初14148号案件里,谁是原告方,谁是被告方,同时请阐述该案件的诉讼理由是什么? 回答['(2020)沪0104民初14148号'] 7 | 例子3: 问题: 统一社会信用代码是91370000164102345T这家公司的法人是谁? 回答: ['91370000164102345T'] 8 | 例子4: 问题: 原告是安利股份的案件审理法院是哪家法院? 回答:['安利股份'] 9 | 例子5: 问题: 北京市密云区人民法院所在的区县区划代码是多少? 回答:['北京市密云区人民法院'] 10 | 任务:根据已经提取到的关键词,进一步筛选出包含具体信息的关键词。 11 | 问题:{key_words} 12 | 请以 Python 列表的形式提供您的发现,通过识别的术语和短语捕捉问题和提示的本质。只输出Python列表,不需要解释。 -------------------------------------------------------------------------------- /public24_LawGLM/prompt/preprocess/correction_zzy.prompt: -------------------------------------------------------------------------------- 1 | 你是一位法律知识深厚、数据分析能力出众的专业人士,擅长运用精湛的逻辑思维和敏锐的洞察力,在法律和数据的交叉领域进行精准的问题分析和解决,同时具备高效的数据可视化沟通技巧和快速学习能力,以确保在快速变化的环境中保持专业领先。 2 | 现在有如下相关上下文信息: 3 | 1. 原始问题 4 | {query} 5 | 2.进一步筛选出存在问题的关键词 6 | {keywords} 7 | 现在你需要根据原始问题和进一步筛选出存在问题的关键词信息并纠正关键词中的命名实体符合实例要求 8 | 纠错规则: 9 | 1.涉及到公司名称的关键词,请用内部知识考虑公司名称的结构、中文命名习惯、重复使用的字符。如果存在以上问题,请修改并提供一个正确版本。 10 | 2.涉及到带有省市地址的公司名称的关键词,如果包含省级地址,则仅需要去掉省级地址后面的“省”字,如果包含市级地址,则仅需要去掉市级地址后面的“市”字。 11 | 3.涉及到法院信息的关键词,如果是省级地址,则需要加上“省”字,如果是市级地址,则需要加上“市”字,如果是自治区地址,则要加上“自治区”字。 12 | 4.涉及到律师事务所的关键词,注意是否需要加上“律师事务所”字样。 13 | 注意: 14 | 1.纠错规则的情况可能同时存在,如果同时存在,则都要修改 15 | 2.不要抄袭例子,例子仅作为参考,请根据具体问题进行回答 16 | 17 | 例子1: 18 | ### 输入: 19 | 原始问题: 安徽高级人民法院的办公地址是什么? 20 | 存在问题的关键词: ['安徽高级人民法院'] 21 | ### 输出: 22 | {{ 23 | "old_keywords": ['安徽高级人民法院'], 24 | "reason": "根据纠错规则,需要去掉省级地址后面的“省”字", 25 | "correct_keywords": ['安徽省高级人民法院'], 26 | "new_query": "安徽省高级人民法院的办公地址是什么?" 27 | }} 28 | 例子2: 29 | ### 输入: 30 | 原始问题: 龙龙元建设集团股份有限公司的法人信息与总经理是否相同? 31 | 存在问题的关键词: ['龙龙元建设集团股份有限公司'] 32 | ### 输出: 33 | {{ 34 | "old_keywords": ['龙龙元建设集团股份有限公司'], 35 | "reason": "根据纠错规则,需要去掉公司名称中的重复字符", 36 | "correct_keywords": ['龙元建设集团股份有限公司'], 37 | "new_query": "龙元建设集团股份有限公司的法人信息与总经理是否相同?" 38 | }} 39 | 例子3: 40 | ### 输入: 41 | 原始问题: 北京市三元元食品股份有限公司涉及的案件中,于2019年立案合同相关的纠纷案件涉案不为零的案件有几次? 42 | 存在问题的关键词: ['北京市三元元食品股份有限公司'] 43 | ### 输出: 44 | {{ 45 | "old_keywords": ['北京市三元元食品股份有限公司'], 46 | "reason": "根据纠错规则,需要去掉市级地址后面的“市”字,同时去掉公司名称中的重复字符", 47 | "correct_keywords": ['北京市三元食品股份有限公司'], 48 | "new_query": "北京市三元食品股份有限公司涉及的案件中,于2019年立案合同相关的纠纷案件涉案不为零的案件有几次?" 49 | }} 50 | 例子4: 51 | ### 输入: 52 | 原始问题: 湖南省xx有限公司投资的公司有哪些? 53 | 存在问题的关键词: ['湖南省xx有限公司'] 54 | ### 输出: 55 | {{ 56 | "old_keywords": ['湖南省xx有限公司'], 57 | "reason": "根据纠错规则,需要去掉省级地址后面的“省”字", 58 | "correct_keywords": ['湖南xx有限公司'], 59 | "new_query": "湖南xx有限公司投资的公司有哪些?" 60 | }} 61 | 62 | 请根据以下问题对关键词中的命名实体进行处理,并输出修改后的正确的关键词列表: 63 | 原始问题: {query} 64 | 进一步筛选出存在问题的关键词:{keywords} 65 | 请以json的形式提供你的输出。输出新得到得问题,同时进行解释。注意只输出json格式的数据,不要注明数据类型,不要有有多余的输出。 66 | ### 输出: 67 | 68 | 69 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/preprocess/keywords.prompt: -------------------------------------------------------------------------------- 1 | 目标:分析给定的问题和提示以识别和提取关键字、关键短语和命名实体。这些要素对于理解调查的核心组成部分和所提供的指导至关重要。此过程涉及识别和隔离重要术语和短语,这些术语和短语可能有助于制定与所提出问题相关的搜索或查询。 2 | 说明: 3 | 1. 仔细阅读问题:了解问题的主要焦点和具体细节。查找任何命名实体(例如组织、位置等), 一般问题中含有下述几类实体: 4 | a. 公司名称如: 湖南中科电气股份有限公司, 上海华谊集团股份有限公司等等 5 | b. 公司简称如: 中科电气, 百度,腾讯,安利股份等 6 | c. 公司(股票)代码如: 600522, 000002等等 7 | d. 公司统一社会信用代码如: 9131010079278275XG等等 8 | e. 案号如: (2020)沪0104民初14148号等等 注意案号规范:(收案年度) + 法院代字+ 类型代字+案件编号+“号”如:(2024)京01民再36号 9 | d. 法院名称如: 北京市第一中级人民法院, 北京市朝阳区人民法院,北京市密云区人民法院等等 10 | f. 律师事务所名称如:北京市盈科(上海)律师事务所等等 11 | 12 | 注意: 13 | 1.案号只提取到xx号即可。 14 | 2.(重点)确保保留问题和提示中使用的原始措辞或术语, 不要做任何修改。 15 | 例子1: 16 | 问题: 龙龙元建设集团股份有限公司的法人信息与总经理是否相同?? 17 | 回答:['龙龙元建设集团股份有限公司'] 18 | 例子2: 19 | 问题: 请问在(2020)沪0104民初14148号案件里,谁是原告方,谁是被告方,同时请阐述该案件的诉讼理由是什么? 20 | 回答['(2020)沪0104民初14148号'] 21 | 例子3: 22 | 问题: 2020)皖01民终9030号案件中的审理法院与被告律师事务所是否在同市 23 | 回答['2020)皖01民终9030号'] 24 | 例子4: 问题: 25 | 91410100170167831Q的上市时间是什么时候?该公司的注册资本是? 26 | 回答: ['91410100170167831Q'] 27 | 例子5: 28 | 问题: 原告是安利股份的案件审理法院是哪家法院? 29 | 回答:['安利股份'] 30 | 例子6: 31 | 问题: 原告是300077案件审理法院是什么时候成立的 32 | 回答:['300077'] 33 | 例子7: 问题: 北京市密云区人民法院所在的区县区划代码是多少? 34 | 回答:['北京市密云区人民法院'] 35 | 例子8: 36 | 问题: "河北养元智汇饮品股份有限公司与通威股份有限公司发生了买卖合同纠纷,河北养元智汇饮品股份有限公司委托给了江苏义科律师事务所,通威股份有限公司委托给了江苏源实发扬律师事务所,请写一份民事起诉状给邯郸市肥乡区人民法院时间是2024-01-02 37 | 回答:['河北养元智汇饮品股份有限公司','通威股份有限公司','江苏义科律师事务所','江苏源实发扬律师事务所','邯郸市肥乡区人民法院'] 38 | 39 | 40 | 41 | 任务:根据以下问题和提示,识别并列出所有命名实体,没有上述八类请放回空列表[]。 42 | 问题:{question} 43 | 请以 Python 列表的形式提供您的发现,通过识别的术语和短语捕捉问题和提示的本质。只输出Python列表,不需要解释。 -------------------------------------------------------------------------------- /public24_LawGLM/prompt/preprocess/matchCol.prompt: -------------------------------------------------------------------------------- 1 | 你是一位法律知识深厚、数据分析能力出众的专业人士,擅长运用精湛的逻辑思维和敏锐的洞察力,在法律和数据的交叉领域进行精准的问题分析和解决,同时具备高效的数据可视化沟通技巧和快速学习能力,以确保在快速变化的环境中保持专业领先。 2 | 现在有如下相关上下文信息: 3 | 1. 所有数据表的schema信息为 4 | {schema} 5 | 现在你需要根据上下文信息和以下问题对问题中的关键词进行处理: 6 | 1. 将问题中的关键根据问题和相关数据表输出对应的数据表字段, 要求匹配仅仅匹配最为相关的一项,只对应一项。 7 | 8 | 例子: 9 | ### 输入: 10 | 问题: 11 | 安徽高级人民法院的办公地址是什么? 12 | 问题中的关键词: 13 | 安徽高级人民法院 14 | ### 输出: 15 | {{"安徽省高级人民法院": "CourtInfo.法院名称" }} 16 | 17 | ### 输入: 18 | 问题: 【2021】豫0304民初300号的上诉人和被诉人分别是? 19 | 问题中的关键词: 20 | 【2021】豫0304民初300号 21 | ### 输出: 22 | {{"(2021)豫0304民初300号": "LegalDoc.案号"}} 23 | 24 | ### 输入: 25 | 问题: 智动力的子公司是否有涉诉?是否存在2021年由东莞市第三人民法院审理的劳动合同纠纷案件?如果有,案件受理费是多少? 26 | 问题中的关键词: 27 | 智动力 东莞市第三人民法院 28 | ### 输出: 29 | {{"智动力": "CompanyInfo.公司简称", "东莞市第三人民法院":"CourtInfo.法院名称"}} 30 | 31 | 请根据以下问题对关键词中的命名实体进行处理: 32 | 问题: {query} 33 | 问题中的关键词: 34 | {keywords} 35 | 注意仅仅对关键词中的命名实体进行处理,不要对其他内容进行处理,不要输出任何其他命名实体。 36 | 请以 json 格式输出,格式如下: 37 | '''json 38 | {{ 39 | "命名实体1": "字段1", 40 | "命名实体2": "字段1", 41 | ..... 42 | }} 43 | ### 输出: 44 | 45 | 46 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/summary/choose_answer.prompt: -------------------------------------------------------------------------------- 1 | 作为一位经验丰富的法律专家,请从以下三个选项中选择最佳答案。评估标准如下: 2 | 3 | 1. 准确性:答案是否正确回答了问题 4 | 2. 完整性:是否包含了所有必要的信息,包括关键的中间步骤 5 | 3. 简洁性:在保证信息完整的前提下,是否足够简洁 6 | 4. 清晰度:表述是否清晰易懂 7 | 8 | 问题:{question} 9 | 10 | 选项: 11 | A. {answer1} 12 | B. {answer2} 13 | C. {answer3} 14 | 15 | 请以JSON格式提供你的选择和理由: 16 | 17 | {{ 18 | "reason": "你的选择理由,请详细说明为什么这个答案最符合上述评估标准", 19 | "answer": "A/B/C" 20 | }} 21 | 22 | 你的回答: -------------------------------------------------------------------------------- /public24_LawGLM/prompt/summary/summary.prompt: -------------------------------------------------------------------------------- 1 | 你是一位专业的信息总结专家。现在你和你对队友在打比赛,比赛使用关键词匹配的方法评分,其中关键词不仅仅是对问题的答案,还包含如何获得答案的中间步骤所得结果。 2 | 现在比赛要求不仅选手要正确回答问题,而且要把有效的中间步骤获得答案也罗列在总结中。 3 | 如: 4 | 问题: 请你告诉我案号XX审理当天原告的所在省份城市最高气温是多少度? 5 | 回答流程: 6 | 1. 查询案号XX对应的审理日期DATE。 7 | 2. 查询案号XX的原告是COMPANY 8 | 3. 查询案号XX的原告的地址ADDRESS 9 | 4. 根据案号XX的原告的地址获取原告所在的省份城市SSCC 10 | 5. 根据原告所在的省份城市和审理日期查询最高气温TEMP 11 | 12 | 答案中的关键词包含:DATE,COMPANY, ADDRESS, SSCC, TEMP 13 | 你的回答: 案号XX审理日期是DATE,原告是COMPANY,原告的地址是ADDRESS,原告所在的省份城市是SSCC,最高气温是TEMP。 14 | 15 | 根据案号XX的审理日期是和原告的地址,查询到了原告所在的省份城市和最高气温。 16 | 请根据以下问题和问题对应的回答流程,将回答流程总结为一个对问题简洁而全面的回答: 17 | 18 | 要求: 19 | 1. 直接回答问题中的所有问题点,包含更正信息和每一个回答流程中的回答。 20 | 2. 若有更正信息,请先列出更正信息,再继续总结。 21 | 3. (**重点**)在回答流程中每一个任务id都表示一个重要的中间结果,请仅仅将每一个任务id的获得的结果也都总结在回答中,关键过程根据任务id内的问题回答,简略一些,不要描述结果文件信息内容。 22 | 4. (**重点**)保持简洁,但不省略重要细节(如公司名称、案号、具体数字等. 23 | 5. 除非题目有要求,不要修改任何实体信息,包括数字格式,案号信息不要使用中文括号。 24 | 6. 对于金额数据若有要求如输出亿为单位或者保留两位小数,请按照要求输出,金额数据一般单位为元,除非任务要求输出为万元,亿元等。 25 | 7. 所有答案的括号均为英文括号,所有日期的答案均为XXXX年XX月XX日,所有温度的单位均为度。 26 | 8. 总结后的回答应该是完整的陈述句,直接给出答案,注意回答通畅,注意语义表达。 27 | 28 | 29 | 问题: 30 | {question} 31 | 32 | 回答流程: 33 | {answer_process} 34 | 35 | CSV文件内容 36 | {csv_contents} 37 | 38 | 请注意回答流程中的子任务数量,一般子任务有N个,总结中就应该含有N-1个中间结果。 39 | 请仅仅把与问题相关的中间结果也包含在总结内,相关的中间结果请根据任务id内的问题回答,简略一些,不要描述结果文件信息内容和路径。 40 | 相关中间过程表示是递推关系,从问题到答案必不可少的中间过程,如:问题->中间过程->中间过程->答案,中间过程不能省略。 41 | 请你做出简洁而通畅的回答: 42 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/summary/summary_extractor.prompt: -------------------------------------------------------------------------------- 1 | 你是一个专业法律领域的信息检索员。 2 | 现在你和你对队友在打比赛,比赛使用关键词匹配的方法评分,比赛要求不仅选手要正确回答问题,而且要把有效的中间步骤获得答案也罗列在总结中。 3 | 你的任务是根据队友的回答流程和结果文件信息为每个结果文件做出合理的解释并提取其关键信息,请根据下面流程完成这项任务: 4 | 5 | 1. 将提供的结果文件路径存为列表。 6 | 2. 对每个结果文件,根据队友的回答流程为该数据编写一个与该结果文件相关的问题,并保存为列表。 7 | 3. 对每个结果文件,根据队友的回答流程和2中所编写的线管问题,选出保存数据中与问题相关的字段,写成一段用逗号隔开的字符串, 将这些字符串保存为列表。 8 | 注意: 9 | 你将返回三个个列表,三个列表元素数量相等,顺序一一对应。 10 | (重点)第三个列表的要求提供的字段必须真实,即都是各个保结果文件中含有的字段, 不能乱编。 11 | 12 | 13 | 现在你有如下信息: 14 | ## 问题: {question} 15 | 16 | 17 | ## 队友回答问题流程如下 18 | {plan_res} 19 | 20 | ### 有效结果文件路径和其存储的字段信息如下: 21 | {file_info_dict} 22 | 23 | ### 24 | 请以 JSON 格式提供你的评判结果,不要做其他多余的输出: 25 | {{ 26 | "file_paths": ["path1", "path2", "path3",...], # 结果文件路径列表 27 | "questions": ["question1", "question2", "question3",...], # 问题列表 28 | "related_cols": ["col1, col2, col3...", "col1, col2, col3...", "col1, col2, col3...",...] # 对应问题的相关字段列表 29 | }} 30 | 31 | 你的回答: 32 | 33 | -------------------------------------------------------------------------------- /public24_LawGLM/prompt/summary/summary_zyc.prompt: -------------------------------------------------------------------------------- 1 | 你是一位专业的信息总结专家。请根据以下信息生成一个简洁而全面的总结: 2 | 3 | 问题:{question} 4 | 计划:{plan} 5 | 子任务结果:{answer_process} 6 | CSV文件内容:{csv_contents} 7 | 8 | 要求: 9 | 1. 直接回答问题中的所有问题点,包含所有关键信息。 10 | 2. 如果问题询问具体项目或案例,请列出所有相关项目或案例。 11 | 3. 保持简洁,但不省略重要细节(如公司名称、案号、具体数字等)。 12 | 4. 不要修改任何实体信息,包括数字格式。 13 | 5. 不要包含查询过程,只需包含结果。 14 | 6. 总结应该是完整的陈述句,直接给出答案。 15 | 7. 使用CSV文件内容中的详细信息来回答问题,包括案号和具体涉案金额。 16 | 8. CSV文件内容是一个字典,其中键是文件名,值是文件内容。请根据文件名选择合适的内容进行回答。 17 | 18 | 请参考以下例子的格式: 19 | 20 | 经查询,浙江晨丰科技股份有限公司参与的有涉案金额的案件有X起: 21 | 1. [案号1],涉案金额[金额1]元 22 | 2. [案号2],涉案金额[金额2]元 23 | ... 24 | 这些案件的涉案金额总和为[总金额]元。 25 | 26 | 请生成总结: -------------------------------------------------------------------------------- /public24_LawGLM/rank.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | # 读取文件并逐行解析JSON对象 4 | with open('/app/result_cashe.json', 'r', encoding='utf-8') as file: 5 | data = [json.loads(line) for line in file] 6 | 7 | # 根据"id"字段排序 8 | sorted_data = sorted(data, key=lambda x: x['id']) 9 | 10 | # 将排序后的数据写入新文件,每行一个JSON对象 11 | with open('/app/result.json', 'w', encoding='utf-8') as file: 12 | for item in sorted_data: 13 | file.write(json.dumps(item, ensure_ascii=False) + '\n') 14 | 15 | print("排序完成,结果保存在result.json文件中。") 16 | -------------------------------------------------------------------------------- /public24_LawGLM/requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | websocket-client 3 | langchain 4 | langchain-community 5 | langchain-openai 6 | langchainhub 7 | langgraph 8 | jsonlines 9 | tqdm 10 | pandas 11 | openpyxl 12 | duckduckgo-search 13 | scikit-learn 14 | zhipuai 15 | jieba -------------------------------------------------------------------------------- /public24_LawGLM/services/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public24_LawGLM/tools/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MetaGLM/LawGLM/c634fa50753679a449680a92c48bb44e8c6e9e48/public24_LawGLM/tools/__init__.py -------------------------------------------------------------------------------- /public24_LawGLM/tools/interface.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | from typing import Any, Union 3 | 4 | 5 | @dataclass 6 | class ToolObservation: 7 | content_type: str 8 | text: str 9 | image_url: Union[str, None] = None 10 | role_metadata: Union[str, None] = None 11 | metadata: Any = None -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.ruff] 2 | line-length = 119 3 | 4 | [tool.ruff.lint] 5 | # Never enforce `E501` (line length violations). 6 | ignore = ["C901", "E501", "E741", "F402", "F823"] 7 | select = ["C", "E", "F", "I", "W"] 8 | 9 | # Ignore import violations in all `__init__.py` files. 10 | [tool.ruff.lint.per-file-ignores] 11 | "__init__.py" = ["E402", "F401", "F403", "F811"] 12 | 13 | [tool.ruff.lint.isort] 14 | lines-after-imports = 2 15 | 16 | [tool.ruff.format] 17 | # Like Black, use double quotes for strings. 18 | quote-style = "double" 19 | 20 | # Like Black, indent with spaces, rather than tabs. 21 | indent-style = "space" 22 | 23 | # Like Black, respect magic trailing commas. 24 | skip-magic-trailing-comma = false 25 | 26 | # Like Black, automatically detect the appropriate line ending. 27 | line-ending = "auto" 28 | --------------------------------------------------------------------------------