本地AI驱动的文章生成器
在这份指南中,我们将引导你使用CrewAI和Ollama创建一个强大的AI驱动文章生成器。目标是构建一个Streamlit网络应用程序,利用两个专门的AI代理——一个是用于研究,另一个是用于写作——来生成任何主题的全面文章。而且最好的是?这个解决方案使用开源模型在本地运行,省去了昂贵API服务的成本!
完整代码从这里下载。
我们将构建的内容:
- 一个生成任何给定主题详细文章的网络应用程序。
- 一个多代理系统,包括专门的代理:一个用于研究,另一个用于写作。
- 使用Ollama的本地设置,而不是依赖付费云API。
1、先决条件
开始之前,请确保你已安装以下内容:
- Python 3.8+
- Ollama(用于运行本地AI模型)
- 所需的Python包:
pip install crewai langchain-community langchain-openai streamlit pydantic
设置Ollama:
- 从ollama.ai安装Ollama。
- 拉取mistral模型:
ollama pull mistral
2、代码分解
让我们将应用程序分解为逻辑组件:
2.1 初始设置和导入
import os
from crewai import Agent, Task, Crew, Process
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_openai import ChatOpenAI
import streamlit as st
from pydantic import BaseModel
# DuckDuckGo工具用于收集搜索结果
tool = DuckDuckGoSearchRun()
# 配置LLM以使用Ollama(mistral模型)
llm = ChatOpenAI(
model="ollama/mistral",
base_url="http://localhost:11434", # 本地Ollama实例
temperature=0.1 # 低温度以保持输出一致性
)
2.2 创建专用代理
我们的系统使用两个代理:一个用于研究,另一个用于写作。以下是它们的定义以及背景故事:
# 研究代理
News_Researcher = Agent(
role="高级研究分析师",
goal="对{topic}中的新兴趋势和技术进行全面分析",
verbose=True,
memory=True,
backstory="""你是一位杰出的研究分析师,在新兴技术和市场趋势方面拥有专业知识。凭借技术预见博士学位和在领先智库多年的工作经验,你在识别突破性创新及其对行业和社会的潜在影响方面表现出色。你的分析能力使你能发现他人可能忽略的模式和联系。""",
tools=[tool],
llm=llm,
allow_delegation=True
)
# 写作代理
News_Writer = Agent(
role='科技记者',
goal='为普通读者撰写关于{topic}的引人入胜且信息丰富的文章',
verbose=True,
memory=True,
backstory="""你是获奖的科技记者,擅长将复杂主题变得易于理解。凭借科学传播和创意写作的背景,你已经掌握了将技术见解转化为引人入胜叙述的艺术。你的文章曾刊登在领先的科技出版物上,并且你善于在每个故事中找到人性的角度。""",
tools=[tool],
llm=llm,
allow_delegations=False
)
2.3 定义研究和写作任务
我们将为两个代理创建专注的任务。研究任务侧重于收集关键信息,而写作任务则涉及将这些信息转化为文章。
# 研究任务
Research_task = Task(
description="""
对{topic}进行深入分析,解决以下关键领域:
1. 当前格局和最近突破的概述
2. 识别推动进步的关键参与者和创新
3. 市场影响和新兴机会的分析
4. 主要技术挑战和潜在解决方案的探索
5. 未来预测和预期发展确保研究包括详细的例子、相关的统计数据(如适用)、以及来自可信来源的见解。
""",
expected_output="涵盖主题所有主要方面的详细研究报告,包含具体示例和数据点",
tools=[tool],
agent=News_Researcher,
llm=llm
)
# 写作任务
Write_task = Task(
description="""
使用研究结果,撰写一篇吸引人的文章,内容包括:
1. 引人注目的介绍
2. 使用类比简化复杂概念
3. 包含实用示例和现实世界用例
4. 探索对各个行业的潜在影响
5. 结尾展望未来
文章应具有平衡的语气,既乐观又现实地对待挑战。内容应以清晰、有条理的markdown格式呈现,带有适当的标题和部分,便于阅读。
""",
expected_output="结构良好的markdown文章,12-14段,内容清晰且有吸引力",
tools=[tool],
agent=News_Writer,
async_execution=False,
output_file='blog.md',
llm=llm
)
2.4 Streamlit界面
在这里我们配置了Streamlit界面,以便轻松交互和文章生成。
st.set_page_config(page_title="CrewAI文章生成器", page_icon="📝", layout="wide")
# 自定义CSS以获得更好的样式
st.markdown("""
<style>
.reportview-container {
background: #f0f2f6
}
.main {
background: #ffffff;
padding: 3rem;
border-radius: 10px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.stButton>button {
background-color: #0066cc;
color: white;
border-radius: 5px;
}
.stTextInput>div>div>input {
border-radius: 5px;
}
</style>
""", unsafe_allow_html=True)
st.title("📝 AI文章生成器")
st.markdown("""
此应用程序使用CrewAI与Ollama生成任何主题的综合文章。
系统采用两个AI代理:
- 一个研究分析师负责收集和分析信息
- 一个科技记者负责最终文章的撰写
""")
# 动态文章生成的主题输入
topic = st.text_input("输入主题:", placeholder="例如:量子计算、绿色能源、Web3")
if st.button("生成文章"):
if not topic:
st.warning("请在生成文章前输入主题。")
else:
progress_bar = st.progress(0)
# 初始化团队
crew = Crew(
agents=[News_Researcher, News_Writer],
tasks=[Research_task, Write_task],
process=Process.sequential,
)
with st.spinner(f"正在研究并撰写关于‘{topic}’的文章..."):
progress_bar.progress(50)
result = crew.kickoff(inputs={'topic': topic})
progress_bar.progress(100)
st.subheader("生成的文章:")
st.markdown(result)
# 添加下载按钮
st.download_button(
label="下载文章",
data=result,
file_name=f"{topic.replace(' ', '_').lower()}_article.md",
mime="text/markdown"
)
2.5 运行应用程序
- 保存代码到文件(例如
article_generator.py
)。 - 确保Ollama正在运行并加载了mistral模型。
- 运行应用程序:
streamlit run article_generator.py
3、工作原理
1. Ollama集成:我们使用Ollama在本地运行mixtral模型,而不是依赖OpenAI的云API。通过ChatOpenAI
类完成设置,使用指向Ollama服务器的自定义base URL。
2. 代理系统:应用程序使用两个代理:
- 研究分析师收集并分析详细信息。
- 科技记者将研究转化为引人入胜、可读的文章。
3. 任务管道:任务按顺序执行:
- 进行全面研究。
- 将研究转化为文章。
4. 网络界面:Streamlit应用提供用户友好的界面,用户可以:
- 输入文章主题。
- 监控进度# 使用Ollama的好处
- 成本效益高:无需昂贵的API调用,所有操作都在本地进行。
- 隐私保护:所有处理都在您的机器上进行,确保数据隐私。
- 可定制性:轻松切换Ollama中可用的不同模型。
- 无速率限制:可以随意生成文章,不会遇到任何限制。
4、最佳实践和技巧
- 模型选择:虽然mistral表现良好,但您可以尝试Ollama中的其他模型。
- 内存使用:设置
memory=True
可以让代理在任务期间保持上下文。 - 温度设置:使用较低的温度(0.1)以获得更集中和一致的输出。
- 错误处理:验证输入并优雅地处理潜在错误,以确保平稳运行。
5、结束语
本文演示了如何使用CrewAI和Ollama构建一个基于AI的文章生成器。通过结合本地AI模型和多代理协作,该系统为内容生成提供了一个强大的解决方案。
完整的源代码可在上方获取,您可以通过添加以下功能进一步扩展它:
- 支持不同的内容类型。
- 多语言支持。
- 自定义格式选项。
- 额外的研究工具。
尝试不同的配置,找到最适合您需求的设置!
原文链接:Local AI Agent — Building an AI-Powered Article Generator with CrewAI and Ollama
汇智网翻译整理,转载请标明出处