برنامه نویسی

ساخت نمایندگان هوش مصنوعی با رشته ها: قسمت 2 – ادغام ابزار

به قسمت دوم سریال ما در ساخت نمایندگان هوش مصنوعی با رشته ها خوش آمدید! در قسمت 1 ، ما یک نماینده متخصص موضوع اصلی را برای آزمایشگاه یادگیری یکپارچه خود ایجاد کردیم. اکنون ، ما آن را با ادغام ابزارها برای گسترش قابلیت های نماینده خود به سطح بعدی خواهیم برد.

ابزارها همان چیزی هستند که یک عامل اصلی مکالمه را به یک دستیار واقعاً مفید تبدیل می کند که می تواند با جهان تعامل داشته باشد. در این آموزش ، ما هر دو ابزار داخلی را که توسط Strands SDK تهیه شده است ، کشف خواهیم کرد و یاد می گیریم که چگونه ابزارهای سفارشی خود را ایجاد کنیم.

آنچه یاد خواهید گرفت

  • نحوه ادغام ابزارهای داخلی از strands-agents-tools بسته بندی کردن
  • نحوه ایجاد ابزارهای سفارشی با استفاده از @tool تزیین کننده
  • نحوه اجرای عملیات پرونده برای منابع یادگیری
  • نحوه ساخت یک ابزار واژه نامه سفارشی برای نماینده ما

پیش نیازهای

درک ابزارها در رشته ها

ابزارها کارکردهایی هستند که نمایندگان می توانند از آنها برای انجام اقدامات فراتر از تولید متن استفاده کنند. آنها به نمایندگان اجازه می دهند:

  • دسترسی و دستکاری داده های خارجی (پرونده ها ، بانکهای اطلاعاتی)
  • محاسبات و پردازش تخصصی را انجام دهید
  • ایجاد ، اصلاح و مدیریت محتوا
  • از طریق API به هر سرویس خارجی متصل شوید

Strands SDK ضمن حفظ یک رویکرد با محوریت امنیتی ، ادغام ابزار را ساده می کند.

با استفاده از ابزارهای داخلی

بیایید با تقویت متخصص موضوع خود با برخی از ابزارهای داخلی از strands-agents-tools بسته:

import logging
from strands import Agent
from strands_tools import current_time, http_request

subject_expert = Agent(
    system_prompt="""You are a Computer Science Subject Expert specializing
    in explaining technical concepts clearly and concisely. Your expertise
    covers programming languages, data structures, algorithms, computer
    architecture, and software engineering principles.

    You have access to tools that help you provide more accurate and timely
    information. Use these tools when appropriate to enhance your explanations.

    When explaining concepts:
    1. Start with a clear, concise definition
    2. Provide relevant examples to illustrate the concept
    3. Explain practical applications where applicable
    4. Use tools when additional information would be valuable
    5. Cite sources when you reference external information
    """,
    tools=[current_time, http_request]
)

# Test the agent with a query that might benefit from tools
query = """
Answer the following questions:
1. What is the current time in UTC?
2. Based on Wikipedia, which CS concept can be traced back to Paul Bachmann?
"""

response = subject_expert(query)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

هنگامی که این کد را اجرا می کنید ، پاسخی شبیه به این دریافت خواهید کرد:

I'll answer both of your questions using the appropriate tools for accurate information.

### Question 1: What is the current time in UTC?

Let me get the current UTC time for you:
Tool #1: current_time

The current time in UTC is 2025-05-21T14:21:29.562062+00:00, which translates to May 21, 2025, at 14:21:29 UTC.

### Question 2: Based on Wikipedia, which CS concept can be traced back to Paul Bachmann?

Let me search for this information on Wikipedia:
Tool #2: http_request

Based on the Wikipedia article I've accessed, one of the key computer science concepts that can be traced back to Paul Bachmann is **Big O notation**.
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این نشان دهنده قدرت کلیدی رشته ها است: ابزارها بر اساس زمینه مکالمه به طور خودکار انتخاب و فراخوانی می شوندبشر بدون هیچ دستور صریح ، نماینده:

  1. اولین سوال را به رسمیت شناخت و به زمان فعلی نیاز داشت و از ابزار current_time استفاده کرد
  2. درک سوال دوم به اطلاعات خارجی نیاز داشت و از ابزار http_request استفاده کرد
  3. نتایج ابزار را یکپارچه در یک پاسخ جامع یکپارچه کرد

ایجاد یک ابزار سفارشی

