crewai进一步功能的实现

AI Agent实战——用CrewAI实现博客自动撰写并发送邮箱 从技术角度讲,AI Agent是一种软件实体,旨在代表用户或其他程序自主或半自主地执行任务。这些代理利用人工智能做出决策、采取行动,并与其环境或其他系统进行交互。AI Agent的一些主要特征如下:自主性: AI Agent的操作无需人为干预。一旦有了目标,它们就能独立完成任务。决策: 它们使用算法、规则和人工智能模型(LLM),根据自己的认知和目标做出决策。这包括评估不同选项并选择最佳行动方案。学习: 许多AI Agent都采用了机器学习技术,以逐步提高其性能。 阅读详情

crewai进一步功能的实现

Memory功能部署

crewAI Memory 开启功能需要crew里进行定义:

Crew(memory=True)

这个时候会开启一整套记忆系统

  • Short-term Memory: 记住当前执行过程中的上下文。
  • Long-term Memory: 只要数据库存在,甚至可以记住几天前运行的结果(基于 Vector Store)。
  • Entity Memory: 记住特定实体(如“项目A”的主题是什么)。
  • Context Memory:它和短期记忆很像,但关注的是:语境一致性,而不是内容本身

长期记忆通过向量数据库(Vector Store)以文本 → embedding → 向量的形式进行存储

这套记忆系统中,有entity memory和long-term memory是需要进行embedder设置的,其他都可以通过只开启memory来解决

衍生问题

如果你需要开启memory功能的话,你就需要使用内嵌的embedder功能

对于embedding provider,crewai的默认行为定义为:

embedder = {
  "provider": "openai",
  "config": {
    "model": "text-embedding-3-small"
  }
}

当然你也可以选择其他发行商的内嵌ai,但是问题也就出在这。我远控的机子是无法访问外网的,所以这里理所当然我第一时间想到的是使用huggingface的本地embedding库。可是只要你是使用他给的内嵌方法填入的话,crewai都会默认你使用的是线上的transformer库,所以会想你索要api_key,于是我们又想到了用猴子补丁来试一试能不能绕过这个判断。

我们设置了一个假的环境变量key,希望他在判断之后再去使用本地的库模型。但是依旧行不通,它认死了必须要走线上的链接方式。后面我下载了proxychain去访问外网,然后去调用线上的key看看会不会好一点,又由于找的节点都是一些免费的节点,所以链接不是很稳定,且llm的模型又要连接到上交的大模型那边,我怀疑他们会封ip,所以实际下来效果并不好,可能才跑一会链接就会断开来。

解决方案

最后在不断的尝试之下,我发现crewai的memory其实并不是只能通过

memory=ture

来实现的,我们也可以通过

    memory=True,
    memory_config={
        "use_short_term": True,
        "use_long_term": True,
        "use_entity": False, 
    }

这样来单独控制每个功能的开关,这也就意味着我们能对entity_memory使用的embedder进行自定义设置,所以我们自己封装了一个embedder,放在本地,然后再开启entity_memory的时候对其进行调用,实测下来终于没有问题了,且本地的数据会放在同一目录下的另一个文件下,方便ai后续的阅读记忆,修改代码如下

import os
import numpy as np
from pathlib import Path
from typing import Any, Optional
from uuid import uuid4

import chromadb
from chromadb.config import Settings
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity

from crewai import Agent, Task, Crew, Process, LLM
from crewai.memory.entity.entity_memory import EntityMemory
from crewai.memory.short_term.short_term_memory import ShortTermMemory
from crewai.memory.storage.rag_storage import RAGStorage
from crewai.utilities.paths import db_storage_path

# =====================================================
# 1. 基础配置
# =====================================================

EMBEDDING_MODEL = os.getenv(
    "LOCAL_EMBEDDING_MODEL",
    "/path/to/local/sentence-transformers/all-MiniLM-L6-v2"
)

# CrewAI Memory 存储目录
os.environ["CREWAI_STORAGE_DIR"] = "./crewai_memory_data"
Path(os.environ["CREWAI_STORAGE_DIR"]).expanduser().mkdir(parents=True, exist_ok=True)

