1.Agent的基本概念
从软件工程的角度来看,大模型Agent是指基于大语言模型的,能使用工具与外部世界进行交互的计算机程序。
在不同的翻译场景中,Agent可以翻译为智能体、代理、智能助手等,本文中提到的“智能体”即是Agent。
2.为什么使用 Agent
一些同事希望答疑机器人能具备这样一种功能:只需说出“帮我请明天的假”,机器人便能自动提交请假申请单。
为实现此功能,答疑机器人的设计可以包括以下步骤:
1.编写工具函数,利用公司内部的API实现请假等操作;
2.当大模型接收到用户的指令(如“我要请后天的假”)时,解析出需要调用的工具及其参数,例如请假工具所需的日期;
3.根据大模型的解析结果,执行相应的工具函数,并获取结果,例如“2025年x月x日至2025年y月y日的请假申请已提交”。然后直接或经过处理后将结果反馈给用户。 这种增添了工具函数的系统被称为Agent。它作为大模型与外界互动的桥梁,扩展了大模型的功能。
3.构建 Agent 的基本流程
3.1.定义工具函数
3.1.1 查询员工信息
def query_employee_info(query):
'''
输入用户提问,输出员工信息查询结果
'''
# 1. 首先根据用户提问,使用NL2SQL生成SQL语句
llm = DashScope(model_name="qwen-plus")
messages = [
ChatMessage(role=MessageRole.SYSTEM, content='''你有一个表叫employees,记录公司的员工信息,这个表有department(部门)、name(姓名)、HR三个字段。
你需要根据用户输入生成sql语句进行查询,你一定不能生成sql语句之外的内容,也不要把```sql```这个信息加上。'''),
ChatMessage(role=MessageRole.USER, content=query)
]
SQL_output = llm.chat(messages).message.content
# 打印出SQL语句
print(f'SQL语句为:{
SQL_output}')
# 2. 根据SQL语句去查询数据库(此处为模拟查询),并返回结果
if SQL_output == "SELECT COUNT(*) FROM employees WHERE department = '教育部门'":
return "教育部门共有66名员工。"
if SQL_output == "SELECT HR FROM employees WHERE name = '张三'":
return "张三的HR是李四。"
if SQL_output == "SELECT department FROM employees WHERE name = '王五'":
return "王五的部门是后勤部。"
else:
return "抱歉,我暂时无法回答您的问题。"
3.1.2 发送请假申请
def send_leave_application(date):
'''
输入请假时间,输出请假申请发送结果
'''
return f'已为你发送请假申请,请假日期是{
date}。'
3.1.3 查询公司规章制度
def query_company_info(query):
'''
输入用户提问,输出公司信息查询结果
'''
# 使用封装好的函数加载索引
index = load_index()
query_engine = index.as_query_engine(
llm=DashScope(model_name="qwen-plus")
)
return query_engine.query(query).response
3.2将工具函数与大模型集成进Agent中
ChatAssistant = Assistants.create(
# 在此指定模型名称
model="qwen-plus",
# 在此指定Agent名称
name='贾维斯',
# 在此指定Agent的描述信息
description='一个智能助手,能够查询员工信息,帮助员工发送请假申请,或者查询公司规章制度。',
# 用于提示大模型所具有的工具函数能力,也可以规范输出格式
instructions='''你是贾维斯,你的功能有以下三个:
1. 查询员工信息。例如:查询员工张三的HR是谁;
2. 发送请假申请。例如:当员工提出要请假时,你可以在系统里帮他完成请假申请的发送;
3. 查询公司规章制度。例如:我们公司项目管理的工具是什么?
请准确判断需要调用哪个工具,并礼貌回答用户的提问。
''',
# 将工具函数传入
tools=[
{
# 定义工具函数类型,一般设置为function即可
'type': 'function',
'function': {
# 定义工具函数名称,通过map方法映射到query_employee_info函数
'name': '查询员工信息',
# 定义工具函数的描述信息,Agent主要根据description来判断是否需要调用该工具函数
'description': '当需要查询员工信息时非常有用,比如查询员工张三的HR是谁,查询教育部门总人数等。',
# 定义工具函数的参数
'parameters': {