今天抽空了解一下Prompt-Cache、A2A、ReAct,之前都是听听别人或者有博客提到
Prompt-Cache
由名字可以直观了解到就是通过缓存常用的一些提示词,从而提高推理响应效率
想想场景,其实这个应用场景蛮多,但是在LMM API请求的时候最为实用,因为很多时候我们通过API请求LLM的时候,同一个节点或者模块的Prompt一般都是一样的,唯一就是会有一些变量信息携带进去,这时候就完全可以采用缓存策略,把当前请求节点的Prompt(复用的内容)做缓存,下次请求过来直接使用就行,但是如何快速识别出当前节点也是个问题,也就是缓存命中率问题。
我觉得这个在用户层面进行模版化操作比较方便,就是让用户的prompt内容分为「复用」和「变量」部分,APi后端接口解析传参然后再通过缓存走LLM,这样我觉得是比较高效的策略,其实就是如何快速识别cache的问题。
这个场景其实是可以做一套规范的,分析必要的要素、结构、输入输出、上下游,基本上就可以应用在各种LMM的API服务当中了。当然,还需要考虑实时更改prompt的情况。
A2A
A2A协议:一个为Agent间通信设计的开放标准,提高不同组织开发的Agent协作效率。全称就是Agent2Agent
笔者个人听上去跟MCP类似,不过一个是统一Function Call的标准,一个是统一Agent的标准。
一般这种协议的制定都会设定一个「Server」和「Client」。
这里我突然想起面试时候有呗问到说“有没有多Agent的实践”,当时的确没有,不过后面可以结合这个做demo,然后讲讲A2A、MCP。
Agent应该有对应的Agent Card,基本样例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| {
"name": "智能旅行助手",
"description": "专业的旅行规划和预订服务",
"provider": "TravelTech Inc.",
"url": "https://api.travelagent.com/a2a",
"version": "1.0.0",
"capabilities": ["streaming", "pushNotifications"],
"authentication": {
"schemes": ["Bearer"]
},
"skills": [
{
"id": "flight-booking",
"name": "航班预订",
"description": "搜索和预订国际航班",
"inputModes": ["text", "data"],
"outputModes": ["text", "data"]
}
]
}
|
ReAct
Reasoning and Acting:一种范式和策略,推理 -> 行动 -> 反馈。“边想边做,做了再想”
其实有一点像CoT,还有点像RL
会有一定的问题,比如:
测试demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| 您是助手,请充分了解用户的问题,选择合适的工具,逐步帮助用户解决问题。
### 约束 ####
1. 所选工具必须是工具列表(Tool List)中的工具。
2. 当无法找到工具的输入时,请立即调整并使用AskHumanHelpTool向用户询问其他参数。
3. 当你相信你有最终的答案,可以回应用户,请使用TaskCompleteTool。
### Tool List ###
[
Search: 如果需要搜索请用它.paramDescription : [{"name": "searchKey", "description": "搜索参数","type":"String"}]
AskHumanHelpTool: 如果需要人类帮助,请使用它。paramDescription : [{"name": "question", "description": "问题","type":"String"}]
TaskCompleteTool:如果你认为你已经有了最终答案,请使用它。paramDescription : [{"name": "answer", "description": "答案","type":"String"}]
]
您应该只以JSON格式响应,回复格式样例如下:
### 回复格式 ###
{
{"thought": "为什么选择这个工具的思考","tool_names": "工具名","args_list": {“工具名1”:{"参数名1": "参数值1","参数名2": "参数值2"}}}}
确保您返回的响应内容都是JSON格式,并且不包含任何额外内容。
|
1
2
3
4
5
6
7
8
9
10
| 回答:
{
"thought": "用户询问今天星期几,这是一个需要获取当前日期信息的问题。由于我没有内置的实时时钟功能,需要使用搜索工具来查找当前日期和星期信息。",
"tool_names": "Search",
"args_list": {
"Search": {
"searchKey": "今天星期几 当前日期"
}
}
}
|