尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Book Writer Flow:基于 CrewAI Flow、Gemma 3 与 BrightData 的自动化书籍生成系统
Book Writer Flow基于 CrewAI Flow、Gemma 3 与 BrightData 的自动化书籍生成系统【免费下载链接】ai-engineering-hubIn-depth tutorials on LLMs, RAGs and real-world AI agent applications.项目地址: https://gitcode.com/GitHub_Trending/ai/ai-engineering-hub本篇指南围绕book-writer-flow项目讲解如何用 DeepMind 的 Gemma 3本地 Ollama 部署、CrewAI 的多智能体 Flow 工作流和 BrightData 的 SERP 代理搜索搭建一套从选题 → 大纲 → 逐章写作 → 输出 Markdown/书籍的全自动 AI 写书系统。读完你可以完整复现该项目的本地部署流程理解其两阶段 Crew大纲 Crew、写章 Crew与异步并发写章的底层实现并能按需替换模型、调整章节结构。一、项目概览三层技术栈如何协作项目 READMEbook-writer-flow/README.md给出的技术分工如下Bright Data提供 SERP API搜索代理供智能体联网检索资料CrewAI负责搭建 Agentic 工作流Crew FlowGoogle DeepMind 的 Gemma 3作为整个系统的本地 LLM。从源码结构看系统分为三个层次见 main.py顶层 Flow 编排层BookFlow类用 CrewAI 的Flow框架start/listen 装饰器把生成大纲 → 并发写章节 → 保存全书串成有向图两个 Crew 层OutlineCrew调研 写大纲和ChapterWriterCrew调研主题 写章节每个 Crew 内部由研究员 Agent 写作 Agent顺序协作Process.sequential工具与 LLM 层自定义的BrightDataWebSearchTool提供实时搜索结果所有 Agent 统一挂载LLM(modelollama/gemma3:4b)。二、环境准备与安装完整继承 README 步骤2.1 申请 BrightData API 凭据按 README 的操作步骤前往 Bright Data 官网注册账号选择 Proxies Scraping创建一个 SERP API 实例选择 Native proxy-based access在控制台找到你的 username 和 password将其写入src/目录下的.env文件由.env.example改名而来BRIGHDATA_USERNAME... BRIGHDATA_PASSWORD...注意环境变量名中的拼写源码里读取的是BRIGHDATA_USERNAME/BRIGHDATA_PASSWORDcustom_tool.py 第 27-28 行请严格保持一致否则工具会因拿不到凭据而失败。2.2 安装 Ollama 并拉取 Gemma 3# setup ollama on linux curl -fsSL https://ollama.com/install.sh | sh # pull gemma3 model ollama pull gemma3:4b项目使用的是gemma3:4b规格源码中硬编码为LLM(modelollama/gemma3:4b)。4B 参数量在消费级 GPU 上即可运行适合验证工作流如需更高质量成稿可以推断该 LLM 配置点集中且易于替换见下文第五节。2.3 安装 Python 依赖README 要求 Python 3.11 或更高版本pip install ollama crewai crewai-tools其中crewai-tools在大纲 Crew 中还被显式导入了SerperDevTool虽然当前研究员 Agent 实际挂载的是自定义 BrightData 工具SerperDevTool更多是模板残留见 outline_crew.py 第 3 行。三、运行项目# 进入 Flow 源码目录 cd book_flow/book_writing_flow/src python book_writing_flow/main.pymain.py的入口逻辑很直接main.py 第 75-86 行def kickoff(): book_flow BookFlow() asyncio.run(book_flow.kickoff_async()) if __name__ __main__: kickoff()即创建BookFlow实例并异步执行整个 Flow。此外文件里还保留了一个plot()函数可调用book_flow.plot()生成 Flow 的可视化流程图方便检查start/listen的连线结构。主题与章节数从哪来默认主题写在BookState中main.py 第 19-23 行class BookState(BaseModel): topic: str Astronomy in 2025 total_chapters: int 0 titles: list[str] [] chapters: list[Chapter] []BookState是贯穿整个 Flow 的共享状态大纲阶段写入total_chapters和titles写章阶段逐步extend进chapters。BookState中的topic即默认值Astronomy in 2025也正是 README 所展示的示例书籍主题。四、Flow 三步编排大纲 → 并发写章 → 落盘4.1 第一步start() 生成大纲start() def generate_outline(self): print(Generating outline) outline OutlineCrew().crew().kickoff(inputs{topic: self.state.topic}) self.state.total_chapters outline.pydantic.total_chapters self.state.titles outline.pydantic.titles大纲 Crew 的输出被解析为 Pydantic 模型Outline因此 Flow 能结构化地拿到总章数 标题列表而不是自由文本。4.2 第二步listen 异步并发写章节这是整个系统最值得关注的部分——每一章由一个独立的ChapterWriterCrew实例完成所有章节通过asyncio.gather并发执行listen(generate_outline) async def generate_chapters(self): tasks [] for i in range(self.state.total_chapters): task asyncio.create_task(write_single_chapter(self.state.titles[i])) tasks.append(task) chapters await asyncio.gather(*tasks) self.state.chapters.extend(chapters)每章 kickoff 时传入的输入包括章标题title、全书主题topic以及已写章节标题列表chapters用于在提示词中告知作者其他章节都在写什么减少内容重复——这一设计见 Writer Crew 的 agents.yaml 中 writer 的 goal 模板These are all the other chapters: {chapters}。4.3 第三步保存全书listen(generate_chapters) def save_book(self): with open(book.md, w) as f: for chapter in self.state.chapters: f.write(# chapter.title \n) f.write(chapter.content \n)所有章节以 Markdown 格式拼接送入book.md工作目录为运行时所在目录仓库中已有 book.md 可作为输出样例参考。README 中还给出了最终产物示例对主题 Astronomy in 2025 生成的整本书 PDFFinal_book.pdf。五、两个 Crew 的 Agent/Task 配置详解5.1 OutlineCrew研究员 大纲写手outline_crew.py 使用 CrewAI 的CrewBase声明式写法Agent 与 Task 分别由 YAML 配置驱动CrewBase class OutlineCrew: agents_config config/agents.yaml tasks_config config/tasks.yaml agent def research_agent(self) - Agent: return Agent(configself.agents_config[research_agent], tools[BrightDataWebSearchTool()], llmllm) task def write_outline(self) - Task: return Task(configself.tasks_config[write_outline], output_pydanticOutline)其 YAML 配置agents.yaml定义了research_agent角色 Book Research Agent目标是调研主题 {topic}、收集最新信息为大纲写手准备洞察与要点outline_writer角色 Book Outline Writer目标是为 {topic} 生成书籍大纲。对应的任务定义tasks.yaml中write_outline任务的expected_output明确要求输出总章数 标题列表并通过output_pydanticOutline约束为结构化结果class Outline(BaseModel): total_chapters: int titles: list[str]Crew 以processProcess.sequential、verboseTrue运行先执行research_task再执行write_outline。5.2 ChapterWriterCrew主题研究员 资深写手writer_crew.py 结构与大纲 Crew 对称但输出模型换成了Chapterclass Chapter(BaseModel): title: str content: str其 Agent 配置agents.yamltopic_researcher调研章节标题 {title} 相关的最新资料writer资深写手基于研究员的洞察写章节goal 模板中还注入了{topic}全书主题与{chapters}其余章节标题列表用于维持全书语境一致。任务配置tasks.yaml中write_chapter任务的expected_output为一篇结构完整、引人入胜的 {title} 章节同样以output_pydanticChapter约束输出保证 Flow 落盘阶段能直接取到title/content两个字段。六、核心工具BrightDataWebSearchTool 的源码解析联网检索能力由自定义工具实现custom_tool.pyclass BrightDataWebSearchToolInput(BaseModel): title: str Field(..., descriptionTopic of the book to write about and search Google for.) class BrightDataWebSearchTool(BaseTool): name: str Web Search Tool description: str Use this tool to search Google and retrieve the top search results. args_schema: Type[BaseModel] BrightDataWebSearchToolInput def _run(self, title: str) - str: host brd.superproxy.io port 33335 username os.getenv(BRIGHDATA_USERNAME) password os.getenv(BRIGHDATA_PASSWORD) proxy_url fhttp://{username}:{password}{host}:{port} proxies {http: proxy_url, https: proxy_url} query .join(title.split( )) url fhttps://www.google.com/search?q{query}brd_json1num50 response requests.get(url, proxiesproxies, verifyFalse) return response.json()[organic]关键实现细节代理通道请求经 BrightData 的brd.superproxy.io:33335代理发出凭据以 HTTP Basic 形式内嵌在代理 URL 中——这正是 README 要求选择 Native proxy-based access 的原因SERP JSON 模式URL 中的brd_json1让 BrightData 把 Google 搜索结果直接序列化为 JSONnum50请求最多 50 条结果代码最后只取organic字段自然搜索结果列表返回给 LLM输入约束args_schema将该工具收敛为单一入参titleLLM 只需提供检索主题工具内部负责拼空格为的查询串挂载位置两个 Crew 中的研究员Agentresearch_agent与topic_researcher均挂载此工具写作 Agent 不挂载形成调研者带工具、写作者纯生成的分工。说明README 开篇提到 BrightData 用于抓取 YouTube 视频但从当前仓库源码看实际生效的检索通道是上述 Google SERP 搜索。可以推断 README 中的表述更接近项目演示视频的早期版本描述以源码行为为准。另外源码中有一行ssl._create_default_https_context ssl._create_unverified_context关闭证书校验这是配合代理调试的做法生产环境建议移除。七、可复现性与调参要点关注点位置说明默认主题main.pyBookState.topic默认Astronomy in 2025改这里即可换书模型选择两个 Crew 文件顶部的LLM(modelollama/gemma3:4b)换任意 Ollama 模型或 CrewAI 支持的远端模型章节数由大纲 LLM 输出决定Outline.total_chapters如需固定章数可在expected_output提示中约束Agent 人设/提示词各 Crew 目录下 config/agents.yaml{topic}/{title}/{chapters}为模板变量任务目标与期望输出各 Crew 目录下 config/tasks.yamlexpected_output直接影响结构化解析质量输出落盘save_book()固定写入book.md适用前提与限制需要本地能跑 Ollama gemma3:4b建议具备一定显存的 GPU 环境需要可用的 BrightData SERP API 账号与配额代理按量消耗Python 3.11章节之间通过asyncio.gather并发执行并发写章数 大纲总章数模型资源与代理配额需能承载该并发量4B 级模型的长文连贯性有限成稿质量受模型能力约束仓库内Final_book.pdf展示了该配置下的实际效果可作为质量基线参考。八、小结book-writer-flow 展示了一个典型的Flow 套 Crew分层范式用Flow管理跨阶段状态BookState与并发调度用多个小型Crew复用调研→生成的两人协作模式用output_pydantic在 LLM 自由文本与程序化控制流之间建立结构化桥梁再以自定义 BrightData 工具注入实时信息源。这套结构对任何长文档自动生成场景报告、教材、书籍都是可直接迁移的工程模板。【免费下载链接】ai-engineering-hubIn-depth tutorials on LLMs, RAGs and real-world AI agent applications.项目地址: https://gitcode.com/GitHub_Trending/ai/ai-engineering-hub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