def storage_snapshot(title: str):
    base = Path(os.environ["CREWAI_STORAGE_DIR"]).resolve()
    print(f"\n[{title}] CREWAI_STORAGE_DIR={base}")
    if not base.exists():
        print("- (目录尚未创建)")
        return
    items = list(base.iterdir())
    print(f"- 共 {len(items)} 项")

# =====================================================
# 2. 自定义本地 Chroma Storage
# =====================================================

class LocalChromaStorage(RAGStorage):
    def __init__(self, type: str, model_path: str, **kwargs):
        self._model_path = model_path
        self._collection = None
        super().__init__(type=type, **kwargs)

    def _initialize_app(self):
        from chromadb.utils.embedding_functions import SentenceTransformerEmbeddingFunction

        base_path = Path(os.environ["CREWAI_STORAGE_DIR"]).resolve()
        persist_path = str((base_path / self.type).resolve())

        client = chromadb.PersistentClient(
            path=persist_path,
            settings=Settings(allow_reset=True),
        )

        embedding_fn = SentenceTransformerEmbeddingFunction(
            model_name=self._model_path
        )

        self._collection = client.get_or_create_collection(
            name="memory",
            embedding_function=embedding_fn,
            metadata={"hnsw:space": "cosine"},
        )
        self._client = self._collection

    def save(self, data: Any, metadata: Optional[dict] = None, **kwargs):
        if self._collection is None:
            self._initialize_app()

        ids = [str(uuid4())]
        documents = [str(data)]
        metadatas = [metadata or {}]

        self._collection.add(
            ids=ids,
            documents=documents,
            metadatas=metadatas
        )

    def search(self, query: str, limit: int = 3, **kwargs):
        if self._collection is None:
            self._initialize_app()

        results = self._collection.query(
            query_texts=[query],
            n_results=limit,
            include=["documents", "distances"],
        )

        docs = results["documents"][0]
        dists = results["distances"][0]

        return [
            {"content": d, "score": 1 - dist}
            for d, dist in zip(docs, dists)
        ]

# =====================================================
# 3. LLM 配置
# =====================================================

LLM_API_KEY = os.getenv("LLM_API_KEY", "YOUR_API_KEY")
LLM_BASE_URL = os.getenv("LLM_BASE_URL", "https://example-llm-api/v1")
LLM_MODEL = os.getenv("LLM_MODEL", "your-llm-model")

llm = LLM(
    model=f"openai/{LLM_MODEL}",
    base_url=LLM_BASE_URL,
    api_key=LLM_API_KEY
)

# =====================================================
# 4. 本地 RAG 示例
# =====================================================

embed_model = SentenceTransformer(EMBEDDING_MODEL)

documents = [
    "工业控制系统安全的核心是可用性。",
    "冬季安全演练重点包括应急响应和日志分析。",
    "PLC 固件漏洞是常见风险之一。",
]

doc_embeddings = embed_model.encode(documents)

def rag_search(query, top_k=2):
    q_emb = embed_model.encode([query])
    sims = cosine_similarity(q_emb, doc_embeddings)[0]
    idx = sims.argsort()[-top_k:][::-1]
    return [documents[i] for i in idx]

# =====================================================
# 5. Agent + Memory 测试
# =====================================================

agent = Agent(
    role="记忆测试 Agent",
    goal="基于资料回答问题并记住关键信息",
    llm=llm,
    memory=True,
    verbose=True
)

query = "冬季安全演练的重点是什么?"
context = rag_search(query)

task_1 = Task(
    description="根据资料回答问题并记住结论。\n" + "\n".join(context),
    agent=agent
)

task_2 = Task(
    description="不提供资料,直接回答:冬季安全演练的重点是什么?",
    agent=agent
)

short_term = ShortTermMemory(
    storage=LocalChromaStorage("short_term", EMBEDDING_MODEL)
)
entity_mem = EntityMemory(
    storage=LocalChromaStorage("entities", EMBEDDING_MODEL)
)

