Pixiv - KiraraShss
955 字
5 分钟
Agent应用框架
一、Agent应用架构深度解析
下面有两个Agent的方案,请对比一下,哪个方案更好?
方案一:
graph LR
规划--> 行动1 --> 行动2 --> 结束
方案二:
graph LR
思考1--> 行动1 --> 思考2 --> 行动2 --> 结束
方案二比方案一好,因为思考2可以判断行动1的执行效果是否达成目的,达成目的时继续下一个行动,否则需要修改行动1并重新执行。
Agent应用架构
graph LR
规划--> 思考;
行动 --> 思考;
思考-->行动;
思考-->结束;
运行机制:
graph LR
Thought--> Observation;
Observation-->Action;
Action-->Thought;
Though:决定下一步要做的动作并给出理由
Action:执行下一步动作
Observation:观察执行动作结果的观察,用于反馈思考
React:智能体感知环境变化做出相应调整的机制
graph LR
subgraph Tools
Calendar
Calculator
CodeInterpreter
Search
...more
end
A[Tools] -->Calendar;
A -->Calculator;
A -->CodeInterpreter;
A -->Search;
A -->...more;
subgraph Memory
C[Short-term memory]
D[Long-term memory]
end
E[大模型]-->A
E --> B[Memory]
E --> F[Action];
B-->C
B-->D
E --> G[Planning];
G --> H[Reflection];
G --> I[Self-critics];
G --> J[Chain of thoughts];
G --> K[Subgoal decomposition];
A-.->F
B-.->G
B-.->H
Tools:工具库
Memory:记忆
Action:行动
Planning:规划
- 理解任务,给出完成任务的具体步骤
- 反思和优化,下一步行动的一个推理
规划阶段的关键技术:
-
Chain-of-Thought Prompting(COT)
通过Prompt激发大模型的潜能,引导LLM做出更好的规划。
例子:
Q:我有5个羽毛球。我买了2罐羽毛球,一罐3个。我现在有多少个羽毛球?
GPT-4o:你原本有 5 个羽毛球,买了 2 瓶,每瓶 3 个。所以,你现在总共有:
5 + 2 × 3 = 5 + 6 = 11 个羽毛球。
-
反思和细化
-
记忆增强
记忆增强通常有两种方法,RAG和微调。目的是注入背景知识,让模型能更好地完成任务。
- RAG的核心技术有:
- 数据工程:收集数据,需要确保数据高质量
- 数据切分:切分数据,切分的每个chunk尽量高质量
- 一阶段检索:语义检索,尽可能多的找知识
- 二阶段精排:重排序,返回高质量的数据
- 用户意图识别:理解用户意图
- 效果评估
Action:行动
- 语言模型通过推理触发
- 执行器调用工具执行
graph LR
工具库-->|注册| LLM --> |触发|执行器

1.定义函数
编写函数,在注释说明该函数的功能、需要的参数、返回的数据。
def add(num1,num2): """ 该函数计算两个数字的和 :param num1: 必要参数,表示需要计算的第一个数字 :param num2: 必要参数,表示需要计算的第二个数字 :return: add函数计算后的结果,返回结果为float对象 """ return float(num1+num2)注册函数
add_tool={"type":"function","function":{ "name":"add", "description":"用于执行add算法函数,定义了一种将两个数字加起来的计算过程", "parameters":{"type":"object","parameters":{"num1":{"type":"float","description":"需要计算的第一个数字"},"num2":{"type":"float","description":"需要计算的第二个数字"}},"required":["num1","num2"]} }}tools=[add_tool]2.函数描述和模型调用(第一次)
模型去匹配对应的函数并调用。
response = client.chat.completions.create( model="gpt-3.5-turbo", messages=messages, tools=tools, tool_choice="auto", )
response.choices[0].message回复的内容如下:
ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_OqKaG4mk8Z5oEVKCYsd5rSCO', function=Function(arguments='{"num1":"1","num2":"2"}', name='add_tool'), type='function')])这里的id是唯一的,用于匹配询问与回复。
3.解析模型返回数据并完成函数调用
tool_calls = response.choices[0].message.tool_calls
for tool_call in tool_calls: function_name = tool_call.function.name function_to_call = available_tools[function_name] function_args = json.loads(tool_call.function.arguments) function_response = function_to_call(**function_args)
print(function_name)print(function_args)print(function_response)输出为:
add_tool{'num1':'1','num2':'2'}"3"4.结果增强模型生成(第二次)
将函数调用的结果添加到消息中,增强模型生成。
messages.append( { "tool_call_id": tool_call.id, "role": "tool", "name": function_name, "content": function_response, })Observation
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
最后更新于 2025-01-11,距今已过 395 天
部分内容可能已过时
5426的技术分享基地