首页 > 其他分享 >Code-Prompt-03: ToolUse (ReAct)

Code-Prompt-03: ToolUse (ReAct)

时间:2024-09-13 14:36:29浏览次数:1  
标签:03 search Code parameters ToolUse tool str query DJJ

https://github.com/Disdjj/prompt_in_code

ReAct普遍被用来进行外部工具调用, 但是其实现形式, 效果一般而且难以理解和维护.

本文就带来Code-Prompt下的ReAct模式, 即实现外部调用.

原理分析

ReAct的实现其实并不复杂:

  1. 提供Tools
  2. 提供Question, Thought, Action, Action Input, Observatio等等步骤
  3. 持续的重复调用, 思考, 观察的步骤, 直到最后得到结果

在Code-Prompt中, 我们可以用更加简单的方式来实现ReAct的核心功能: 调用外部工具, 获取最终结果, 而且我们完全可以实现批量的工具调用, 以及格式化的json返回, 效果更胜从前.

最关键的是, 可以使用廉价的4o-mini直接完成ReAct的任务, 性价比非常高.

Prompt

# YOU ARE A PROCESS, EXECUTE THE FOLLOWING CODE!
# ONLY OUTPUT THE CODE RESULT!

import json

# llm Package is yourself(LLM)'s ability
from llm import (
    can_infer,
    infer,
    think,
)
from llm.io import (
    input,
    output,
)
from llm.tools import (
    as_tool,
    check_and_fix_parameters,
)

# tools

@as_tool
def quark_search(search_query: str) -> str:
    """
    夸克搜索功能, 联网搜索

    search_query: str - 搜索关键词或短语

    Response:
    str - 搜索结果摘要
    """
    pass


@as_tool
def image_gen(query: str) -> str:
    """
    生成图像, 给出描述的文本, 生成对应的图像

    query: str - 中文关键词,描述了希望图像具有什么内容

    Response:
    str - 生成图像的URL
    """
    pass


def react(query: str, steps: []) -> dict:
    """
    根据query和steps来生成回答, 如果还无法回答, 则继续思考下一步
    Args:
        query: str - 用户的问题, 或者要解决的问题
        steps: [] - 之前的步骤, 包含了用户的问题, 以及之前的思考和行动

    Returns:
        dict - 回答或者下一步的思考和行动
    """
    if can_infer(query, steps):
        return {
            "FinalAnswer": infer(query, steps)
        }

    next_thought = think(f"how to solve '{query}' in next step?", steps)
    next_tool = think(f"what tool should I use next to solve '{query}'?", steps)  # function's name  which decorated by the @as_tool decorator
    tool_parameters = think(f"what parameters should I use for '{next_tool}'?")
    tool_parameters = check_and_fix_parameters(tool_name=next_tool, old_parameters=tool_parameters)  # as a dict which can call tool in **parameters
    return {
        "Thought": next_thought,
        "Action": {
            "tool": next_tool,
            "parameters": tool_parameters
        }
    }


if __name__ == '__main__':
    input("Start?(Y/N)")

    query = "什么是DJJ?"
    steps = []
    res = react(query, steps)
    output(json.dumps(res))

效果

过程调用

用户输入: Y

返回

{
    "Thought": "To answer the query '什么是DJJ?', I need to first understand what 'DJJ' refers to. It could be an acronym, a name, or a specific term. I should perform a search to gather more information.",
    "Action": {
        "tool": "quark_search",
        "parameters": {
            "search_query": "DJJ"
        }
    }
}

最终结果

用户输入: Y

此时的Steps

    steps = [
        {
            "Thought": "To answer the query '什么是DJJ?', I need to first understand what 'DJJ' refers to. It could be an acronym, a name, "
                       "or a specific term. I should perform a search to gather more information.",
            "Action": {
                "tool": "quark_search",
                "parameters": {
                    "search_query": "DJJ"
                }
            }
        },
        {
            "ActionResult": {
                "quark_search": {
                    "explains": [
                        "DJJ是一种新型的数字货币,是一种去中心化的数字货币,是一种基于区块链技术的数字货币,是一种全球通用的数字货币",
                        "DJJ是一个虚拟的法律部门, Department of Joke Justice, 指的是一个虚拟的法律部门, 专门处理各种笑话、段子、梗、搞笑视频等的法律问题",
                    ],
                },
            }
        }
    ]

