自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

AI Agents-2 | 手把手教你:從零開始打造AI智能體 原創(chuàng)

發(fā)布于 2025-3-24 10:36
瀏覽
0收藏

這個系列文章旨在為AI代理(AI Agent)提供全面的概述,深入研究其特征,組成部分和類型,同時探索其進化,挑戰(zhàn)和潛在的未來方向。

在??上一篇文章??中,我們深入探討了AI智能體的特性、組成、演變、挑戰(zhàn)以及未來可能性。今天,我們要更進一步,手把手教你用Python從零搭建一個AI智能體。這個智能體可以根據(jù)用戶輸入做出決策,選擇合適的工具,并執(zhí)行相應任務。話不多說,讓我們立刻開始吧!

一、什么是AI智能體?

簡單來說,AI智能體就是一個能夠自主感知環(huán)境、做出決策并采取行動以實現(xiàn)特定目標的實體。智能體的復雜程度千差萬別,從簡單地對刺激做出反應的智能體,到能夠?qū)W習并隨時間適應的高級智能體,種類繁多。

常見的智能體類型有:

  1. 反應型智能體:直接對環(huán)境變化做出反應,沒有內(nèi)部記憶。
  2. 基于模型的智能體:利用內(nèi)部的世界模型來做出決策。
  3. 目標型智能體:根據(jù)特定目標規(guī)劃行動。
  4. 效用型智能體:基于效用函數(shù)評估潛在行動,以最大化結(jié)果。

具體例子包括聊天機器人、推薦系統(tǒng)和自動駕駛汽車,它們各自利用不同類型的智能體高效、智能地完成任務。

我們今天要搭建的智能體,核心組件包括:

  • 模型:智能體的“大腦”,負責處理輸入并生成響應。
  • 工具:智能體可以根據(jù)用戶請求執(zhí)行的預定義函數(shù)。
  • 工具箱:智能體可以使用的工具集合。
  • 系統(tǒng)提示:指導智能體如何處理用戶輸入并選擇合適工具的指令集。

二、搭建智能體的準備工作

AI Agents-2 | 手把手教你:從零開始打造AI智能體-AI.x社區(qū)

在動手之前,先確保你的系統(tǒng)滿足以下條件:

(一)Python環(huán)境搭建

你需要安裝Python來運行AI智能體。以下是搭建環(huán)境的步驟:

1.安裝Python(推薦3.8及以上版本)訪問python.org,下載并安裝Python。驗證安裝是否成功:

python --version

2.創(chuàng)建虛擬環(huán)境(推薦)使用虛擬環(huán)境管理依賴項是個好習慣:

python -m venv ai_agents_env
source ai_agents_env/bin/activate  # Windows系統(tǒng)用:ai_agents_env\Scripts\activate

3.安裝依賴項進入項目目錄后,安裝所需的依賴項:

pip install -r requirements.txt

(二)本地部署Ollama

Ollama是一個用于高效運行和管理本地語言模型的工具。以下是安裝和配置步驟:

1.下載并安裝Ollama訪問Ollama官網(wǎng),下載適合你操作系統(tǒng)的安裝包,并按照說明進行安裝。

2.驗證Ollama安裝運行以下命令檢查Ollama是否安裝成功:

ollama --version

3.拉取模型(如有需要)如果你的智能體實現(xiàn)需要特定模型,可以通過以下命令拉?。?/p>

ollama pull mistral  # 將“mistral”替換為你需要的模型

三、搭建智能體的具體步驟

AI Agents-2 | 手把手教你:從零開始打造AI智能體-AI.x社區(qū)

(一)搭建環(huán)境

除了Python,我們還需要安裝一些核心庫,比如??requests???、??json???和??termcolor???,此外,我們還會用到??dotenv??來管理環(huán)境變量。

pip install requests termcolor python-dotenv

(二)定義模型類

智能體需要一個模型來處理用戶輸入。我們將創(chuàng)建一個??OllamaModel??類,它通過本地API與模型交互并生成響應。以下是基礎(chǔ)實現(xiàn):

from termcolor import colored
import os
from dotenv import load_dotenv
load_dotenv()

### 模型
import requests
import json