crew = Crew(
    agents=[agent],
    tasks=[task_1, task_2],
    process=Process.sequential,
    short_term_memory=short_term,
    entity_memory=entity_mem,
    mem

主要就是通过自定义了一个 LocalChromaStorage来帮助我们在本地设置embedder

1) 为什么要写 LocalChromaStorage这个类?

CrewAI 的短期记忆和实体记忆本质都依赖一个“RAG 存储层”:

  • save(…) :把文本(以及元数据)写到向量库
  • search(query, …) :把 query 做 embedding,然后相似度检索出相关记忆条目
    之前报错的根源就是: 默认 storage 在初始化 embedding function 时走了远程 provider(OpenAI 或 HuggingFace API),所以要求对应的环境变量 key 。
    解决办法:把这层 storage 换成“完全本地”的实现。
2) init
  • type :区分是 short_term 还是 entities ,用于落盘路径隔离。
  • model_path :本地 SentenceTransformer 模型路径。
  • self._collection = None :延迟初始化(第一次 save/search 才真正打开/创建 collection)。
  • super().init(…) :让 CrewAI 的 RAGStorage 父类把必要字段初始化好(保持兼容)。
3) _initialize_app
  • SentenceTransformerEmbeddingFunction :这是 Chroma 自带的 本地 embedding function ,直接加载 sentence-transformers 模型在本机算向量。
  • base_path = Path(os.environ[“CREWAI_STORAGE_DIR”])… :明确落盘到你设置的目录里(不依赖外部默认规则)。
  • persist_path = base_path / self.type / agents :每种 memory 一个目录,比如:
    • …/short_term/…
    • …/entities/…
  • chromadb.PersistentClient(path=persist_path, …) :使用本地持久化 Chroma。
  • get_or_create_collection(… embedding_function=embedding_fn …) :绑定本地 embedding function,这一步决定了后续 query/add 全都离线。
  • self._client = self._collection :兼容 CrewAI 父类内部可能访问 _client 的地方。
4) save
  • 把 CrewAI 传进来的各种结构(list/dict/其它)统一成 (text, metadata) 列表。
  • 用 uuid4() 生成 ids。
  • self._collection.add(…) :写入 Chroma,collection 会自动调用本地 embedding function 算向量并落盘。
5) search
  • self._collection.query(query_texts=[query], …) :Chroma 会用本地 embedding function 对 query 编码后检索。
  • 返回结构里我同时提供了:
    • content :CrewAI 的 contextual memory 里会用 result[“content”] 拼上下文(你之前 KeyError 就是这里)。
    • text :保留一个别名,避免不同版本/不同调用路径读取 text 时丢字段。

RAG功能部署

RAG功能也是基于在embedder的基础上,将我们的prompt或者是其他一些有价值的信息写入到本地文件中,在使用crewai的时候直接让ai利用argtools或者是我们自己封装的工具来进行文件的阅读,从而快速方便的获取重要的前置消息。

衍生问题

在实际部署中,我是先解决rag的部署才通过相同的办法去部署memory的功能的,所以这里部署的解决方案和memory功能的思路是相对一致的。略有不同的是,虽然rag依旧是建立在embedder模型的基础之上。但是相对于memory功能,他的embedder内嵌功能是更加灵活的,因为他不必要在明显crew的时候写入到config里,他可以自己进行自定义封装。

在部署中我发现如果在使用官方的文件读取工具,即readtxttools的时候,crewai也会强制要求你进行线上api的调用,所以这里我们继续使用basetools的方法来将本地文件通过embedder切片成相应的向量之中

解决方案

embedding的核心功能就是通过将文本转成向量的方式来存储,在寻找的时候通过对比querry和本地向量的相似度来寻找答案,所以这里我们可以自己封装一个建议的rag_tools

import os
import re
from sentence_transformers import SentenceTransformer
import chromadb
from chromadb.utils import embedding_functions
from crewai import Agent, Task, Crew, Process, LLM
from crewai.tools import BaseTool
from pydantic import BaseModel, Field
from typing import Type, List

# ==============================
# 1. 基础配置
# ==============================

