创建Workforce
创建你的Workforce
3.3.1 简单实践
1. 创建 Workforce 实例
想要使用 Workforce,首先需要创建一个 Workforce 实例。下面是最简单的示例:
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType
from camel.messages import BaseMessage
from camel.societies.workforce import Workforce
from camel.toolkits import SearchToolkit
from camel.tasks import Task
from camel.toolkits import FunctionToolimport osmodel = ModelFactory.create(model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,model_type="你的模型",)# 创建一个 Workforce 实例
workforce = Workforce(description="旅游攻略制作与评估工作组",new_worker_agent_kwargs={'model':model},coordinator_agent_kwargs={'model':model},task_agent_kwargs={'model':model})
这段代码会生成一个名为 一个简单的Workforce
的实例,不过目前它还不包含任何工作节点。
提示:如何自定义 Workforce
如果你只想快速上手,给 Workforce 传入一个描述就足够了;如果你需要更复杂的定制,则可以在初始化时配置工作节点列表、协调器Agent(Coordinator Agent)或任务规划Agent(Task Planner Agent)等高级参数。
2. 定义worker
接下来,我们需要给Workforce定义一些worker。我们希望在这个Workforce里有一个专业的旅游信息搜索助手、一个专业的旅行规划师、一个经验丰富的旅行爱好者。他们分别负责制定计划和评价计划,例如:
search_tool = FunctionTool(SearchToolkit().search_duckduckgo)search_agent = ChatAgent(system_message="""你是一个专业的旅游信息搜索助手。你的职责是:1. 搜索目的地的主要景点信息2. 搜索当地特色美食信息3. 搜索交通和住宿相关信息请确保信息的准确性和实用性。""",model=model,tools=[search_tool],output_language='中文')planner_agent = ChatAgent(system_message="""你是一个专业的旅行规划师。你的职责是:1. 根据景点分布规划合理的游览顺序2. 为每天安排适量的景点和活动3. 考虑用餐、休息等时间4. 注意不同季节的特点请确保行程安排合理且具有可行性。""",model=model,output_language='中文')reviewer_agent = ChatAgent(system_message="""你是一个经验丰富的旅行爱好者。你的职责是:1. 从游客角度评估行程的合理性2. 指出可能的问题和改进建议3. 补充实用的旅行小贴士4. 评估行程的性价比请基于实际旅行经验给出中肯的建议。""",model=model,output_language='中文'
)
当然,你也可以按自己的喜好来定义你的Workforce。
3. 添加工作节点
定义好 Workforce 和worker后,你可以往里面添加工作节点(Worker Nodes)。以一个命名为 search_agent
的示例Agent(Agent)为例,代码如下:
# 添加一个执行网页搜索的Agent
workforce.add_single_agent_worker("一个能够执行网页搜索的Agent", worker=search_agent,
)
如果需要一次性添加多个工作节点,可以使用方法链(Fluent Interface)来操作:
# 添加工作节点
workforce.add_single_agent_worker("负责搜索目的地相关信息",worker=search_agent
).add_single_agent_worker("负责制定详细行程规划",worker=planner_agent
).add_single_agent_worker("负责从游客角度评估行程",worker=reviewer_agent
)
提示:描述很重要
虽然看似只是一个字符串,但工作节点的描述在任务分配中至关重要。协调器Agent会根据节点描述来分配具体的子任务,因此你最好为每个节点写一个精准且易读的描述。
4. 启动 Workforce 并处理任务
准备好工作节点后,就可以创建一个任务,并让 Workforce 来处理。下面是一个简单的任务示例:
from camel.tasks import Task# 创建一个用于测试的任务
task = Task(content="规划一个3天的巴黎旅行计划。",id="0", # id可以是任何标记字符串
)
接着,调用 process_task()
方法即可启动 Workforce 的任务处理流程:
# 使用jupyter来运行代码请打开下面两行注释
# import nest_asyncio
# nest_asyncio.apply()# 让 Workforce 处理这个任务
task = workforce.process_task(task)
此时,Workforce 会根据各工作节点的描述,为它们分配合适的子任务,最终返回处理结果。你可以通过以下方式查看任务处理的最终产出:
print(task.result)
通过以上三个步骤——创建 Workforce、添加工作节点、启动并处理任务,你已经完成了一个最基本的 CAMEL Workforce 使用示例。
3.3.2 利用Workforce组建hackathon评审团
在本小节中,我们将通过一个示例,展示如何使用 CAMEL Workforce 协调多个智能体对黑客松项目进行多角度评审。通过为每个智能体赋予不同的角色与个性,我们可以模拟真实评审场景中“智囊团”之间的讨论和打分过程。
我们的创建过程主要分为以下几个阶段:
-
创建不同个性的评审智能体(Judge Agents)每个智能体都拥有独立的“人设”和评价标准,能够从不同角度出发对项目进行打分和反馈。
-
组建 Workforce将这些个性化评审智能体(以及一个辅助搜索的研究者智能体)加入到一个 Workforce 中,方便统一管理和任务分配。
-
创建 Task将具体的项目描述和需要完成的目标封装到一个 Task 对象中,让 Workforce 来调度。
-
处理 Task通过调用
Workforce.process_task()
来让评审团协同完成项目评价,并最终生成结果。
下面,我们会一步步地拆解各核心代码模块,帮助你掌握多智能体协作的基本实现流程。
1. 创建评审智能体
import textwrapfrom camel.agents import ChatAgent
from camel.messages import BaseMessage
from camel.models import ModelFactory
from camel.tasks import Task
from camel.toolkits import FunctionTool, SearchToolkit
from camel.types import ModelPlatformType, ModelType
from camel.societies.workforce import Workforceimport os
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv('QWEN_MAX_API_KEY')model = ModelFactory.create(model_platform=ModelPlatformType.QWEN,model_type=ModelType.QWEN_MAX,model_config_dict={"temperature": 0},api_key=api_key
)def make_judge(persona: str,example_feedback: str,criteria: str,
) -> ChatAgent:msg_content = textwrap.dedent(f"""\你是一个黑客马拉松的评委。这是你必须遵循的人物设定: {persona}这里是你可能给出的一个示例反馈,你必须尽力与此保持一致:{example_feedback}在评估项目时,你必须使用以下标准:{criteria}你还需要根据这些标准给出分数,范围从1到4。给出的分数应类似于3/4、2/4等。""" # noqa: E501)sys_msg = BaseMessage.make_assistant_message(role_name="黑客马拉松评委",content=msg_content,)agent = ChatAgent(system_message=sys_msg,model=model,)return agent
-
多人格设定:我们通过
persona
字符串刻画智能体的性格、使用的措辞和关注点,比如 “投资人” 注重商业潜力,“工程师” 注重技术稳健性等。 -
示例反馈:
example_feedback
中的示例给智能体一个参考,指导它的表达风格,以确保它在对项目进行评论时能符合角色定位。 -
评审标准:
criteria
为智能体提供了打分的准则,如从 1-4 分衡量项目的商业可行性、技术实现、创新程度等。
通过这个函数,我们可以快速生成多个“个性化的评审智能体”。然后我们可以定义一个虚拟的Hackathon项目描述,稍后我们会将它发给评委来打分:
proj_content = textwrap.dedent("""\项目名称: 基于CAMEL的自适应学习助手你的项目如何解决一个真实的问题: 我们的基于CAMEL的自适应学习助手解决了在日益多样化和快速变化的学习环境中个性化教育的挑战。传统的一刀切教育方法往往无法满足个别学习者的独特需求,导致理解上的差距和参与度降低。我们的项目利用CAMEL-AI的先进能力,创建一个高度自适应的智能辅导系统,能够实时理解和响应每个学生的学习风格、节奏和知识差距。解释你的技术以及哪些部分有效: 我们的系统利用CAMEL-AI的上下文学习和多领域应用特性,创建一个多功能的学习助手。核心组件包括:1. 学习者档案分析: 使用自然语言处理评估学生的当前知识、学习偏好和目标。2. 动态内容生成: 利用CAMEL-AI创建个性化的学习材料、解释和练习题,针对每个学生的需求量身定制。3. 自适应反馈循环: 持续分析学生的反应,并实时调整内容的难度和风格。4. 多模态集成: 融合文本、图像和互动元素,以满足不同的学习风格。5. 进度跟踪: 提供学生学习旅程的详细见解,识别优势和改进领域。目前,我们已成功实现学习者档案分析和动态内容生成模块。自适应反馈循环部分功能正常,而多模态集成和进度跟踪功能仍在开发中。""" # noqa: E501
)
2. 创建辅助智能体
然后,我们将创建 5 个独特的agent,它们稍后将一起协作。在这 5 个agent中,其中四个是评委,我们还创建了一个“助手”智能体(在示例中称为 Researcher
),用于在线搜索相关资料并为评审提供更多信息参考。
另一方面,其他四名agent是具有不同角色设定和标准的评委。他们将根据描述以及帮助者收集的信息为项目打分。
# 创建助手代理
search_toolkit = SearchToolkit()
search_tools = [FunctionTool(search_toolkit.search_baidu),
]researcher_agent = ChatAgent(system_message=BaseMessage.make_assistant_message(role_name="研究员",content="你是一名研究人工智能和开源项目的研究员。""你使用网络搜索来保持对最新创新和趋势的了解。",),model=model,tools=search_tools,
)# 创建风险投资家评委
vc_persona = ('你是一位对项目如何扩展为“独角兽”公司的风险投资家。''你在讲话中夹杂着“颠覆性”、“协同效应”和“市场渗透”等流行词。''你不关心技术细节或创新,除非它直接影响商业模式。'
)vc_example_feedback = ('"哇,这个项目在区块链驱动的市场中绝对是颠覆性的!''我可以肯定地看到在金融科技生态系统中的协同应用。''可扩展性极高——这是革命性的!'
)vc_criteria = textwrap.dedent("""\### **对现实世界使用的适用性 (1-4 分)**- **4**: 项目直接解决了一个重要的现实世界问题,并具有明确的可扩展应用。- **3**: 解决方案与现实世界挑战相关,但需要更多的完善以便于实际或广泛使用。- **2**: 对现实世界问题有一定的适用性,但解决方案并不立即实用或可扩展。- **1**: 与现实世界问题几乎没有相关性,需要进行重大更改才能实际使用。""" # noqa: E501
)vc_agent = make_judge(vc_persona,vc_example_feedback,vc_criteria,
)# 创建资深工程师评委
eng_persona = ('你是一位经验丰富的工程师和完美主义者。你非常注重细节,''对任何技术缺陷都持批评态度,无论多么微小。''你评估每个项目时,仿佛它明天就要投入关键系统使用,''因此你的反馈非常全面,但往往也很苛刻。'
)eng_example_feedback = ('这个项目存在严重的代码效率问题。架构不稳定,内存管理不理想。''我期望接近完美的性能,但这个解决方案在压力测试下几乎无法运行。''它有潜力,但距离部署准备还很远。'
)eng_criteria = textwrap.dedent("""\### **技术实施 (1-4 分)**- **4**: 技术执行无可挑剔,设计复杂,性能高效,架构稳健。- **3**: 技术实施强劲,但可能有改进或进一步发展的空间。- **2**: 项目可以运行,但技术限制或效率低下影响了整体性能。- **1**: 技术实施差,功能、编码或结构存在重大问题。""" # noqa: E501
)eng_agent = make_judge(eng_persona,eng_example_feedback,eng_criteria,
)# 创建人工智能创始人评委
founder_persona = ('你是一位知名的人工智能初创公司创始人,''总是在寻找人工智能领域的“下一个大事件”。''你重视大胆、富有创意的想法,优先考虑那些突破新领域的项目,''而不是那些改进现有系统的项目。'
)founder_example_feedback = ('这很有趣,但我之前见过类似的方法。''我在寻找一些突破界限、挑战规范的东西。''这个项目最具革命性的部分是什么?让我们看看互联网上的趋势,''以确保这不是已经存在的东西!'
)founder_criteria = textwrap.dedent("""\### **创新 (1-4 分)**- **4**: 项目展示了一个突破性的概念或独特的方法,显著偏离现有方法。- **3**: 项目展示了对已知解决方案的新颖扭曲或引入了一些创新方面。- **2**: 存在一定程度的创新,但项目主要建立在现有想法上,没有重大新贡献。- **1**: 几乎没有创新;项目基于标准方法,创造力极少。""" # noqa: E501
)founder_agent = make_judge(founder_persona,founder_example_feedback,founder_criteria,
)# 创建CAMEL贡献者评委
contributor_persona = ('你是CAMEL-AI项目的贡献者,总是对人们如何使用它感到兴奋。''你友善且乐观,总是提供积极的反馈,即使对于仍然粗糙的项目。'
)contributor_example_feedback = ('哦,我喜欢你在这里实现CAMEL-AI的方式!''利用其自适应学习能力真是太棒了,你真的很好地利用了上下文推理!''让我查看一下GitHub README,看看是否还有更多潜在的优化。'
)contributor_criteria = textwrap.dedent("""\### **CAMEL-AI的使用 (1-4 分)**- **4**: 出色地集成了CAMEL-AI,充分利用其先进功能,如上下文学习、自适应性或多领域应用。- **3**: 良好地使用了CAMEL-AI,但还有机会利用更多的高级功能。- **2**: 对CAMEL-AI的使用有限,主要依赖基本功能,而没有充分利用其全部潜力。- **1**: CAMEL-AI的集成很少或实施不当,给项目带来的价值很小。""" # noqa: E501
)contributor_agent = make_judge(contributor_persona,contributor_example_feedback,contributor_criteria,
)
-
工具集(Toolkit):这里示例给智能体添加了搜索能力,让它可以使用 Google 或 DuckDuckGo 等搜索引擎来获取最新资料。
-
系统消息:通过“研究者”这一系统消息,将智能体定位为对 AI 和开源技术进行调研的角色。
这样一来,我们就拥有了一个既能执行网络搜索,也能将搜索到的信息反馈给评审智能体的辅助角色。
3. 组建 Workforce
workforce = Workforce('黑客马拉松评审团',coordinator_agent_kwargs={"model": model},task_agent_kwargs={"model": model},new_worker_agent_kwargs={"model": model},
)workforce.add_single_agent_worker('愿景先锋维罗妮卡(评委),一位风险投资家...',worker=vc_agent,
).add_single_agent_worker('批判性约翰(评委),一位经验丰富的工程师...',worker=eng_agent,
).add_single_agent_worker('创新者艾瑞斯(评委),一位知名的AI初创公司创始人...',worker=founder_agent,
).add_single_agent_worker('友好的弗兰基(评委),CAMEL-AI项目的贡献者...',worker=contributor_agent,
).add_single_agent_worker('研究员瑞秋(助手),一位进行在线搜索的研究员...',worker=researcher_agent,
)
-
Workforce 实例:通过给
Workforce
传入一个描述(如“Hackathon Judges”)与一系列可选参数,我们就能快速搭建一个多智能体“工作台”。 -
添加智能体:使用
add_single_agent_worker()
方法,将评审和研究者智能体逐个添加到同一个 Workforce 中。这里的字符串描述(如 “Visionary Veronica (Judge) …”)非常重要,因为它会帮助内部的协调智能体区分并调配不同角色。
在这一步,我们将所有智能体统一到一个“协作环境”中,让它们可以一起完成后续的任务。
4. 创建并分配任务(Task)
task = Task(content="评估黑客马拉松项目。首先,进行一些与项目相关的信息研究,然后每位评委应相应地给出分数。最后,列出每位评委的意见,同时保留评委的独特身份,以及分数和评委姓名,并给出意见的最终总结。",additional_info=proj_content,id="0",
)
-
Task 内容:要交给 Workforce 处理的具体工作需求,例如“请评审这个项目,给出评分和总结意见”。
-
附加信息:
additional_info
可以储存项目背景描述等重要材料,Workforce 会在任务的拆解和传递过程中为各智能体保持这部分信息不变。 -
唯一标识:
id
用于标记任务编号,方便后续跟踪任务结果。
5. 处理任务并获取结果
最后,通过下面这行指令,Workforce 就会把任务分发给各个智能体进行协作,完成后可从 task.result
中获取最终的整合结果。
# jupyter环境需要添加上下面两行
# import nest_asyncio
# nest_asyncio.apply()task = workforce.process_task(task)
print(task.result)
通过以上步骤,我们成功地搭建了一个“黑客松评审团”多智能体系统:
-
多个性格鲜明的评审——投资人、工程师、AI 创业者、开源社区贡献者;
-
辅助性搜索者——为评审提供最新的项目信息;
- Workforce 协同——统一调度、分配任务,并整合多方意见得到最终结果。
至此,你已经掌握了 CAMEL Workforce 的核心使用模式。
相关文章:
创建Workforce
创建你的Workforce 3.3.1 简单实践 1. 创建 Workforce 实例 想要使用 Workforce,首先需要创建一个 Workforce 实例。下面是最简单的示例: from camel.agents import ChatAgent from camel.models import ModelFactory from camel.types import Model…...
Cribl 中 Parser 扮演着重要的角色 + 例子
先看文档: Parser | Cribl Docs Parser The Parser Function can be used to extract fields out of events or reserialize (rewrite) events with a subset of fields. Reserialization will preserve the format of the events. For example, if an event contains comma…...

WebSocket 从入门到进阶实战
好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受. 聊天系统是WebSocket的最佳实践,以下是使用WebSocket技术实现的一个聊天系统的关键代码,可以通过这些关键代码ÿ…...

CSS:vertical-align用法以及布局小案例(较难)
文章目录 一、vertical-align说明二、布局案例 一、vertical-align说明 上面的文字介绍,估计大家也看不懂 二、布局案例...
Linux 正则表达式 扩展正则表达式 gawk
什么是正则表达式 正则表达式是我们所定义的模式模板(pattern template),Linux工具用它来过滤文本。Linux工具(比如sed编辑器或gawk程序)能够在处理数据时,使用正则表达式对数据进行模式匹配。如果数据匹配…...

Java转Go日记(五十四):gin路由
1. 基本路由 gin 框架中采用的路由库是基于httprouter做的 地址为:https://github.com/julienschmidt/httprouter package mainimport ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/", func(c …...

【解决】自己的域名任何端口都访问不到,公网地址正常访问,服务器报错500。
一、问题描述 后端项目部署在服务器上,通过域名访问接口服务器报错500,通过浏览器访问域名的任何端口都是无法访问此网站。 但是通过公网地址访问是可以正常访问到的,感觉是域名出现了问题 二、解决过程 先说结论:问题原因是…...
探秘鸿蒙 HarmonyOS NEXT:Navigation 组件的全面解析
鸿蒙 ArkTS 语言中 Navigation 组件的全面解析 一、引言 本文章基于HarmonyOS NEXT操作系统,API12以上的版本。 在鸿蒙应用开发中,ArkTS 作为一种简洁、高效的开发语言,为开发者提供了丰富的组件库。其中,Navigation 组件在构建…...
订单导入(常见问题和sql)
1.印章取行,有几行取几行 union select PARAM07 name, case when regexp_count(PO_PARAM_20, chr(10)) > 0 then substr(PO_PARAM_20, 0, instr(PO_PARAM_20, chr(10)) - 1) else PO_PARAM_20 end value,PO_ID …...
PyTorch中diag_embed和transpose函数使用详解
torch.diag_embed 是 PyTorch 中用于将一个向量(或批量向量)**嵌入为对角矩阵(或批量对角矩阵)**的函数。它常用于图神经网络(GNN)或线性代数中生成对角矩阵。 函数原型 torch.diag_embed(input, offset0,…...
算法分析与设计实验:找零钱问题的贪心算法与动态规划解决方案
在计算机科学中,贪心算法和动态规划是两种常用的算法设计策略。本文将通过一个经典的找零钱问题,详细讲解这两种算法的实现和应用。我们将会提供完整的C代码,并对代码进行详细解释,帮助读者更好地理解和掌握这两种算法。 问题描述…...

制作 MacOS系统 の Heic动态壁纸
了解动态桌面壁纸 当macOS 10.14发布后,会发现系统带有动态桌面壁纸,设置后,我们的桌面背景将随着一天从早上、到下午、再到晚上的推移而发生微妙的变化。 虽然有些软件也有类似的动态变化效果,但是在新系统中默认的HEIC格式的动…...

大数据 笔记
kafka kafka作为消息队列为什么发送和消费消息这么快? 消息分区:不受单台服务器的限制,可以不受限的处理更多的数据顺序读写:磁盘顺序读写,提升读写效率页缓存:把磁盘中的数据缓存到内存中,把…...
js中encodeURIComponent函数使用场景
encodeURIComponent 是 JavaScript 中的一个内置函数,它的作用是: 将字符串编码为可以安全放入 URL 的形式。 ✅ 为什么需要它? URL 中有一些字符是有特殊意义的,比如: ? 用来开始查询参数 & 分隔多个参数 连接…...
iOS工厂模式
iOS工厂模式 文章目录 iOS工厂模式简单工厂模式(Simple Factory)工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)三种模式对比 简单工厂模式(Simple Factory) 定义&am…...

【数据库】-1 mysql 的安装
文章目录 1、mysql数据库1.1 mysql数据库的简要介绍 2、mysql数据库的安装2.1 centos安装2.2 ubuntu安装 1、mysql数据库 1.1 mysql数据库的简要介绍 MySQL是一种开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前…...
【缓存】JAVA本地缓存推荐Caffeine和Guava
🌟 引言 在软件开发过程中,缓存是提升系统性能的常用手段。对于基础场景,直接使用 Java集合框架(如Map/Set/List)即可满足需求。然而,当面对更复杂的缓存场景时: 需要支持多种过期策略&#x…...
Prometheus的服务命令和配置文件
一、Prometheus的服务端命令和启动方式 1.服务端命令(具体详情可以--help查看) --config.file“prometheus.yml”指定配置文件,默认是当前目录下的prometheus.yml--web.listen-address"0.0.0.0:9090"web页面的地址与端口…...

物流项目第五期(运费计算实现、责任链设计模式运用)
前四期: 物流项目第一期(登录业务)-CSDN博客 物流项目第二期(用户端登录与双token三验证)-CSDN博客 物流项目第三期(统一网关、工厂模式运用)-CSDN博客 物流项目第四期(运费模板列…...
前端JavaScript-嵌套事件
点击 如果在多层嵌套中,对每层都设置事件监视器,试试看 <!DOCTYPE html> <html lang"cn"> <body><div id"container"><button>点我!</button></div><pre id"output…...

X 下载器 2.1.42 | 国外媒体下载工具 网页视频嗅探下载
X 下载器让你能够轻松地从社交应用如Facebook、Instagram、TikTok等下载视频和图片。通过内置浏览器访问网站,它能自动检测视频和图片,只需点击下载按钮即可完成下载。去除广告,解锁本地会员,享受无广告打扰的下载体验。 大小&am…...

STM32 CAN CANAerospace
STM32的CAN模块对接CANAerospace 刚开始报错如下. 设备开机后整个CAN消息就不发了. USB_CAN调试器报错如下. index time Name ID Type Format Len Data00000001 000.000.000 Event 总线错误 DATA STANDARD 8 接收过程错误-格…...

完整改进RIME算法,基于修正多项式微分学习算子Rime-ice增长优化器,完整MATLAB代码获取
1 简介 为了有效地利用雾状冰生长的物理现象,最近开发了一种优化算法——雾状优化算法(RIME)。它模拟硬雾状和软雾状过程,构建硬雾状穿刺和软雾状搜索机制。在本研究中,引入了一种增强版本,称为修改的RIME…...

服务器安装xfce桌面环境并通过浏览器操控
最近需要运行某个浏览器的脚本,但是服务器没有桌面环境,无法使用,遂找到了KasmVNC,并配合xfce实现低占用的桌面环境,可以直接使用浏览器进行操作 本文基于雨云——新一代云服务提供商的Debian11服务器操作,…...
Java设计模式之组合模式:从入门到精通(保姆级教程)
文章目录 1. 组合模式概述1.1 专业定义1.2 通俗解释1.3 模式结构2. 组合模式详细解析2.1 模式优缺点2.2 适用场景3. 组合模式实现详解3.1 基础实现3.2 代码解析4. 组合模式进阶应用4.1 透明式 vs 安全式组合模式4.2 组合模式与递归4.3 组合模式与迭代器5. 组合模式在实际开发中…...

Oracle 创建外部表
找别人要一下数据,但是他发来一个 xxx.csv 文件,怎么办? 1、使用视图化工具导入 使用导入工具导入,如 DBeaver,右击要导入的表,选择导入数据。 选择对应的 csv 文件,下一步就行了(如…...

大语言模型 17 - MCP Model Context Protocol 介绍对比分析 基本环境配置
MCP 基本介绍 官方地址: https://modelcontextprotocol.io/introduction “MCP 是一种开放协议,旨在标准化应用程序向大型语言模型(LLM)提供上下文的方式。可以把 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 提供了一种…...

【软考向】Chapter 9 数据库技术基础
基本概念数据库的三级模式结构 数据模型E-R 模型关系模型各种键完整性约束 关系代数5 种基本的关系代数运算:并、差、笛卡儿积、投影和选择扩展的关系代数运算:交(Intersection)、连接(Join)、除(Division)、广义投影(Generalized Projection)、外连接(O…...

实战:Dify智能体+Java=自动化运营工具!
我们在运营某个圈子的时候,可能每天都要将这个圈子的“热门新闻”发送到朋友圈或聊天群里,但依靠传统的实现手段非常耗时耗力,我们通常要先收集热门新闻,再组装要新闻内容,再根据内容设计海报等。 那怎么才能简化并高…...

STM32单片机GUI系统1 GUI基本内容
目录 一、GUI简介 1、emWin 2、LVGL (Light and Versatile Graphics Library) 3、TouchGFX 4、Qt for Embedded 5、特性对比总结 二、LVGL移植要求 三、优化LVGL运行效果方法 四、LVGL系统文件 一、GUI简介 在嵌入式系统中,emWin、LVGL、TouchGFX 和 Qt 是…...