标签
Codex can self-configure to integrate third-party models like DeepSeek and Ollama by reading and modifying its config file automatically.
Ollama在其美国云上为GLM 5.2将GPU容量翻倍,使用NVIDIA B300 Blackwell GPU,强调隐私和开放模型。
Cohere 发布 North Mini Code,一个30B-A3B开源权重模型,采用4位量化,用于代码生成和智能体编码任务,支持256K上下文。
文章指出,过去一年中,本地AI模型变得显著更有用,从玩具变成了编程和工作流程的实用工具,尽管在复杂任务上仍落后于闭源模型。
GLM 5.2 已发布,采用 MIT 许可协议在 HuggingFace 上开放权重,可通过 API 和 Ollama 获取,其基准测试结果具有竞争力,仅落后 Opus 4.8 一个点,领先 GPT-5.5 一个点。
OpenAI Codex现已免费,但更令人惊讶的是本地开源模型也能达到接近云端的AI Agent体验,演示了修复游戏、开发网页游戏等场景,无需API Key和网络。
Ollama 现在支持 Cline CLI,通过看板功能实现并行任务,用于编辑器或终端中的智能代理编码。
Ollama 因未能正确归功其所依赖的 llama.cpp 项目、违反 MIT 许可证要求,以及接受风险投资资金并偏离其本地优先的使命而受到批评。
Ironsmith 是一款开源 macOS 应用,只需一个提示即可生成本地 macOS 应用,使用 Gemma 4 等本地 AI 模型,能在 8GB MacBook Air 等低端硬件上运行。
Supra Labs 发布了 Supra Title,这是一个参数为 350M 的专用模型,用于生成聊天对话标题。该模型基于 LFM2.5 构建,以 GGUF 格式运行在任何硬件上,且无需系统提示。
Claude Bug Hunter 已更名为 BUG HUNTER,这是一个独立的开源 CLI 工具,支持包括 Ollama、Groq、DeepSeek、Claude、OpenAI 和 Grok 在内的多种 AI 提供商,专为漏洞赏金社区设计。
一个完全离线、仅使用CPU的语音循环,用于本地大模型,采用Silero VAD、Parakeet STT和Supertonic TTS,通过一条命令整合安装。兼容Ollama、LM Studio以及多种代理框架。
Hermes 桌面应用现已支持 Ollama,用户可以 24/7 免费运行本地 AI 代理和开源模型。
Ollama 现在支持 Hermes Desktop,用户只需一条命令即可运行该模型。Hermes 能够根据自然语言生成 Python 技能,并随着使用不断改进。
TranslateBookWithLLM 是一个开源桌面应用,支持使用本地 Ollama 或云端 API 翻译 EPUB、SRT、DOCX 等格式的文档,保留原始排版并支持断点续传。
一位用户分享道,NVIDIA 目前正在免费提供顶级 AI 模型,如 Nemotron Ultra、DS4flash、Kimi、GLM 和 Minimax3,但有速率限制,可能对个人用户有益。
本文介绍了一种实用方法,利用微软的Harrier嵌入模型为OpenClaw代理提供本地语义记忆搜索功能,无需外部服务即可高效检索相关文本片段。
该模型是Google Gemma 4 12B it模型的未经审查版本,通过abliteration技术移除拒绝回答。可在Hugging Face和Ollama上获取,需注意敏感输出警告。
# 用本地 LLM 构建文档转 JSON 提取器的心得——模型大小没你想的那么重要 几个月前,我着手构建一个完全本地运行的文档信息提取流水线。目标很简单:输入 PDF 或纯文本文档,输出结构化 JSON,整个过程不调用任何外部 API,数据不离开本机。 以下是我踩过的坑、学到的东西,以及目前仍在纠结的问题。 --- ## 技术栈 - **模型**:llama3.2 3B(通过 Ollama 运行) - **语言**:Python - **关键库**:`ollama` Python 客户端、`pydantic` 做数据校验、`pypdf` 解析 PDF - **运行环境**:普通消费级笔记本,无独立 GPU 选择 3B 模型是迫不得已——硬件限制。但这个限制反而逼着我把更多精力放在**系统设计**上,而不是一味依赖模型能力。 --- ## 核心发现:后处理比模型更重要 这是最反直觉的收获。 一开始,我以为只要 prompt 写得足够好,模型就能输出干净的 JSON。现实是:**即使提示词再完美,模型输出也会夹带噪声**——多余的解释性文字、截断的括号、偶尔出现的幻觉字段。 真正让提取质量飞跃的,是在模型输出之后加了一层**确定性后处理**: ```python import re import json def extract_json_from_response(text: str) -> dict: # 先尝试直接解析 try: return json.loads(text.strip()) except json.JSONDecodeError: pass # 用正则抓取第一个 JSON 块 pattern = r'\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}' matches = re.findall(pattern, text, re.DOTALL) for match in matches: try: return json.loads(match) except json.JSONDecodeError: continue raise ValueError(f"响应中未找到有效 JSON:{text[:200]}") ``` 这个简单的函数处理了大约 80% 的格式异常情况。 --- ## Schema 约束:另一个关键杠杆 与其让模型"自由发挥"决定输出哪些字段,不如把 schema 直接塞进 prompt,效果会好很多。 我用 Pydantic 定义目标结构,然后动态生成提示词: ```python from pydantic import BaseModel from typing import Optional, List class InvoiceData(BaseModel): invoice_number: str date: str vendor_name: str total_amount: float line_items: List[str] currency: Optional[str] = "CNY" def build_extraction_prompt(document_text: str, schema: BaseModel) -> str: schema_json = schema.schema() return f"""你是一个结构化数据提取助手。请从以下文档中提取信息,并**严格按照**指定的 JSON schema 输出。 ## 目标 Schema ```json {json.dumps(schema_json, ensure_ascii=False, indent=2)} ``` ## 文档内容 {document_text} ## 输出要求 - 只输出 JSON,不要有任何额外说明 - 所有字段必须存在 - 找不到的信息填 null,不要编造 """ ``` 加了这个约束之后,幻觉字段(模型凭空捏造的字段名)减少了大约 60%。 --- ## 仍在头疼的两个问题 ### 1. 长文档的上下文截断 llama3.2 3B 的上下文窗口有限。处理超过 3000 词的文档时,模型会开始"忘记"前面的内容,提取质量明显下降。 我目前的临时方案是滑动窗口分块: ```python def chunk_document(text: str, chunk_size: int = 2000, overlap: int = 200) -> List[str]: words = text.split() chunks = [] start = 0 while start < len(words): end = start + chunk_size chunk = ' '.join(words[start:end]) chunks.append(chunk) start += chunk_size - overlap # 重叠区域保留上下文 return chunks ``` 但分块之后又带来新问题:**如何合并来自不同块的提取结果?** 当一条关键信息横跨两个块的边界时,两边都只拿到了残缺的片段,合并逻辑变得很复杂。 有没有人处理过这类跨块实体合并的问题? ### 2. 幻觉:模型会"脑补"不存在的信息 这是目前最让我头疼的问题。模型有时会对 `null` 值感到"不安",倾向于用听起来合理的内容填充空字段。 我加了一个置信度校验层,但感觉还是治标不治本: ```python def validate_extraction(extracted: dict, source_text: str, threshold: float = 0.8) -> dict: validated = {} for key, value in extracted.items(): if value is None: validated[key] = None continue # 粗略检查:提取的值是否在原文中有据可查 value_str = str(value).lower() source_lower = source_text.lower() if value_str in source_lower: validated[key] = value else: # 标记为存疑,而非直接丢弃 validated[key] = { "value": value, "confidence": "low", "warning": "原文中未找到该值,请人工核查" } return validated ``` 这个方法对数字和日期还算有效,但对于语义层面的幻觉(比如用同义词替换原文表述)就完全失效了。 --- ## 意外惊喜:3B 模型的表现超出预期 坦白说,我预期 3B 模型会很拉垮,结果出乎意料。 在**结构清晰的文档**(发票、表单、标准合同)上,只要后处理做扎实,准确率能到 85–90%。 真正的瓶颈不是模型智力,而是: - 文档格式混乱(扫描件 OCR 质量差) - 字段定义模糊("总金额"到底含不含税?) - 上下文跨块丢失 这让我重新思考一个问题:**在结构化提取任务上,我们是不是高估了大模型的必要性?** 很多时候,一个设计良好的小模型 + 严密的工程约束,能干掉一个被随意调用的大模型。 --- ## 希望听到你们的想法 目前最想求解的几个问题: 1. **跨块合并**:处理长文档分块提取时,你们是怎么做实体对齐和结果合并的? 2. **幻觉检测**:有没有比字符串匹配更可靠的本地化幻觉检测方案? 3. **替代方案**:有没有人试过用 `phi3` 或 `qwen2.5` 做类似任务?在相同硬件上表现如何? 4. **上下文窗口**:Ollama 的 `num_ctx` 参数调大之后,内存占用和推理速度的权衡是怎样的?实际用下来值不值? 这个项目目前是我自用的小工具,但如果能把幻觉问题压下去,我觉得可以做成一个更通用的本地文档处理框架。 欢迎拍砖、分享经验,或者告诉我哪里的思路完全走偏了。
一个轻量级、无依赖的Python CLI工具,用于对本地Ollama模型运行相同提示,并将每次响应保存到磁盘,便于轻松对比模型。