本文介绍了 ReAct 模式以改进功能,并演示了如何从头开始创建 AI 代理。它涵盖了测试、调试和优化 AI 代理,以及工具、库、环境设置和实施。本教程为用户提供了创建有效 AI 代理所需的技能,无论他们是开发人员还是爱好者。
NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割
1、了解 AI 代理
AI 代理是自主管理的生物,它们使用传感器来监视环境、处理信息并实现预定义目标。它们可以是任何东西,从基本的机器人到可以随时间调整和学习的复杂系统。典型的例子包括 Netflix 和 Amazon 的推荐引擎、Siri 和 Alexa 等聊天机器人以及 Tesla 和 Waymo 的自动驾驶汽车。
这些代理在许多领域也至关重要:UiPath 和 Blue Prism 是机器人流程自动化 (RPA) 程序的示例,它们可以自动执行重复过程。DeepMind 和 IBM Watson Health 是医疗诊断系统的示例,它们有助于诊断疾病并推荐治疗方法。在其领域,AI 代理极大地提高了生产力、精确度和定制化。
为什么 AI 代理很重要?
这些代理在改善我们的日常生活和实现特定目标方面发挥着关键作用。
AI 代理之所以重要,是因为它们可以:
- 降低完成日常操作所需的人力,从而提高产量和效率。
- 分析大量数据以提供支持决策的结论和建议。
- 利用聊天机器人和虚拟助手提供个性化的互动和帮助。
- 在银行、交通和医疗保健等行业中实现复杂的应用。
从本质上讲,AI代理是推动下一波技术进步的关键,使系统更智能、更能响应用户需求。
AI代理在各个行业都有广泛的应用。以下是一些值得注意的用例:
- 客户服务:聊天机器人和虚拟助手形式的人工智能代理处理客户查询、解决问题并提供个性化支持。他们可以全天候运营,提供一致而高效的服务。
- 金融:金融预测、算法交易和欺诈检测是人工智能代理的应用。他们根据市场趋势进行交易,检查交易数据并发现可疑模式。
- 医疗保健:人工智能代理协助诊断疾病、推荐治疗方法和监测患者健康状况。它们分析医疗数据、提供见解并支持临床决策。
- 营销:AI 代理个性化营销活动、细分受众并优化广告支出。它们分析客户数据、预测行为并根据个人喜好定制内容。
- 供应链管理:AI 系统估计需求、提高库存水平并简化物流。它们检查来自制造商、供应商和零售商的信息以确保运营顺利进行。
2、ReAct 模式简介
ReAct 模式以思考、行动、暂停、观察、回答的循环方式运行。
此循环允许 AI 代理推理输入,利用外部资源对其采取行动,然后将结果重新整合到其推理过程中。通过这样做,AI 代理可以提供更准确、更符合上下文的响应,从而显著扩展其实用性。
ReAct 模式是一种强大的设计模式,它结合了推理和行动技能来提高 AI 代理的能力。GPT-3 或 GPT-4 等 LLM 从这种技术中受益匪浅,因为它允许它们与其他工具和 API 交互,以执行超出其原始编程的活动。
ReAct 模式以循环方式运行,包括以下步骤:
- 思考:AI 代理处理输入并推理需要做什么。这涉及理解问题或命令并确定要采取的适当行动。
- 行动:根据推理,代理执行预定义的操作。这可能涉及搜索信息、执行计算或与外部 API 交互。
- 暂停:代理等待操作完成。这是代理暂停以接收所执行操作的结果的关键步骤。
- 观察:代理观察操作的结果。它分析从操作收到的输出以了解获得的信息或结果。
- 答案:代理使用观察到的结果来生成响应。然后将此响应提供给用户,完成循环。
ReAct 模式之所以重要,有几个原因:
- 增强功能:通过集成外部操作,AI 代理可以执行需要特定信息或计算的任务,从而增强其整体功能。
- 提高准确性:该模式允许 AI 代理获取实时信息并执行准确计算,从而获得更精确、更相关的响应。
- 灵活性:ReAct 模式使 AI 代理更加灵活,能够适应各种任务。它们可以与不同的 API 和工具交互,以执行各种操作。
- 可扩展性:此模式允许随着时间的推移添加新的操作和功能,使 AI 代理可扩展且面向未来。
- 现实世界的应用程序:ReAct 模式使 AI 代理能够部署在现实世界场景中,在这些场景中,它们可以与动态环境交互并提供有价值的见解和帮助。
3、所需工具和库
Python 是一种多功能且功能强大的编程语言,由于其简单性和广泛的库支持,在 AI 和机器学习中得到广泛使用。对于构建 AI 代理,几个 Python 库必不可少:
- OpenAI API:此库允许您与 OpenAI 的语言模型(例如 GPT-3 和 GPT-4)进行交互。它提供了生成文本、回答问题和执行各种语言相关任务所需的功能。
- httpx:这是一个功能强大的 Python HTTP 客户端,支持异步请求。它用于与外部 API 交互、获取数据和执行 Web 搜索。
- re(正则表达式):此模块提供对 Python 中正则表达式的支持。它用于解析和匹配字符串中的模式,这对于处理 AI 代理的响应很有用。
OpenAI API 是一个强大的平台,可用于访问 OpenAI 开发的高级语言模型。这些模型可以理解和生成类似人类的文本,使其成为构建 AI 代理的理想选择。使用 OpenAI API,你可以:
- 根据提示生成文本
- 回答问题
- 执行语言翻译
- 总结文本
- 还有更多
httpx 库是一个支持同步和异步请求的 Python HTTP 客户端。它旨在易于使用,同时提供用于发出 Web 请求的强大功能。使用 httpx,你可以:
- 发送 GET 和 POST 请求
- 处理 JSON 响应
- 管理会话和 cookie
- 执行异步请求以获得更好的性能
OpenAI API 和 httpx 库共同提供了构建和增强 AI 代理所需的基础工具,使它们能够与外部资源交互并执行各种操作。
4、设置开发环境
现在让我们按照以下步骤设置环境:
4.1 安装所需的库
要开始构建 AI 代理,你需要安装必要的库。以下是设置环境的步骤:
- 安装 Python:确保您的系统上安装了 Python。您可以从 Python 官方网站下载它:
- 设置虚拟环境:为您的项目创建虚拟环境来管理依赖项是一种很好的做法。运行以下命令设置虚拟环境:
python -m venv ai_agent_env
source ai_agent_env/bin/activate # On Windows, use `ai_agent_env\Scripts\activate`
- 安装 OpenAI API 和 httpx:使用 pip 安装所需的库:
pip install openai httpx
- 安装其他库:你可能还需要其他库,例如用于正则表达式的 re,它包含在 Python 标准库中,因此无需单独安装。
4.2 设置 API 密钥和环境变量
要使用 OpenAI API,你需要一个 API 密钥。请按照以下步骤设置 API 密钥:
- 获取 API 密钥:在 OpenAI 网站上注册一个帐户,并从 API 部分获取您的 API 密钥。
- 设置环境变量:将你的 API 密钥存储在环境变量中以确保其安全。将以下行添加到
.bashrc
或.zshrc
文件中(或使用适合你的操作系统的方法):
export OPENAI_API_KEY='your_openai_api_key_here'
- 在你的代码中访问 API 密钥:在你的 Python 代码中,可以使用
os
模块访问 API 密钥:
import os
openai.api_key = os.getenv('OPENAI_API_KEY')
设置好环境后,你现在可以开始构建 AI 代理了。
5、构建 AI 代理
现在让我们构建 AI 代理。
为了构建 AI 代理,我们将创建一个类来处理与 OpenAI API 的交互并管理推理和操作。以下是入门的基本结构:
import openai
import re
import httpxclass ChatBot:def __init__(self, system=""):self.system = systemself.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 resultdef execute(self):completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=self.messages)return completion.choices[0].message.content
此类使用可选的系统消息初始化 AI 代理并处理用户交互。 __call__
方法接收用户消息并使用 OpenAI API 生成响应。
5.1 实现 ReAct 模式
要实现 ReAct 模式,我们需要定义思考、行动、暂停、观察和回答的循环。以下是我们如何将其纳入我们的 AI 代理:
定义提示:
prompt = """
You run in a loop of Thought, Action, PAUSE, Observation.
At the end of the loop you output an Answer.
Use Thought to describe your thoughts about the question you have been asked.
Use Action to run one of the actions available to you - then return PAUSE.
Observation will be the result of running those actions.Your available actions are:
calculate:
e.g. calculate: 4 * 7 / 3
Runs a calculation and returns the number - uses Python so be sure to use floating point
syntax if necessarywikipedia:
e.g. wikipedia: Django
Returns a summary from searching Wikipediasimon_blog_search:
e.g. simon_blog_search: Django
Search Simon's blog for that termExample session:
Question: What is the capital of France?
Thought: I should look up France on Wikipedia
Action: wikipedia: France
PAUSEYou will be called again with this:
Observation: France is a country. The capital is Paris.You then output:
Answer: The capital of France is Paris
""".strip()
定义查询函数:
action_re = re.compile('^Action: (\w+): (.*)
查询函数通过将问题发送给 AI 代理、解析动作、执行动作并将观察结果反馈回循环来运行 ReAct 循环。
5.2、实现动作
现在让我们来看看操作的实现。
动作:维基百科搜索
维基百科搜索操作允许 AI 代理在维基百科上搜索信息。以下是实现方法:
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"]
动作:博客搜索
博客搜索操作允许 AI 代理搜索特定博客的信息。具体实现方法如下:
def simon_blog_search(q):response = httpx.get("https://datasette.simonwillison.net/simonwillisonblog.json", params={"sql": """selectblog_entry.title || ': ' || substr(html_strip_tags(blog_entry.body), 0, 1000) as text,blog_entry.createdfromblog_entry join blog_entry_fts on blog_entry.rowid = blog_entry_fts.rowidwhereblog_entry_fts match escape_fts(:q)order byblog_entry_fts.ranklimit1""".strip(),"_shape": "array","q": q,})return response.json()[0]["text"]
动作:计算
计算动作允许 AI 代理执行数学计算。具体实现方法如下:
def calculate(what):return eval(what)
5.3 向 AI 代理添加操作
接下来,我们需要在字典中注册这些操作,以便 AI 代理可以使用它们:
def query(question, max_turns=5):i = 0bot = ChatBot(prompt)next_prompt = questionwhile i < max_turns:i += 1result = bot(next_prompt)print(result)actions = [action_re.match(a) for a in result.split('\n') if action_re.match(a)]if actions:action, action_input = actions[0].groups()if action not in known_actions:raise Exception(f"Unknown action: {action}: {action_input}")print(" -- running {} {}".format(action, action_input))observation = known_actions[action](action_input)print("Observation:", observation)next_prompt = f"Observation: {observation}"else:return result
通过此设置,AI 代理可以推理输入、执行操作、观察结果并生成响应。
6、测试和调试
现在让我们按照测试和调试的步骤进行操作。
6.1 运行示例查询
要测试 AI 代理,你可以运行示例查询并观察结果。以下是几个示例:
print(query("What does England share borders with?"))
print(query("Has Simon been to Madagascar?"))
print(query("Fifteen * twenty five"))
6.2 调试常见问题
测试时,你可能会遇到一些常见问题。以下是一些调试技巧:
- API 错误:确保你的 API 密钥设置正确并具有必要的权限。
- 网络问题:检查你的互联网连接并确保你正在调用的端点可访问。
- 输出不正确:验证操作函数中的逻辑并确保它们返回正确的结果。
- 未处理的操作:确保在 known_actions 字典中定义所有可能的操作。
7、改进 AI 代理
现在让我们改进 AI 代理。
为了让 AI 代理更加稳健和安全:
- 验证输入:确保所有输入都经过正确验证以防止注入攻击,尤其是在计算函数中。
- 错误处理:在操作函数中实现错误处理以优雅地管理异常。
- 日志记录:添加日志记录以跟踪代理的操作和观察结果,以便于调试。
为了增强 AI 代理的功能,你可以添加更多操作,例如:
- 天气信息:与天气 API 集成以获取实时天气数据。
- 新闻搜索:实施新闻搜索操作以获取最新新闻文章。
- 翻译:使用翻译 API 添加翻译操作以支持多语言查询。
8、结束语
在本综合指南中,我们探讨了 AI 代理的概念、其重要性以及增强其功能的 ReAct 模式。我们介绍了必要的工具和库,设置了环境,并逐步完成了从头开始构建 AI 代理的过程。我们还讨论了实施操作、将其与 AI 代理集成以及测试和调试系统。最后,我们研究了 AI 代理的实际应用和未来前景。
通过遵循本指南,你现在掌握了从头开始创建自己的 AI 代理的知识。尝试不同的操作,增强代理的功能,并探索令人兴奋的人工智能领域的新可能性。
原文链接:AI Agent综合指南 - BimAnt