随着人工智能工具日益融入日常运营,各大组织对AI的投入持续增长。这股不间断的创新浪潮,正推动着市场对更高效、更 […]
随着人工智能工具日益融入日常运营,各大组织对AI的投入持续增长。这股不间断的创新浪潮,正推动着市场对更高效、更可靠框架的迫切需求。意大利科技社区背后的初创公司 Datapizza,顺应这一趋势,隆重发布了其名为 Datapizza AI 的开源 GenAI Python 框架。
在构建由大型语言模型(LLM)驱动的智能体时,需要精心选择一个AI 技术栈:
本文将展示如何利用全新的 Datapizza 框架构建由 LLM 驱动的 AI 智能体。文章提供了实用的 Python 代码示例,可轻松应用于类似场景(即取即用),并逐行附带注释,方便读者复现和理解。
由于在本地主机上运行模型具有诸多优势,例如对数据隐私、模型行为和成本的完全控制,因此教程选择使用 Ollama 作为 LLM 引擎。
首先,需要从 Ollama 官网下载安装包。接着,选择一个模型并运行页面上指示的命令来拉取 LLM。文章选择使用阿里巴巴的 Qwen 模型,因其兼具智能性与轻量化优势(ollama run qwen3)。
Datapizza AI 支持所有主流 LLM 引擎。通过运行以下命令即可完成设置:
pip install datapizza-ai
pip install datapizza-ai-clients-openai-like
正如 官方文档 所述,可以快速测试 AI 技术栈,通过一个简单的提示调用模型并提出问题。OpenAILikeClient() 对象是连接 Ollama API 的方式,该 API 通常托管在同一本地主机 URL 上。
from datapizza.clients.openai_like import OpenAILikeClientllm = "qwen3"
prompt = '''
You are an intelligent assistant, provide the best possible answer to user's request.
'''ollama = OpenAILikeClient(api_key="", model=llm, system_prompt=prompt, base_url="http://localhost:11434/v1")
q = '''
what time is it?
'''
llm_res = ollama.invoke(q)
print(llm_res.text)

测试 LLM 能力的另一种方式是构建一个简单的聊天机器人并进行对话。为此,在每次交互中,需要存储聊天历史并将其反馈给模型,明确每次对话是由谁说的。Datapizza 框架内置了强大的记忆系统。
from datapizza.memory import Memory from datapizza.type import TextBlock, ROLEmemory = Memory()
memory.add_turn(TextBlock(content=prompt), role=ROLE.SYSTEM)while True:
## 用户
q = input(' >')
if q == "quit":
break## LLM llm_res = ollama.invoke(q, memory=memory) res = llm_res.text print(" >", f"x1b[1;30m{res}x1b[0m") ## 更新记忆 memory.add_turn(TextBlock(content=q), role=ROLE.USER) memory.add_turn(TextBlock(content=res), role=ROLE.ASSISTANT)

如果想检索聊天历史,只需访问记忆系统即可。通常,AI 框架在与 LLM 交互时使用三种角色:“系统”(核心指令)、“用户”(人类所说)、“助手”(聊天机器人回复)。
memory.to_dict()
显然,单纯的 LLM 功能非常有限,除了聊天之外无法完成太多任务。因此,需要赋予它执行行动的可能性,换言之,就是激活工具(Tools)。
工具是区分普通 LLM 和 AI 智能体的关键所在。当用户提出超出 LLM 知识库范围的问题时(例如“现在几点?”),智能体应能理解它不知道答案,然后激活一个工具来获取额外信息(例如检查时钟),通过 LLM 处理结果,并生成答案。
Datapizza 框架允许用户极其便捷地从零开始创建工具。只需导入 @tool 装饰器,任何 Python 函数都可摇身一变,成为智能体可调用的行动模块。
from datapizza.tools import tool@tool
def get_time() -> str:
'''获取当前时间。'''
from datetime import datetime
return datetime.now().strftime("%H:%M")
get_time()
随后,将指定工具分配给智能体,即可拥有一个结合了语言理解、自主决策和工具使用的 AI 系统。
from datapizza.agents import Agent import osos.environ["DATAPIZZA_AGENT_LOG_LEVEL"] = "DEBUG" # 最大日志级别
agent = Agent(name="single-agent", client=ollama, system_prompt=prompt,
tools=[get_time], max_steps=2)q = '''
what time is it?
'''
agent_res = agent.run(q)

一个由 LLM 驱动的 AI 智能体,是一个围绕语言模型构建的智能系统,它不仅能响应指令,更具备推理、决策和执行行动的能力。除了对话(即与通用知识库聊天)之外,智能体最常见的行动包括 RAG(与文档对话)、查询(与数据库对话)和网络搜索(与整个互联网对话)。
例如,尝试一个网络搜索工具。在 Python 中,最简单的方法是使用著名的隐私浏览器 DuckDuckGo。可以直接使用 原始库 或 Datapizza 框架的封装器(pip install datapizza-ai-tools-duckduckgo)。
from datapizza.tools.duckduckgo import DuckDuckGoSearchTool
DuckDuckGoSearchTool().search(query="powell")

