我写了一段代码,解析发票,就是通过 pdfminer 将 pdf 发票里的每个字符串的位置信息一起带进来,传给 llm ,提示词类似于下面:
prompt = f"""
    你是一个擅长识别发票内容的 AI ,请从以下多个发票的 OCR 块中,提取结构化的发票信息。输出内容为 json 格式,不输出解释、思考或额外说明。
    
    每张发票以“ [文件: xxx.pdf ] ”标识其来源。请为每个文件分别返回结构化信息,输出如下 JSON 格式:
    
    {{
      "invoice001.pdf": {{
        "发票代码": "...",
        "发票号码": "...",
        "开票日期": "...",
        "购买方名称": "...",
        "销售方名称": "...",
        "价税合计": "...",
        "明细": [
          {{
            "名称": "...",
            "数量": "...",
            "单价": "...",
            "金额": "..."
          }}
        ]
      }},
      ...
    }}
    
    以下是多个文件的 OCR 文本及其坐标:
    {'\n'.join(all_text_blocks)}
        """.strip()
对接 gpt 和 deepseek 公有模型都好使,但是对接私有模型,比如 deepseek-r1-distill-qwen-32b ,deepseek-prover-v2-671b , 还有最新的 qwen3-30b-a3b ,效果都很差,基本上解析不了 json 格式。这是什么原因呢,需要怎么调试。
使用的是 langchain 框架,私有模型用的是 gpustack 在 macstudio m3ultra 上部署的。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.