第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Qwen生成的照片

最近,随着AI代理的兴起,人工智能越来越受到关注。许多公司已经开始构建代理并将其整合到自己的业务中。如今,这一趋势发展得如此之快,几乎任何东西都可以被做成代理。对于任何想要进入这一领域的人来说,通常都会有一个共同的问题:如何开始。本指南将用简单易懂的方式帮助你入门。

什么是AI助手?

一个AI代理人是一种软件程序,能够感知环境,处理信息并采取行动来完成任务。AI代理人被设计为可以自主做决策并执行任务,而无需持续的人类干预。AI代理人可以应用于例如医疗、金融、机器人等各个领域等等。

人工智能的一个关键优势是它们能够提高决策能力,自动化重复性任务,并个性化用户体验。例如,一个AI助手可以管理您的日历,安排会议、发送提醒,并优先安排事件根据您的偏好。同样,在客户服务领域,AI助手可以处理查询,提供推荐和解决方案,并高效解决各种问题。

什么是工具?

在构建代理的过程中,工具是重要的组成部分,可以帮助我们增强代理的功能。这些工具可以被视为外部资源或功能,帮助代理更高效地解决问题和完成任务。例如,我们有诸如代码解释器、搜索引擎和数据库这样的工具。

挑选正确的框架

下一步是选择适合构建我们代理的合适框架。你可以参考以下框架:

i) LangChain - LangChain 提供构建 AI 代理所需的工具。这些代理可以推理、检索信息,并与外部环境互动。

ii) LangGraph — LangGraph 是 LangChain 的一个扩展版本。它允许用户使用大型语言模型构建有状态的多角色应用程序。

iii) CrewAI — CrewAI 是一个强大的框架工具,用于设计和开发多个代理的AI系统,其中不同的AI代理协同工作来完成复杂的任务。

iv) Smolagents — SmolAgents 是一个轻量级的框架,旨在创建简约的 AI 代理,这些代理能够与 API、数据库以及外部工具交互。它侧重于简洁和高效,非常适合小型且有针对性的 AI 自动化任务。

v) AutoGPT — 专为几乎不需要人工干预的完全自主运行的人工智能代理设计。

接下来我还会在文章中详细介绍这些框架。这些框架都是构建代理时的最佳选择,你可以根据需要使用其中一个或全部。

现在我们了解了代理是什么,让我们演示如何使用LangGraph来构建它。

构建一个简单的ReAct代理程序

一个ReAct代理是一种AI代理,它结合了推理(Re)行动(Act)在交互循环中做出决定。当创建一个ReAct代理时,LLM首先进行一个推理阶段以决定使用哪些工具,然后再生成最终响应。

在本教程中,我们将按照以下关键步骤来构建一个ReAct智能体。

  • 工具配置: 集成不同的工具,例如创建自定义工具和使用网络搜索工具功能。
  • 创建代理角色: 学习如何在LangChain中实现并使用ReAct代理。
工具配置

拿到API密钥

  • Live Score API平台上创建一个账户。
  • 在个人资料中找到你的api_key和api_secret。
  • 安全地保存这些凭证到.env文件中。
  • 前往Open AI平台并创建一个API密钥。
  • 也将这个密钥添加到你的.env文件中。

ii. 整合 API

我们希望构建一个定制工具,可以获取任何国家的所有即将进行的足球赛事。为此,我们使用Live Score API来查询赛事端点以获取这些赛事。

下面的代码演示了如何调用 API。

import requests  
import os  
from langchain.tools import tool  
from dotenv import load_dotenv  

load_dotenv()  # 从 .env 文件中加载 API 密钥  

api_key = os.getenv("SPORT_api_key")  
api_secret = os.getenv("SPORT_api_secret")  

class FootballData:  
    """  
    一个根据国家名称获取即将进行的足球比赛的类。  
    """  
    def __init__(self):  
        self.BASE_URL = "https://livescore-api.com/api-client"  
        self.api_key = api_key  
        self.api_secret = api_secret  

    def get_country_id(self, country_name):  
        """通过国家名称获取国家 ID。"""  
        url = f"{self.BASE_URL}/countries/list.json?key={self.api_key}&secret={self.api_secret}"  
        response = requests.get(url).json()  

        for country in response["data"]["country"]:  
            if country["name"].lower() == country_name.lower():  
                return country["id"]  
        return None  

    def get_competition_ids(self, country_id):  
        """获取给定国家 ID 的所有赛事的 ID。"""  
        url = f"{self.BASE_URL}/competitions/list.json?key={self.api_key}&secret={self.api_secret}&country_id={country_id}"  
        response = requests.get(url).json()  

        return [comp["id"] for comp in response["data"]["competition"]]  

    def get_upcoming_fixtures(self, competition_ids):  
        """获取给定赛事 ID 的所有即将进行的比赛。"""  
        fixtures = []  

        for comp_id in competition_ids:  
            url = f"{self.BASE_URL}/fixtures/matches.json?key={self.api_key}&secret={self.api_secret}&competition_id={comp_id}"  
            response = requests.get(url).json()  

            if "fixtures" in response["data"]:  
                fixtures.extend(response["data"]["fixtures"])  

        return fixtures  

    def get_upcoming_matches(self, country_name):  
        """获取所有即将进行的比赛,并预处理结果以提取所需信息。"""  
        country_id = self.get_country_id(country_name)  
        if not country_id:  
            return f"未找到名为 {country_name} 的国家"  

        competition_ids = self.get_competition_ids(country_id)  
        if not competition_ids:  
            return f"未找到 {country_name} 的赛事"  

        fixtures = self.get_upcoming_fixtures(competition_ids)  
        if not fixtures:  
            return f"未找到 {country_name} 的即将进行的比赛"  

        # 格式化比赛数据  
        formatted_matches = []  
        for match in fixtures:  
            formatted_matches.append(  
                f"{match['home_name']} vs {match['away_name']} at {match['location']} - {match['date']}, {match['time']}"  
            )  
        return formatted_matches

