微信扫码
添加专属顾问
我要投稿
当下LLM大模型如火如荼的进行着,各大互联网厂商基本都有在训练&推出自研的大模型,chatgpt,千问、moonshot的kimi。基于这些大模型也涌现了出了很多的应用。但是当前还未出现现象级的应用,妙鸭相机算一个,但是也很快昙花一现。笔者由于业务场景的诉求,也探索了一下基于大模型的Agent 的方案,尝试在实际业务场景的使用一下。但是发现现实还是有一定的差距。
在基于Agent 的方案,目前有很多的开源框架,如:
langchain:一个基于大模型应用开发框架,能够让应用的开发者基于大模型的推理结合存储、工具、索引、提示词等模块完成个人助理、任务、问答类的应用开发。主打的是单个Agent 的服务能力整合。基本上现在很多的AI 应用当前的思路都有参考这个。
autogen:微软开源的agent 框架。如果我们把langchain 看做是和人交互的agent, 那autogen就是agent 和agent 交互协作共同完成一个目标的多agent 的任务框架。人类只需要提供一个目标给到autogen, 他就能够在agent 通过多轮对话、执行完成目标。
metagpt:官方介绍是 “MetaGPT是一款强大的开源软件,它利用多智能体框架(产品设计、技术设计和程序员)来处理你的需求。只需输入需求,MetaGPT就能规划、设计并生成产品文档、测试代码和主运行代码,让你立即开始运行你的软件。多智能体比单一智能体更高效、更灵活。这是AI技术的一大突破,让软件开发变得更便捷、更高效。”
好了,说的再天花乱坠,还是得看实际行不行,我们就拿langchain 的最拿手的两个应用场景来说,一个是知识库问答,一个是个人助手来看看。
在讲这两个场景,之前我们要先熟悉大模型的工作姿势:
通用的大模型的工作姿势,是提示词 => 大模型 => 大模型基于提示词给出问答。
提示词Prompt 的一般格式:
PREFIX = """Answer the following questions as best you can. You have access to the following tools:"""
FORMAT_INSTRUCTIONS = """Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question"""
SUFFIX = """Begin!
Question: {input}
Thought:{agent_scratchpad}"""
MRKL地址:https://arxiv.org/pdf/2205.00445.pdf
在实际的运行过程中,我们的参数会被填充到对应的数据,例如tool 会被替换成工具的信息,input 的信息,包括历史的会话信息等,如下图所示:
这地方有两个问题:
第一个问题,历史对话信息,LLM 没有,所以agent 等框架一般都有memory 的能力,每次调用大模型都需要把历史的对话信息拿出来,放到prompt 中;
第二个问题一次调用的tokens 有限,这个问题其实很致命。如果遇到知识库相关的tokens 非常的多场景,怎么解决尼?总不能每次把知识库的信息都全量带过去吧,解决方案一般有两种,第一种就是每次只把相关的信息带过去,也就是下面通用的知识库方案。还有一个种是提前微调,fine-tuning 的模式来做,利用先验知识解决专家问题。
原理很简单,集团内部现在知识库的机器人接入没有几千,估计也有几百了,在一些基础问题上,它还能回答的差不多,但是在复杂问题上,还没有看到一个非常厉害的知识库机器人出现。
第一个问题是大家进行向量化的知识库文档里面其实很多时候是包含很多图片,在表达语义能力方面,图片往往包含的语义更多,图片处理的时候可能就变成一个链接了,更有甚者,包含视频,又该如何处理,所以文档处理不能简单的做NLP处理,还得支持多模态,目前好像还没有看到这样的能力出现。下图中,其实就是一个示例。
个人助手的基本逻辑就是,输入后,组装参数,告诉大模型目标以及工具描述,让大模型告诉我们是否应该使用工具,以及使用哪个工具,这个过程中,大模型还会帮我们构建工具参数(前提是工具要描述清楚参数的类型),langchain 根据工具和参数调用,拿到结果后,再次调用大模型。这个一个基本的ReAct 的思路。具体可以参考论文: ReAct
其实按照这个思路,如果写好Prompt, 再把工具的描述写清楚,你会发现这个还是的确能够产生一些价值的,至少在辅助工具助手上,他还是可以做到不错的效果的。例如查个白名单、订单信息、等等吧。
他的一个明显的困境就是工具的参数不能太复杂,由于是大模型推荐的结果得出的参数,即使是最新的gpt 在参数映射这一块,都容易出现问题,哪怕是个String 类型的数组,都容易出现格式不一致的问题。所以工具的入参要足够简单,不然那个转化和校验就痛苦死了。
由于每次调用都是带着全量的History, 所以如果背景知识过多,一样会存在tokens 过长的问题。就像你想让一个让帮你做客服的事情,首先他得了解足够多的先验知识,由于没有做微调,所以每次都是带着全量的信息过去,模型处理的也慢。
所以最终的最终,想要好的效果,还是需要准备好足够清晰的业务领域知识(多模态的),做Fine-Tuning。
Fine-Tuning 的困境
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-02-01
2025-01-01
2024-08-13
2025-02-04
2024-07-25
2024-04-25
2024-06-13
2024-09-23
2024-04-26
2024-08-21
2025-03-13
2025-03-13
2025-03-13
2025-03-13
2025-03-13
2025-03-13
2025-03-13
2025-03-12