LawGLM-后会无期

我要开发同款
匿名用户2024年07月31日
8阅读
开发技术other
所属分类ai
开源地址https://modelscope.cn/models/debugicu/law_after_nfinity

作品详情

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

其他补充

  1. 对于模型输出json 不稳定, 通过fix_json prompt由模型进行修复
  2. 对于生成代码失败或未成功取数逻辑 通过将代码和失败原因传入模型进行修复
  3. table_schema.json 中提供数据表定义、别名定义、方法重命名、
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论