# 本地 embedding 模型(HuggingFace 缓存路径)
EMBEDDING_MODEL_PATH = (
    "/path/to/.cache/huggingface/hub/"
    "models--sentence-transformers--all-MiniLM-L6-v2/"
    "snapshots/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
)

# 本地文档路径
DOC_PATH = "/path/to/project/ICS_Security_Plan.txt"

# LLM 配置(示例占位)
LLM_API_KEY = "YOUR_API_KEY_HERE"
LLM_BASE_URL = "https://api.example.com/v1"
LLM_MODEL = "your-llm-model-name"

# Chroma 集合名
COLLECTION_NAME = "ics_rag_demo_collection"

# ==============================
# 2. 初始化 Embedding & 向量库
# ==============================

print("✅ [Init] 加载本地 embedding 模型...")
embedding_model = SentenceTransformer(EMBEDDING_MODEL_PATH)

embedding_function = embedding_functions.SentenceTransformerEmbeddingFunction(
    model_name=EMBEDDING_MODEL_PATH
)

print("✅ [Init] 初始化 Chroma 向量库...")
client = chromadb.Client()

# 若存在旧集合则删除
try:
    client.delete_collection(COLLECTION_NAME)
except:
    pass

collection = client.create_collection(
    name=COLLECTION_NAME,
    embedding_function=embedding_function
)

# ==============================
# 3. 文档语义切分
# ==============================

def semantic_split(text: str) -> List[str]:
    """
    按文档结构进行语义切分(例如:按“第X周”)
    """
    chunks = []
    lines = text.split("\n")
    current_chunk = []

    for line in lines:
        line = line.strip()
        if not line:
            continue

        if line.startswith("【") and "周】" in line:
            if current_chunk:
                chunks.append("\n".join(current_chunk))
            current_chunk = [line]
        else:
            current_chunk.append(line)

    if current_chunk:
        chunks.append("\n".join(current_chunk))

    return chunks


print("✅ [Index] 读取文档并写入向量库...")
if os.path.exists(DOC_PATH):
    with open(DOC_PATH, "r", encoding="utf-8") as f:
        text = f.read()

    chunks = semantic_split(text)

    collection.add(
        documents=chunks,
        ids=[f"chunk-{i}" for i in range(len(chunks))]
    )

    print(f"✅ 已入库 {len(chunks)} 个语义片段")
else:
    raise FileNotFoundError("文档不存在")

# ==============================
# 4. 自定义本地 RAG Tool
# ==============================

class SearchInput(BaseModel):
    query: str = Field(..., description="检索问题")

class LocalRAGTool(BaseTool):
    name: str = "Local ICS Plan Search Tool"
    description: str = "用于从本地工控安全学习计划中检索相关内容"
    args_schema: Type[BaseModel] = SearchInput

    def _run(self, query: str) -> str:
        results = collection.query(
            query_texts=[query],
            n_results=5
        )

        docs = results.get("documents", [[]])[0]
        ids = results.get("ids", [[]])[0]

        if not docs:
            return "未找到相关内容"

        # 按 chunk 顺序重排
        combined = list(zip(ids, docs))

        def extract_num(x):
            m = re.search(r"chunk-(\d+)", x)
            return int(m.group(1)) if m else -1

        combined.sort(key=lambda x: extract_num(x[0]))
        ordered_docs = [doc for _, doc in combined]

        return "\n\n---\n\n".join(ordered_docs)

# ==============================
# 5. CrewAI Agent & Task
# ==============================

llm = LLM(
    model=f"openai/{LLM_MODEL}",
    base_url=LLM_BASE_URL,
    api_key=LLM_API_KEY
)

rag_tool = LocalRAGTool()

agent = Agent(
    role="ICS Security Teaching Assistant",
    goal="基于学习计划准确回答问题",
    backstory="你熟悉完整的工控安全学习计划,请基于文档回答。",
    tools=[rag_tool],
    llm=llm,
    verbose=True
)

task = Task(
    description="请回答:第二周的核心目标和关键任务是什么?",
    expected_output="第二周的目标与任务列表",
    agent=agent
)

