ساخت ایجنت و ابزار در LangChain با API پیکو هوش
تعریف ابزار با @tool، اتصال آن به مدل با bind_tools و ساخت ایجنت LangChain روی API سازگار با OpenAI پیکو هوش؛ با کد کامل و نکات عیبیابی.
خلاصه: ایجنت در LangChain یعنی مدلی که میتواند ابزار صدا بزند و نتیجه را در پاسخ نهایی بسازد. این کار بر پایهی tool calling (function calling) در API سازگار با OpenAI انجام میشود. در این مقاله ابتدا حلقهی ابزار را دستی میسازیم تا مکانیزم روشن شود، سپس از ایجنت آماده استفاده میکنیم. پیشنیاز: اتصال پایهی LangChain.
نصب
pip install -U "langchain>=1.0" langchain-openai
export PICO_API_KEY="YOUR_API_KEY"مدل
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-6-sol",
base_url="https://api.picoai.ir/v1",
api_key=os.environ["PICO_API_KEY"],
temperature=0,
)دما را برای ایجنتها پایین بگذارید تا انتخاب ابزار پایدارتر باشد. توجه: هر مدلی tool calling را با کیفیت یکسان انجام نمیدهد؛ پیش از استقرار، مدل را روی چند سناریوی واقعی آزمایش کنید.
تعریف ابزار
from langchain_core.tools import tool
@tool
def convert_currency(amount: float, rate: float) -> float:
"""مبلغ را با نرخ دادهشده ضرب میکند و نتیجه را برمیگرداند."""
return amount * rate
@tool
def word_count(text: str) -> int:
"""تعداد کلمات یک متن را برمیگرداند."""
return len(text.split())
tools = [convert_currency, word_count]docstring و type hint بهعنوان توضیح و schema ابزار برای مدل فرستاده میشود؛ پس واضح و دقیق بنویسید.
حلقهی دستی ابزار
from langchain_core.messages import HumanMessage, ToolMessage
llm_tools = llm.bind_tools(tools)
by_name = {t.name: t for t in tools}
messages = [HumanMessage("عبارت «سلام دنیای هوش مصنوعی» چند کلمه دارد؟")]
ai = llm_tools.invoke(messages)
messages.append(ai)
for call in ai.tool_calls:
result = by_name[call["name"]].invoke(call["args"])
messages.append(ToolMessage(content=str(result), tool_call_id=call["id"]))
final = llm_tools.invoke(messages)
print(final.content)مراحل: (۱) مدل درخواست ابزار میدهد (ai.tool_calls)، (۲) شما ابزار را اجرا میکنید، (۳) نتیجه را با و همان برمیگردانید، (۴) مدل پاسخ نهایی را مینویسد. ساختار خام این پروتکل در توضیح داده شده است.
- LangChain
- ایجنت
- tool calling
- bind_tools
- function calling