Griptape 是一个模块化的 Python 框架,用于构建安全连接到企业数据和 API 的 AI 驱动应用程序。它为开发人员提供了在每个步骤中保持控制和灵活性的能力。
🛠️ 核心组件
🏗️ 结构
- 🤖 代理由单个任务组成。
- 🔄 管道组织一系列任务,使一个任务的输出可以流入下一个任务。
- 🌐 工作流配置任务以并行运行。
📝 任务
任务是结构中的核心构建块,能够与引擎、工具和其他 Griptape 组件进行交互。
🔧 工具
工具提供了 LLMs 与数据和服务交互的功能。Griptape 包含各种内置工具,并且可以轻松创建自定义工具。
🧠 记忆
- 💬 会话记忆使 LLMs 能够在交互中保留和检索信息。
- 🗃️ 任务记忆将大型或敏感任务输出保存在发送给 LLM 的提示之外。
- 📊 元记忆允许将额外的元数据传递给 LLM,增强交互的上下文和相关性。
🚗 驱动程序
驱动程序促进与外部资源和服务的交互:
- 🗣️ 提示驱动程序管理与 LLM 的文本交互。
- 🔢 嵌入驱动程序从文本输入生成向量嵌入。
- 💾 向量存储驱动程序管理嵌入的存储和检索。
- 🎨 图像生成驱动程序根据文本描述创建图像。
- 🔎 图像查询驱动程序从文本查询中查询图像。
- 💼 SQL 驱动程序与 SQL 数据库交互。
- 🌐 网页抓取驱动程序从网页中提取信息。
- 🧠 会话记忆驱动程序管理会话数据的存储和检索。
🚂 引擎
引擎封装驱动程序并提供特定用例的功能:
- 📊 RAG 引擎是实现模块化检索增强生成(RAG)管道的抽象。
- 🛠️ 提取引擎从非结构化文本中提取 JSON 或 CSV 数据。
- 📝 摘要引擎从文本内容生成摘要。
- 🖼️ 图像生成引擎根据文本描述生成图像。
- 🔎 图像查询引擎根据文本提示查询图像。
📦 其他组件
- 📐 规则集以最少的提示工程引导 LLM 行为。
- 🔄 加载器从各种来源加载数据。
- 🏺 工件允许在 Griptape 组件之间传递不同类型的数据。
- ✂️ 分段器将文本分割成可管理的块,以适应各种文本类型。
- 🔢 标记器计算文本中的标记数,以不超过 LLM 标记限制。
文档
请参阅 Griptape 文档 以了解:
- 入门指南。
- 核心概念和设计概述。
- 示例。
- 贡献指南。
请查看 Griptape 贸易学校 以获取免费的在线课程。
快速入门
首先,安装 griptape:
pip install "griptape[all]" -U
其次,通过 获取 API 密钥 并将其添加到您的环境中作为 OPENAI_API_KEY
来配置 OpenAI 客户端。默认情况下,Griptape 使用 OpenAI Chat Completions API 执行 LLM 提示。
使用 Griptape,您可以创建由不同类型的任务组成的结构,例如代理、管道和工作流。让我们构建一个简单的创意代理,它动态使用三个工具,并在任务记忆中移动数据。
from griptape.structures import Agent
from griptape.tools import WebScraper, FileManager, TaskMemoryClient
agent = Agent(
input="加载 {{ args[0] }} ,总结它,并将其存储在一个名为 {{ args[1] }} 的文件中。",
tools=[
WebScraper(off_prompt=True),
TaskMemoryClient(off_prompt=True),
FileManager()
]
)
agent.run("https://griptape.ai", "griptape.txt")
输出如下:
[04/02/24 13:51:09] INFO ToolkitTask 85700ec1b0594e1a9502c0efe7da6ef4 输入:加载 https://griptape.ai,进行总结,并将其存储在名为 griptape.txt 的文件中。 [04/02/24 13:51:15] INFO Subtask db6a3e7cb2f549128c358149d340f91c 思考:首先,我需要使用 WebScraper 操作加载网站内容。然后,我将使用 TaskMemoryClient 操作对内容进行总结。最后,我将使用 FileManager 操作将总结的内容保存到文件中。 操作:[ { "名称": "WebScraper", "路径": "get_content", "输入": { "值": { "url": "https://griptape.ai" } }, "标签": "load_website_content" } ] [04/02/24 13:51:16] INFO Subtask db6a3e7cb2f549128c358149d340f91c 响应:“WebScraper.get_content”的输出已存储在名为“TaskMemory”的内存中,工件命名空间为“752b38bb86da4baabdbd9f444eb4a0d1”。 [04/02/24 13:51:19] INFO Subtask c3edba87ebf845d4b85e3a791f8fde8d 思考:现在网站内容已加载到内存中,我需要使用 TaskMemoryClient 操作对其进行总结。 操作:[{"标签": "summarize_content", "名称": "TaskMemoryClient", "路径": "summarize", "输入": {"值": {"memory_name": "TaskMemory", "artifact_namespace": "752b38bb86da4baabdbd9f444eb4a0d1"}}}] [04/02/24 13:51:25] INFO Subtask c3edba87ebf845d4b85e3a791f8fde8d 响应:“TaskMemoryClient.summarize”的输出已存储在名为“TaskMemory”的内存中,工件命名空间为“c4f131c201f147dcab07be3925b46294”。 [04/02/24 13:51:33] INFO Subtask 06fe01ca64a744b38a8c08eb152aaacb 思考:现在内容已总结并存储在内存中,我需要使用 FileManager 操作将这段总结的内容保存到名为“griptape.txt”的文件中。 操作:[{"标签": "save_summarized_content", "名称": "FileManager", "路径": "save_memory_artifacts_to_disk", "输入": {"值": {"dir_name": ".", "file_name": "griptape.txt", "memory_name": "TaskMemory", "artifact_namespace": "c4f131c201f147dcab07be3925b46294"}}}] INFO Subtask 06fe01ca64a744b38a8c08eb152aaacb 响应:保存成功 [04/02/24 13:51:35] INFO ToolkitTask 85700ec1b0594e1a9502c0efe7da6ef4 输出:网站 https://griptape.ai 的总结内容已成功保存到名为“griptape.txt”的文件中。
在运行期间,Griptape 代理使用一个 [工具](https://docs.griptape.ai/stable/griptape-tools/) 加载了一个网页,将其完整内容存储在 [任务内存](https://docs.griptape.ai/stable/griptape-framework/structures/task-memory.md) 中,查询后回答了原始问题,并最终将答案保存到文件中。
这里需要注意的重要一点是,无论网页有多大,它都不可能超过提示词令牌限制,因为网页的全部内容从未返回到 LLM。此外,后续子任务中的数据也没有返回到提示词中。那么,它是如何工作的呢?
在上述示例中,我们将 [off_prompt](https://docs.griptape.ai/stable/griptape-framework/structures/task-memory.md#off-prompt) 设置为 `True`,这意味着 LLM 永远看不到它操作的数据,但可以将数据发送到其他工具。
[查看我们的文档](https://docs.griptape.ai/stable/griptape-framework/drivers/prompt-drivers/) 了解如何将 Griptape 与其他 LLM 提供商(如 Anthropic、Claude、Hugging Face 和 Azure)结合使用。
## 版本控制
Griptape 处于不断开发中,其 API 和文档可能会发生变化。在我们稳定 API 并发布 1.0.0 版本之前,我们将使用次要版本(即 x.Y.z)来引入功能和破坏性更改,并使用补丁版本(即 x.y.Z)进行错误修复。
## 贡献
感谢您考虑为 Griptape 贡献代码!在开始之前,请阅读以下指南。
### 提交问题
如果您发现了 bug,想提出新功能或有疑问,请通过我们的公共 [问题跟踪器](https://github.com/griptape-ai/griptape/issues) 提交问题。在提交新问题之前,请检查现有问题以确保它没有被报告或讨论过。
### 提交拉取请求
我们欢迎并鼓励拉取请求。为了简化流程,请遵循以下指南:
1. **现有问题:** 请仅为现有问题提交拉取请求。如果您想开发新功能或修复尚未解决的 bug,请先提交问题。这使得 Griptape 团队可以内部处理请求并提供公开回应。
2. **分支:** 所有拉取请求都应提交到 `dev` 分支。这有助于我们管理更改并顺利整合。
3. **单元测试:** 确保您的拉取请求通过所有现有的单元测试。此外,如果您引入了新代码,请包含新的单元测试以验证其功能。
本地执行 `make test/unit` 来运行测试套件。
4. **文档:** 每个拉取请求都必须包括文档更新,或者明确说明为何不需要文档更新。文档在维护全面且用户友好的项目中至关重要。
本地执行 `make docs` 来构建文档。
5. **代码检查:** Griptape 使用多种工具来保证代码质量和风格。您的代码必须通过所有检查才能合并。
本地运行 `make check` 来运行所有代码检查。
6. **变更日志:** 如果您的拉取请求引入了显著更改,请更新 [变更日志](https://github.com/griptape-ai/griptape/blob/dev/CHANGELOG.md)。
### 新的 Griptape 工具
Griptape 的可扩展性允许任何人独立开发和分发工具。除非为提供广泛适用的功能,没有必要的新工具应该作为核心框架的一部分管理。提交新工具的拉取请求(除非解决现有问题)将会被关闭。
Griptape 工具模板 提供了推荐的结构、逐步指导、基本自动化和新工具的使用示例。在模板中,选择 使用此模板 然后 创建一个新仓库 来开始一个新的工具项目。
开发和测试依赖
通过 Make 安装所有依赖项:
make install
或者直接调用 Poetry 安装:
poetry install --all-extras --with dev --with test --with docs
配置 pre-commit 以确保你的代码格式正确并通过所有检查:
poetry run pre-commit install
许可
Griptape 可在 Apache 2.0 许可下使用。