UVR 5.6 安装指南:从 0 到跑通第一首歌

UVR 5.6 安装指南:从 0 到跑通第一首歌

UVR 5.6 安装指南:从 0 到跑通第一首歌 【免费下载链接】ultimatevocalremovergui GUI for a Vocal Remover that uses Deep Neural Networks. 项目地址: https://gitcode.com/GitHub_Trending/ul/ultimatevocalremovergui Ultimate Vocal Remover&#xff…

📅 2026/9/9 16:11:47
自用多年的通达信成交量指标:设计思路与完整源码解析

自用多年的通达信成交量指标:设计思路与完整源码解析

简介:这是一份自用多年的通达信成交量指标公式源码解析文档,面向股票技术分析投资者与交易者,用于看清量能异动、辅助趋势判断与买卖点筛选。包内为单个doc文档,压缩包仅437KB,导入通达信软件即可对照学习,…

📅 2026/9/10 7:27:31
CIGRE HVDC标准模型仿真实战:控制策略与调试全解析

CIGRE HVDC标准模型仿真实战:控制策略与调试全解析

简介:面向电力系统直流输电研究的高校学生、科研工作者及相关工程技术人员,这份MATLAB/Simulink仿真解析资料以《CIGRE直流输电标准模型的建模及控制策略仿真研究》论文为蓝本,完整复现了CIGRE标准模型的搭建与仿真流程。内容涵盖系统基本参数…

