智能体的资源构建、开发、运用基础
-
智能体与 LLM 应用的低代码平台市场呈现出百花齐放的态势,每个平台都有其独特的定位和优势。选择哪个平台,往往取决于你的核心需求、技术背景以及项目的最终目标。在本章的后续内容中,我们将重点介绍并实操三个各具代表性的平台:Dify、n8n 和 Coze。在此之前,我们先对它们进行一个概要性的介绍。
- Dify 是一个开源的、功能全面的 LLM 应用开发与运营平台,旨在为开发者提供从原型构建到生产部署的一站式解决方案。它融合了后端服务和模型运营的理念,支持 Agent 工作流、RAG Pipeline、数据标注与微调等多种能力。对于追求专业、稳定、可扩展的企业级应用而言,Dify 提供了坚实的基础。
- n8n 本质上是一个开源工作流自动化工具,而非纯粹的 LLM 平台。近年来,它积极集成了 AI 能力。n8n 的强项在于“连接”。它拥有数百个预置的节点,可以轻松地将各类 SaaS 服务、数据库、API 连接成复杂的自动化业务流程。你可以在这个流程中嵌入 LLM 节点,使其成为整个自动化链路中的一环。其通用自动化能力是独一无二的。不过,其学习曲线也相对陡峭。
- 由字节跳动推出的 Coze,主打零代码/低代码的 Agent 的构建体验,让不具备编程背景的用户也能轻松创造。Coze 拥有极其友好的可视化界面,用户可以像搭建乐高积木一样,通过拖拽插件、配置知识库和设定工作流来创建智能体。其内置了极为丰富的插件库,并支持一键发布到抖音、飞书、微信公众号等多个主流平台,极大地简化了分发流程。
-
智能体与 LLM 应用的低代码平台呈现多元化发展,不同平台各具特色,选择需结合核心需求、技术背景和项目目标:
-
平台 定位与核心优势 适用场景 特点 Coze 字节跳动推出,主打零代码 / 低代码 Agent 构建 快速原型验证、非技术用户 可视化界面,拖拽式操作,丰富插件库,支持一键发布到抖音、飞书等多平台 Dify 开源的 LLM 应用开发与运营平台 企业级应用、复杂业务逻辑 支持 Agent 工作流、RAG Pipeline、数据标注与微调,提供从原型到生产的一站式解决方案 n8n 开源工作流自动化工具,集成 AI 能力 深度业务集成、自动化流程 数百个预置节点,擅长连接各类 SaaS 服务与 API,学习曲线较陡峭
-
-
快速原型验证、非技术用户: 优先选择 Coze;企业级应用、复杂业务逻辑: 优先选择 Dify;深度业务集成、自动化流程: 优先选择 n8n。低代码平台并非要取代代码开发,而是提供了一种互补的选择。在实际项目中,我们完全可以根据不同阶段的需求灵活切换:用低代码平台快速验证想法,用代码实现精细化控制;用平台处理标准化流程,用代码处理特殊逻辑。这种"混合开发"的思维,才是智能体工程化的最佳实践。
-
一个框架的本质,是提供一套经过验证的“规范”。它将所有智能体共有的、重复性的工作(如主循环、状态管理、工具调用、日志记录等)进行抽象和封装,让我们在构建新的智能体时,能够专注于其独特的业务逻辑,而非通用的底层实现。
-
低代码平台是代码开发的互补选择,实际项目中可采用 “混合开发” 模式 —— 用低代码快速验证想法,用代码实现精细化控制;用平台处理标准化流程,用代码处理特殊逻辑。智能体开发平台的资源是支撑 AI 应用的 “数字基础设施”,包含五大核心类别,共同构成 “感知 - 决策 - 执行 - 反馈” 的闭环系统:
-
资源类型 定义 核心功能 价值定位 关键指标 知识库 (RAG) 专业领域知识的结构化存储 提供权威信息源,减少模型 “幻觉” 智能体的 “数字大脑”,决定知识深度 内容新鲜度、覆盖率、准确性 工具接口 / 插件 连接外部系统的 API 通道 扩展能力边界,实现数据获取与操作 智能体的 “感知器官” 和 “执行手臂” 调用成功率、响应延迟、错误率 提示词 (Prompt) 引导模型行为的指令模板 定义角色、规范输出、控制流程 智能体的 “行为准则”,决定输出质量 清晰度、完整性、引导效果 工作流 (Workflow) 任务执行的逻辑编排 定义步骤、控制条件、协调多组件 智能体的 “行动蓝图”,决定处理效率 节点效率、分支合理性、异常处理 记忆系统 存储交互历史与状态 保持上下文连贯性,支持个性化服务 智能体的 “记忆能力”,实现持续交互 上下文相关性、存储效率
-
-
在 Coze 平台中,插件、知识库、数据库、提示词库、音色等都属于资源的范畴。插件是一个工具集合,一个插件内可以包含一个或多个工具(API)。Coze 提供了简单易用的知识库功能,支持智能体与用户自己的数据进行交互。用户可以在知识库中存储和管理数据,无论是处理 PDF 中的数十万字还是网站中的实时信息,只需创建一个知识库,机器人就可以访问相关知识。
-
一个完整的插件包含以下几个部分:
- 元数据:作用是让大语言模型理解每个工具输入或输出参数的含义。因此,在工具的元数据内提供详细的参数说明,可以让大语言模型更准确地使用工具。
- 工具实现:包含具体的 API 调用逻辑和数据处理代码。开发者可以使用 JavaScript 或 Python 等语言编写工具的实现代码。
- 测试配置:用于验证工具的功能是否正常工作。开发者可以设置测试输入参数,并查看工具的输出结果。
-
大模型由于其工作原理,虽然可以回答通用的问题,但在专业技术的垂直领域中,模型知识的技术深度、更新及时性和准确性非常有限。如果对于模型生成的文本准确性要求较高,例如企业智能客服、高精尖科学技术服务等应用场景,往往需要通过知识库集成私有的知识数据,丰富 AI 应用的知识范围、提高模型回复的可靠性。知识库的核心功能:数据管理与存储;增强检索,全文检索:通过关键词进行内容片段检索和召回,语义检索:基于向量相似度的智能检索,结构化检索:针对表格数据的精确查询。知识增强生成:大语言模型会根据召回的内容片段生成最终的回复内容,确保回答的准确性和相关性。
-
特性 知识库 记忆功能 数据性质 静态数据 动态数据 访问权限 开发者管理,可共享 用户私有,不可共享 使用场景 专业知识、企业数据 用户偏好、会话历史 更新方式 手动更新 自动学习
-
-
提示词(Prompt)是一种自然语言指令,它为大语言模型(LLM)提供任务指导。搭建智能体的第一步就是设置提示词,你可以根据业务需要直接编写提示词,也可以使用提示词模板、引用提示词资源或通过 AI 自动生成提示词。提示词就是给 AI 的 “任务说明书”,它决定了 AI 如何理解用户需求并生成相应的回答。系统提示词:给 AI 定 “人设”,全程影响 AI 的回复风格;用户提示词:具体需求。一个完整的提示词通常包含以下几个核心部分:
- 角色设定(Role),明确 AI 应该扮演的角色和身份,包括:专业背景;技能特长;经验水平;性格特点。
- 任务描述(Task),清晰定义 AI 需要完成的具体任务:任务目标;输入输出要求;质量标准;时间限制。
- 技能说明(Skills),列出 AI 应该具备的能力和可以使用的工具:专业技能;工具使用能力;知识范围;问题解决能力。
- 工作流程(Workflow),说明完成任务的步骤和逻辑:思考过程;执行步骤;决策逻辑;验证方法。
- 输出格式(Format),规定回答的格式和结构:内容组织方式;格式要求;可视化元素;交互方式。
- 约束条件(Constraints),明确 AI 的行为边界和限制:禁止内容,质量要求,伦理准则,合规要求
-
提示词编写需要清晰明确的指令,结构化的表达方式,提供示例和上下文,迭代优化的思路
- 初始提示:基于初步需求编写提示词
- 测试验证:运行提示词并查看结果
- 分析反馈:评估结果是否符合预期
- 调整优化:修改提示词并再次测试
- 固化模板:将优化后的提示词保存为模板
-
知识库 (RAG):构建专业知识基座,知识 vs 记忆区分:知识是开发者维护的共享数据 (如产品手册),记忆是用户专属的个性化数据 (如浏览历史)。多模态支持:解析 PDF、Word、Excel、图片等 20 + 格式,通过 OCR 提取非结构化内容;混合检索能力:结合语义检索 (理解意图) 与关键词检索 (精确匹配),提升召回准确率。构建要点:
-
内容规划:按业务领域分类,建立层级结构
-
数据清洗:去重、纠错、实体归一化(如"退款周期"统一为"退货时间")
-
分片处理:合理分段(200-500字/块),保留上下文关联
-
向量化存储:使用向量数据库+关系型数据库双层存储(语义向量+元数据)
-
检索优化:设计"语义检索+关键词检索+图检索"的混合策略
-
-
工具接口与插件:拓展能力边界。设计清晰的接口规范,明确输入输出格式;建立工具调用日志,监控使用频率与成功率;实现 “工具 - 模型 - 知识库” 的闭环协作:先检索→再调用→后整合。 突破 LLM 本身限制,连接企业现有系统 (ERP/CRM/OA),实现 “语义驱动” 的业务操作,降低系统使用门槛。分类与特点:
-
工具类型 功能定位 典型应用 数据类工具 获取信息 (搜索、数据库查询、文档解析) 信息检索、市场调研、内容监控 行动类工具 执行操作 (发送邮件、更新 CRM、调用 API) 流程自动化、订单处理、系统集成 创意类工具 生成内容 (图像、文案、代码) 营销素材、报告生成、UI 设计 计算类工具 数据分析与处理 (Pandas、统计) 财务分析、AB 测试、趋势预测
-
-
提示词 (Prompt):塑造智能体行为。核心设计原则:
- 角色清晰:明确身份 (如 “你是一位资深金融分析师”)
- 任务导向:清晰定义目标 (如 “分析用户财务状况并提供投资建议”)
- 约束明确:设定边界 (如 “回答基于知识库内容,不编造信息”)
- 格式规范:指定输出结构 (如 “使用 Markdown 格式,包含标题、要点和结论”)
- **进阶技巧:**使用变量引用:
"根据用户提供的{query}和知识库中的{product_info}生成回答",设计多轮对话模板:预设追问策略,引导用户提供完整信息,添加评估指标:"确保回答准确率>95%,知识覆盖率>90%"。
-
工作流 (Workflow):构建任务执行引擎。可视化编排:通过拖拽节点设计复杂流程,无需编码;条件分支:根据结果动态选择路径 (如 “如果相似度 < 0.7,触发二次搜索”);多智能体协同:设计智能体间的转交规则 (如客服场景中从基础问答到专家解答)。模块化拆分:将复杂任务分解为单一功能节点,提高复用性;异常处理:设计错误捕获与回退机制,增强系统稳定性;人机协作点:明确何时自动执行、何时需要人工审核。实现跨系统、跨功能的自动化流程,特别适合审批流、数据分析、内容生产等场景,能将处理时间缩短。
-
智能体的真正威力在于资源间的有机整合,形成 “感知 - 决策 - 执行 - 反馈” 的闭环系统:用户输入 → 意图识别(提示词) → 知识检索(知识库) → 工具调用(接口) → 结果整合 → 输出响应 → 反馈收集(记忆)。
- 知识库提供专业支撑,减少模型臆造,内容新鲜度(更新频率)、覆盖率(关键知识点)、准确性(无矛盾)
- 工具接口扩展能力边界,获取实时数据,调用成功率、响应延迟、错误率、成本效益比
- 提示词引导模型行为,确保输出符合预期,清晰度、完整性、引导效果、输出一致性
- 工作流协调各组件,实现复杂任务,节点效率、分支合理性、异常处理完备性
-
资源构建的 “黄金三步法”
- 第一步:业务需求分析:识别高频场景:筛选 “高重复、高规则、高价值” 的业务场景;明确目标:如 “提升客服效率 40%” 或 “缩短产品咨询响应时间”;划定边界:确定智能体 “能做什么” 和 “不能做什么”。
- 第二步:资源设计与开发
- 知识库构建:收集资料 → 清洗整理 → 结构化存储 → 向量化索引 → 检索测试
- 提示词工程:角色定义 → 任务描述 → 约束设定 → 示例提供 → 迭代优化
- 工作流设计:流程拆解 → 节点设计 → 条件设置 → 异常处理 → 测试验证
- 第三步:集成与优化,设计 “资源 - 模型 - 用户” 的交互闭环;建立监控指标,持续收集反馈;定期更新资源,保持内容新鲜度
-
知识库是智能体的 “专业记忆”,其核心是实现 “精准检索 + 知识增强”。从 0 到 1 构建生产级知识库的技术栈通常包括:文档处理→文本分块→向量嵌入→向量数据库→检索优化。
-
文档处理流水线
-
# 1. 多格式文档加载(支持PDF/Word/Markdown) from langchain.document_loaders import PyPDFLoader, Docx2txtLoader, TextLoader from pathlib import Path def load_documents(data_dir): documents = [] for file in Path(data_dir).iterdir(): if file.suffix == ".pdf": loader = PyPDFLoader(str(file)) documents.extend(loader.load()) elif file.suffix == ".docx": loader = Docx2txtLoader(str(file)) documents.extend(loader.load()) elif file.suffix in [".txt", ".md"]: loader = TextLoader(str(file)) documents.extend(loader.load()) return documents # 2. 文本清洗(去冗余、规范化) import re def clean_document(doc): # 去除多余空行和特殊字符 cleaned_text = re.sub(r'\n\s*\n', '\n\n', doc.page_content.strip()) cleaned_text = re.sub(r'[^\w\s\.\,\?\!]', '', cleaned_text) # 保留元数据(来源、页码等关键信息) return { "text": cleaned_text, "metadata": doc.metadata } # 3. 智能分块(解决上下文断裂问题) from langchain.text_splitter import RecursiveCharacterTextSplitter def split_documents(cleaned_docs, chunk_size=300, chunk_overlap=50): text_splitter = RecursiveCharacterTextSplitter( chunk_size=chunk_size, # 块大小(根据模型上下文窗口调整) chunk_overlap=chunk_overlap, # 重叠部分(保持上下文连贯) separators=["\n\n", "\n", ". ", " ", ""] # 优先按语义分隔符拆分 ) chunks = [] for doc in cleaned_docs: splits = text_splitter.split_text(doc["text"]) # 为每个块添加元数据(溯源用) for split in splits: chunks.append({ "text": split, "metadata": doc["metadata"] }) return chunks -
向量嵌入与存储
-
# 1. 向量嵌入(支持本地模型+云服务) from sentence_transformers import SentenceTransformer # 本地开源模型 # 或使用OpenAI Embeddings(需API密钥) # from langchain.embeddings import OpenAIEmbeddings def embed_texts(texts, model_name="all-MiniLM-L6-v2"): model = SentenceTransformer(model_name) embeddings = model.encode(texts, show_progress_bar=True) return embeddings # 2. 向量数据库存储(以FAISS为例,轻量且适合本地部署) import faiss import numpy as np class VectorDB: def __init__(self, dimension): self.index = faiss.IndexFlatL2(dimension) # L2距离索引 self.texts = [] # 存储原始文本,用于检索后返回 self.metadatas = [] # 存储元数据 def add(self, embeddings, texts, metadatas): self.index.add(np.array(embeddings).astype('float32')) self.texts.extend(texts) self.metadatas.extend(metadatas) def search(self, query_embedding, top_k=5): distances, indices = self.index.search( np.array([query_embedding]).astype('float32'), top_k ) results = [] for i, idx in enumerate(indices[0]): results.append({ "text": self.texts[idx], "metadata": self.metadatas[idx], "score": 1 - distances[0][i] # 转换为相似度分数 }) return results # 3. 构建完整知识库 def build_knowledge_base(data_dir): # 加载文档 docs = load_documents(data_dir) # 清洗 cleaned_docs = [clean_document(doc) for doc in docs] # 分块 chunks = split_documents(cleaned_docs) # 提取文本列表 texts = [chunk["text"] for chunk in chunks] metadatas = [chunk["metadata"] for chunk in chunks] # 生成向量 embeddings = embed_texts(texts) # 初始化向量库(维度与模型匹配,all-MiniLM-L6-v2输出384维) vdb = VectorDB(dimension=384) vdb.add(embeddings, texts, metadatas) return vdb -
检索优化技巧,混合检索:结合关键词检索(精确匹配)和语义检索(模糊匹配)
-
def hybrid_search(query, vdb, keyword_threshold=0.3): # 1. 语义检索 query_emb = embed_texts([query])[0] semantic_results = vdb.search(query_emb, top_k=10) # 2. 关键词过滤(从语义结果中筛选含关键词的片段) keywords = query.split() filtered = [] for res in semantic_results: match_score = sum(1 for kw in keywords if kw.lower() in res["text"].lower()) if match_score / len(keywords) >= keyword_threshold: filtered.append(res) return filtered[:5] # 返回最终Top5结果 -
动态分块调整:根据文档类型自动调整块大小(如代码文档用小粒度,小说用大粒度);元数据过滤:检索时可按来源、日期等元数据筛选(如 “只检索 2023 年后的产品文档”)
-
-
工具是智能体的 “四肢”,核心是实现 “函数定义→参数解析→结果处理” 的标准化流程。工程化开发需关注接口稳定性、参数校验和错误处理。
-
自定义工具开发规范
-
from pydantic import BaseModel, Field # 用于参数校验 from typing import Optional, List # 1. 工具参数定义(用Pydantic确保类型安全) class WeatherQueryParams(BaseModel): city: str = Field(..., description="城市名称,如'北京'") date: Optional[str] = Field(None, description="查询日期,格式'YYYY-MM-DD',默认今天") # 2. 工具实现(包含核心逻辑+错误处理) class WeatherTool: name = "weather_query" description = "查询指定城市的天气情况" params_schema = WeatherQueryParams # 关联参数模型 def __call__(self, params: WeatherQueryParams): try: # 实际场景中调用第三方天气API # 此处用模拟数据示例 import random weather_types = ["晴", "多云", "雨", "雪"] return { "city": params.city, "date": params.date or "今天", "weather": random.choice(weather_types), "temperature": f"{random.randint(-10, 35)}°C" } except Exception as e: # 标准化错误返回,便于智能体处理 return {"error": str(e), "code": 500} # 3. 工具注册与管理(便于智能体动态调用) class ToolRegistry: def __init__(self): self.tools = {} def register(self, tool): self.tools[tool.name] = tool return tool def get_tool(self, name): return self.tools.get(name) # 生成工具调用说明(供LLM理解如何调用) def get_tool_descriptions(self): descriptions = [] for tool in self.tools.values(): # 提取参数描述 param_descs = [] for field in tool.params_schema.__fields__.values(): param_descs.append( f"- {field.name}: {field.description}(类型:{field.type_.__name__})" ) descriptions.append(f""" 工具名:{tool.name} 描述:{tool.description} 参数: {"".join(param_descs)} """) return "\n".join(descriptions) # 注册工具示例 registry = ToolRegistry() registry.register(WeatherTool()) -
工具调用流程(与 LLM 集成)
-
def call_tool_with_llm(query, llm, registry): # 1. 让LLM决定是否调用工具及参数 prompt = f""" 你需要处理用户查询:{query} 可用工具: {registry.get_tool_descriptions()} 如果需要调用工具,请返回JSON格式:{{"tool": "工具名", "params": {{参数键值对}}}} 如果不需要调用工具,直接返回回答内容。 """ llm_response = llm.generate([prompt]) # 假设llm是已初始化的大模型客户端 response_text = llm_response.generations[0][0].text # 2. 解析LLM响应,执行工具调用 import json try: tool_call = json.loads(response_text) tool = registry.get_tool(tool_call["tool"]) if tool: # 参数校验 params = tool.params_schema(**tool_call["params"]) result = tool(params) return f"工具调用结果:{result}" else: return "未找到指定工具" except json.JSONDecodeError: # 未调用工具,直接返回回答 return response_text except Exception as e: return f"工具调用失败:{str(e)}" -
企业级工具开发要点:权限控制:为工具添加访问权限(如 “财务工具仅财务角色可调用”); 调用限流 :使用 Redis 实现工具调用频率限制,防止滥用; 日志审计:记录所有工具调用的输入输出,用于问题排查和合规审计。
-
def audit_tool_call(tool_name, params, result, user_id): import time log_entry = { "timestamp": time.time(), "user_id": user_id, "tool_name": tool_name, "params": params.dict(), "result": result, "status": "success" if "error" not in result else "failed" } # 写入日志系统(如ELK、ClickHouse) print(f"Audit log: {log_entry}") # 示例打印
-
-
提示词是智能体的 “操作手册”,优秀的提示词应具备结构化、动态化、可维护特性。算法工程师可通过代码生成和优化提示词,避免人工编写的局限性。
-
提示词模板引擎
-
from jinja2 import Template # 强大的模板引擎,支持条件、循环 # 1. 定义智能体角色模板 agent_template = """ 你是{{ role }}, 负责{{ responsibility }}。 你的回答需满足以下要求: {% for rule in rules %} - {{ rule }} {% endfor %} {% if knowledge_base_enabled %} 你可以使用知识库信息,引用格式为:[来源: {{ doc_source }}] {% endif %} 当前上下文: {% for msg in context %} {{ msg.role }}: {{ msg.content }} {% endfor %} 用户当前查询:{{ query }} """ # 2. 动态生成提示词 def generate_prompt(role, responsibility, rules, query, context=[], knowledge_base_enabled=True): template = Template(agent_template) return template.render( role=role, responsibility=responsibility, rules=rules, query=query, context=context, knowledge_base_enabled=knowledge_base_enabled ) # 3. 使用示例(电商客服智能体) prompt = generate_prompt( role="电商客服专员", responsibility="解答用户关于商品售后的问题", rules=[ "必须使用知识库中的售后政策回答", "回答需包含具体处理流程和时效", "语气友好,避免使用专业术语" ], query="我的订单超过7天了还能退货吗?", context=[{"role": "user", "content": "我上周买的衣服不合身"}] ) -
提示词优化算法,**少样本自动扩充 **:当提示词效果不佳时,自动从历史对话中提取优质示例
-
def auto_enrich_prompt(base_prompt, history, top_n=3): # 从历史对话中筛选高评分示例 high_quality_examples = sorted( [h for h in history if h.get("rating", 0) >= 4], key=lambda x: x["rating"], reverse=True )[:top_n] # 生成示例片段 examples = "\n".join([ f"用户:{e['query']}\n回答:{e['response']}" for e in high_quality_examples ]) # 插入到基础提示词中 return f"{base_prompt}\n\n参考示例:\n{examples}" -
**动态长度控制 **:根据模型上下文窗口自动调整提示词长度(截断或精简)
-
def truncate_prompt(prompt, max_tokens=2048, tokenizer=None): if not tokenizer: from transformers import GPT2Tokenizer tokenizer = GPT2Tokenizer.from_pretrained("gpt2") tokens = tokenizer.encode(prompt) if len(tokens) <= max_tokens: return prompt # 截断并保留首尾关键信息 truncated_tokens = tokens[:int(max_tokens*0.7)] + tokens[-int(max_tokens*0.3):] return tokenizer.decode(truncated_tokens)
-
-
工作流是智能体的 “决策中枢”,核心是实现 “条件分支→并行执行→结果聚合” 的逻辑控制。工程化实现可基于状态机或可视化流程引擎。
-
状态机工作流实现
-
from transitions import Machine # 状态机库,简化状态流转 class AgentWorkflow: states = ["init", "retrieve_knowledge", "call_tool", "generate_response", "end"] def __init__(self, agent): self.agent = agent # 智能体实例 self.machine = Machine(model=self, states=AgentWorkflow.states, initial="init") # 定义状态转换规则 self.machine.add_transition( trigger="start", source="init", dest="retrieve_knowledge", before="do_retrieve_knowledge" # 转换前执行的动作 ) self.machine.add_transition( trigger="needs_tool", source="retrieve_knowledge", dest="call_tool", before="do_call_tool" ) self.machine.add_transition( trigger="tool_done", source="call_tool", dest="generate_response", before="do_generate_response" ) self.machine.add_transition( trigger="no_tool_needed", source="retrieve_knowledge", dest="generate_response", before="do_generate_response" ) self.machine.add_transition( trigger="finish", source="generate_response", dest="end" ) # 具体动作实现 def do_retrieve_knowledge(self): self.knowledge = self.agent.retrieve_knowledge(self.agent.query) print(f"检索到知识:{self.knowledge}") def do_call_tool(self): self.tool_result = self.agent.call_tool(self.agent.query, self.knowledge) print(f"工具调用结果:{self.tool_result}") def do_generate_response(self): self.response = self.agent.generate_response( self.agent.query, self.knowledge, getattr(self, 'tool_result', None) ) print(f"生成回答:{self.response}") # 使用示例 class ECommerceAgent: def __init__(self, query, kb, tool_registry, llm): self.query = query self.kb = kb self.tool_registry = tool_registry self.llm = llm def retrieve_knowledge(self, query): return hybrid_search(query, self.kb) def call_tool(self, query, knowledge): return call_tool_with_llm(query, self.llm, self.tool_registry) def generate_response(self, query, knowledge, tool_result=None): # 整合知识和工具结果生成回答 return self.llm.generate([f"基于知识{knowledge}和工具结果{tool_result}回答:{query}"]) # 运行工作流 agent = ECommerceAgent(query="查北京明天天气并推荐适合穿的衣服", ...) workflow = AgentWorkflow(agent) workflow.start() # 开始流程 if "天气" in agent.query: # 判断是否需要工具 workflow.needs_tool() else: workflow.no_tool_needed() workflow.finish() -
可视化工作流集成,如果需要与平台的可视化界面兼容,可将工作流定义为 JSON 格式,再通过代码解析执行:
-
# 工作流JSON定义(可由前端可视化界面生成) workflow_def = { "nodes": [ {"id": "start", "type": "start", "next": "retrieve"}, {"id": "retrieve", "type": "retrieve_knowledge", "next": "decision"}, {"id": "decision", "type": "condition", "condition": "contains(query, '天气')", "true_next": "call_weather", "false_next": "generate" }, {"id": "call_weather", "type": "tool", "tool_name": "weather_query", "next": "generate"}, {"id": "generate", "type": "generate_response", "next": "end"}, {"id": "end", "type": "end"} ] } # 解析执行工作流 def execute_workflow(workflow_def, agent): current_node_id = "start" while current_node_id != "end": node = next(n for n in workflow_def["nodes"] if n["id"] == current_node_id) if node["type"] == "retrieve_knowledge": agent.retrieve_knowledge() current_node_id = node["next"] elif node["type"] == "condition": # 执行条件判断(实际中可用eval或安全表达式引擎) condition_met = "天气" in agent.query current_node_id = node["true_next"] if condition_met else node["false_next"] # 其他节点类型处理...
-
-
核心技术栈扩展:向量数据库(FAISS/Chroma/Qdrant);LLM 框架(LangChain/LlamaIndex);API 开发(FastAPI/Flask);工作流引擎(Apache Airflow/Prefect)
-
实践路线图
- 阶段 1:用 LangChain 复现本文代码,搭建最小知识库 + 工具的智能体
- 阶段 2:集成到 Dify/Coze 平台,对比自建与平台实现的差异
- 阶段 3:针对具体业务场景(如客服 / 数据分析)构建完整解决方案
- 阶段 4:实现资源监控与自动优化(如知识库自动更新、提示词 A/B 测试)
-
在复杂业务场景中,单一智能体难以处理所有任务,可采用多智能体协同模式:
- 分工模式:按专业领域划分(如财务智能体、法务智能体)
- 通信机制:通过标准化消息格式实现智能体间数据传递
- 调度策略:基于任务复杂度和智能体负载动态分配任务
更多推荐



所有评论(0)