Tiny-universe手戳大模型 TinyAgent--task3

TinyAgent

这里基于React的方式,我们手动制作了一个最小的Agent结构(其实更多的是调用工具),尝试将React结构修改为SOP结构。一步一步手写Agent,可以让我们对Agent的构成和运作更加的了解。

论文:ReAct: Synergizing Reasoning and Acting in Language Models

实现细节

Step 1: 构造大模型

首先我们需要一个大模型,这里我们使用InternLM2作为我们的 Agent 模型。InternLM2是一个基于Decoder-Only的通用对话大模型,可以使用transformers库来加载InternLM2模型。

首先,还是先创建一个BaseModel类,我们可以在这个类中定义一些基本的方法,比如chat方法和load_model方法,方便以后扩展使用其他模型。

python 复制代码
class BaseModel:
    def __init__(self, path: str = '') -> None:
        self.path = path

    def chat(self, prompt: str, history: List[dict]):
        pass

    def load_model(self):
        pass

接着,我们创建一个InternLM2类,这个类继承自BaseModel类,我们在这个类中实现chat方法和load_model方法。就和正常加载InternLM2模型一样,来做一个简单的加载和返回即可。

python 复制代码
class InternLM2Chat(BaseModel):
    def __init__(self, path: str = '') -> None:
        super().__init__(path)
        self.load_model()

    def load_model(self):
        print('================ Loading model ================')
        self.tokenizer = AutoTokenizer.from_pretrained(self.path, trust_remote_code=True)
        self.model = AutoModelForCausalLM.from_pretrained(self.path, torch_dtype=torch.float16, trust_remote_code=True).cuda().eval()
        print('================ Model loaded ================')

    def chat(self, prompt: str, history: List[dict], meta_instruction:str ='') -> str:
        response, history = self.model.chat(self.tokenizer, prompt, history, temperature=0.1, meta_instruction=meta_instruction)
        return response, history

Step 2: 构造工具

我们在tools.py文件中,构造一些工具,比如Google搜索。在这个文件中,构造一个Tools类。在这个类中,我们需要添加一些工具的描述信息和具体实现方式。

添加工具的描述信息,是为了在构造system_prompt的时候,让模型能够知道可以调用哪些工具,以及工具的描述信息和参数。

  • 首先要在 tools 中添加工具的描述信息
  • 然后在 tools 中添加工具的具体实现
python 复制代码
class Tools:
    def __init__(self) -> None:
        self.toolConfig = self._tools()
    
    def _tools(self):
        tools = [
            {
                'name_for_human': '谷歌搜索',
                'name_for_model': 'google_search',
                'description_for_model': '谷歌搜索是一个通用搜索引擎,可用于访问互联网、查询百科知识、了解时事新闻等。',
                'parameters': [
                    {
                        'name': 'search_query',
                        'description': '搜索关键词或短语',
                        'required': True,
                        'schema': {'type': 'string'},
                    }
                ],
            }
        ]
        return tools

    def google_search(self, search_query: str):
        pass

Step 3: 构造Agent

我们在Agent.py文件中,构造一个Agent类,这个Agent是一个React范式的Agent,我们在这个Agent类中,实现了text_completion方法,这个方法是一个对话方法,我们在这个方法中,调用InternLM2模型,然后根据ReactAgent的逻辑,来调用Tools中的工具。

首先我们要构造system_prompt, 这个是系统的提示,我们可以在这个提示中,添加一些系统的提示信息,比如ReAct形式的prompt

python 复制代码
def build_system_input(self):
    tool_descs, tool_names = [], []
    for tool in self.tool.toolConfig:
        tool_descs.append(TOOL_DESC.format(**tool))
        tool_names.append(tool['name_for_model'])
    tool_descs = '\n\n'.join(tool_descs)
    tool_names = ','.join(tool_names)
    sys_prompt = REACT_PROMPT.format(tool_descs=tool_descs, tool_names=tool_names)
    return sys_prompt

这个system_prompt告诉了大模型,它可以调用哪些工具,以什么样的方式输出,以及工具的描述信息和工具应该接受什么样的参数。

Agent的结构是一个React的结构,提供一个system_prompt`,使得大模型知道自己可以调用那些工具,并以什么样的格式输出。

每次用户的提问,如果需要调用工具的话,都会进行两次的大模型调用,第一次解析用户的提问,选择调用的工具和参数,第二次将工具返回的结果与用户的提问整合。这样就可以实现一个React的结构。

Step 4: 运行agent_demo.ipynb

本来想用书生蒲语2.5-20b对话的,结果发现在本地跑显示显存不足报错cuda out of memory只好放弃了,然后又尝试用modelscope跑一半就报错了,说没有响应,然后示例就断开连接了,重新尝试还是不行。

经过一段时间权衡利弊之后换成了书生-蒲语2.5-7b-对话。

下面三个就是最终的效果图,可以看出一开始对话里面找不到特朗普是谁,再问一次才得出结论。


看了以后发现效果还是不错的。

##参考

相关推荐
AI实战42 分钟前
多车合作自动驾驶框架CoDrivingLLM:基于大语言模型驱动的决策框架
人工智能·语言模型·自动驾驶
小城哇哇44 分钟前
AI大模型对我国劳动力市场潜在影响研究报告(2024)|附19页PDF文件下载
人工智能·学习·ai·语言模型·pdf·大模型·agi
clarance20151 小时前
生成式AI赋能:对话式BI引领数据分析新潮流
人工智能·数据分析
小码hh1 小时前
高通AI应用程序开发3:网络模型(一)
人工智能
张小生1802 小时前
《迁移学习》—— 将 ResNet18 模型迁移到食物分类项目中
人工智能·分类·迁移学习
程序小健3 小时前
基于深度学习的学情智能监测系统设计与实现(PYQT+YOLOv8+训练数据集+论文+部署文档)
人工智能·深度学习·yolo·目标检测·pyqt
萱仔学习自我记录3 小时前
Agent智能体
人工智能
三月七(爱看动漫的程序员)3 小时前
Enhancing Trust in LLMs: Algorithms for Comparing and Interpreting LLMs
人工智能·gpt·语言模型·chatgpt·prompt·知识图谱·boosting
董一峰3 小时前
机器学习-决策树
人工智能·决策树·机器学习
君莫笑∽GL3 小时前
机器学习(4):机器学习项目步骤(一)——定义问题
人工智能·机器学习