现在创建一个能够为执行网络搜索的智能体。如果希望它更具交互性,可以像为聊天机器人构建时那样来架构 AI。
os.environ["DATAPIZZA_AGENT_LOG_LEVEL"] = "ERROR" # 关闭日志prompt = '''
You are a journalist. You must make assumptions, use your tool to research, make a guess, and formulate a final answer.
The final answer must contain facts, dates, evidences to support your guess.
'''memory = Memory()
agent = Agent(name="single-agent", client=ollama, system_prompt=prompt,
tools=[DuckDuckGoSearchTool()],
memory=memory, max_steps=2)while True:
## 用户
q = input(' >')
if q == "quit":
break## 智能体 agent_res = agent.run(q) res = agent_res.text print(" >", f"x1b[1;30m{res}x1b[0m") ## 更新记忆 memory.add_turn(TextBlock(content=q), role=ROLE.USER) memory.add_turn(TextBlock(content=res), role=ROLE.ASSISTANT)

智能体真正的力量在于它们能够像人类一样彼此协作。这些协同工作的团队被称为 多智能体系统(Multi-Agent Systems, MAS),它们在共享环境中共同解决单个智能体难以独立处理的复杂问题。
这一次,创建一个更高级的工具:代码执行。需要注意的是,LLM 通过接触大量的代码和自然语言文本来学习如何编写代码,从而掌握编程语言的模式、语法和语义。但由于它们无法完成任何实际操作,所创建的代码仅是文本。简而言之,LLM 可以生成 Python 代码,但无法执行它,而智能体则可以。
import io import contextlib@tool
def code_exec(code:str) -> str:
'''执行 Python 代码。始终使用 print() 函数来获取输出。'''
output = io.StringIO()
with contextlib.redirect_stdout(output):
try:
exec(code)
except Exception as e:
print(f"Error: {e}")
return output.getvalue()
code_exec("from datetime import datetime; print(datetime.now().strftime('%H:%M'))")
多智能体系统有两种类型:顺序处理确保任务一个接一个地执行,遵循线性进展。另一方面,分层结构模拟传统的组织层级,以实现高效的任务委派和执行。后者通常能提供更高的并行度和灵活性,因而在实践中更受青睐。
借助 Datapizza 框架,可以使用 can_call() 函数将两个或更多智能体连接起来。通过这种方式,一个智能体可以将当前任务传递给另一个智能体。
prompt_senior = ''' 您是一位高级 Python 编码员。您会检查初级编码员生成的代码,并仅在代码正确且安全的情况下使用您的工具执行它。 ''' agent_senior = Agent(name="agent-senior", client=ollama, system_prompt=prompt_senior, tools=[code_exec])prompt_junior = '''
您是一位初级 Python 编码员。您可以生成代码但无法执行它。
您会收到经理的请求,您的最终输出必须是可传递的 Python 代码。
如果您不知道某些特定命令,可以使用您的工具并在网上搜索“如何使用 Python 完成...?”。
'''
agent_junior = Agent(name="agent-junior", client=ollama, system_prompt=prompt_junior,
tools=[DuckDuckGoSearchTool()])
agent_junior.can_call([agent_senior])prompt_manager = '''
您一无所知,只是一位经理。在收到用户请求后,您会首先要求初级编码员生成代码,然后要求高级编码员执行它。
'''
agent_manager = Agent(name="agent-manager", client=ollama, system_prompt=prompt_manager,
tools=[])
agent_manager.can_call([agent_junior, agent_senior])q = '''
绘制泰坦尼克号数据集。数据可在此处找到:
https://raw.githubusercontent.com/mdipietro09/DataScience_ArtificialIntelligence_Utils/master/machine_learning/data_titanic.csv
'''
agent_res = agent_manager.run(q)
#print(agent_res.text)


本文作为一篇教程,旨在介绍 Datapizza AI,这是一个构建由 LLM 驱动的聊天机器人和 AI 智能体的全新框架。该库展现出卓越的灵活性和用户友好性,能够覆盖各种生成式 AI 应用场景。虽然本文示例使用了 Ollama,但 Datapizza AI 可与 OpenAI 等所有主流 LLM 引擎无缝集成。
本文的完整代码可在:GitHub 获取。
免费获取企业 AI 成熟度诊断报告,发现转型机会
关注公众号

扫码关注,获取最新 AI 资讯
3 步完成企业诊断,获取专属转型建议
已有 200+ 企业完成诊断