ERNIE-Lite-8K模拟function calling的测试代码

ERNIE-Lite-8K目前免费。一般免费的东西功能都比较少,ERNIE-Lite-8K就不支持function calling。有一些办法可以通过提示词近似实现类似的效果。

今天,我通过系统提示的方式测试了ERNIE-Lite-8K,让它“调用”我实现的do_add函数,实现加法计算回答用户的问题。代码如下:

import qianfan
import os
import json

#os.environ['QIANFAN_ACCESS_KEY'] = ''
#os.environ['QIANFAN_SECRET_KEY'] = ''

def extract_bracketed_text(input_string):
    start_index = input_string.find("{")
    end_index = input_string.find("}")

    if start_index != -1 and end_index != -1:
        return '{' + input_string[start_index + 1 : end_index] + '}'
    else:
        return '{}'

def do_add(*args):
    #print('debug: ')
    #print(args)

    result = sum(args)
    #print('result=')
    #print(result)
    return result

def function_calling(p):
    if 'name' in p and 'args' in p:
        if 'do_add' == p['name']:
            return do_add(*p['args'])
    return None

user_input = '''请问89182312731+129382193921等于多少?'''

if __name__ == '__main__':
    system_prompt = '''你是一个会使用工具来解决问题的智能助手。有以下工具:

```
{"name":"do_add","info":"加法计算","args":["a","b"],"return_type:":"int"}
```

触发关键词为`name`属性指定的关键词。使用方法如下:

用户提问: 请问1+2等于多少?

你的可以回答: `{"name":"do_add","args":[1, 2]}`

然后用户会给你函数结果:

用户回答:3

然后你再根据这些内容回答:1+2的结果是3
'''

    chat_comp = qianfan.ChatCompletion()
    resp = chat_comp.do(
        model='ERNIE-Lite-8K',
        messages=[{'role':'user','content':user_input}],
        system=system_prompt
    )
    bot_output = extract_bracketed_text(resp['result'])
    bot_output_dist = json.loads(bot_output)
    result = str(function_calling(bot_output_dist))

    system_prompt = f'''你是一个智能助手。

这里有一些内容可供参考,如果用户问你的内容在这个参考内容里,你应该优先使用这些参考的信息回答:

{user_input} 答案是: {result}
'''

    resp = chat_comp.do(
        model='ERNIE-Lite-8K',
        messages=[{'role':'user','content':user_input}],
        system=system_prompt
    )
    print(resp['result'])

运行代码可以得到类似这样的结果:

答案是:218564506652。

原理如下:

先通过第一个提示,约定什么方式可以触发function calling:

你是一个会使用工具来解决问题的智能助手。有以下工具:

```
{"name":"do_add","info":"加法计算","args":["a","b"],"return_type:":"int"}
```

触发关键词为`name`属性指定的关键词。使用方法如下:

用户提问: 请问1+2等于多少?

你的可以回答: `{"name":"do_add","args":[1, 2]}`

然后用户提问,此时模型会返回类似这样的结果:

你的问题可以调用我们的“do_add”工具进行加法计算。下面是详细的操作过程:

调用命令: `{"name":"do_add","args":[89182312731, 129382193921]}`

计算结果: 你的数字加起来的结果是 218564506652

所以,89182312731 + 129382193921 等于 218564506652。

这个结果是模型自己返回的,不一定对。但是关键的命令格式有按照约定返回,所以可以匹配提取出 {"name":"do_add","args":[89182312731, 129382193921]} 这一个部分,并解析,调用自己实现的function_calling:

    bot_output = extract_bracketed_text(resp['result'])
    bot_output_dist = json.loads(bot_output)
    result = str(function_calling(bot_output_dist))

在function_calling函数内校验参数并调用真正的do_add:

def function_calling(p):
    if 'name' in p and 'args' in p:
        if 'do_add' == p['name']:
            return do_add(*p['args'])
    return None

最终结合调用结果result组装新的提示词,让模型参考do_add的结果回答问题:

    system_prompt = f'''你是一个智能助手。

这里有一些内容可供参考,如果用户问你的内容在这个参考内容里,你应该优先使用这些参考的信息回答:

{user_input} 答案是: {result}
'''

    resp = chat_comp.do(
        model='ERNIE-Lite-8K',
        messages=[{'role':'user','content':user_input}],
        system=system_prompt
    )
    print(resp['result'])

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ERNIE-Bot-turbo是一种基于百度AI技术ERNIE(Enhanced Representation through Knowledge Integration)的聊天机器人,它可以进行智能对话和知识问答。ERNIE-Bot-turbo在原有ERNIE-Bot的基础上,通过使用更大的预训练模型ERNIE2.0和更多的训练数据,提高了对话和问答的准确性和流畅性,同时还增加了多轮对话和情感分析等功能。以下是关于ERNIE-Bot-turbo的一些信息: - ERNIE-Bot-turbo的提问方式与普通聊天机器人相同,用户可以直接在对话框中输问题或语句,ERNIE-Bot-turbo会自动进行分析并给出回答。 - ERNIE-Bot-turbo的知识库涵盖了广泛的领域,包括文化、科技、体育、社会、历史等多个方面,用户可以向ERNIE-Bot-turbo提出不同领域的问题。 - ERNIE-Bot-turbo支持多轮对话,可以针对用户的问题进行追问和回答,实现更加流畅的对话。 - ERNIE-Bot-turbo还具有情感分析功能,可以识别用户的情感状态并根据情感状态给出不同的回答,增强了对话的真实感和情感交互性。 下面是一个样例对话: 用户:你好,请问你叫什么名字? ERNIE-Bot-turbo:你好,我是ERNIE-Bot-turbo,很高兴为您服务。 用户:你会哪些知识领域? ERNIE-Bot-turbo:我的知识库涵盖了广泛的领域,包括文化、科技、体育、社会、历史等多个方面,您可以向我提出不同领域的问题。 用户:你会情感分析吗? ERNIE-Bot-turbo:是的,我能够识别您的情感状态并根据情感状态给出不同的回答,增强了对话的真实感和情感交互性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值