LLM(大语言模型)应用不只是调用一次模型接口。真正落到工程里,通常还要处理文档抽取、工作流编排、工具调用、浏览器调试、本地知识库检索、示例项目复用等问题。
这 6 个开源项目可以按能力分成几类:
| 项目 | 解决的问题 | 适合场景 | 核心关键词 |
|---|---|---|---|
| LangExtract | 从非结构化文本中抽取结构化数据 | 病历、报告、合同、长文档审阅 | 信息抽取、源定位、可视化审核 |
| Agentic Workflows | 用 Markdown 描述 AI 工作流并在 GitHub Actions 中执行 | 仓库自动化、Issue 处理、文档维护 | GitHub Actions、安全沙箱 |
| pi-mono | 构建和运行 AI Agent 工具链 | 本地服务器、树莓派、CLI Agent | 多模型、上下文管理、本地 Agent |
| awesome-llm-apps | 学习和复用 LLM 应用案例 | RAG、Agent、多智能体、语音应用 | 示例集合、项目模板 |
| chrome-devtools-mcp | 让 AI 助手控制和检查 Chrome | 自动化测试、网页调试、性能分析 | MCP、Chrome DevTools |
| qmd | 本地 Markdown 知识库搜索 | 个人笔记、技术文档、Agent 知识库 | BM25、向量检索、Ollama、重排序 |
这些项目可以组合成一套比较完整的 LLM 应用开发链路:
flowchart LR
A[非结构化数据<br/>文档/网页/代码/笔记] --> B[信息抽取<br/>LangExtract]
A --> C[本地知识库搜索<br/>qmd]
D[仓库任务] --> E[AI 工作流<br/>Agentic Workflows]
F[本地运行环境] --> G[Agent 工具链<br/>pi-mono]
H[浏览器页面] --> I[Chrome 自动化与调试<br/>chrome-devtools-mcp]
J[应用案例学习] --> K[awesome-llm-apps]
B --> L[结构化数据]
C --> M[检索结果]
E --> N[自动化任务输出]
G --> O[Agent 执行结果]
I --> P[网页状态/网络/性能数据]
1. LangExtract:从混乱文本里抽取可审核的数据
LangExtract 是 Google 开源的 Python 库,目标很明确:把非结构化文本中的关键信息抽成结构化结果,并且能定位每条结果来自源文本的哪个位置。
普通 LLM 抽取很容易遇到两个问题:
- 模型给出了结果,但很难判断依据来自哪里;
- 长文档内容太多,抽取结果不方便人工复核。
LangExtract 的重点不只是“抽出来”,而是让抽取结果可以追溯、可以审核。比如处理临床病历、实验报告、法律合同、客服记录时,结构化结果必须能回到源文本上下文中验证,否则很难直接进入业务流程。
它的典型处理链路可以理解成这样:
flowchart TD
A[输入长文档] --> B[按上下文切分]
B --> C[调用 LLM 抽取字段]
C --> D[生成结构化结果]
D --> E[对齐源文本位置]
E --> F[生成可视化 HTML]
F --> G[人工审核与修正]
核心能力包括:
| 能力 | 作用 |
|---|---|
| 精确源定位 | 每条抽取结果可以回到源文本中的对应片段,方便审核 |
| 长文档优化 | 面向长报告、长病历、长记录做了处理,避免一次性塞入模型导致上下文超限 |
| 交互式可视化 | 可以生成独立 HTML 文件,在上下文中检查大量抽取结果 |
| 灵活模型支持 | 可以接 Gemini,也可以接 Ollama 这类本地模型运行环境 |
安装方式很简单:
pip install langextract
仓库地址:
https://github.com/google/langextract
适合用 LangExtract 的场景:
| 场景 | 为什么适合 |
|---|---|
| 临床病历抽取 | 对准确性和可追溯性要求高,需要看到证据位置 |
| 合同条款整理 | 字段多、文本长,抽取后需要人工复核 |
| 事故报告分析 | 需要抽取时间、地点、人物、事件、影响范围 |
| 客服工单归类 | 可以把自由文本整理成结构化标签和字段 |
使用时要注意两点。字段定义越清楚,抽取结果越稳定;如果文档包含敏感数据,云端模型和本地模型的选择要提前确定,不能等接入业务后再补隐私方案。
2. Agentic Workflows:把 AI 自动化任务写进 Markdown 和 GitHub Actions
Agentic Workflows 是 GitHub 官方推出的 AI 工作流项目,它把“用自然语言描述任务”和“在 GitHub Actions 中执行任务”连接起来。
传统 GitHub Actions 主要依赖 YAML 配置,适合执行确定性任务,比如跑测试、构建镜像、发布包。AI 任务通常没那么固定,例如:
- 根据 Issue 内容判断是否需要补充信息;
- 根据代码变更生成 Pull Request 摘要;
- 自动检查文档是否缺少更新;
- 根据仓库上下文生成维护建议。
Agentic Workflows 的思路是把这些任务描述写在 Markdown 中,让 AI Agent 根据描述执行,再放进 GitHub Actions 的运行环境里。
一个 AI 仓库工作流通常会经历这样的过程:
sequenceDiagram
participant Dev as 开发者
participant Repo as GitHub 仓库
participant Action as GitHub Actions
participant Agent as AI Agent
participant Safe as safe-outputs
Dev->>Repo: 提交 Issue / PR / Workflow 触发事件
Repo->>Action: 启动工作流
Action->>Agent: 传入 Markdown 任务说明和仓库上下文
Agent->>Agent: 分析任务并调用允许的工具
Agent->>Safe: 写入受控输出
Safe-->>Repo: 生成评论、检查结果或建议变更
安全设计是这个项目的重点。AI Agent 如果拥有过大的权限,很容易把错误输出变成真实仓库变更,所以 Agentic Workflows 采用多层限制:
| 安全机制 | 作用 |
|---|---|
| 默认只读权限 | Agent 默认不能直接改仓库内容 |
| safe-outputs | 写操作只能通过受控输出通道完成 |
| 沙箱执行 | 限制任务运行环境,降低越权风险 |
| 输入净化 | 减少提示词注入和恶意输入影响 |
| 网络隔离 | 避免 Agent 任意访问外部资源 |
| SHA 固定依赖 | 防止依赖版本漂移带来供应链风险 |
| 工具白名单 | Agent 只能使用允许的工具 |
仓库地址:
https://github.com/github/gh-aw
适合尝试的任务类型:
| 任务 | 说明 |
|---|---|
| Issue 初筛 | 判断缺少哪些复现信息、自动打标签 |
| PR 摘要 | 根据 diff 生成审查辅助信息 |
| 文档维护 | 检查代码变更是否需要同步更新文档 |
| Release 草稿 | 根据合并记录生成发布说明初稿 |
不适合直接交给它处理的任务也很明确:生产环境发布、数据库迁移、权限修改、密钥轮换这类高风险操作,应该保留人工确认环节。AI 可以给建议,不应该直接拥有最终执行权。
3. pi-mono:面向本地和小型服务器的 AI Agent 工具包
pi-mono 是一个 AI Agent 工具包,特点是可以把 coding agent CLI 跑在树莓派、本地服务器或其他自管环境中。
它不是单一聊天机器人,而是一组围绕 Agent 开发的组件,包括:
| 组件 | 用途 |
|---|---|
| Coding Agent CLI | 在命令行里运行代码相关 Agent |
| 统一 LLM API | 屏蔽不同模型提供商的接口差异 |
| TUI / Web UI 库 | 构建终端界面和 Web 界面 |
| Slack Bot | 把 Agent 接入团队沟通工具 |
| vLLM pods | 面向本地或自托管推理环境 |
| 上下文管理 | 自动压缩、恢复和处理上下文接近限制的问题 |
它支持多种模型和工具入口,包括 Claude、ChatGPT、GitHub Copilot、Google Gemini CLI 等。对开发者来说,比较实用的是“统一接口”和“上下文管理”。
很多 Agent 项目在 demo 阶段能跑,但一旦上下文变长,就容易出现几类问题:
- 对话历史太长,超过模型上下文窗口;
- 重要信息被截断,Agent 开始重复犯错;
- 多轮任务中断后,恢复成本高;
- 不同模型接口差异大,切换模型要改很多代码。
pi-mono 把上下文压缩和恢复放进工具链里,可以在接近上下文限制时主动处理,减少 Agent 长任务中途失控的概率。
仓库地址:
https://github.com/badlogic/pi-mono
适合使用 pi-mono 的场景:
| 场景 | 说明 |
|---|---|
| 本地 coding agent | 希望在自己的服务器上运行代码助手 |
| 小型设备实验 | 树莓派或低成本服务器上测试 Agent 工作流 |
| 多模型适配 | 同一套工具链需要接入多个模型提供商 |
| 团队机器人 | 通过 Slack Bot 把 Agent 接入团队流程 |
使用这类 Agent 工具包时,最容易忽略的是运行权限。Agent 如果能读写代码、执行命令、访问网络,就必须明确边界:哪些目录可写、哪些命令可执行、哪些密钥不能进入上下文。工具能力越强,权限控制越不能省。
4. awesome-llm-apps:从 100 多个 LLM 应用案例里学习工程结构
awesome-llm-apps 是一个 LLM 应用案例合集,收集了 100 多个项目,覆盖 RAG(检索增强生成)、AI Agent、多智能体团队、MCP(Model Context Protocol,模型上下文协议)、语音 Agent 等方向。
这类仓库的价值不是提供一个统一框架,而是提供大量可运行的工程样板。学习 LLM 应用时,只看概念很容易停留在“知道有这个东西”,但不知道目录怎么组织、提示词怎么放、检索怎么接、工具调用怎么写。案例仓库正好用来补这个空缺。
仓库地址:
https://github.com/Shubhamsaboo/awesome-llm-apps
可以按学习路径来使用:
| 阶段 | 建议关注的项目类型 | 能学到什么 |
|---|---|---|
| 入门 | 基础聊天机器人、简单问答应用 | 模型调用、提示词组织、基础 UI |
| 检索 | RAG 应用、文档问答 | 向量库、文本切分、召回和生成 |
| 工具调用 | Function Calling、MCP 示例 | 让模型调用外部工具和数据源 |
| Agent | 单智能体任务执行 | 任务规划、工具选择、执行循环 |
| 多智能体 | 多角色协作应用 | 角色分工、消息传递、协作控制 |
| 语音 | Voice Agent | 语音识别、语音合成、实时交互 |
它支持的模型范围也比较广,包括 OpenAI、Anthropic、Gemini、xAI,以及 Qwen、Llama 等开源模型。对于想做跨模型实验的开发者,这一点很有用,因为同一个应用模式可以换不同模型测试效果和成本。
一个比较稳妥的使用方式:
git clone https://github.com/Shubhamsaboo/awesome-llm-apps.git
cd awesome-llm-apps
# 进入感兴趣的子项目
# 根据对应 README 配置 API Key 或本地模型地址
# 安装依赖并运行示例
选择案例时不要只看名字,要重点看三件事:
- 是否有完整运行步骤;
- 是否说明依赖的模型和外部服务;
- 是否能替换成自己的数据源。
如果目标是生产系统,案例项目更适合作为结构参考,而不是直接复制上线。示例通常会弱化鉴权、限流、日志、监控、错误重试等工程细节,这些都需要自己补齐。
5. chrome-devtools-mcp:让 AI 编程助手直接操作 Chrome
chrome-devtools-mcp 是一个 MCP 服务,它把 Chrome DevTools 的能力暴露给 AI 编程助手。这样 Claude Code、Cursor、Copilot、Gemini CLI 等工具就不只能看代码,还能实际控制浏览器、检查页面状态、分析网络请求和性能问题。
MCP 可以理解为 AI 助手和外部工具之间的协议层。AI 助手是客户端,chrome-devtools-mcp 是服务端,Chrome 浏览器是被操作对象。
sequenceDiagram
participant Assistant as AI 编程助手
participant MCP as chrome-devtools-mcp
participant Chrome as Chrome 浏览器
participant Page as Web 页面
Assistant->>MCP: 请求打开页面 / 点击按钮 / 获取日志
MCP->>Chrome: 调用 DevTools 能力
Chrome->>Page: 执行页面操作
Page-->>Chrome: 返回 DOM、网络、控制台、性能数据
Chrome-->>MCP: 返回调试结果
MCP-->>Assistant: 转换为 AI 可读的工具结果
它提供的能力可以分成两类。
一类是输入自动化:
| 能力 | 用途 |
|---|---|
| 点击 | 测试按钮、链接、菜单 |
| 拖拽 | 测试拖放组件 |
| 填表 | 自动输入登录、搜索、配置表单 |
| 处理对话框 | 处理 alert、confirm 等弹窗 |
| 按键 | 模拟键盘操作 |
| 上传文件 | 测试文件上传流程 |
另一类是调试和分析:
| 能力 | 用途 |
|---|---|
| 网络请求分析 | 检查接口状态码、耗时、请求参数 |
| 截图 | 捕获当前页面状态 |
| 控制台消息检查 | 查看前端报错和日志 |
| 性能追踪录制 | 分析页面加载和交互性能 |
| 性能洞察 | 辅助定位慢请求、长任务、渲染瓶颈 |
常见 MCP 配置大致是这种形式,具体字段以所用 AI 工具的配置格式为准:
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["chrome-devtools-mcp@latest"]
}
}
}
仓库地址:
https://github.com/ChromeDevTools/chrome-devtools-mcp
适合使用的任务:
| 场景 | 说明 |
|---|---|
| UI 回归检查 | 让 AI 打开页面并执行关键路径 |
| Bug 复现 | 根据步骤操作页面,收集控制台和网络信息 |
| 性能分析 | 录制 trace,辅助定位加载慢或交互卡顿 |
| 前端调试 | 结合代码修改和浏览器反馈形成闭环 |
它不能完全替代 Playwright、Cypress 这类确定性测试框架。AI 操作浏览器更适合探索、排查、辅助调试;稳定的 CI 测试仍然需要明确断言和可重复脚本。
6. qmd:用本地模型搜索 Markdown 知识库
qmd 是一个本地 Markdown 搜索引擎,适合把个人笔记、团队文档、项目知识库变成可检索的数据源。它的特点是全程可以通过 Ollama 在本地运行,不依赖外部网络服务。
它不是单纯的关键词搜索,而是把三种能力组合起来:
- BM25 全文检索;
- 向量语义搜索;
- LLM 重排序。
BM25 擅长处理关键词匹配,尤其是专有名词、函数名、错误码、配置项。向量搜索擅长处理语义相近但字面不完全一致的问题。LLM 重排序则用于把候选结果重新排序,让更符合问题意图的内容排在前面。
qmd 的检索流程可以表示为:
flowchart TD
A[用户查询] --> B[LLM 查询扩展]
B --> C[生成多个查询变体]
C --> D[BM25 / FTS5 全文检索]
C --> E[向量语义检索]
D --> F[RRF 排名融合]
E --> F
F --> G[位置感知混合]
G --> H[LLM 重排序]
H --> I[返回 Markdown 片段]
其中几个技术点值得单独解释:
| 技术点 | 作用 |
|---|---|
| 查询扩展 | 用 LLM 生成查询变体,提高召回率;原始查询权重更高,避免偏离用户意图 |
| FTS5 | SQLite 的全文检索能力,适合本地轻量索引 |
| 向量搜索 | 通过 embedding 查找语义相近内容 |
| RRF | Reciprocal Rank Fusion,按多个检索器的排名进行融合 |
| 位置感知混合 | 根据排名位置调整不同检索结果的权重 |
| LLM 重排序 | 对候选片段做最后排序,减少无关结果靠前的问题 |
| MCP 模式 | 让 Claude Code 等 AI 工具把 qmd 当成本地知识库工具调用 |
仓库地址:
https://github.com/tobi/qmd
因为 qmd 依赖 Ollama,本地模型环境要先准备好:
ollama serve
ollama pull llama3.1
实际使用时,比较适合把这些内容放进 qmd:
| 内容类型 | 示例 |
|---|---|
| 技术笔记 | Markdown 学习记录、排障手册 |
| 项目文档 | 架构说明、接口说明、部署步骤 |
| 会议记录 | 决策背景、任务分工、历史讨论 |
| 代码知识库 | 模块说明、约定规范、常见问题 |
qmd 和普通向量库的差异在于,它没有把“语义搜索”当成唯一答案。很多工程问题必须依赖精确词匹配,比如错误码 ECONNRESET、配置项 max_connections、函数名 parseRequest。BM25 和向量检索一起用,才能同时兼顾精确匹配和语义召回。
选型建议:按问题找项目
如果只是想快速判断该看哪个项目,可以按问题选:
| 你遇到的问题 | 优先看 |
|---|---|
| 大量文档需要抽取字段,还要能人工审核 | LangExtract |
| 想把 AI 自动化放进 GitHub 仓库流程 | Agentic Workflows |
| 想在本地服务器或树莓派上跑 coding agent | pi-mono |
| 想学习 LLM 应用工程结构 | awesome-llm-apps |
| 想让 AI 助手操作网页、分析 DevTools 数据 | chrome-devtools-mcp |
| 想做离线 Markdown 知识库搜索 | qmd |
也可以按组合来搭建工作流:
| 组合 | 能做什么 |
|---|---|
| LangExtract + qmd | 从文档抽取结构化信息,再建立本地可检索知识库 |
| chrome-devtools-mcp + Agentic Workflows | 在仓库工作流中辅助检查前端页面问题 |
| pi-mono + qmd | 本地 Agent 调用本地知识库,不把资料发到云端 |
| awesome-llm-apps + 任意项目 | 先从案例学习,再替换成自己的业务数据和模型 |
LLM 应用开发的关键不只是模型本身,而是模型周围的工具系统。信息从哪里来、怎样被检索、Agent 能调用哪些工具、输出能否被审核、权限边界在哪里,这些问题决定了一个 demo 能不能变成可维护的工程。LangExtract、Agentic Workflows、pi-mono、awesome-llm-apps、chrome-devtools-mcp 和 qmd 正好覆盖了这条链路中的几个关键环节。