crew = Crew(
    agents=[agent],
    tasks=[task],
    process=Process.sequential,
    verbose=True
)

# ==============================
# 6. 运行
# ==============================

result = crew.kickoff()
print("\n====== 最终回答 ======\n")
print(result)

此外,由于是使用的自定义ragtools,所以工具在对文本进行切片的时候是按照权重来拍顺序的,这会导致我们文件最后还原的时候是乱序的,所以我们又加了一个id序列号,让切片还原的时候按照原来的顺序进行排序还原,这样就不会乱序了

如何使用 CrewAI 构建协作型 AI Agents 语言模型在翻译、总结和推理方面表现出色。但它们的潜力远不止于此。让大语言模型 (LLM) 具备代理性是充分挖掘其推理潜力的一种方法。AI 智能体就是被赋予适当工具和指令的 LLM,能够自动完成网页浏览、网络抓取、执行 SQL 查询、文件操作等任务。利用 LLM 的推理能力,这些智能体能够根据当前需求选择合适的工具。而且,我们还可以将多个智能体组合起来,共同完成更复杂的任务。当我们谈论如何构建 AI Agents时,首先想到的工具就是 LangChain。 阅读详情

相关推荐

Multi-Agent架构-CrewAI详解

CrewAI作为一种先进的Multi-Agent协作框架,为构建高效协作的智能体团队提供了有力支持。通过其模块化的架构和丰富的组件库,开发者可以轻松地构建出具有高级协作能力的智能体系统,并在多个领域实现创新应用

llm_way的博客 2297

crewai的进一步工具扩展

呱呱呱呱呱呱呱呱呱呱呱呱

T_Fire_of_Square的博客 1206

AI Agents之CrewAI智能体开发框架

AI Agents 的开发是当前软件创新领域的热点。随着大语言模型 (LLM) 的不断进步,预计 AI 智能体与现有软件系统的融合将出现爆发式增长。借助 AI 智能体,我们可以通过一些简单的语音或手势命令,就能完成以往需要手动操作应用程序才能实现的任务。但目前, AI 智能体的开发还处于初期阶段,正如 1990 年代的互联网,我们还在基础设施、工具和框架开发的初步阶段探索前行。本文将介绍一个名为 CrewAI 的新型智能体开发框架。本文主要包含以下内容认识 AI 智能体。

Peter的博客 2597

大模型Agent之CrewAI框架开发指南

国外有关各种AI相关的开源项目,不论是企业级还是个人级别,每天都在爆发性增长。今天介绍的CrewAI是和LangChain一样的AI辅助调用库。希望国内开发者再接再厉~,这款的热门框架,让智能体之间的协作变得聪明起来,彻底改变了开发者处理复杂 AI 任务的思路。它可不是孤军奋战的单一智能体,而是一群能像团队一样合作的 AI 智能体。每个智能体都有自己擅长的领域,带着专门的工具,为了共同的目标而努力。

十一月廿七风雨大作 6755

使用 CrewAI 创建新项目流程概览

CrewAI 推荐使用 YAML 模板来定义智能体和任务。编辑和文件以配置您的 AI 团队行为。通过以上步骤,您可以使用 CrewAI 成功创建一个新项目,定义智能体和任务,并运行多智能体协作工作流。CrewAI 的 YAML 模板和模块化设计使其易于扩展和定制,适合从简单到复杂的企业级 AI 自动化场景。立即开始构建您的第一个 AI 团队吧!参考CrewAI 安装文档CrewAI 快速入门CrewAI 社区支持。

longma666666的博客 1451

Crewai框架添加日志功能

一开始看官方文档以为要用@callback这个注释在一个自定义函数上输出日志,结果弄半天都没有结果,最后发已经有现成的方法了(一开始搜log都没搜到这个方法)

Otto的学习笔记 578

用 crewai-xberg 为 CrewAI Agent 注入跨 107 种格式的文档智能