class OllamaModel:
    def __init__(self, model, system_prompt, temperature=0, stop=None):
        """
        初始化OllamaModel,設(shè)置模型名稱、系統(tǒng)提示、溫度和停止標記。
        """
        self.model_endpoint = "http://localhost:11434/api/generate"
        self.temperature = temperature
        self.model = model
        self.system_prompt = system_prompt
        self.headers = {"Content-Type": "application/json"}
        self.stop = stop

    def generate_text(self, prompt):
        """
        根據(jù)用戶輸入生成響應。
        """
        payload = {
            "model": self.model,
            "format": "json",
            "prompt": prompt,
            "system": self.system_prompt,
            "stream": False,
            "temperature": self.temperature,
            "stop": self.stop
        }

        try:
            response = requests.post(
                self.model_endpoint, 
                headers=self.headers, 
                data=json.dumps(payload)
            )
            response_json = response.json()
            response_text = response_json['response']
            response_dict = json.loads(response_text)

            print(colored(f"\n\n模型響應:{response_dict}", "cyan"))
            return response_dict
        except requests.RequestException as e:
            return {"error": f"調(diào)用模型時出錯!{str(e)}"}

這個類通過模型名稱、系統(tǒng)提示、溫度和停止標記初始化,并通過??generate_text??方法向模型API發(fā)送請求并返回響應。

(三)為智能體創(chuàng)建工具

接下來,我們需要為智能體創(chuàng)建一些工具。這些工具是簡單的Python函數(shù),用于執(zhí)行特定任務。比如一個基礎(chǔ)計算器和一個字符串反轉(zhuǎn)器:

import json
import operator

def basic_calculator(input_str):
    """
    執(zhí)行兩個數(shù)字的數(shù)值運算。
    """
    try:
        if isinstance(input_str, dict):
            input_dict = input_str
        else:
            input_dict = json.loads(input_str.replace("'", "\"").strip().strip("\""))
        
        ifnot all(key in input_dict for key in ['num1', 'num2', 'operation']):
            return"輸入錯誤:必須包含'num1'、'num2'和'operation'"
        
        num1 = float(input_dict['num1'])
        num2 = float(input_dict['num2'])
        operation = input_dict['operation'].lower()

        operations = {
            'add': operator.add,
            'plus': operator.add,
            'subtract': operator.sub,
            'minus': operator.sub,
            'multiply': operator.mul,
            'times': operator.mul,
            'divide': operator.truediv,
            'floor_divide': operator.floordiv,
            'modulus': operator.mod,
            'power': operator.pow
        }

        if operation notin operations:
            returnf"不支持的操作:'{operation}'。支持的操作有:{', '.join(operations.keys())}"

        if operation in ['divide', 'floor_divide', 'modulus'] and num2 == 0:
            return"除數(shù)不能為零!"

        result = operations[operation](num1, num2)
        returnf"結(jié)果是:{result:.6f}".rstrip('0').rstrip('.')
    except Exception as e:
        returnf"計算出錯:{str(e)}"

def reverse_string(input_string):
    """
    反轉(zhuǎn)字符串。
    """
    ifnot isinstance(input_string, str):
        return"輸入必須是字符串!"
    reversed_string = input_string[::-1]
    returnf"反轉(zhuǎn)后的字符串是:{reversed_string}"

(四)構(gòu)建工具箱

??ToolBox??類用于存儲智能體可以使用的工具,并為每個工具提供描述:

class ToolBox:
    def __init__(self):
        """
        初始化工具箱。
        """
        self.tools_dict = {}

    def store(self, functions_list):
        """
        存儲工具函數(shù)的名稱和描述。
        """
        for func in functions_list:
            self.tools_dict[func.__name__] = func.__doc__
        return self.tools_dict

    def tools(self):
        """
        返回存儲的工具描述。
        """
        tools_str = ""
        for name, doc in self.tools_dict.items():
            tools_str += f"{name}: \"{doc}\"\n"
        return tools_str.strip()

這個類可以幫助智能體了解可用的工具及其功能。

(五)創(chuàng)建智能體類

智能體需要思考、選擇合適的工具并執(zhí)行它。以下是??Agent??類的實現(xiàn):

