基于Qwen的法律领域问答方案(Agent+代码生成)

简介: 第三届琶洲算法大赛由广州市政府与中国人工智能学会联合主办,聚焦AI大模型和AIGC热点,吸引超5000支队伍参赛。本文提出基于Qwen的Agent+代码生成方案,通过问题重写、命名实体识别、意图识别等步骤,实现法律问题解答、案件信息查询等功能,支持自定义接口以满足不同查询需求。方案利用大语言模型的语义理解和函数调用功能,确保答案可控生成,并已发布于Qwen-Article仓库。

第三届琶洲算法大赛 由广州市人民政府、 中国人工智能学会联合主办, 中国信息通信研究院、 广州市海珠区人民政府、 广州市科学技术局、 广州市工业和信息化局、 广州市政务服务和数据管理局、 人工智能与数字经济广东省实验室(广州)共同承办, 聚焦 AI 大模型、 AIGC 行业热点, 广泛邀请行业龙头企业、 科研机构、 投资机构、 生态合作企业、 行业协会参与出题、发动征集、评审、技术合作及商业落地机会, 预计将吸引超 5000 支队伍参赛。

方案应利用大语言模型的语义理解和函数调用功能,准确解析用户查询,并通过访问相关法律数据库或 API,提供服务,包括解答法律问题、查询案件信息、检索历史案件和分析司法数据。

本文提出了一个基于Qwen的Agent+代码生成方案:基于反馈的编程Agent,通过问题重写、命名实体识别、制定计划、代码生成、反馈调试、答案可控生成等步骤,实现目标。支持自定义接口,通过增加接口可以满足不同的查询需求。

方案架构图

整体思路

  1. 输入问题
  2. Rewriter:问题重写
  3. Preprocessor:命名实体识别(NER)
  4. Recognizer:意图识别
  5. 任务 DAG,拓扑排序
  6. Filter:过滤数据表和工具
  7. Programmer:编写代码
  8. Coder:执行代码
  9. Debugger:修复错误
  10. Combiner:答案可控生成
  11. Postprocessor:正则替换
  12. 输出答案

工具函数

将 RESTful API 转换为以下格式,方法文档用于构建提示词,ToolException 用于引导模型调试生成代码的错误:

registered_tools = list()
registered_tools_map = {
   }

domain = "comm.chatglm.cn"
url_prefix = f"https://{domain}/law_api/s1_b"

team_token = os.getenv('TEAM_TOKEN') or ''
headers = {
   
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + team_token
}


def register_tool(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)

    registered_tools.append(func)
    registered_tools_map[func.__name__] = func
    return wrapper

@register_tool
def get_company_info(
    value: Annotated[str, "字段值"],
):
    """
    根据 **公司名称**、**公司简称** 或 **公司代码** 查找上市公司基本信息
    根据返回结果判断,结果为空说明该公司是非上市公司,请使用 get_company_register 工具查询 CompanyRegister

    Args:
        value (str): 公司名称、公司简称或公司代码

    Returns:
        CompanyInfo: dict

    Example:
        >>> company_info = get_company_info("示例公司名称")
        >>> company_info.get('所属行业')
    """
    if is_empty(value):
        raise ToolException(traceback='', ename='get_company_info 参数错误', evalue='value 不能为空')
    if isinstance(value, list) or isinstance(value, dict):
        raise ToolException(traceback='', ename='get_company_info 参数错误', evalue='value 需要字符串类型')
    # 如果 value 没有中文且长度大于 6,应该是统一社会信用代码
    if no_chinese(value) and len(value) > 6:
        raise ToolException(traceback='', ename='get_company_info 参数错误', evalue='value 参数错误')
    if value == '示例公司名称':
        raise ToolException(traceback='', ename='get_company_info 参数错误', evalue='value 参数错误')

    url = f"{url_prefix}/get_company_info"

    # 公司名称
    response = requests.post(url, json={
   
        "query_conds": {
   
            "公司名称": value
        },
        "need_fields": []
    }, headers=headers)
    data = response.json()
    if not is_empty(data):
        return data

    # 公司简称
    response = requests.post(url, json={
   
        "query_conds": {
   
            "公司简称": value
        },
        "need_fields": []
    }, headers=headers)
    data = response.json()
    if not is_empty(data):
        return data

    # 公司代码
    response = requests.post(url, json={
   
        "query_conds": {
   
            "公司代码": value
        },
        "need_fields": []
    }, headers=headers)
    data = response.json()
    return data

过滤数据表和工具

这一步有点类似于 Text-to-SQL 任务中的模式链接(Schema Linking):

image.png

  • 13 个数据表和 24 个接口
  • 使用全量的数据表和接口太多
  • 使用大模型 + 实体关系图过滤
  • 得到只与问题关联的数据表和接口

编写、执行、调试代码

image.png

  • Programmer:编写代码
  • Coder:执行代码
  • Debugger:调试代码

这个阶段使用专注于编程任务的 Qwen-Coder 模型效果会更好。

答案可控生成

Programmer 提示词

完成每一个步骤,立即使用 print 函数输出该步骤的 output 变量值。格式如下:
print(f"Step { {步骤编号}} output - { {output变量名}}:", output变量值)
确保每个步骤的结果都被打印出来,以便跟踪代码执行过程。

