lawafternfinity
GLM法律大模型挑战赛后会无期解题方案
解题方案
思路一: 代码生成
将API 调用封装为可执行代码,由模型生成调用取数及处理的python 代码,获取回答问题所需的必要数据,然后由模型根据问题及相关数据生成答案
具体步骤如下:
第一步 核心要素提取
通过大模型提取问题中的核心要素, 同时对问题中可能存在的输入错误进行修复,以及提取问题中隐藏的数据第二步 涉及数据表范围分析
将问题、核心要素、数据表结构 提供给模型由模型确认回答问题需要依赖哪些表的数据,并基于数据表的标准字段改写问句第三步 生成取数代码
根据核心要素字段及涉及的数据表 确定回答问题需要调用API范围(精简上下文,大部分情况问题都只需要一部分API),并提供API 调用说明 然后由模型生成python取数代码,为简化生成代码,基于取数API client 封装取数工程factory
对象(非大宽表形式),统一入参为 方法名+取数条件, 统一返回值为DataFrame对象
def query(self,function: str, conditions: dict) -> DataFrame:
pass
为便于代码中记录数据提供封装好的数据收集器collect
collect.record(name:str,value)
collect.record_error("错误信息")
- 第四步 执行代码获取数据
- 第五步 根据问题和代码执行结果,由模型生成问题答案
思路二: function call agent
思路二逻辑上更简单,及通过Function call 能力实现agent ,将所有接口封装为function和问题一起传入模型,由模型选择调用方法迭代执行,并生成回答
工程实现
工程实现上更侧重于思路一,同时将思路二作为备选,在思路一无法回答时,切换到思路二
其中
思路一第一步 核心要素提取 对应代码 CoreElementAnalyze
思路一第二步 涉及数据表范围分析 对应代码 TableRangeAnalyze
思路一第三、四、五步 生成取数代码、执行代码、生成代码整体封装为 对应代码 DynamicCodeAnswerStep
思路二 function call 封装为FunctionCallAnswerStep
对应整体执行pipeline 声明如下,每个step 依次执行
pipeline = Pipeline(steps=[CoreElementAnalyze(self.fusion),TableRangeAnalyze(self.fusion), DynamicCodeAnswerStep(self.fusion, FunctionCallAnswerStep())])
代码说明:
.
├── README.md
├── README_A榜.md
├── agent
│ ├── chat_router.py
│ └── create_agent.py
├── apis
│ ├── __init__.py
│ ├── agent_function_defined.py 提供给function call agent 调用的方法定义,依赖law_b_api_client
│ ├── law_a_api_client.py A 榜的API封装, 包括API调用,字段、方法重命名等逻辑
│ ├── law_a_api_client_test.py
│ ├── law_b_api_client.py B 榜的API封装, 包括API调用,字段、方法重命名等逻辑
│ └── law_b_api_client_test.py
├── common 业务逻辑无关公共方法、框架
│ ├── log.py
│ ├── pipline.py 执行pipeline 框架定义
│ └── task.py 任务处理器封装
├── data 问题数据目录
├── debug 生成结果及中间调试输出目录
├── few-shot-prompt.yaml prompt配置
├── law_pipeline_a.py
├── law_pipeline_b.py ??? B榜单问题处理执行入口
├── llm
│ ├── agent.py
│ ├── llm.py 对模型原始调用的封装
│ ├── prompt.py 提供few-shot 提示词管理
│ ├── prompt_fusion.py LLM+提示词融合服务
│ ├── prompt_fusion_test.py
│ ├── prompt_test.py
│ ├── router_chain.py
│ └── tools.py
├── main.py ??? 全问题处理执行入口
├── pipline
│ └── step
│ ├── dynamic_code_answer_step.py ??? 生成代码组合答案 核心step 流程
│ └── law_steps.py ??? 其他step 定义
├── requirements.txt
├── result
├── result_analyze.py 生成结果处理函数
├── table_schema.json
├── tools
└── utils
└── utils.py
其他补充
- 对于模型输出json 不稳定, 通过fix_json prompt由模型进行修复
- 对于生成代码失败或未成功取数逻辑 通过将代码和失败原因传入模型进行修复
- table_schema.json 中提供数据表定义、别名定义、方法重命名、
评论