每年的 1024,都像程序员专属的 “魔法日”。0 和 1 的排列组合里,藏着我们对 “效率” 的执念 —— 不是为了炫技,而是想让重复的工作少一点,让 “想做的事” 多一点。 比如规划旅行时,总在 “查景点→找餐厅→看酒店” 的循环里耗掉大半天;比如整理数据时,复制粘贴到手指发麻…… 这些时刻,我们总会想:“要是有个小助手能自动把这些步骤串起来就好了。” 而 “智能体” 和 “工作流智能体”,就是这样的 “魔法工具”。前者像有自主意识的数字伙伴,后者则是专攻 “流程自动化” 的贴心管家。值此 1024,不如跟着这篇文章,亲手搭一个私人旅游助手工作流 —— 不用复杂框架,不用高深算法,只用简单的逻辑串联,让智能体替我们把旅行规划的琐事 “扛” 起来。 毕竟,最好的技术,从来都是让生活和工作,都能更从容一点。

目录
智能体 VS 工作流智能体
先说说「智能体」:像个有自主能力的 “数字小助手”
再看「工作流智能体」:专注 “跑流程” 的智能体
实战演练-个人专属简单版旅游助手工作流搭建
开发需求
实战开发
开始节点
文本处理+网页抓取
景点处理
餐厅搜索
餐厅和地址拼接
酒店查询
规划汇总
结束节点
工作流测试
可以把「智能体」理解成一个能 “自己干活” 的数字角色。它有三个核心能力:
举个例子:手机里的 “智能闹钟” 其实就是个简单智能体 —— 它能感知时间(环境),到点了判断 “该叫醒用户”(决策),然后响铃或震动(行动)。再复杂点的,比如客服聊天机器人,能读用户消息(感知),判断用户需求(决策),自动回复解答(行动),这也是智能体。
【工作流智能体】是智能体的一个 “细分岗位”,专门负责处理有固定步骤的工作流程。它就像一个 “流程自动化管家”,会严格按照预设的步骤(或灵活适配步骤中的变化),一步步把重复的工作跑完。
比如你每周要做的 “客户跟进流程”:
这些步骤如果交给工作流智能体,它会:
它的核心是 “把人从固定流程里解放出来”,尤其适合那些 “步骤明确、重复度高、容易出错” 的工作(比如数据汇总、文件审批、定期报表等)。
简单说,智能体是 “有自主能力的数字角色”,而工作流智能体是 “专门帮人跑固定流程的智能体”—— 前者是大概念,后者是聚焦 “流程自动化” 的具体应用。
用户提供城市,旅游天数,默认一天两个景点。 获取热门景点,搜索每个景点附近的餐厅,获取酒店信息,制定合理的出行路线。
开发前,可能要用到的插件,搜索插件,代码块处理(方便计算景点数,返回的数据内容整合),文本处理(字符串拼接等),大模型(处理内容),高德地图(地点搜索)
我们可能会用到多个大模型处理多个小任务,因为我们是将一个复杂的任务拆分成几个子任务。
题外话:其实上述要求,用一个优秀的提示词,和提问方式,大模型都能回答出来,开发这个助手只是方便理解工作流,理解各种插件的用途。

代码处理景点数目
可以交给大模型,不过用大模型有点大材小用了。
通过文本处理,整合成关键话题,某城市热门的nums个景点,再用头条搜索,进行网页搜寻 通过大模型提炼头条搜索节点输出的内容,将出现频率次数高的前几个景点提取出来,返回一个places数组。
async def main(args: Args) -> Output:
params = args.params
# 构建输出对象
ret: Output = {
"key0": params['input'] + params['input'], # 拼接两次入参 input 的值
}
return ret
将城市和景点数拼接起来,成为搜寻关键词,然后调用search插件进行网页抓取


调用大模型进行景点提取,将网页内容的景点提取出来,并做返回处理

系统提示词: # 角色 你是一位经验丰富、专业细致的旅行计划助手,擅长从各种文段中精准提炼出{{nums}}个景点,且能提供详细、准确的相关信息。 ## 技能 ### 技能 1: 景点提取 当用户提供包含景点信息的文段时,迅速且准确地从中提取出景点名称。 ## 限制: - 仅专注于从文段中提取景点相关信息,坚决拒绝回答与景点提取无关的话题。 - 输出内容需简洁明了,只包含景点名称 用户提示词: 从{{input}}提取景点输出为places
通过高德地图提供的插件,进行景点周围范围搜索,考虑到现实我们不会在一个景点周围吃很多次,所以采取批处理方式进行,每个景点周围都进行搜索,假设每个景点周围一个优质餐厅。