Combiner 提示词

[问题]
{question}

[运行代码]

{
    executed_code}

[运行结果]
{sub_questions_result_desc}

[任务]

  1. 按照 运行代码 的步骤,提取 运行结果 中所有有结果的步骤输出到答案。
    ...

总结

本文代码已发布于 Qwen-Article 仓库。

相关文章
|
自然语言处理 IDE 开发工具
通义灵码新增 Inline Chat 能力,代码行内随时问答,沉浸式编码,心流不断
通义灵码行间会话(Inline Chat)支持开发者在代码编辑器区域进行对话,开发者可以通过自然语言对话的方式进行单个文件内的代码修改或进行即时提问。
915 149
|
人工智能 自然语言处理 数据挖掘
云上玩转Qwen3系列之三:PAI-LangStudio x Hologres构建ChatBI数据分析Agent应用
PAI-LangStudio 和 Qwen3 构建基于 MCP 协议的 Hologres ChatBI 智能 Agent 应用,通过将 Agent、MCP Server 等技术和阿里最新的推理模型 Qwen3 编排在一个应用流中,为大模型提供了 MCP+OLAP 的智能数据分析能力,使用自然语言即可实现 OLAP 数据分析的查询效果,减少了幻觉。开发者可以基于该模板进行灵活扩展和二次开发,以满足特定场景的需求。
|
Web App开发 存储 传感器
大模型编程(4)- 大白话 agent
本文介绍了大模型中的`agent`概念及其作用。通过类比日常使用的浏览器作为访问网页的代理,解释了`agent`在大模型中的角色:简化复杂操作、增强功能性。文中提到,即使是简单的功能实现(如查询天气),也可以视为`agent`的应用。进一步探讨了一个典型的智能家庭助理`agent`的工作流程,包括感知环境、思考决策和执行行动三个主要阶段。这不仅帮助理解`agent`的功能,也为开发更复杂的`agent`提供了参考。
713 3
|
10月前
|
人工智能 自然语言处理 Serverless
Vibecoding 新体验:实测 Qwen3 Coder 代码生成效果
Qwen3 Coder 是全球领先的开源编程大模型,具备强大的代码生成能力与1M超长上下文支持,适用于构建复杂应用。本文通过实际案例展示其在电商网站开发中的应用,并详解提示词设计、技术拆解与部署方案,探讨Agentic AI落地的挑战与经验。
1671 14
|
10月前
|
人工智能 自然语言处理 Serverless
Vibecoding 新体验:实测 Qwen3 Coder 代码生成效果
Qwen3 Coder 是一款强大的编程大语言模型,支持超长 1M 上下文,具备卓越的代码生成能力。结合 VibeCoding 方案,可助力开发者与企业快速构建复杂应用,实现自然语言生成系统,提升开发效率与生产力。
|
人工智能 自然语言处理 前端开发
从理论到实践:使用JAVA实现RAG、Agent、微调等六种常见大模型定制策略
大语言模型(LLM)在过去几年中彻底改变了自然语言处理领域,展现了在理解和生成类人文本方面的卓越能力。然而,通用LLM的开箱即用性能并不总能满足特定的业务需求或领域要求。为了将LLM更好地应用于实际场景,开发出了多种LLM定制策略。本文将深入探讨RAG(Retrieval Augmented Generation)、Agent、微调(Fine-Tuning)等六种常见的大模型定制策略,并使用JAVA进行demo处理,以期为AI资深架构师提供实践指导。
2216 73
|
12月前
|
人工智能 搜索推荐 测试技术
通义灵码 Agent+MCP:打造自动化菜品推荐平台,从需求到部署实现全流程创新
通过通义灵码编程智能体模式和 MCP 的集成,开发者可以高效构建在线菜品推荐网站。智能体模式大幅提升了开发效率,MCP 服务则为功能扩展提供了无限可能。
|
自然语言处理 安全 数据挖掘
Hologres+函数计算+Qwen3,对接MCP构建企业级数据分析 Agent
本文介绍了通过阿里云Hologres、函数计算FC和通义千问Qwen3构建企业级数据分析Agent的解决方案。大模型在数据分析中潜力巨大,但面临实时数据接入与跨系统整合等挑战。MCP(模型上下文协议)提供标准化接口,实现AI模型与外部资源解耦。方案利用SSE模式连接,具备高实时性、良好解耦性和轻量级特性。Hologres作为高性能实时数仓,支持多源数据毫秒级接入与分析;函数计算FC以Serverless模式部署,弹性扩缩降低成本;Qwen3则具备强大的推理与多语言能力。用户可通过ModelScope的MCP Playground快速体验,结合TPC-H样例数据完成复杂查询任务。
|
12月前
|
人工智能 数据库
智能体(AI Agent)开发实战之【LangChain】(四)结合大模型基于RAG实现本地知识库问答和纠错
本文介绍如何基于RAG实现知识库问答系统的输入内容纠错功能。通过加载本地知识库、构建向量数据库,结合大语言模型对输入文本进行检索比对与纠错优化,提升问答准确性。

热门文章

最新文章