你的 AI Pipeline 应该拥有比 `print()` 更好的方案
Source: Dev.to
最后一英里问题
你一定有这种体会。你已经花了三天时间搭建 LLM 流水线。提示工程已经调校完毕,检索速度快,输出真的很棒——结构化分析、精美报告、可操作的摘要。你的模型正在产生真实的工作成果。
然后,你碰到了最后一英里。
print(result)
仅此而已。这就是输出层:终端里一大堆文字。也许你会写点花活,把它写入文件:
with open(f"output_{datetime.now().isoformat()}.md", "w") as f:
f.write(result)
现在 outputs/ 文件夹里已经有 47 个 markdown 文件,产品经理问你:“能直接给我一个链接吗?”
我们都经历过。尽管有数十亿美元流入 AI 基础设施,AI 输出的最后一英里仍然是用胶带粘合的。
胶带分类法
我见过团队用越来越有创意(也更绝望)的方式解决这个问题:
| 模式 | 描述 |
|---|---|
| 控制台牛仔 | 输出直接写到 stdout。截图粘到 Slack。48 小时后没人能找到任何东西。 “能把上周二的分析重新跑一遍吗?” 成了反复出现的噩梦。 |
| 本地文件收集者 | report_final_v2_FINAL.json 文件的墓地越堆越高。也许曾经有命名规范,曾经有过。现在一片混乱,大家都清楚这一点。 |
| 自定义 React 应用 | 有人花了两周时间搭建一个查看器。它能用——直到它不能用。于是你要维护一个 React 应用、一个数据库、认证、托管——仅仅是为了展示 LLM 输出。查看器本身成了一个独立的产品,带着自己的 bug,结果你的 AI 工程师开始调试 CSS。 |
| Google Docs 小技巧 | 把输出管道对接到 Google Docs API。祈祷格式还能保留下来。手动分享链接。过程中文本结构全部丢失。看着你精心构造的 JSON 变成一大段没有样式的文字。 |
| Notion/Confluence 导出 | 同样的思路,不同的 API。同样的悲哀。 |
这些方案的共同根本问题在于:你在搭建展示输出的基础设施,而不是在构建生成输出的东西。展示层本身就成了一个独立的项目,而它从来不是任何人的优先事项。
Source: …
三行代码
下面是最终实现的样子:
from surfacedocs import SurfaceDocs, DOCUMENT_SCHEMA, SYSTEM_PROMPT
docs = SurfaceDocs()
result = docs.save(llm_output)
print(result.url) # https://app.surfacedocs.dev/d/abc123
这就是 SurfaceDocs – pip install surfacedocs。三行代码,即可获得即时可分享的 URL。无需任何基础设施。
你的 LLM 输出会生成一个永久、已渲染、可分享的文档——不是文件、不是截图、也不是会消失在虚空中的 Slack 消息。一个可以交给任何人的 URL。
SDK 实际使用
SDK 自带 SYSTEM_PROMPT 和 DOCUMENT_SCHEMA,直接传给你的 LLM:
from openai import OpenAI
from surfacedocs import SurfaceDocs, DOCUMENT_SCHEMA, SYSTEM_PROMPT
client = OpenAI()
docs = SurfaceDocs()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": "分析 Q4 销售数据并生成执行摘要"}
],
response_format=DOCUMENT_SCHEMA
)
result = docs.save(response.choices[0].message.content)
print(result.url)
LLM 输出结构化内容,SurfaceDocs 能够将其美观地渲染。标题、表格、提示框、指标——全部在查看器中以格式化且交互的方式呈现。兼容 OpenAI、Anthropic、Gemini、Ollama 等,只要能遵循 schema,就能使用。
无需 React 应用。无需数据库。无需 CSS。无需托管。你负责构建流水线,SurfaceDocs 负责输出。
介绍 SurfaceDocs Pro
自从推出 SurfaceDocs 以来,人们已经构建了我们未曾预料的东西:
- 一个每日市场分析代理,每天早上发布新文档。
- 一个客户支持摘要流水线,每天创建数百份文档。
- 一个自主研究代理,在进行中发布其发现,形成 AI 生成分析的实时文档记录。
免费套餐(每月 10 份文档,保留 90 天)足以试用,但团队很快就会超出其容量。他们需要生产级基础设施,而不是玩具。
这就是我们推出 SurfaceDocs Pro,月费 $19 的原因。以下是您将获得的内容以及每项功能的重要性:
| 功能 | 为什么重要 |
|---|---|
| 每月 1,000 份文档 | 十份文档只是演示。千份文档才是流水线。这是“一次尝试”和“每天在生产环境运行”之间的区别。 |
| 300 请求/分钟,50 000 请求/天 | 免费套餐的限制对开发来说足够。突发容量在流水线由 webhook 触发、按计划运行或为并发用户提供服务时至关重要。 |
| 无限文档保留 | 免费文档在 90 天后过期。对于审计追踪、合规性或不断增长的知识库,您需要永久保存。Pro 文档永久保存。 |
| 文档级共享 | 共享单个报告而无需暴露整个工作区。细粒度权限在保持敏感数据安全的同时,仍然易于分发。 |
| 自定义品牌 | 添加您的徽标、颜色和域名,使查看器感觉是您产品的一部分。 |
| API 优先访问 | 通过编程方式创建、更新和删除文档,实现全自动工作流。 |
| 优先支持 | 在生产中遇到问题时,获得更快的响应时间。 |
使用 SurfaceDocs Pro,您将获得一个 面向生产的输出层,可随需求扩展,让您保持永久且可搜索的归档,并且无需构建和维护自定义前端。
入门
pip install surfacedocs
from surfacedocs import SurfaceDocs, DOCUMENT_SCHEMA, SYSTEM_PROMPT
from openai import OpenAI
client = OpenAI()
docs = SurfaceDocs()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": "Summarize Q4 sales data for the executive team"}
],
response_format=DOCUMENT_SCHEMA
)
doc = docs.save(response.choices[0].message.content)
print("Shareable URL:", doc.url)
就这么简单。无需额外服务器、CSS 或数据库——只为每个 AI 生成的输出提供一个干净、可共享的 URL。 🚀
更大的图景
以下是我认为实际发生的情况,以及我们为何要构建它的原因:
代理时代需要一个输出层。
目前,AI 代理在完成工作方面表现得越来越好。它们可以进行研究、分析、摘要、生成、审查。但每个代理框架——LangChain、CrewAI、AutoGen、你的自定义方案——都有同样的盲点:输出会怎样处理?
代理会产生工作成果:报告、分析、摘要、建议、代码审查、数据拆解。如今,这些工作成果要么消失在日志中,要么被塞进并非为其设计的格式里。
想象一下这将走向何方。六个月后,你会看到代理自主运行,每天产出数十份文档:
- 研究代理发布研究结果。
- 监控代理生成事件报告。
- 销售代理创建客户简报。
每一种都需要一个落地的地方——结构化、可共享、持久且人类和其他代理都能访问的空间。
SurfaceDocs 就是这个地方。AI 流程的输出层。
我们并不是在构建文档编辑器。我们也不与 Notion 或 Google Docs 竞争。我们在构建 AI 工作成果的存放地——AI 所写内容的读取层。
# This is the future: agents that publish their work
agent = ResearchAgent(topic="competitor analysis")
findings = agent.run()
docs = SurfaceDocs()
result = docs.save(findings)
# Share with the team, feed to other agents, build a knowledge base
notify_team(result.url)
knowledge_base.index(result.url)
架构刻意保持简洁:
- Python SDK → FastAPI on Cloud Run → Firestore → React viewer
- 快速入口、可靠存储、清晰渲染。
- 复杂性应存在于你的流水线中,而不是输出层。
开始使用
免费层仍然可用:
- 每月 10 篇文档
- 90 天保留期
- 默认私有,可选择公开共享
足以构建真实项目并验证想法是否可行。
当你的原型演变为流水线,流水线再升级为生产环境时——这时 Pro 方案才有意义。
$19 / 月 可获得额外配额、更长的保留期以及细粒度访问控制。
pip install surfacedocs
from surfacedocs import SurfaceDocs, DOCUMENT_SCHEMA, SYSTEM_PROMPT
docs = SurfaceDocs()
result = docs.save(your_llm_output)
print(result.url) # 就是这样。这就是输出层。
SurfaceDocs 是 AI 流水线的输出层。我们致力于打造 AI 工作成果的存放地,让你专注于构建生成这些成果的 AI。