در حالی که ابزارهای داخلی مفید هستند ، قدرت واقعی از ایجاد ابزارهای سفارشی متناسب با نیازهای خاص شما ناشی می شود. برای آزمایشگاه یادگیری یکپارچه ما ، بیایید ابزاری بسازیم که یک واژه نامه از اصطلاحات علوم کامپیوتر را مدیریت کند:

import os
import json
from typing import Optional
from strands import Agent, tool
from strands_tools import calculator, file_read, file_write

# Define a custom tool to manage CS terminology
@tool
def cs_glossary(action: str, term: Optional[str] = None, definition: Optional[str] = None) -> str:
    """
    Manage a glossary of computer science terms.

    Args:
        action: The action to perform: 'lookup', 'add', 'update', or 'list'.
        term: The term to look up, add, or update (not needed for 'list').
        definition: The definition to add or update (only needed for 'add' and 'update').
    """
    glossary_file = "cs_glossary.json"

    def load_glossary():
        if not os.path.exists(glossary_file):
            with open(glossary_file, "w") as f:
                json.dump({}, f)
        with open(glossary_file, "r") as f:
            return json.load(f)

    def save_glossary(glossary):
        with open(glossary_file, "w") as f:
            json.dump(glossary, f)

    glossary = load_glossary()

    if action == "lookup":
        if not term:
            return "Error: Term is required for lookup"
        return glossary.get(term, f"Term '{term}' not found in the glossary")

    elif action == "add":
        if not term or not definition:
            return "Error: Both term and definition are required"
        if term in glossary:
            return f"Error: '{term}' already exists. Use 'update' instead."
        glossary[term] = definition
        save_glossary(glossary)
        return f"Added '{term}' to the glossary"

    elif action == "update":
        if not term or not definition:
            return "Error: Both term and definition are required"
        if term not in glossary:
            return f"Error: Term '{term}' not found. Use 'add' instead."
        glossary[term] = definition
        save_glossary(glossary)
        return f"Updated definition for '{term}'"

    elif action == "list":
        if not glossary:
            return "The glossary is empty"
        return "\n".join(f"- {t}" for t in sorted(glossary))

    return f"Error: Unknown action '{action}'. Use 'lookup', 'add', 'update', or 'list'."
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چند یادداشت مهم در مورد این اجرای:

  1. ما از @tool دکوراتور برای تبدیل یک عملکرد معمولی پایتون به یک ابزار
  2. از Docstring و Type Type برای تولید مشخصات ابزار استفاده می شود
  3. ما اعتبار سنجی ورودی را به عنوان احتیاط درج می کنیم
  4. این ابزار با خواندن و نوشتن به یک پرونده ، وضعیت بین دعوت ها را حفظ می کند

این رویکرد از اصول طراحی ابزار ایمن پیروی می کند ، که هنگام ساخت سیستم های هوش مصنوعی که با منابع خارجی تعامل دارند ، ضروری هستند.

ایجاد یک متخصص موضوع با ابزارهای پیشرفته

حال ، بیایید با ایجاد یک عامل متخصص موضوعی که از ابزارهای داخلی و سفارشی استفاده می کند ، همه اینها را کنار هم قرار دهیم:

# Glossary @tool implementation as shown above
# ...

# Create an enhanced subject expert agent with multiple tools
subject_expert = Agent(
    system_prompt="""You are a Computer Science Subject Expert specializing
    in explaining technical concepts clearly and concisely. Your expertise
    covers programming languages, data structures, algorithms, computer
    architecture, and software engineering principles.

    You can manage a glossary of computer science terms with the cs_glossary tool.
    You can perform calculations with the calculator tool.
    You can read and write files with the file_read and file_write tools.

    When explaining concepts:
    1. Start with a clear, concise definition
    2. Check the glossary for any related terms
    3. Add important terms to the glossary if they're not already there
    4. Provide relevant examples to illustrate the concept
    5. Use calculations when appropriate to demonstrate complexity or performance

    Your goal is to help learners build a solid understanding of computer
    science fundamentals.
    """,
    tools=[calculator, file_read, file_write, cs_glossary]
)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

جلسه آزمایش تعاملی

بیایید یک جلسه تعاملی ایجاد کنیم تا عامل پیشرفته خود را آزمایش کنیم:

