人工智能, 生活

智能体调用工具的稳定性测试

本篇实现智能体的方法可以参考这篇:使用LangChain框架搭建入门智能体。这里通过 Guan 软件(https://py.guanjihuan.com,pip install --upgrade guan)来调用,测试代码会更简洁一些。

主要结论为:

  • 对工具返回结果的判断:智能体不会尽信工具返回的结果,会有自己的主见,尤其是当结果和常识发生冲突时。在这种情况下,可以通过提示词等方法,让智能体强行接受工具的返回结果。如果是涉及复杂的问题或者未接触过的问题,由于缺乏先验的判断依据,智能体通常能直接采纳工具的返回结果,毕竟“实践是检验真理的唯一标准”。
  • 对具体工具选择的判断:在调用工具时,智能体会识别到函数名称、三重引号注释、 # 注释以及变量名等,这些都会作为智能体是否调用该工具的依据。其中,函数名称、三重引号注释可能会更重要些,影响比较大。此外,工具的顺序可能也会些许影响。

这里同样需要设置 API Key 环境。在同一个文件夹中新建 .env 文件,输入以下内容(以阿里云为例,API KEY 需要到阿里云百炼获取):

OPENAI_API_KEY=xxx
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1

测试代码为:

import guan
from langchain_core.tools import tool

@tool
def add_numbers_1(a, b):
    """将两个数字相加"""
    return str(a + b + 0.1)+'\n'

@tool
def add_numbers_2(a, b):
    """将两个数字相加"""
    return str(a + b + 0.0001)+'\n'

@tool
def subtract_numbers(a, b):
    """将两个数字相减"""
    return str(a - b)+'\n'

@tool
def guan_operator(a, b):
    """ """
    return str(a*b)+'\n'

@tool
def other_operators_1(a, b):
    """A 操作"""
    return str(a*b+0.1)+'\n'

@tool
def other_operators_2(a, b):
    """#号注释测试"""
    return str(a*b+0.2)+'\n' # B 操作

@tool
def other_operators_3(a, b):
    """变量名测试"""
    C_operation = str(a*b+0.3)+'\n'
    return C_operation

guan.langchain_chat_with_tools(prompt='计算 3+2', temperature=0.0, tools=[add_numbers_1])
print('\n\n---\n')
guan.langchain_chat_with_tools(prompt='计算 3+2。用工具里的返回结果作为最终结果。', temperature=0.0, tools=[add_numbers_1])

print('\n\n---分割线---\n')

guan.langchain_chat_with_tools(prompt='计算 3+2', temperature=0.0, tools=[add_numbers_2])
print('\n\n---\n')
guan.langchain_chat_with_tools(prompt='计算 3+2。用工具里的返回结果作为最终结果。', temperature=0.0, tools=[add_numbers_2])

print('\n\n---分割线---\n')

guan.langchain_chat_with_tools(prompt='计算 3+2', temperature=0.0, tools=[subtract_numbers])
print('\n\n---\n')
guan.langchain_chat_with_tools(prompt='计算 3+2。用工具里的返回结果作为最终结果。', temperature=0.0, tools=[subtract_numbers])

print('\n\n---分割线---\n')

all_tools = [add_numbers_1, add_numbers_2, subtract_numbers, subtract_numbers, other_operators_3, other_operators_2,  other_operators_1, guan_operator]

guan.langchain_chat_with_tools(prompt='对 3 和 2 进行 Guan 操作', temperature=0.0, tools=all_tools)
print('\n\n---\n')
guan.langchain_chat_with_tools(prompt='对 3 和 2 进行 A 操作', temperature=0.0, tools=all_tools)
print('\n\n---\n')
guan.langchain_chat_with_tools(prompt='对 3 和 2 进行 B 操作', temperature=0.0, tools=all_tools)
print('\n\n---\n')
guan.langchain_chat_with_tools(prompt='对 3 和 2 进行 C 操作', temperature=0.0, tools=all_tools)

测试结果:

> Entering new AgentExecutor chain...

Invoking: `add_numbers_1` with `{'a': 3, 'b': 2}`


5.1
3 + 2 的结果是 5。

> Finished chain.

3 + 2 的结果是 5。


---



> Entering new AgentExecutor chain...

Invoking: `add_numbers_1` with `{'a': 3, 'b': 2}`


5.1
3 + 2 的计算结果是 5.1。

> Finished chain.

3 + 2 的计算结果是 5.1。


---分割线---



> Entering new AgentExecutor chain...

Invoking: `add_numbers_2` with `{'a': 3, 'b': 2}`


5.0001
3 加 2 的结果是 5。您提供的数值 5.0001 可能是由于某种计算误差或近似导致的,但在标准算术中,3 + 2 精确等于 5。

> Finished chain.

3 加 2 的结果是 5。您提供的数值 5.0001 可能是由于某种计算误差或近似导致的,但在标准算术中,3 + 2 精确等于 5。    


---



> Entering new AgentExecutor chain...

Invoking: `add_numbers_2` with `{'a': 3, 'b': 2}`


5.0001
3 + 2 的计算结果是 5.0001。

> Finished chain.

3 + 2 的计算结果是 5.0001。


---分割线---



> Entering new AgentExecutor chain...
3 + 2 = 5

> Finished chain.

3 + 2 = 5


---



> Entering new AgentExecutor chain...

Invoking: `subtract_numbers` with `{'a': 3, 'b': 2}`


1
3 + 2 的结果是 5。

> Finished chain.

3 + 2 的结果是 5。


---分割线---



> Entering new AgentExecutor chain...

Invoking: `guan_operator` with `{'a': 3, 'b': 2}`


6
对 3 和 2 进行 Guan 操作的结果是 6。

> Finished chain.

对 3 和 2 进行 Guan 操作的结果是 6。


---



> Entering new AgentExecutor chain...

Invoking: `other_operators_1` with `{'a': 3, 'b': 2}`


6.1
对 3 和 2 进行 A 操作的结果是 6.1。

> Finished chain.

对 3 和 2 进行 A 操作的结果是 6.1。


---



> Entering new AgentExecutor chain...

Invoking: `other_operators_2` with `{'a': 3, 'b': 2}`


6.2
对 3 和 2 进行 B 操作的结果是 6.2。

> Finished chain.

对 3 和 2 进行 B 操作的结果是 6.2。


---



> Entering new AgentExecutor chain...

Invoking: `other_operators_3` with `{'a': 3, 'b': 2}`


6.3
对 3 和 2 进行 C 操作的结果是 6.3。

> Finished chain.

对 3 和 2 进行 C 操作的结果是 6.3。
7 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code