懵懵懂懂一下就学到了这里
agent相当于就是让AI拥有了‘调用了工具的能力’但严谨来说不是AI调用,是程序调用后把结果又发给ai。
我的理解是,一个循环,提示词;
要求输出AI输出思考过程,

  • 是否需要调用工具,
  • 可以调用哪些工具。
  • 是否结束输出最终结果。
    如果不能结束,就是带着上下文继续循环直到AI觉得可以结束了,或者达到了循环的上限。

这里来看一下代码吧
我们首先介绍一下@tool装饰器

@tool装饰器

1.定义一个工具函数

1
2
3
4
5
6
7
# 2. 定义工具1:依旧是祖传的查询天气

@tool(description="查询天气")
def get_weather(city: str)->str:

    return f"当前{city}天气是晴天"

注意看哦你需要加上description描述,这样AI才知道这个工具是干什么的,不过新版本也可以这样写在函数里面加个 描述信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 3. 定义工具2:查询楠瓜的信息(你写的内容)

@tool
def get_nangua()>str:
#使用这个获得
    """获取楠瓜的信息"""

    return """
楠瓜是北京大学的学生,
他喜欢运动,喜欢和人在一起。
他的年龄是18岁。
他的性别是男。
他的手机号是13800000000。
他的邮箱是1angua@example.com。
他喜欢吃苹果。
他喜欢的游戏是原神。
"""

2.康康函数长啥样

使用的是 args_schema.model_json_schema() 函数,名字有长

1
print(get_weather.args_schema.model_json_schema())

输出的结果

1
2
3
4
5
{'description': '获取城市天气的函数',
'properties': {'city': {'title': 'City', 'type': 'string'}},
'required': ['city'],
'title': 'get_weather',
'type': 'object'}

使用Agent

构建Agent

1
2
3
4
5
6
7
8

from langchain.agents import create_agent
# 5. 创建 Agent(传入两个工具)
agent = create_agent(
    model=llm,
    tools=[get_weather, get_nangua],  # 两个工具都放进去
    system_prompt="你是一个聊天助手,可以回答用户问题!",
)

调用Agent

注意和平时调用LLM不同的是,他不能直接invoke(‘ 你好呀我是楠瓜 ‘)也就是说不能直接传递一个字符串给他,他需要一个字典

1
2
3
4
5
6
7
8
9
# 6. 调用 Agent

res = agent.invoke(
    {"messages": [
        ("human", "楠瓜最喜欢玩什么游戏,今天的天气怎么样"),  # 你的问题
        #ps;这里也可以家system,但是我在初始化的时候可以加了 system_prompt
        #就不重复了
    ]}
)

res返回的是一个<class ‘dict’>字典类型,

  • 只有 2 个键:messagessystem_prompt
  • messages 是列表,存了完整对话流程
  • 最后一条就是 AI 的最终回答
  • 取答案用:res["messages"][-1].content
    用这个代码,你就能清清楚楚看到每一步
1
2
3
4
for i, msg in enumerate(res["messages"]):
print(f"\n===== 第 {i+1} 条消息 =====")
print("类型:", type(msg).__name__)
print("内容:", msg.content)