`crewai-xberg` 是 Xberg 官方提供的 CrewAI 集成包,它把 Xberg 基于 Rust 核心的文档抽取管线封装成三个 CrewAI `BaseTool`,让 Agent 可以直接从 PDF、DOCX、XLSX、HTML、图片(含 OCR)等 107 种文件格式中提取文本、元数据、关键词、命名实体和摘要。读完本篇,你将掌握三个工具的能力边界、全部抽取选项的底层映射、同步/异

gitblog_00553的博客 1029

CrewAI智能体开发:安装CrewAI

CrewAI安装、配置并构建您的第一个 AI 团队。

王国平的博客 1076

CrewAI+FastAPI的Pipelines功能实现多CrewAI工作流以及Flows功能实现复杂工作流

crewAI的Pipelines功能实现多CrewAI工作流。(1)将crewai由0.55.2升级为0.74.2,crewai-tools由0.12.0升级为0.13.2(截止2024.10.19),并解决因版本升级出现的问题(2)改写crew.py代码实现crewai的pipelines功能(3)将pipelines功能集成到main服务中对外提供API接口服务,进行接口联调测试CrewAI中的pipeline代表一种结构化的工作流程,允许多个crew顺序或并行执行。

zouyang920的博客 476

实战LangChain(七):集成CrewAI——实现多代理协作

通过本篇文章的学习,我们成功地将CrewAI集成到LangChain项目中,实现了多代理协作的功能。这种多代理协作模式可以显著提升复杂任务的处理效率和质量。

mtl1994的博客 1730

CrewAI智能体开发:CrewAI 运行自动化工具

使 CrewAI 代理能够在您的工作流中调用 CrewAI 平台自动化并利用外部团队服务。

王国平的博客 502

CrewAI 如何启用内置 Tracing 并在 CrewAI AMP 平台查看执行轨迹

当你在本地跑完一个 Crew 或 Flow 后,执行过程基本只留在终端日志里:agent 为什么这样决策、哪个任务调了哪个工具、LLM 的输入输出是什么,都很难事后核对。CrewAI 内置了 tracing 能力,可以把这些执行细节(agent 决策、任务时间线、工具调用、LLM 交互)上报到 CrewAI AMP 平台的 Web 界面,供你查看和调试。本文按“登录 → 启用 → 在平台查看”的顺

gitblog_00952的博客 448

与rkipc通信

函数名称功能系统模块初始化系统模块反初始化重启恢复出厂设置导出日志导出配置文件导入配置文件系统升级获取用户数设置用户数获取用户权限设置用户权限获取用户名设置用户名获取密码(已加密)设置密码(已加密)新增用户删除用户。

qq_44643189的博客 1612

CrewAI 使用指导文档

CrewAI 是一个轻量、高性能的框架,专注于多 AI 代理协作,能够通过角色扮演和任务分配实现复杂任务的自动化。它支持灵活的定制、外部工具集成以及多种大型语言模型(LLM)的使用,适用于从简单任务到企业级复杂场景的自动化需求。编辑文件,定义两个代理:研究员和报告撰写者。writer:编辑文件,定义两个任务:研究和报告撰写。CrewAI 提供了一个强大而灵活的框架,用于构建协作 AI 代理团队。通过角色驱动的设计、任务管理和外部工具集成,用户可以轻松实现复杂任务的自动化。

longma666666的博客 2212

变压器励磁电感、励磁电流、漏感、漏感折算

励磁、漏感知识整理

HW-BASE的博客 1万+

Matlab/simulink频率响应分析方法

Matlab/Simulink仿真系列问题一.电气模块与信号模块 一.电气模块与信号模块

virtuoso~晓晓 3万+

自动化您的任务——crewAI 初学者教程

在玩过crewAI之后,我只想让一切自动化。 您可能认为创建可以协同工作来完成任务的人工智能代理是一项复杂的工作。 新闻快讯:crewAI 让一切变得超级简单。今天,我写这篇文章是为了分享您开始使用一个非常流行的多智能体框架所需了解的所有信息:crewAI。 我将在这里或那里跳过一些内容,使本教程成为一个精炼的教程,概述帮助您入门的关键概念和要点

klam2020的博客 5848

使用 VPN 访问太理内部网相关问题总结【太原理工大学】

