你是否好奇像Siri和Alexa这样的AI智能体是如何工作的?这些智能系统在我们日常生活中变得越来越重要。

接下来我们将介绍ReAct模式,一种结合推理和行动能力来提升AI智能体的方法。我们会带你从头开始构建一个AI智能体,涵盖所需的工具、库和具体实现步骤。开始吧!

什么是AI智能体?

AI智能体是自主运行的系统,利用传感器监测环境,处理信息并完成预设目标。它们可以是简单的机器人,也可以是能随时间调整和学习的复杂系统。典型例子包括Netflix和Amazon的推荐引擎,Siri和Alexa等聊天机器人,以及特斯拉和Waymo的自动驾驶汽车。

在多个行业中,AI智能体也发挥着关键作用。例如,UiPath和Blue Prism是机器人流程自动化(RPA)软件,自动处理重复任务。DeepMind和IBM Watson Health则是医疗诊断系统,协助诊断疾病并推荐治疗方案。在各自领域,AI智能体极大提升了生产效率、准确性和个性化水平。

为什么AI智能体很重要?

AI智能体的重要性体现在它们能:

  • 减少完成日常重复性任务所需的人力,提高生产率和效率。

  • 分析海量数据,提供决策支持的结论和建议。

  • 通过聊天机器人和虚拟助手提供个性化互动和帮助。

  • 赋能银行、交通、医疗等复杂行业应用。

总之,AI智能体是推动下一代技术进步的关键力量,使系统更加智能、响应更迅速。

AI智能体的应用场景

AI智能体广泛应用于各行各业,主要包括:

  • 客户服务:通过聊天机器人和虚拟助手,全天候处理客户咨询、解决问题并提供个性化支持。

  • 金融:金融预测、算法交易和欺诈检测。智能体根据市场趋势自动执行交易,分析交易数据,识别异常模式。

  • 医疗:协助诊断疾病、推荐治疗方案和监测患者健康,支持临床决策。

  • 市场营销:个性化营销活动,用户细分,优化广告投放。

  • 供应链管理:预测需求、优化库存和简化物流。

ReAct模式简述

ReAct模式包含一个循环:思考(Thought)、行动(Action)、暂停(Pause)、观察(Observation)、回答(Answer)。

该循环使AI智能体能够先对输入进行推理,然后利用外部资源执行动作,接着将结果纳入推理过程,从而产生更准确、上下文相关的回答,大幅扩展其应用能力。

对于大型语言模型(如GPT-3和GPT-4),ReAct模式尤为有效,因其能让模型调用外部工具和API,执行原本程序外的任务。

循环步骤如下:

  1. 思考:处理输入并推理需要做什么,理解指令并确定相应动作。

  2. 行动:执行具体动作,如搜索信息、计算或调用API。

  3. 暂停:等待动作完成,获取结果。

  4. 观察:分析动作结果,理解信息。

  5. 回答:基于观察生成最终回复,完成循环。

使用ReAct的意义和优势

  • 增强能力:集成外部动作,执行需要特定信息或计算的任务。

  • 提高准确性:实时获取信息,进行精确计算。

  • 灵活性:适应多种任务,支持不同API和工具。

  • 可扩展性:可持续添加新动作和功能。

  • 实际应用:适合动态环境,提供有价值的洞察和帮助。

所需工具和库

Python语言因其简洁和丰富的库支持,是构建AI智能体的理想选择。主要库包括:

  • OpenAI API:访问GPT等语言模型,生成文本、回答问题等。

  • httpx:支持异步请求的HTTP客户端,用于调用外部API、抓取数据。

  • re(正则表达式):用于解析和匹配字符串中的模式,处理智能体响应。

环境搭建

第一步:安装必要库

  1. 安装Python(若未安装),可从官网下载安装。

  2. 建议创建虚拟环境管理依赖:

python -m venv ai_agent_env
source ai_agent_env/bin/activate  # Windows系统使用 ai_agent_env\Scripts\activate
  1. 安装OpenAI API和httpx库:

pip install openai httpx
  1. re库为Python内置模块,无需额外安装。

第二步:配置API密钥和环境变量

  1. 在OpenAI官网注册账号,获取API密钥。

  2. 设置环境变量(例如在.bashrc或.zshrc中添加):

export OPENAI_API_KEY='你的_openai_api_key'
  1. 在代码中通过os模块访问API密钥:

import os
import openai

openai.api_key = os.getenv('OPENAI_API_KEY')

完成以上准备后,你就可以开始构建自己的AI智能体了。

构建AI智能体基础结构

设计一个基础的AI智能体类,用来管理与OpenAI API的交互,并处理推理与行动的流程。示例如下:

import openai
import re
import httpx

class ChatBot:
    def __init__(self, system=""):
        self.system = system
        self.messages = []
        if self.system:
            self.messages.append({"role": "system", "content": system})
    
    def __call__(self, message):
        self.messages.append({"role": "user", "content": message})
        result = self.execute()
        self.messages.append({"role": "assistant", "content": result})
        return result
    
    def execute(self):
        completion = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=self.messages
        )
        return completion.choices[0].message.content