def interactive_session():
    print("Computer Science Subject Expert (type 'exit' to quit)")
    print("---------------------------------------------------")
    print("Suggested commands to try:")
    print("- 'Add recursion to the glossary'")
    print("- 'What terms are in the glossary?'")
    print("- 'Explain the time complexity of binary search'")

    while True:
        user_input = input("\nYour question: ")

        if user_input.lower() in ["exit", "quit", "bye"]:
            print("Goodbye!")
            break

        print("\nThinking...\n")
        response = subject_expert(user_input)
        print(response)

if __name__ == "__main__":
    interactive_session()
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این را در یک پرونده ذخیره کنید (به عنوان مثال ، subject_expert_with_tools.py) و آن را اجرا کنید. شما یک جلسه تعاملی با عامل تقویت کننده ابزار خود خواهید داشت که شبیه به این است:

Computer Science Subject Expert (type 'exit' to quit)
---------------------------------------------------
Suggested commands to try:
- 'Add recursion to the glossary'
- 'What terms are in the glossary?'
- 'Explain the time complexity of binary search'

Your question: _
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

دعوت ابزار مستقیم

در حالی که نماینده به طور خودکار ابزارها را بر اساس نمایش داده های کاربر فراخوانی می کند ، گاهی اوقات ممکن است بخواهید مستقیماً از کد خود با ابزارها تماس بگیرید:

# Look up a term directly
definition = subject_expert.tool.cs_glossary(action="lookup", term="recursion")
print(f"Definition: {definition}")

# Perform a calculation directly
result = subject_expert.tool.calculator(expression="2^10")
print(f"Calculation result: {result}")
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این امر در صورت لزوم کنترل برنامه ای را به شما می دهد ، در حالی که هنوز از متن عامل بهره مند می شوید.

ملاحظات امنیتی برای طراحی ابزار

هنگام ایجاد ابزار ، همیشه این اصول امنیتی را دنبال کنید:

  1. ورودی ها را تأیید کنید: بررسی کنید که ورودی ها با انواع و قالبهای مورد انتظار مطابقت دارند
  2. مجوزها را محدود کنید: ابزارها باید حداقل دسترسی لازم را داشته باشند
  3. خروجی ها را ضد عفونی کنید: اطمینان حاصل کنید که خروجی ابزار حاوی محتوای مضر نیست
  4. رسیدگی به خطا: با ظرافت موارد و خطاهای لبه را کنترل کنید
  5. ورود به سیستم حسابرسی: عملیات حساس برای بررسی

ما cs_glossary ابزار این اصول را با اعتبارسنجی انواع ورودی ، استفاده از یک فایل خاص برای ذخیره سازی و ارائه پیام های خطای واضح پیاده سازی می کند.

آنچه ما آموخته ایم

در این آموزش ، ما:

  • ✅ ابزارهای داخلی را به مأمور متخصص موضوع ما اضافه کرد
  • ✅ یک ابزار واژه نامه سفارشی با @tool تزیین کننده
  • ✅ چندین ابزار ترکیبی برای قابلیت های پیشرفته
  • ✅ یک محیط آزمایش تعاملی ایجاد کرد

نماینده ما هم اکنون می تواند یک پایه دانش رو به رشد اصطلاحات علوم کامپیوتر را حفظ کند ، محاسبات را انجام دهد و پرونده ها را مدیریت کند – به طور قابل توجهی قابلیت های آن را فراتر از مکالمه ساده گسترش می دهد.

مراحل و منابع بعدی

در درس بعدی ، ما کاوش خواهیم کرد پروتکل زمینه مدل (MCP) برای اتصال نماینده خود با قابلیت های تخصصی خارجی. این به ما این امکان را می دهد تا بدون نیاز به اجرای همه چیز خودمان ، به ابزارهایی که توسط دیگران توسعه یافته است ، ضربه بزنید.

آماده؟ بیایید با قسمت 3: ادغام MCP ادامه دهیم

آیا می خواهید در مورد SDK Strands Agents اطلاعات بیشتری کسب کنید؟

در اینجا برخی از منابع برای کمک به شما در تعمیق درک خود آورده شده است:

دوست دارید چه نوع ابزاری بسازید؟ ایده های خود را در نظرات زیر به اشتراک بگذارید!


نکته عیب یابی: اگر ابزارها مطابق آنچه انتظار می رود کار نمی کنند ، بررسی کنید که آنها دارای اسناد مناسب و نکات نوع هستند. Strands SDK از اینها برای تولید مشخصات ابزاری که عامل برای درک آن استفاده می کند ، استفاده می کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا