【AI大模型应用开发】【AutoGPT系列】2. 手撕AutoGPT - 手把手教你用LangChain从0开始写一个简易版AutoGPT(0)

  • 大家好,我是同学小张,日常分享AI知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

本站文章一览:

在这里插入图片描述


前两篇文章我们了解了AutoGPT的概念原理及如何使用它。今天我们进一步深入学习AutoGPT的实现原理 - ReAct。

本文将使用LangChain,从0开始写一个简易版的AutoGPT,这既是对AutoGPT原理的深入学习,同时也是对前段时间学习LangChain的一个练习,这其中几乎涉及了LangChain的所有核心模块:Prompt模板、大模型封装、输出校验、记忆模块、Agents模块等。

0. 前置推荐阅读

1. 本文实现的需求和使用的数据文件

声明:本文示例代码和文件来源知乎AGI课堂。

1.1 实现需求

设计一个 Agent,自动选择使用以下工具回答用户的问题:

  • 查看目录下的文件
  • 基于给定的文档回答用户问题
  • 查看与分析 Excel 文件
  • 撰写文档
  • 调用 Email 客户端发邮件

1.2 数据文件

./data
 |__2023年8月-9月销售记录.xlsx
 |__供应商名录.xlsx
 |__供应商资格要求.pdf

文件内数据示例如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 手撕AutoGPT - 代码编写

2.1 先定义一个类,定义主入口函数run

class AutoGPT:
    """AutoGPT:基于Langchain实现"""
    
    def __init__(self):
        pass
    
    def run(self, task_description):
        """运行入口,思考 + 执行任务,最终输出最终结果

        Args:
            task_description (_type_): 任务描述
        """
        pass
    

2.2 run函数实现

2.2.1 run函数里面应该有什么

(1)AutoGPT的原理,前面的文章已经介绍过,就是ReAct,先思考后行动。
(2)给大模型的Prompt,在工程中一般以Prompt模板形式存在,结合用户输入和上下文,组装成最终的Prompt

所以,run函数里至少要有:

  • 思考步骤
  • 行动步骤
  • Prompt模板组装步骤
  • 获取用户输入步骤
  • 获取上下文步骤(长短期记忆)

2.2.2 代码实现

def run(self, task_description, verbose=False) -> str:
    thought_step_count = 0  # 思考步数

    # 初始化模板
    prompt_template = PromptTemplateBuilder(
        self.prompts_path,
        self.main_prompt_file,
    ).build(
        tools=self.tools,
        output_parser=self.output_parser,
    ).partial(
        work_dir=self.work_dir,
        task_description=task_description,
    )

    short_term_memory = ConversationTokenBufferMemory(
        llm=self.llm,
        max_token_limit=4000,
    )

    short_term_memory.save_context(
        {
   "input": "\n初始化"},
        {
   "output": "\n开始"}
    )

    # 初始化LLM链
    chain = (prompt_template | self.llm | StrOutputParser())

    # 如果有长时记忆,加载长时记忆
    if self.memery_retriever is not None:
        long_term_memory = VectorStoreRetrieverMemory(
            retriever=self.memery_retriever,
        )
    else:
        long_term_memory = None

    reply = ""

    while thought_step_count < self.max_thought_steps:
        if verbose:
            color_print(f">>>>Round: {
     thought_step_count}<<<<", ROUND_COLOR)

        action, response = self._step(
            chain,
            task_description=task_description,
            short_term_memory=short_term_memory,
            long_term_memory=long_term_memory,
            verbose=verbose,
        )

        if action.name == "FINISH":
            if verbose:
                color_print(f"\n----\nFINISH", OBSERVATION_COLOR)

            reply = self._final_step(short_term_memory, task_description)
            break

        observation = self._exec_action(action)

        if verbose:
            color_print(f"\n----\n结果:\n{
     observation}", OBSERVATION_COLOR)

        # 保存到短时记忆
        short_term_memory.save_context(
            {
   "input": response},
            {
   "output": "返回结果:\n" + observation}
        )

        thought_step_count += 1

    if not reply:
        reply = "抱歉,我没能完成您的任务。"

    if long_term_memory is not None:
        # 保存到长时记忆
        long_term_memory.save_context(
            {
   "input": task_description},
            {
   
  • 60
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

同学小张

如果觉得有帮助,欢迎给我鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值