这个类允许初始化时传入系统提示信息,管理对话消息,并调用OpenAI接口生成回复。

实现ReAct模式的思维循环

ReAct模式核心是让AI智能体在“思考(Thought)→行动(Action)→暂停(Pause)→观察(Observation)→回答(Answer)”的循环中,结合推理和外部操作,从而更准确地完成任务。

定义提示语模板

prompt = """
你将循环执行以下步骤:Thought,Action,PAUSE,Observation。
循环结束时输出Answer。
Thought用于描述你对问题的思考过程。
Action用于执行可用的动作之一,执行后返回PAUSE。
Observation是动作执行的结果。

可用动作包括:
calculate:
例:calculate: 4 * 7 / 3
执行计算,返回结果,注意使用浮点数运算语法。

wikipedia:
例:wikipedia: Django
在维基百科搜索并返回摘要。

simon_blog_search:
例:simon_blog_search: Django
在Simon的博客中搜索相关内容。

示例:
问题:法国的首都是什么?
Thought:我应该先在维基百科查找法国。
Action:wikipedia: France
PAUSE

下一轮调用时输入:
Observation:法国是一个国家,首都是巴黎。

然后你输出:
Answer:法国的首都是巴黎。
""".strip()

解析并执行动作

匹配动作正则

action_re = re.compile(r'^Action: (\w+): (.*)')

动作实现

  • 维基百科搜索

def wikipedia(q):
    response = httpx.get("https://en.wikipedia.org/w/api.php", params={
        "action": "query",
        "list": "search",
        "srsearch": q,
        "format": "json"
    })
    return response.json()["query"]["search"][0]["snippet"]
  • 博客搜索

def simon_blog_search(q):
    response = httpx.get("https://datasette.simonwillison.net/simonwillisonblog.json", params={
        "sql": """
            select blog_entry.title || ': ' || substr(html_strip_tags(blog_entry.body), 0, 1000) as text,
            blog_entry.created
            from blog_entry join blog_entry_fts on blog_entry.rowid = blog_entry_fts.rowid
            where blog_entry_fts match escape_fts(:q)
            order by blog_entry_fts.rank
            limit 1
        """.strip(),
        "_shape": "array",
        "q": q,
    })
    return response.json()[0]["text"]
  • 计算动作

def calculate(expr):
    return str(eval(expr))

动作注册与执行流程

将动作函数注册到字典中:

known_actions = {
    "wikipedia": wikipedia,
    "calculate": calculate,
    "simon_blog_search": simon_blog_search
}

完整的查询执行逻辑:

def query(question, max_turns=5):
    i = 0
    bot = ChatBot(prompt)
    next_prompt = question

    while i < max_turns:
        i += 1
        result = bot(next_prompt)
        print(result)

        actions = [action_re.match(line) for line in result.split('\n') if action_re.match(line)]
        if actions:
            action, action_input = actions[0].groups()
            if action notin known_actions:
                raise Exception(f"未知动作:{action}: {action_input}")
            print(f" -- 执行动作:{action} {action_input}")
            observation = known_actions[action](action_input)
            print("Observation:", observation)
            next_prompt = f"Observation: {observation}"
        else:
            return result

此流程让智能体根据提示进行推理,执行动作,结合观察结果继续推理,最终给出答案。

测试与调试

运行示例

print(query("英国的陆地邻国有哪些?"))
print(query("Simon去过马达加斯加吗?"))
print(query("15 * 25"))

常见问题排查

  • API错误:确保API密钥正确,权限充足。

  • 网络问题:确认网络通畅,接口可达。

  • 输出不准确:检查动作实现逻辑是否正确。

  • 未定义动作:确保动作名在known_actions中注册。

优化AI智能体

提升鲁棒性与安全性

  • 对输入严格校验,防止注入风险,尤其是在calculate函数中。

  • 增加异常处理,确保动作失败时能安全返回。

  • 记录日志,便于排查执行流程和错误。

扩展更多动作

  • 实时天气查询API集成。

  • 新闻检索功能。

  • 多语言翻译接口。

AI智能体的现实应用

  • 客户服务:自动答复咨询,个性化推荐。

  • 医疗健康:辅助诊断,治疗建议。

  • 金融投资:欺诈检测,智能交易。

  • 市场营销:精准用户细分,投放优化。

未来展望

  • 自主智能系统将能处理更复杂任务。

  • 人机协作日益紧密,提升决策质量。

  • 伦理AI成为发展重点,注重隐私、公平与透明。

总结

本文详细介绍了如何基于ReAct模式,从搭建基础类、定义提示语、实现动作、设计推理执行循环,到测试、调试及优化,一步步构建功能完善的AI智能体。希望你能基于此框架不断探索,打造满足实际需求的智能应用。

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