问答
怎么把公众号文章转成干净文本,放进 RAG 知识库?
简短回答
先用公众号历史文章接口列出文章(每 10 篇 $0.04),再逐篇调用文章详情(每篇 $0.02),拿到纯文本正文和标题、公众号、发布时间。300 篇的号一共 $7.20,Markdown 头信息和切块由你自己加。
做一个回答行业问题的内部助手,它读过什么决定了它能答成什么样,而国内很多行业内容都在公众号里。把一个号导进 RAG 知识库分两步:用公众号历史文章列出文章,再把每个链接交给公众号文章详情。详情接口返回保留了段落的纯文本正文,外加标题、公众号、作者署名和发布时间,引用出处需要的信息都齐了。
正文是什么样的
文章的 HTML 被还原成文字:段落和小标题各占一行,脚本和样式全部去掉,正文里的图片不保留(封面图地址放在 images 里),表格会被压成几行文字。拿来做向量化正合适。要是你需要原样排版、图片在原位,这个接口就不对路,看文末的其他办法。
费用
| 任务 | 调用 | 费用 |
|---|---|---|
| 1 个号,300 篇 | 列表 30 次 + 详情 300 次 | {{cost:wechat_mp.accounts.articles.list30+wechat_mp.articles.get300}} |
| 10 个号,各取最新 50 篇 | 列表 50 次 + 详情 500 次 | {{cost:wechat_mp.accounts.articles.list50+wechat_mp.articles.get500}} |
| 同事随手丢来的链接,1,000 篇 | 详情 1,000 次 | $20.00 |
已删除的文章返回 not_found,不收费。
从链接到 Markdown 文件
import os, pathlib, requests
API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
OUT = pathlib.Path("kb/wechat"); OUT.mkdir(parents=True, exist_ok=True)
def save(url):
body = requests.get(API + "/v1/wechat_mp/articles/get", headers=H, timeout=90,
params={"url": url, "view": "full"}).json()
if body["code"] != "ok":
print("跳过", url, body["code"]); return
a = body["data"]["item"]
header = (f"---\ntitle: {a['title']!r}\naccount: {a['author']['name']!r}\n"
f"published: {a['published_at']}\nsource: {a['url']}\n---\n\n")
(OUT / f"{a['id']}.md").write_text(header + f"# {a['title']}\n\n" + a["text"], encoding="utf-8")
save("https://mp.weixin.qq.com/s/xxxxxxxx")
按空行切块,每块 300 到 800 个汉字,每一块的元数据里都带上标题和原文链接,模型回答时才能注明出处。
建知识库时容易踩的坑
- 转载重复。 很多号会转别人的文章。加
view=full后,ext.copyright和ext.source_url能帮你认出转载,入库前去重,免得同一篇文章在检索里占好几个位置。 - 更新。 每周跑一次历史文章接口,只取库里还没有的链接。
- 版权。 用于内部研究,保留原文链接,不要把整篇文章原样输出给用户。
- 文本不可信。 文章是外人写的,提示词里要讲清楚:检索到的段落是资料,不是指令。
其他办法
wechat-article-exporter 这类开源导出工具能把文章连图片一起存成 HTML 或 Markdown,做存档、离线阅读更合适,前提是你提供一个公众号后台登录。只有几篇的话,直接复制粘贴进笔记工具也行。如果是你自己的号,微信官方接口能直接返回文章内容。跨平台的研究流程可以看内容研究。
更新于