📅 2026/11/4 10:14:47
MORE NEWS

更多资讯

📰

工地太忙根本没时间复习考试 内部消息高压作业是指多少KV以上的电工作业

工地太忙根本没时间复习考试 内部消息高压作业是指多少KV以上的电工作业 你说工地天天赶工期,哪还有时间复习考试?这不,我昨天还接到一个商丘的兄弟电话,说他刚拿到高压电工证,正愁着怎么应付考试。他问的头一句话就是:“高压作业是指多少KV以上的…

📰

上饶县登高架设证报名千万别踩坑,这些坑你绝对不想踩

上饶县登高架设证报名千万别踩坑,这些坑你绝对不想踩 怕考不过白交培训费?上饶县登高架设证报名千万别踩坑,这些经验你得提前知道。很多人花了几千块报名培训,结果考试没通过,证书没拿到,钱白花了不说,还耽误了工作进度,这种事太常见了。…

📰

中级电工证报考的费用怎么算?官方报名入口在哪里找

中级电工证报考的费用怎么算?官方报名入口在哪里找 你是不是也在网上看到各种关于中级电工证的广告,不知道该信哪家,怕被中介坑?其实,现在考取电工证,关键就在于找到 官方报名入口…

📰

滑县电工证怎么办理 有真实经历的人才知道多关键

滑县电工证怎么办理 有真实经历的人才知道多关键 你是不是正为找工作发愁?手里缺个电工证,连面试资格都没?我认识一个三门峡水利工程的哥们儿,去年刚从工地回来,说就是因为没及时办理低压电工证,错失了几个好机会。他现在后悔得不行,说这证不光是上岗…

📰

电工证就是操作证吗官方回应新乡电工补证案例

电工证就是操作证吗官方回应新乡电工补证案例 证书过期了不知道怎么复审延期,这种事在新乡不少工地都发生过。前几天我接到一个老电工老李的电话,说他去年刚换的新电工证,结果在项目上检查时被说“证过期了”,让他当场懵了。老李说,他记得明明是2023…

📰

吴忠低压电工证多少钱?学历不高也能考,真能改变收入

吴忠低压电工证多少钱?学历不高也能考,真能改变收入 你是不是也担心自己学历不高,报不了低压电工证?其实不然,我认识不少初中毕业的电工,现在拿着低压电工证,收入比以前翻了几倍。今天咱们就来聊聊【吴忠低压电工证】,多少钱能考下来,怎么报,怎么考…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