电脑连接 VPN,访问校园内部网相关问题总结,太原理工大学。

m0_52861684的博客 9881

使用 crewAI 的 OxylabsUniversalScraperTool 实现任意网站通用抓取

`OxylabsUniversalScraperTool` 是 crewAI Tools 生态中面向**任意网站通用抓取**(Universal Scraper)场景的官方工具,它把 Oxylabs 实时爬取客户端的能力封装为 CrewAI Agent 可直接调用的工具,支持 JavaScript 渲染、自定义请求头与 Cookie、回调通知与结构化解析等高级能力。读完本文,你将掌握该工具的安装方

gitblog_00056的博客 295

使用petalinux做嵌入式设计开发(1)

1.创建vivado工程,建立硬件环境,最终导出hdf文件 既可以在windows系统下的vivado上编写硬件工程并导出hdf文件,也可以在linux系统下的vivado中编写硬件工程并导出hdf文件。(对于windows系统下导出的hdf文件还需要传递到linux系统下的文件夹中。) 2.以hdf硬件文件为基础创建,配置,编译,打包petalinux工程,导出linux系统所需镜像文件。 具体步骤: (0)设置环境变量 设置环境变量使得我们可以直接使用petalin...

plotup的博客 2076

9、自动定理证明的发展历程与关键技术

本文全面介绍了自动定理证明的发展历程、关键技术及其实际应用,包括消解原理、参数化、支撑集策略等核心方法,并探讨了算法优化、数据结构优化及并行计算等提升效率的手段。同时,文章展望了未来发展方向,如深度学习在定理证明中的应用、交互式定理证明以及高阶逻辑的研究前景。

ll5678的博客 506

如何用CrewAI一步搭好开发环境:快速安装指南

读完这篇,你能完成环境检查、装好 uv 与 CrewAI CLI、一条命令生成 CrewAI 项目骨架,并用 3 步跑通首次运行,全程约 10 分钟。 [![CrewAI安装配置:框架核心概念思维导图](https://raw.gitcode.com/GitHub_Trending/cr/crewAI/raw/193a166e61647a1d0061884f27fc01f4829f4471/do

gitblog_00564的博客 972

Nvidia Driveos SDK/PDK介绍

NVIDIA DRIVEOS SDK/PDK介绍

u011803281的博客 2176

将 CrewAI 与 Elasticsearch 结合使用

学习如何使用 CrewAI 为你的代理团队创建一个 Elasticsearch 代理,并执行市场调研任务。是一个用于编排代理的框架,它通过角色扮演的方式让多个代理协同完成复杂任务。如果你想了解更多关于代理及其工作原理的内容,建议你阅读。CrewAI 声称比类似的框架(如 LangGraph),因为它不需要像 Autogen 那样大量的样板代码或额外的代理编排代码。此外,CrewAI 与兼容,带来了更多可能性。

Elastic 中国社区官方博客 1891

手把手教你搭建工业级C#上位机:完整架构+通信+配置+日志,新手也能落地(附全套源码)

模型层是“数据容器”,统一数据格式,避免参数传递混乱。本文搭建的C#上位机,采用“分层+模块化”架构,解耦了UI、通信、配置、日志四大核心功能,不仅满足工业场景的基础需求,还为后续扩展打下基础。新手跟着步骤走,既能掌握上位机的核心开发技能,又能理解工业级项目的架构设计思路。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1155

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

CrewAI WeaviateVectorSearchTool 深度指南:在 Weaviate 向量库上实现 Agent 语义检索

`WeaviateVectorSearchTool` 是 crewAI 生态中面向 [Weaviate](https://weaviate.io) 向量数据库的官方检索工具,专为"在已入库的内部文档中做语义搜索"而设计。它既可作为 Agent 的工具,让智能体在推理过程中自主发起向量检索(RAG),也可配合批量数据加载实现知识库问答。阅读本文后,你将掌握该工具的安装方式、全部构造参数与默认行为、两

gitblog_00730的博客 934

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: crewai的进一步工具扩展
下一篇: crewai构建知识库的方式
T_Fire_of_Square
博客等级 码龄3年 110粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值