iii)定义自定义工具

上面创建的FootballData类将会在下面的代码中被引用。我们调用了类中的get_upcoming_matches方法,该方法负责获取所有即将到来的比赛。此外,在我们的代码中,可以看到函数上带有@tool装饰器。这就是我们创建自定义工具的方式——在函数上使用@tool装饰器,将其变成一个可以在AI框架中动态调用的AI代理工具。

    @工具定义  
    def 获取即将进行的比赛(query: str):  
        """使用此工具可以获取给定国家即将进行的足球比赛。请提供国家名称作为输入。"""  
        sport_tool = FootballData()  
        return sport_tool.get_upcoming_matches(query)

iv),Tavily搜索插件

我们代理的工具包中的下一个工具是 Tavily 搜索工具。这个工具将帮助我们的 LLM 实时执行网络搜索。

    从 langchain_community.tools.tavily_search 中导入 TavilySearchResults

    # 定义 web_search 为 TavilySearchResults 类的实例
    web_search = TavilySearchResults()

然后,我们将所有工具合并起来——自定义的工具“get_upcoming_matches”和“Tavily Search Tool”。

    tools = ['获取即将进行的比赛信息', '网页搜索']

既然工具已经准备好了,我们可以开始创建代理程序,并将其集成以实现决策功能。

创建一个代理

我们将构建一个ReAct代理,将工具集成到LangChain中,并让我们的大型语言模型根据用户的输入决定使用哪些工具。

i)记忆和模型设置

我们通过使用来自ChatOpenAI的gpt-4o-mini模型来初始化LLM,并添加一个记忆模块以保存交互历史。

    从langchain_openai导入ChatOpenAI  
    从langgraph.checkpoint.memory模块导入MemorySaver  
    从langgraph.prebuilt模块导入create_react_agent  

    # 内存和模型设置  
    memory = ChatOpenAI(model_name='gpt-4o-mini')

创建代理账号

通过在langGraph中使用“create_react_agent”函数并传入我们的工具、模型和记忆,我们创建了智能代理。下面是一个以图形形式展示的代理决策过程。

    #创建ReAct代理
    agent = create_react_agent(model, tools=tools, checkpointer=memory)
    # from IPython.display import Image, display

    # 显示
    # Image(agent.get_graph().draw_mermaid_png())

测试一下你的代理服务器

现在我们的代理准备好了,我们将通过发送一个查询让其执行一些任务来测试它。下面的配置是用来追踪消息的。

config = {"configurable": {"thread_id": "1"}}  
inputs = {  
    "messages": [  
        (  
            "human",  
            "搜索英格兰即将进行的所有比赛",  
        )  
    ]  
}  
result = agent.stream(inputs, config=config, stream_mode="values")  
for each_result in result:  
    message = each_result["messages"][-1]  
    # 美观打印消息
    message.pretty_print()

这是查询到的结果,“查找英格兰所有即将举行的比赛”,这是我们对代理提出的查询。代理随后正确调用了get_upcoming_matches函数(获取即将举行的比赛)以检索所有即将举行的比赛。

我们也可以通过问一个和足球无关的问题来进一步测试,看看这个代理会怎么应对。

    config = {"configurable": {"thread_id": "1"}}  
    inputs = {  
        "messages": [  
            (  
                "human",  
                "查找前十的意大利美食",  
            )  
        ]  
    }  
    result = agent.stream(inputs, config=config, stream_mode="values")  
    for result in result:  
        message = result["messages"][-1]  
        message.pretty_print()  # 将消息以美观的方式打印出来

在下面的结果里,我们让代理搜索排名前十的意大利菜馆或菜肴,它成功利用Tavily搜索工具(注:Tavily为特定品牌名称,保持原样)完成了这项任务。

谢谢你的阅读!下回见你哦。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消