agent_system_prompt_template = """
你是一個智能AI助手,可以調(diào)用以下工具。你的回答必須始終是以下JSON格式:
{{
    "tool_choice": "工具名稱",
    "tool_input": "工具輸入"
}}

工具列表及使用場景:

1. basic_calculator:用于任何數(shù)學計算
   - 輸入格式:{{"num1": 數(shù)字, "num2": 數(shù)字, "operation": "加/減/乘/除"}}
   - 示例:
     輸入:"15加7"
     輸出:{{"tool_choice": "basic_calculator", "tool_input": {{"num1": 15, "num2": 7, "operation": "add"}}}}

2. reverse_string:用于任何文本反轉(zhuǎn)請求
   - 輸入格式:直接輸入需要反轉(zhuǎn)的文本
   - 示例:
     輸入:"反轉(zhuǎn)'Hello'"
     輸出:{{"tool_choice": "reverse_string", "tool_input": "Hello"}}

3. no_tool:用于一般性對話或問題
   - 示例:
     輸入:"你是誰?"
     輸出:{{"tool_choice": "no_tool", "tool_input": "我是你的AI助手,可以幫你計算數(shù)學題、反轉(zhuǎn)文本或回答問題。"}}

請記住:你的回答必須始終是有效的JSON格式,包含"tool_choice"和"tool_input"字段。
"""

class Agent:
    def __init__(self, tools, model_service, model_name, stop=None):
        """
        初始化智能體,傳入工具列表和模型。
        """
        self.tools = tools
        self.model_service = model_service
        self.model_name = model_name
        self.stop = stop

    def prepare_tools(self):
        """
        準備工具并返回工具描述。
        """
        toolbox = ToolBox()
        toolbox.store(self.tools)
        tool_descriptions = toolbox.tools()
        return tool_descriptions

    def think(self, prompt):
        """
        根據(jù)用戶輸入生成響應。
        """
        tool_descriptions = self.prepare_tools()
        agent_system_prompt = agent_system_prompt_template.format(tool_descriptinotallow=tool_descriptions)

        model_instance = self.model_service(
            model=self.model_name,
            system_prompt=agent_system_prompt,
            temperature=0,
            stop=self.stop
        )

        agent_response_dict = model_instance.generate_text(prompt)
        return agent_response_dict

    def work(self, prompt):
        """
        解析響應并執(zhí)行工具。
        """
        agent_response_dict = self.think(prompt)
        tool_choice = agent_response_dict.get("tool_choice")
        tool_input = agent_response_dict.get("tool_input")

        for tool in self.tools:
            if tool.__name__ == tool_choice:
                response = tool(tool_input)
                print(colored(response, 'cyan'))
                return

        print(colored(tool_input, 'cyan'))
        return

這個類有三個主要方法:

  1. **??prepare_tools??**:存儲工具并返回工具描述。
  2. **??think??**:根據(jù)用戶輸入選擇合適的工具。
  3. **??work??**:執(zhí)行選定的工具并返回結(jié)果。

(六)運行智能體

最后,我們將所有組件組合起來,運行智能體。在腳本的主部分,初始化智能體并開始接受用戶輸入:

if __name__ == "__main__":
    print("\n歡迎使用AI智能體!輸入'exit'退出。")
    print("你可以讓我:")
    print("1. 進行數(shù)學計算(例如:'15加7')")
    print("2. 反轉(zhuǎn)字符串(例如:'反轉(zhuǎn)hello world')")
    print("3. 回答一般性問題\n")

    tools = [basic_calculator, reverse_string]
    model_service = OllamaModel
    model_name = "llama2"# 可以替換為其他模型,如'mistral'、'codellama'等
    stop = "<|eot_id|>"

    agent = Agent(tools=tools, model_service=model_service, model_name=model_name, stop=stop)

    whileTrue:
        prompt = input("問我任何問題:")
        if prompt.lower() == "exit":
            break

        agent.work(prompt)

四、總結(jié)

通過這篇文章,我們從零開始搭建了一個AI智能體。完成了環(huán)境搭建、模型定義、工具創(chuàng)建、工具箱構(gòu)建,并最終讓智能體運行起來。這種結(jié)構(gòu)化的搭建方式為創(chuàng)建智能、交互式的智能體奠定了堅實基礎(chǔ)。

隨著AI智能體的不斷發(fā)展,它們的應用場景將擴展到更多行業(yè),推動效率和創(chuàng)新。未來,我們將繼續(xù)探索更多功能,讓智能體變得更強大、更智能。敬請期待!


本文轉(zhuǎn)載自公眾號Halo咯咯    作者:基咯咯

原文鏈接:??https://mp.weixin.qq.com/s/Yq7FckZgv-zgj0KIu3xnVg??

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責任
已于2025-3-24 10:37:32修改
收藏
回復
舉報
回復
相關(guān)推薦