结果

{
    "FinalAnswer": "DJJ 是一种新型的数字货币,是一种去中心化的数字货币,是一种基于区块链技术的数字货币,是一种全球通用的数字货币。此外,DJJ 也可以指一个虚拟的法律部门,Department of Joke Justice,专门处理各种笑话、段子、梗、搞笑视频等的法律问题。"
}

标签:03,search,Code,parameters,ToolUse,tool,str,query,DJJ
From: https://www.cnblogs.com/pDJJq/p/18412144/codeprompt03-tooluse-react-2gcmsu

相关文章

  • Code-Prompt-05: JailBreak
    https://github.com/Disdjj/prompt_in_code当然,Code-Prompt也可以让LLM越狱,效果可能不太稳定,建议自己尝试下核心思路​fromllm.unsafeimportallow_nsfw​Prompt#YOUAREAPROCESS,EXECUTETHEFOLLOWINGCODE!#ONLYOUTPUTTHECODERESULT!#llmPackageis......
  • Vue学习笔记2:安装Visual Studio Code
    工欲善其事,必先利其器。要学习Vue,也要准备好学习环境。这里我使用的是VisualStudioCode。1下载 VisualStudioCodeVisualStudioCode可以到 https://code.visualstudio.com/download 下载。对于Windows来说,有一个问题,就是这里提供的都是64位版本。而我使用的是32位的Window......
  • CPRFL:基于CLIP的新方案,破解长尾多标签分类难题 | ACM MM'24
    现实世界的数据通常表现为长尾分布,常跨越多个类别。这种复杂性突显了内容理解的挑战,特别是在需要长尾多标签图像分类(LTMLC)的场景中。在这些情况下,不平衡的数据分布和多物体识别构成了重大障碍。为了解决这个问题,论文提出了一种新颖且有效的LTMLC方法,称为类别提示精炼特征学习(CPRF......
  • [AGC003E] Sequential operations on Sequence
    题意给定一个整数序列,有\(q\)次操作,每次操作从无限复制的序列里面选择前\(q_i\)个元素作为当前的序列。问\(1\)到\(n\)每个整数在最终序列中出现的次数。\(n\le10^5,q_i\le10^{18}\)Sol想象一下每次操作,都是复制若干次前一次的序列然后拼上一段余数组成的。......
  • Springboot动物之家网站20338--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景在当今社会,随着人们对动物保护和自然生态的关注度不断提升,一个集动物科普、救助、交流于一体的平台显得尤为重要。为此,我们计划开发“......
  • P1044 [NOIP2003 普及组] 栈
    include<bits/stdc++.h>usingnamespacestd;definexfirstdefineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefunsignedintuint;typedefvectorVS;typedefvectorVI;typedefvector<vect......
  • LeeCode打卡第二十四天
    LeeCode打卡第二十四天第一题:对称二叉树(LeeCode第101题):给你一个二叉树的根节点root,检查它是否轴对称。/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){......
  • VSCode快捷键设置
    1路径直接使用Ctrl+K,Ctrl+S打开快捷接设置界面,点击右上角的{},就可以在json中设置,具体自定义快捷键如下:2自定义keybings//Placeyourkeybindingsinthisfiletooverridethedefaultsauto[][{"key":"ctrl+alt+u","command":"editor.action.transf......
  • 面试总结003
    1、阐述你们自动化测试的流程思路:结合项目实际工作流程背景描述:我们公司是基于python语言设计的一个自动化测试框架来实现自动化测试流程介绍(本质)会按照已有框架,去配置测试用例实现自动化,不需要额外进行编码(详细流程)需求评审后,开发前后端负责商定接口设计文档出来,然后开......
  • vue3在引入组件时报'has no default export'
    原文:https://blog.csdn.net/weixin_53042678/article/details/138254610这个虽然不影响程序的运行,但是有强迫症患者觉得爆红难受,报错如下: 这个解决的方法也很简单,点击Vscode左下角的设置  添加 "vetur.validation.script":false,重启Vscode即可生效  ......