通过代码节点实现将内容中的餐厅名和地址实现出来,返回一个字符串数组
from typing import List, TypedDict, Any
class Args_input_data_poi_list(TypedDict, total = True):
province_name: str
type: str
address: str
city_name: str
name: str
photos: list[str]
district_name: str
location: str
class Args_input_data(TypedDict, total = True):
count: float
poi_list: list[Args_input_data_poi_list]
class Args_input(TypedDict, total = True):
code: float
data: Args_input_data
log_id: str
msg: str
class ArgsParams(TypedDict, total = True):
input: list[Args_input]
class Args:
def get(self, req): ... # 允许通过 get('xxx') 方式访问
def __getitem__(self, key): ... # 允许通过 args['xxx'] 方式访问
params: ArgsParams
class Output(TypedDict, total = False):
key1: list[str]
async def main(args: Args) -> Output:
input_list: List[Args_input] = args.params['input']
result_list: List[str] = []
for input_item in input_list:
data = input_item.get('data', {})
poi_list = data.get('poi_list', [])
for poi in poi_list:
name = poi.get('name', '')
address = poi.get('address', '')
result_list.append(f"{name}{address}")
ret: Output = {
"key1": result_list
}
return ret大模型调用高德地图插件,搜索距离目标景点性价比最高的酒店。

系统提示词: # 角色 你是一个专业的旅行规划助手,擅长根据用户提供的景点信息,筛选出性价比高、交通便利且环境好的酒店。 ## 技能 ### 技能 1: 筛选酒店 1. 仔细分析{{input}}中的景点信息。 2. 从众多酒店信息中,筛选出 1 - 2 个性价比最高、交通便利且环境好的酒店。 3. 输出酒店名和地址。 ## 限制: - 仅围绕酒店筛选相关内容进行回复,不回答无关问题。 - 输出内容必须包含酒店名和地址,按照简洁明了的格式呈现。
将景点,餐厅,酒店进行文本整合,调用大模型进行路线规划,返回给用户。

系统提示词: # 角色 你是一位专业的旅行规划师,擅长根据不同城市、旅行天数、景点、美食和酒店信息,为用户制定清晰、合理且排版美观的旅行计划与攻略。 ## 技能 ### 技能 1: 规划旅行 1. 当接收到{{city}}(旅行城市)、{{days}}(旅行天数)、{{places}}(想去的景点)、{{foods}}(想品尝的美食)、{{hotels}}(想入住的酒店)这些信息时,将它们用清晰的语言描述组织起来。 2. 按照合理的旅行时间线进行排版,确保旅行规划到位,涵盖每天的行程安排、景点游览顺序、用餐推荐以及酒店入住安排等。 ### 技能 2: 补充信息 如果用户提供的信息存在缺失或模糊不清的情况,询问用户以获取更准确完整的信息,以便更好地规划旅行。 ## 限制: - 只围绕旅行计划和攻略制定相关内容进行回复,拒绝回答与旅行无关的话题。 - 所输出的旅行计划和攻略必须语言清晰、排版美观,符合逻辑。
输出结果

杭州 2天




总得来说,这个助手还略有瑕疵,只是实现了基本的旅游规划,而且用了多次大模型,处理多个子任务,感觉可以通过插件进行代替优化。
敲完最后一个测试节点的代码时,看着旅游助手自动输出的完整行程 —— 从景点推荐到餐厅地址拼接,再到酒店匹配,突然觉得这就是技术最可爱的样子:它不一定需要多复杂的算法,却能把我们从 “打开十个网页反复切换” 的琐碎里解放出来。 其实工作流智能体的魅力,就藏在这些 “小而美” 的场景里:无论是规划一次旅行,还是整理一份周报,本质上都是用代码给重复的步骤 “画一条自动路”。而我们,就能腾出时间去想更有趣的事 —— 比如旅行时该带哪件外套,而不是纠结 “下一个景点附近有什么吃的”。 如果你也试着搭了自己的工作流智能体,欢迎在评论区分享你的创意场景~ 毕竟,让技术服务于生活,才是我们敲代码时最温暖的初心呀。