فراخوانی مدلهای گفتوگو با LangChain
توسعه عاملهای هوشمند (Agentic Ai) با Langchain و Langgraph
- Initialize a provider-backed LangChain chat model.
- Use invoke, batch, and asynchronous invocation appropriately.
- Handle model invocation failures and timeouts.
از پیام تا فراخوانی مدل
**ایده اصلی**
یک مدل، چند روش اجرای متناسب با نوع کار دارد.
```mermaid
flowchart LR
A["پیامها"] --> B["Chat model"]
B --> C["invoke"]
B --> D["batch"]
B --> E["ainvoke"]
C --> F["AIMessage"]
D --> G["چند پاسخ"]
E --> H["پاسخ در کد async"]
```
ساختن Chat Model
**مثال آمادهسازی**
دادههای لازم: provider برابر `openai`، شناسه مدل `gpt-5.5` و سقف خروجی ۱۰۰ token است. ابتدا کلید را در متغیر محیطی قرار میدهیم، سپس `init_chat_model` را با همین سه تنظیم اجرا میکنیم. نتیجه، شیء `model` است که بعداً با `invoke` یا روشهای دیگر فراخوانی میشود.
فراخوانی همزمان با invoke
**مثال کامل**
ورودی: `۲` و `۳`. درخواست در `HumanMessage` قرار میگیرد. اجرای `model.invoke(messages)` یک `AIMessage` میدهد. سپس `response.content` خوانده میشود و متن پاسخ، یعنی `۵`، چاپ میشود.
چند ورودی با batch
**مثال با دو ورودی**
ورودی اول یک پرسش و ورودی دوم عبارت `۲ ضربدر ۴` است. `batch` دو `AIMessage` برمیگرداند. `responses[0].content` پاسخ پرسش اول و `responses[1].content` پاسخ محاسبه، یعنی `۸`، را میدهد. چون ورودیها به هم وابسته نیستند، batch مناسب است.
async و مدیریت انتظار
**مثال اجرای async**
تابع `ask` یک پیام میسازد. `await model.ainvoke(messages)` پاسخ را میگیرد. سپس `response.content` متن را جدا میکند. `asyncio.run(ask())` تابع را اجرا میکند و مقدار نهایی در `answer` قرار میگیرد.
خطا، timeout و مسیر امن
**دو مسیر روشن**
اگر فراخوانی موفق شود، `response.content` چاپ میشود. اگر مهلت تمام شود، پیام مخصوص `TimeoutError` چاپ میشود. برای خطاهای دیگر، پیام عمومی همراه با متن خطا چاپ میشود. در `unknown-model`، ابتدا model و provider را بررسی میکنیم؛ سپس API key و network را بررسی میکنیم.
الگوی نهایی قابلاستفاده
**انتخاب سریع**
یک ورودی در کد معمولی: `invoke`؛ چند ورودی مستقل: `batch`؛ یک ورودی در کد async: `ainvoke`.
**مثال تصمیم**
دادهها: سه پرسش مستقل در یک اسکریپت معمولی. چون تعداد ورودیها بیشتر از یکی و وابستگی میان آنها وجود ندارد، `batch` انتخاب میشود. سپس هر `AIMessage` با `response.content` خوانده و خطاها گزارش میشوند.
بازگشت به دوره