็จAIๆพๅคงๅไฝ่ ็ไบบๆ ผ๏ผ่้ๆฟไปฃๅฎ
iPerson ๆฏไธไธช CLI ไผๅ ็ไธชไบบ IP ๅ ๅฎนๅผๆ๏ผ้่ฟๆไปถๅ็ฎก็บฟ็ผๆๅ ๅฎน็ไบงๆต็จ๏ผๆฏๆ็ฅ่ฏๅบ้ฉฑๅจ็ๅ ๅฎน็ๆใๅค็ปดๅบฆ่ดจ้ๅฎกๆ ธใไบบ่ฎพ้ฃๆ ผๆงๅถ๏ผไปฅๅๅคๅนณๅฐๅๅธใ
# ้่ฟ uv ๅฎ่ฃ
uv pip install iperson
# ๆไปๆบ็ ๅฎ่ฃ
git clone https://github.com/ai4next/iperson.git
cd iperson
uv sync --all-extras# ๅๅปบ้
็ฝฎ็ฎๅฝ
mkdir -p ~/.iperson
# ็ผ่พ้
็ฝฎๆไปถ
vim ~/.iperson/config.yaml# ~/.iperson/config.yaml
llm:
provider: openai # ๆ anthropic / gemini
api_key: sk-xxx # ไฝ ็ API Key
model: gpt-4o # ็ๆๆจกๅ# 1. ๅฏผๅ
ฅ็ฅ่ฏๅบๆๆกฃ๏ผๅฐไฝ ็็ด ๆๅ็ป็ณป็ป๏ผ
iperson kb import ./my-articles/
# 2. ๅๅปบไบบ่ฎพ๏ผๅฎไนไฝ ็ๅไฝ้ฃๆ ผ๏ผ
iperson persona create
# 3. ่ฟ่กๅ
ๅฎน็ฎก็บฟ๏ผ่ชๅจ้้ข + ็ๆ + ๅๅธ๏ผ
iperson publish run
# 4. ๆฅ็่พๅบ
ls ~/.iperson/output/่ฏดๆ๏ผ
--topicไธบๅฏ้ๅๆฐใไธไผ ๆถไผๆ นๆฎ็ฅ่ฏๅบ็ด ๆๅไบบ่ฎพ่ชๅจ้้ขใ
# ~/.iperson/config.yaml
# LLM ๅ
จๅฑ้
็ฝฎ
llm:
provider: openai # openai / anthropic / gemini
api_key: sk-xxx
model: gpt-4o
# ๆ้ถๆฎต็ฌ็ซ้
็ฝฎ LLM๏ผ่ฆ็ๅ
จๅฑ้
็ฝฎ๏ผ
providers:
- stage: default provider: openai model: gpt-4o temperature: 0.7
- stage: generation provider: openai model: gpt-4o temperature: 0.8
- stage: audit provider: openai model: gpt-4o temperature: 0.3
- stage: humanizer provider: openai model: gpt-4o temperature: 0.5
# ๆฐๆฎ็ฎๅฝ๏ผ้ป่ฎค ~/.iperson/data๏ผ
data_dir: ~/.iperson/data
output_dir: ~/.iperson/output
# ๆฐๆฎๅบ่ทฏๅพ
db:
path: ~/.iperson/data/iperson.db
# Webhook ้็ฅ๏ผๅฏ้๏ผ
webhooks:
- url: https://your-server.com/webhook
secret: your-hmac-secretๆๆ้
็ฝฎ้กนๅๅฏ้่ฟ IPERSON_<KEY> ็ฏๅขๅ้่ฆ็๏ผ
export IPERSON_LLM_API_KEY=sk-xxx
export IPERSON_LLM_MODEL=gpt-4o
export IPERSON_DB_PATH=/custom/path/iperson.dbๅตๅฅๅญๆฎตไฝฟ็จไธๅ็บฟ่ฟๆฅ๏ผIPERSON_LLM_API_KEY ๅฏนๅบ llm.api_keyใ
ๆฏไธช็ฎก้้ถๆฎตๅฏๆๅฎไธๅ็ provider / model / temperature๏ผ
| ้ถๆฎต | ็จ้ | ๆจ่ temperature |
|---|---|---|
default |
ๆชๅน้ ้ถๆฎต็ๅ้้ ็ฝฎ | 0.7 |
generation |
ๅ ๅฎน็ๆ๏ผๅๆๆง่ฆๆฑ้ซ๏ผ | 0.8 |
audit |
่ดจ้ๅฎกๆ ธ๏ผ้็กฎๅฎๆงๅคๆญ๏ผ | 0.3 |
humanizer |
AI ็่ฟนๆทกๅๆนๅ | 0.5 |
ๆช้
็ฝฎ็้ถๆฎตไผ่ชๅจๅ้ๅฐ defaultใ
Pipeline๏ผ็ฎก็บฟ๏ผๅฎไนๅ
ๅฎน็ไบง็่็น้กบๅบๅๆฏไธช่็น็้
็ฝฎใๆฏไธชไบบ่ฎพ้ฝๆ่ชๅทฑ็ Pipeline ้
็ฝฎ๏ผๆพๅจไบบ่ฎพ็ฎๅฝ็ config.yaml ไธญใ
ๆช้ ็ฝฎๆถไฝฟ็จๅ ็ฝฎ้ป่ฎค็ฎก็บฟ๏ผ็ด ๆๆฃ็ดข โ ่ชๅจ้้ข โ ๅ ๅฎน็ๆ โ ๅคๅนณๅฐๅๅธใ
ๅจไบบ่ฎพ็ config.yaml ไธญๆทปๅ pipeline ๅญๆฎตๅณๅฏ่ชๅฎไน๏ผ
# ~/.iperson/personas/{name}/config.yaml
is_active: true
pipeline:
nodes:
- id: research
node: research.kb_retrieve
config:
top_k: 10
- id: generate
node: generation.article
hooks:
after:
- hook: quality.humanizer
config:
min_score: 0.35
max_iterations: 2
- id: publish
node: publish.multiplatform
hooks:
before:
- hook: quality.platformize
config:
platforms: [xiaohongshu, wechat, zhihu]
config:
platforms: [xiaohongshu, wechat, zhihu]ๆฏไธช่็นๆฏๆ็ๅญๆฎต๏ผ
| ๅญๆฎต | ่ฏดๆ |
|---|---|
id |
่็นๅฏไธๆ ่ฏ |
node |
่็นๆไปถ ID๏ผๅฆ research.kb_retrieve๏ผ |
config |
่็น้ ็ฝฎๅๆฐ |
hooks.before |
ๆง่กๅ้ฉๅญๅ่กจ |
hooks.after |
ๆง่กๅ้ฉๅญๅ่กจ |
้ฉๅญๆฏๅจ็ฎก็บฟ้ถๆฎตๆง่กๅๅๆๅ ฅ็ๆฉๅฑ็น๏ผ็จไบๅจไธไฟฎๆน้ถๆฎตๆไปถ็ๆ ๅตไธๅขๅผบ็ฎก็บฟ่ฝๅใ
| ้ฉๅญ ID | ๆ่ฝฝ็น | ๅ่ฝ | ้ ็ฝฎๅๆฐ |
|---|---|---|---|
intelligence.trending_inject |
before.generation |
ไป็ฅไน/ๅพฎๅ่ทๅ็ญ็น่ฏ้ข๏ผๆณจๅ ฅ็ๆไธไธๆ | source: zhihu / weibo |
safety.prompt_guard |
before.generation |
ๆฃๆฅ็ๆ็ฏๅขๆฏๅฆๅฎๅค๏ผๅฆไบบ่ฎพๅผๆๆฏๅฆๅญๅจ๏ผ | ๆ |
intelligence.seo_analyze |
after.generation |
ๅๆๅ ๅฎนๅญๆฐใๅฏ่ฏปๆงใๅ ณ้ฎ่ฏๅฏๅบฆ็ญ SEO ๆๆ | ๆ |
safety.content_scan |
after.generation |
ๆซๆ็ๆๅ ๅฎนไธญ็ๅฑ่ฝ่ฏ | ๆ |
media.image_gen |
before.publish |
่ฐ็จ DALL-E ็ๆๅฐ้ขๅๅ ๆ้ ๅพ | provider, style, count, cover |
webhook.notify |
after.publish |
็ฎก็บฟๅฎๆๅๅ้ HTTP ้็ฅ๏ผHMAC-SHA256 ็ญพๅ๏ผ | ไป config.yaml ่ฏปๅ webhooks ้
็ฝฎ |
้ฉๅญๅจ Pipeline ็ hooks ๅญๆฎตไธญ้
็ฝฎ๏ผๅไธบ before ๅ after๏ผ
stages:
- plugin: generation.article
hooks:
before:
- hook: intelligence.trending_inject
config: { source: zhihu } # ไผ ็ป้ฉๅญ็้
็ฝฎ
- hook: safety.prompt_guard
after:
- hook: intelligence.seo_analyze
- hook: safety.content_scanWebhook ้็ฅ้ฉๅญไปๅ จๅฑ้ ็ฝฎ่ฏปๅ็ฎๆ ๅฐๅ๏ผ
# ~/.iperson/config.yaml
webhooks:
- url: https://your-server.com/pipeline/notify
secret: your-hmac-secret้็ฅ payload ๆ ผๅผ๏ผ
{
"event": "pipeline.complete",
"topic": "ไฝ ็้้ข",
"status": "completed",
"content_id": "xxx",
"errors": []
}่ฏทๆฑๅคดๆบๅธฆ X-Webhook-Signature: <sha256-hex> ็จไบ้ช็ญพใ
ๅฐ็ปงๆฟ BaseHook ็ .py ๆไปถๆพๅ
ฅ ~/.iperson/plugins/๏ผ็ณป็ป่ชๅจๅ ่ฝฝ๏ผ
# ~/.iperson/plugins/my_hook.py
from iperson.pipeline.hook import BaseHook, HookContext
class MyCustomHook(BaseHook):
hook_id = "custom.my_hook"
hook_point = "after.generation" # ๆ่ฝฝ็น
name = "My Custom Hook"
description = "Does something useful"
async def execute(self, ctx: HookContext) -> HookContext:
# ่ฏปๅ้
็ฝฎ๏ผๆฅ่ช pipeline ไธญ hooks ๅญๆฎต็ config๏ผ
param = ctx.config.get("param", "default")
# ๆไฝ็ฎก็บฟไธไธๆ
ctx.pipeline_ctx.data["my_result"] = param
return ctxiperson plugin list-pluginsๅๆถๅๅบๅทฒๆณจๅ็ๆไปถๅ้ฉๅญใ
| ๆไปถ ID | ้ถๆฎต | ๅ่ฝ |
|---|---|---|
research.kb_retrieve |
Research | ไป็ฅ่ฏๅบๆฃ็ดข Top-K ็ธๅ ณ็ด ๆ |
generation.article |
Generation | ็ปๅไบบ่ฎพไธ็ด ๆ็ๆๆ็ซ ๆญฃๆ |
quality.humanizer |
Quality | AI ็่ฟนๆทกๅ๏ผๆฃๆต โ ่ฏๅ โ ๆนๅ๏ผ |
quality.audit |
Quality | ๅค็ปดๅบฆ่ดจ้ๅฎกๆ ธ |
publish.multiplatform |
Publish | ๅคๅนณๅฐๆ ผๅผ้้ ไธๅ ๅฎนๅฏผๅบ |
# ไป pip ๅฎ่ฃ
๏ผๅ
ๅ้ไปฅ iperson_plugin_ ๅผๅคด๏ผ
iperson plugin install iperson_plugin_xxx
# ๅธ่ฝฝ
iperson plugin remove iperson_plugin_xxx
# ๆฅ็ๅทฒๅฎ่ฃ
็ๆไปถๅ้ฉๅญ
iperson plugin list-pluginsๅฐๆไปถๆพๅ
ฅ ~/.iperson/plugins/ ๅณๅฏ่ชๅจๅ ่ฝฝ๏ผ
# ~/.iperson/plugins/my_plugin.py
from iperson.pipeline.context import PipelineContext
from iperson.pipeline.plugin import StagePlugin
class MyPlugin(StagePlugin):
plugin_id = "custom.my_plugin"
name = "My Plugin"
description = "Custom pipeline stage"
category = "quality"
version = "1.0.0"
tags = ["custom"]
config_schema = {}
default_config = {}
def execute(self, ctx: PipelineContext, config: dict) -> PipelineContext:
# ๅฎ็ฐไฝ ็้ถๆฎต้ป่พ
return ctx็ถๅๅจ Pipeline ไธญๅผ็จ๏ผ
stages:
- plugin: custom.my_plugin
config:
your_param: value| ๅฝไปค | ่ฏดๆ |
|---|---|
iperson publish run |
่ฟ่กๅ ๅฎน็ไบง็ฎก็บฟ๏ผๆฏๆ่ชๅจ้้ข๏ผๆ ธๅฟๅฝไปค๏ผ |
iperson publish status |
ๆฅ็ๅๅธ้ๅ็ถๆ |
iperson publish schedule |
่ฎพ็ฝฎๅฎๆถๅๅธ |
iperson publish retry |
้่ฏๅคฑ่ดฅ็ๅๅธ |
iperson kb import |
ๅฏผๅ ฅๆๆกฃๅฐ็ฅ่ฏๅบ |
iperson kb search |
ๆททๅๆฃ็ดข็ฅ่ฏๅบ |
iperson persona create |
ๅๅปบ/็ผ่พๅไฝ่ ไบบ่ฎพ |
iperson persona list |
ๅๅบๅทฒไฟๅญ็ไบบ่ฎพ |
iperson audit report |
ๆฅ็่ดจ้ๅฎกๆ ธๆฅๅ |
iperson analytics collect |
่ฎฐๅฝๅ ๅฎน่กจ็ฐๆฐๆฎ |
iperson analytics report |
ๆฅ็ๅ ๅฎน่กจ็ฐๅๆ |
iperson topics suggest |
ๅบไบ KB ๅๅๆๆฐๆฎๆจ่้้ข |
iperson agent run |
่ฟ่กๅๆฌก่ชไธปๅ ๅฎน็ๆ |
iperson agent auto |
่ชๅจ้้ขๅนถ็ๆ N ็ฏๅ ๅฎน |
iperson tuning analyze |
ๅๆไบบ่ฎพ้ฃๆ ผๅนถ็ปๅบ่ฐไผๅปบ่ฎฎ |
iperson plugin list-plugins |
ๅๅบๅทฒๅฎ่ฃ ็ๆไปถๅ้ฉๅญ |
iperson plugin install |
ไป pip ๅฎ่ฃ ๆไปถ |
iperson plugin remove |
ๅธ่ฝฝ pip ๆไปถ |
iperson --version |
ๆฅ็็ๆฌๅท |
iperson publish run [TOPIC] # ๅ
ๅฎนไธป้ข๏ผๅฏ้๏ผ็็ฉบๅ่ชๅจ้้ข๏ผ
--persona, -p <name> # ไบบ่ฎพๅ็งฐ
--platform <name> # ็ฎๆ ๅนณๅฐ๏ผ้ป่ฎค "xiaohongshu"
--verbose # ๆพ็คบ่ฏฆ็ป่พๅบ๏ผๅซๆไปถๆณจๅใ้ถๆฎต่ๆถใๅ
ๅฎน้ข่ง็ญ๏ผๅ ๅฎน็ไบง้็จ LangGraph ็ผๆ ๆถๆ๏ผๆฏไธช้ถๆฎตๆฏไธไธช Node๏ผNode ๆฏๆ pre/post hook ๆ่ฝฝ๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Pipeline โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ Research โโ โ Topic โโ โ Generation โ โ
โ โ ็ด ๆๆฃ็ดข โ โ Selection โ โ ๅ
ๅฎน็ๆ โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโฌโโโโโโโโ โ
โ โ โ
โ post-hook โ
โ โ โ
โ โโโโโโโโโโโผโโโโโโโโโ โ
โ โ quality.humanizerโ โ
โ โ AI็่ฟนๆทกๅ โ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ Publish โโ โ pre-hook โโ โ Generation โ โ
โ โ ๅคๅนณๅฐๅๅธ โ โ platformize โ โ (่พๅบ) โ โ
โ โ โ โ ๅนณๅฐๅ้้
โ โ โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
้้ข๏ผTopic Selection๏ผ้่ฟ pipeline-level
topic_selection: trueๅผๅ ณๆงๅถ๏ผไธ็ฑ Node ๆง่กใ
| Node | ID | ่ฏดๆ |
|---|---|---|
| Research | research.kb_retrieve |
ไป็ฅ่ฏๅบๆฃ็ดข Top-K ็ธๅ ณ็ด ๆ |
| Generation | generation.article |
็ปๅไบบ่ฎพไธ็ด ๆ็ๆๆ็ซ ๆญฃๆ |
| Topic Selection | pipeline.topic_selection (flag) |
่ชๅจ้้ข๏ผไบบ่ฎพ+KBๅน้ ๏ผPipeline ็บงๅซๅผๅ ณ๏ผ |
| Publish | publish.multiplatform |
ๅคๅนณๅฐๆ ผๅผ้้ ไธๅ ๅฎนๅฏผๅบ |
| Hook | ๆ่ฝฝ็น | ่ฏดๆ |
|---|---|---|
quality.humanizer |
after.generate |
AI ็่ฟนๆทกๅ๏ผๆฃๆต โ ่ฏๅ โ ๆนๅ่ฟญไปฃ๏ผ |
quality.platformize |
before.publish |
ๆๅนณๅฐ้ฃๆ ผๆนๅๅ ๅฎน |
intelligence.trending_inject |
before.generate |
็ญ็น่ฏ้ขๆณจๅ ฅ็ๆไธไธๆ |
safety.prompt_guard |
before.generate |
็ๆๅๅฎๅ จๆฃๆฅ |
intelligence.seo_analyze |
after.generate |
SEO ๅๆ |
safety.content_scan |
after.generate |
ๅ ๅฎนๆๆ่ฏๆซๆ |
media.image_gen |
before.publish |
่ชๅจ้ ๅพ |
webhook.notify |
after.publish |
็ฎก็บฟๅฎๆ้็ฅ |
็ฎก็บฟๆฏๆ CircuitBreaker ็ๆญไฟๆคใPipeline ้ขๆ ก้ชใon_error ็ญ็ฅ๏ผabort/skip๏ผใ
้่ฟ YAML ็ผๆๅ้ถๆฎตๆไปถๅๅ ถ้ ็ฝฎใๅ ็ฝฎไธๅฅ้็จ Pipeline๏ผๅทฎๅผๅ้่ฟ hook ้ ็ฝฎๅฎ็ฐ๏ผ
- ้ป่ฎค็ฎก็บฟ (
default.yaml) โ KBๆ็ดข(10ๆก) โ ่ชๅจ้้ข(ไบบ่ฎพๅน้ ) โ ็ๆ โ ไบบๅณๅ โ ๅนณๅฐๅ้้ โ ๅคๅนณๅฐๅๅธ
Pipeline ็คบไพ๏ผdefault.yaml๏ผ๏ผ
name: "default"
description: "้็จๅ
ๅฎน็ฎก็บฟ"
topic_selection: true
nodes:
- id: research
node: research.kb_retrieve
config:
top_k: 10
- id: generate
node: generation.article
hooks:
after:
- hook: quality.humanizer
config:
min_score: 0.35
max_iterations: 2
- id: publish
node: publish.multiplatform
hooks:
before:
- hook: quality.platformize
config:
platforms: [xiaohongshu, wechat, zhihu]
config:
platforms: [xiaohongshu, wechat, zhihu]ๅบไบ SQLite ็่ฝป้็บง็ฅ่ฏๅบ๏ผๆฏๆ BM25 ๅ จๆๆฃ็ดข๏ผ
kb import <path>โ ๅฏผๅ ฅๆๆกฃ๏ผๆฏๆ.txt,.md,.py็ญ๏ผ๏ผ่ชๅจๅๅไธ็ดขๅผkb search <query>โ ๆฃ็ดข็ฅ่ฏๅบ๏ผBM25 ๅ จๆๆ็ดข๏ผ- ๅบๅฑ็ปไปถ๏ผ
chunker๏ผๆๆฌๅๅ๏ผใloader๏ผๆไปถๅ ่ฝฝ๏ผใbm25๏ผๅ จๆ็ดขๅผ๏ผ
ไบบ่ฎพๆฏๅไฝ่ ็ๆฐๅญ็ต้ญ๏ผๅฎไน็ๆๅ ๅฎน็้ฃๆ ผไธ่ฏญๆฐใๆฏไธชไบบ่ฎพๆฏไธไธช็ฎๅฝ๏ผ
~/.iperson/personas/{name}/
โโโ soul.md # ไบบ่ฎพ็ต้ญ๏ผMarkdown๏ผ็ดๆฅไฝไธบ LLM ็ณป็ปๆ็คบ๏ผ
โโโ config.yaml # ้
็ฝฎ๏ผๅฆ is_active๏ผ
soul.md ๆฏ่ช็ฑๆ ผๅผ็ Markdown๏ผๆ่ฟฐไฝ ็ๅไฝ้ฃๆ ผใ่ฏญๆฐใๅ
ณๆณจ้ขๅ็ญ๏ผๅ
ๅฎน็ดๆฅไฝไธบ LLM ็ณป็ปๆ็คบ๏ผ
# ็งๆๅไธปๅฐๆ ็ไบบ่ฎพ็ต้ญ
## ๅบๆฌๅฎไฝ
็งๆ้ขๅๆทฑๅบฆๅ
ๅฎนๅไฝ่
๏ผไธๆณจ AI ๅ็ผ็จใ
## ่ฏญๆฐ้ฃๆ ผ
- ไธไธไฝไธๆฏ็ฅ
- ๆฐๆฎ้ฉฑๅจ๏ผๆฏ่ง็นๅฟ
ๆไพๆฎ
- ๅ็จ็ฑปๆฏ่งฃ้ๅคๆๆฆๅฟต
## ๅไฝ่ง่
- ๅผๅคด็ดๆฅๅๅ
ฅไธป้ข
- ๅค็จ็ญๅฅ๏ผๆฎต่ฝไธ่ถ
่ฟ 5 ่ก
- ้ฟๅ
AI ๅฅ่ฏ# ๅๅปบไบบ่ฎพ๏ผไผ็ๆ soul.md ๆจกๆฟ๏ผ
iperson persona create ็งๆๅไธปๅฐๆ
# ็ผ่พไบบ่ฎพ
vim ~/.iperson/personas/็งๆๅไธปๅฐๆ/soul.md
# ๅๅบๆๆไบบ่ฎพ
iperson persona listๅบไบ LangChain ่ฐ็จ LLM๏ผ็ปๅไบบ่ฎพๅผๆๆๅปบ็ System Prompt ๅ็ฅ่ฏๅบไธไธๆ็ๆๆ็ซ ๏ผ
- ๆฏๆ OpenAI / Anthropic ๅๆไพๅ๏ผ่ชๅจ่ทฏ็ฑ
- ๆฏ้ถๆฎตๅฏ็ฌ็ซ้ ็ฝฎ provider + model + temperature
- LLM ๅฎไพ่ชๅจ LRU ็ผๅญ๏ผ้ฟๅ ้ๅคๅๅปบ
ไธๆฎตๅผ็ฎก็บฟ๏ผๆฃๆต AI ๆจกๅผ โ ่ฏๅ โ ๆนๅ้่ฏ๏ผ
- Detector๏ผ่ฏๅซ AI ็ๆๆๆฌ็ๆจกๅผ็นๅพ๏ผๆๆฏๅฅใ่ฟๆธก่ฏใๆจกๆฟๅ่กจ่พพ็ญ๏ผ
- Scorer๏ผๅฏนๆฃๆต็ปๆๆๅ๏ผ0~1๏ผ๏ผไฝไบ้ๅผ่งฆๅๆนๅ
- Transformer๏ผ็ปๅไบบ่ฎพๅผๆ็ tone instruction ่ฟ่กๆนๅ๏ผไฟ็ๅๆไฟกๆฏ้
ไป 6 ไธช็ปดๅบฆๅฏน็ๆๅ ๅฎน่ฟ่ก่ฏๅ๏ผ0~1๏ผ๏ผ
| ็ปดๅบฆ | ่ฏดๆ |
|---|---|
| keyword_fit | ๅ ณ้ฎ่ฏๅ่ง โ ๆๆ่ฏ/็ฆ็จ่ฏๆฃๆต |
| structure | ็ปๆ่ดจ้ โ ๆฎต่ฝใๆ ้ขใ้ป่พ็ปๆ |
| platform_rules | ๅนณๅฐ่งๅ โ ๅๅนณๅฐๅ่ง่ฆๆฑ |
| ai_score | AI ๆตๅบฆ โ AI ็่ฟน่ฏๅ๏ผ่ถไฝ่ถๅฅฝ๏ผ |
| style_consistency | ้ฃๆ ผไธ่ด โ ๆฏๅฆๅน้ ไบบ่ฎพ้ฃๆ ผ |
| grounding | ไบๅฎไพๆฎ โ ๅ ๅฎนๆฏๅฆๅ็ฆป็ฅ่ฏๅบ็ด ๆ |
ๅฎกๆ ธ็ปๆไปฅ JSON ๆฅๅ่พๅบๅฐ output/{timestamp}-{topic}/audit_report.jsonใ
ๅบไบ Pipeline ็ผๆ็ๆ็ป้ถๆฎต๏ผๅฐ็ๆๅ ๅฎน้้ ไธบ็ฎๆ ๅนณๅฐๆ ผๅผ๏ผ
- ๆฏๆๅฐ็บขไนฆ๏ผ
xiaohongshu๏ผใๅพฎไฟกๅ ฌไผๅท๏ผwechat๏ผใ็ฅไน๏ผzhihu๏ผ - ๅนณๅฐๅ
ๅฎน่พๅบๅฐ
output/{timestamp}-{topic}/platforms/{platform}.md - ็ฎก็บฟไธไธๆไผ ้ใๆง่ก่ๆถ่ฟฝ่ธชใ้่ฏฏๅค็๏ผๅซ้่ฏๆบๅถ๏ผ
~/.iperson/
โโโ config.yaml # ๅ
จๅฑ้
็ฝฎ
โโโ data/
โ โโโ iperson.db # SQLite ๆฐๆฎๅบ
โโโ personas/ # ไบบ่ฎพ็ฎๅฝ
โ โโโ {name}/
โ โโโ soul.md # ไบบ่ฎพ็ต้ญ
โ โโโ config.yaml # ไบบ่ฎพ้
็ฝฎ
โโโ output/ # ็ฎก็บฟ่พๅบ
โโโ {timestamp}-{topic}/
โโโ article.md # ๅๅง็ๆๅ
ๅฎน
โโโ humanized_article.md # ไบบๅณๅๅๅ
ๅฎน
โโโ audit_report.json # ๅฎกๆ ธ็ปๆ
โโโ platforms/
โโโ xiaohongshu.md
โโโ wechat.md
โโโ zhihu.md
SQLite ๆฐๆฎๅบ๏ผ~/.iperson/data/iperson.db๏ผๅ
ๅซไปฅไธ่กจ๏ผ
| ่กจๅ | ่ฏดๆ |
|---|---|
contents |
ๅ ๅฎน่ฎฐๅฝ๏ผๅซ่็จฟใ็ป็จฟใๅฎกๆ ธๅๆฐ๏ผ |
publications |
ๅๅธ่ฎฐๅฝ๏ผๅนณๅฐใ็ถๆใๆถ้ด๏ผ |
kb_docs |
็ฅ่ฏๅบๆๆกฃ |
kb_chunks |
ๆๆกฃๅๅ |
content_metrics |
ๅ ๅฎน่กจ็ฐๆฐๆฎ๏ผ้ ่ฏป/็น่ต/ๅไบซ/่ฏ่ฎบ๏ผ |
| ๅฑ | ๆๆฏ |
|---|---|
| ่ฏญ่จ | Python 3.12+ |
| CLI ๆกๆถ | Typer + Rich |
| ๅญๅจ | SQLite (Pydantic ๆจกๅ) |
| AI | LangChain (OpenAI / Anthropic / Gemini) |
| ๆ็ดข | BM25 ๅ จๆๆ็ดข |
| ้ ็ฝฎ | YAML + ็ฏๅขๅ้่ฆ็ |
| ๆต่ฏ | pytest, pytest-asyncio |
| ๆๅปบ | uv + Hatchling |
# ่ฟ่กๅ
จ้จๆต่ฏ
uv run pytest
# ๅธฆ่ฆ็็ๆฅๅ
uv run pytest --cov=iperson
# ่ฟ่ก็นๅฎๆต่ฏ
uv run pytest tests/test_pipeline.py -v
uv run pytest tests/test_audit_gate.py -vๅฝๅๆต่ฏ่ฆ็่ๅด๏ผ็ฎก็บฟ็ผๆ๏ผๅซ CircuitBreaker ็ๆญ๏ผใๆไปถๆณจๅใPipeline ๆ ก้ชใ็ฅ่ฏๅบๆฃ็ดข/ๅๅ/ๆททๅๆ็ดขใๅ ๅฎน็ๆใไบบๅณๅ๏ผๆฃๆต/่ฏๅ/ๆนๅ๏ผใไบบ่ฎพๅผๆใ่ชๅจ้้ขใ่ดจ้ๅฎกๆ ธ้จๆง๏ผๅซๅ ๆ่ฏๅ๏ผใLLM ่ทฏ็ฑใ้ๆๆต่ฏใ
# ๅฎ่ฃ
ๅผๅไพ่ต๏ผๅซๆๆ extras๏ผ
uv sync --all-extras
# ่ฟ่กๆต่ฏ
uv run pytest
# ไปฃ็ ๆฃๆฅ
uv run ruff check .
uv run mypy iperson/
# ่ฟ่ก็ฎก็บฟ๏ผ่ชๅจ้้ขๆจกๅผ๏ผ
uv run iperson publish run --verbose
# ๆๆๅฎ้้ข
uv run iperson publish run "็คบไพ้้ข" --verboseiperson/
โโโ pyproject.toml # ้กน็ฎๅ
ๆฐๆฎไธไพ่ต
โโโ tests/ # ๆต่ฏๅฅไปถ๏ผ22 ไธชๆต่ฏๆไปถ๏ผ
โโโ iperson/
โ โโโ cli/ # CLI ๅ
ฅๅฃ
โ โ โโโ app.py # Typer ๅบ็จไธปๅ
ฅๅฃ
โ โ โโโ publish_cmd.py # publish ๅฝไปค็ป๏ผrun/status/schedule/retry๏ผ
โ โ โโโ kb_cmd.py # kb ๅฝไปค็ป
โ โ โโโ persona_cmd.py # persona ๅฝไปค็ป
โ โ โโโ audit_cmd.py # audit ๅฝไปค็ป
โ โ โโโ agent_cmd.py # agent ๅฝไปค็ป
โ โ โโโ analytics_cmd.py # analytics ๅฝไปค็ป
โ โ โโโ topics_cmd.py # topics ๅฝไปค็ป
โ โ โโโ tuning_cmd.py # tuning ๅฝไปค็ป
โ โ โโโ plugin_cmd.py # plugin ๅฝไปค็ป
โ โโโ pipeline/ # ็ฎก็บฟๅผๆ
โ โ โโโ orchestrator.py # PipelineOrchestrator
โ โ โโโ context.py # PipelineContext๏ผ็ถๆไผ ้๏ผ
โ โ โโโ pipeline.py # Pipeline ๅ ่ฝฝไธ้ช่ฏ
โ โ โโโ registry.py # ๆไปถๆณจๅ่กจ
โ โ โโโ plugin.py # StagePlugin ๅบ็ฑป
โ โ โโโ loader.py # FilePluginLoader / PipPluginLoader
โ โ โโโ hook.py # BaseHook / HookRegistry
โ โ โโโ hook_orchestrator.py # HookOrchestrator
โ โ โโโ circuit_breaker.py # ็ๆญไฟๆค
โ โ โโโ errors.py # PipelineError
โ โ โโโ plugins/ # ๅ
็ฝฎๆไปถๅฎ็ฐ
โ โ โ โโโ research/kb_retrieve.py
โ โ โ โโโ generation/article.py
โ โ โ โโโ quality/audit.py
โ โ โ โโโ quality/humanizer.py
โ โ โ โโโ publish/multiplatform.py
โ โ โโโ hooks/ # ๅ
็ฝฎ้ฉๅญๅฎ็ฐ
โ โ โโโ trending_inject.py
โ โ โโโ prompt_guard.py
โ โ โโโ seo_analyze.py
โ โ โโโ content_scan.py
โ โ โโโ image_gen.py
โ โ โโโ webhook_notify.py
โ โโโ core/ # ๆ ธๅฟไธๅก้ป่พ
โ โ โโโ persona/ # ไบบ่ฎพๅผๆ
โ โ โโโ kb/ # ็ฅ่ฏๅบ๏ผๅๅ/ๅ ่ฝฝ/ๅ้/BM25/ๆททๅๆ็ดข๏ผ
โ โ โโโ generation/ # ๅ
ๅฎน็ๆ
โ โ โโโ humanizer/ # AI ็่ฟนๆทกๅ
โ โ โโโ audit/ # ่ดจ้ๅฎกๆ ธ๏ผ6 ็ปดๅบฆ๏ผ
โ โ โโโ media/ # ๅพๅ็ๆ
โ โ โโโ output/ # ่พๅบ Pydantic ๆจกๅ
โ โ โโโ security/ # ๅฑ่ฝ่ฏๅ่กจ
โ โโโ agent/ # ๆฐๅญๅ่บซ่ชไธปไปฃ็
โ โโโ analytics/ # ๅ
ๅฎนๅๆๅผๆ
โ โโโ topics/ # ้้ขๅปบ่ฎฎๅผๆ
โ โโโ tuning/ # ้ฃๆ ผ่ฐไผๅผๆ
โ โโโ publish/ # ๅๅธๅผๆ + ๅนณๅฐๅฎขๆท็ซฏ
โ โโโ storage/ # ๆฐๆฎๆไน
ๅ๏ผSQLite + Pydantic๏ผ
โ โโโ utils/ # ๅทฅๅ
ทๅบ๏ผLLM ๅทฅๅใๆไปถ่พๅบ๏ผ