ساخت یک عامل هوش مصنوعی با پروتکل زمینه MCP-Model (Anthropic's) و آداپتورهای Langchain

آیا تا به حال خواسته اید عامل هوش مصنوعی خود را ایجاد کنید که بتواند داستان بنویسد ، تصاویر ایجاد کند و وب را به صورت یک طرفه جستجو کند؟ خوب ، این دقیقاً همان چیزی است که امروز می خواهیم بسازیم! در این پست وبلاگ ، من شما را از طریق تهیه یک عامل قدرتمند هوش مصنوعی با استفاده از پروتکل زمینه مدل Anthropic (MCP) با آداپتورهای Langchain MCP راهنمایی می کنم.
آنچه در حال ساخت هستیم
ما یک عامل هوش مصنوعی چند منظوره ایجاد خواهیم کرد که ترکیبی از سه سرور MCP تخصصی برای ارائه قابلیت های زیر است:
- یک نویسنده داستان: این ابزار کاردستی داستان را بر اساس هر موضوعی که ارائه می دهید ، درگیر می کند.
- یک ژنراتور تصویر داستان: این ابزار تصاویر را برای همراهی با داستانهای ایجاد شده توسط نویسنده داستان ایجاد می کند.
- یک ابزار جستجوی گوگل: این ابزار به عامل هوش مصنوعی کمک می کند تا وب را برای تحقیق در هر موضوع ، جمع آوری اطلاعات مربوطه جستجو کند.
بهترین قسمت؟ ما همه این خدمات را با استفاده از چند سرپرست، به ما این امکان را می دهد تا یکپارچه با هر ابزار از طریق Langchain ادغام و تعامل کنیم. این رویکرد ضمن حفظ انعطاف پذیری ، ایجاد گردش کار پیچیده را آسان می کند.
شروع کار: بسته های مورد نیاز
قبل از اینکه به اجرای آن بپردازیم ، باید چند بسته پایتون را نصب کنیم. اینها ویژگی های لازم را برای تعامل با Langchain ، MCP و Google Search ارائه می دهد.
این چیزی است که شما نیاز دارید:
-
langchain-openai
: آداپتور برای مدل های زبان OpenAi. -
langchain-mcp-adapters
: آداپتورها برای تعامل با سرورهای MCP. -
googlesearch-python
: بسته ای برای تسهیل در جستجوی گوگل.
برای نصب این بسته ها ، دستور زیر را در ترمینال خود اجرا کنید:
pip install langchain-openai langchain-mcp-adapters googlesearch-python
تنظیم سرورهای MCP ما
حال ، بیایید سه سرور MCP خود را تنظیم کنیم. هر سرور وظیفه متفاوتی را در خط لوله انجام می دهد: نوشتن داستان ، تولید تصویر و جستجوی Google. در اینجا تفکیک نحوه اجرای هر سرور ارائه شده است.
1. نویسنده داستان MCP سرور
ما با ایجاد نویسنده داستان سرور این ابزار یک موضوع را می گیرد و یک داستان کوتاه در مورد آن ایجاد می کند و نتیجه آن را در قالب Markdown ارائه می دهد.
from mcp.server.fastmcp import FastMCP, Context
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
from typing import Dict, List, Union
from langchain.schema import AIMessage, HumanMessage
load_dotenv(override=True)
model = ChatOpenAI(model="gpt-4o-mini", verbose=True)
mcp = FastMCP("storywriter")
@mcp.tool()
async def write_storyt(topic: str) -> str:
"""Write a story.
Args:
topic: The story topic
Returns:
The written story as a string
"""
try:
messages = [
(
"system",
"You are a talented story writer. Create an engaging short story on the given topic in a maximum of 100 words. Provide the output in markdown format only.",
),
("human", f"The topic is: {topic}"),
]
ai_msg = await model.ainvoke(messages)
return ai_msg.content
except Exception as e:
return f"An error occurred while writing story: {e}"
if __name__ == "__main__":
mcp.run()
2. سرور MCP ژنراتور تصویر داستان
بعد ، ما می سازیم ژنراتور تصویر داستان ابزار این ابزار داستان ایجاد شده توسط نویسنده داستان را می گیرد و تصویری را ایجاد می کند که آن را تکمیل می کند. بیایید فرض کنیم شما برای ایجاد این تصاویر از یک مدل تولید تصویر مانند Dall · E Openai یا انتشار پایدار استفاده می کنید.
from mcp.server.fastmcp import FastMCP, Context
import openai
from openai import AsyncOpenAI
from typing import List
from dotenv import load_dotenv
load_dotenv(override=True)
client = AsyncOpenAI()
mcp = FastMCP("image")
@mcp.tool()
async def generate_images(topic: str) -> List[str]:
"""Generate header images for a story.
Args:
topic: The story topic
Returns:
The list of image URLs
"""
image_url_list = []
try:
images_response = await client.images.generate(
prompt= f"Photorealistic image about: {topic}.",
n= 3,
style= "natural",
response_format= "url",
)
for image in images_response.data:
image_url_list.append(image.model_dump()["url"])
return image_url_list
except openai.APIConnectionError as e:
return f"An error occurred while generating images: {e}"
if __name__ == "__main__":
mcp.run()
3. Google Search Server MCP
سرانجام ، ما تنظیم خواهیم کرد جستجوی گوگل سرور این ابزار به نماینده هوش مصنوعی ما این امکان را می دهد تا اطلاعات مربوط به یک موضوع خاص را در Google جستجو کند. این نتایج را در قالب Markdown باز می گرداند و خواندن آن را آسان می کند.
from mcp.server.fastmcp import FastMCP, Context
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
from googlesearch import search
from typing import Dict, List, Union
from langchain.schema import AIMessage, HumanMessage
load_dotenv(override=True)
model = ChatOpenAI(model="gpt-4o", verbose=True)
mcp = FastMCP("storywriter")
@mcp.tool()
async def search_google(query: str) -> str:
"""Search Google for the query and return results as markdown formatted text.
Args:
query: The search query
Returns:
Search results formatted in markdown
"""
try:
search_results = list(search(query, num_results=5)) # Limiting to 5 results
if not search_results:
return "No results found."
# Format the search results in Markdown
markdown_results = "### Search Results:\n\n"
for idx, result in enumerate(search_results, 1):
markdown_results += f"**{idx}.** [{result}](<{result}>)\n"
return markdown_results
except Exception as e:
return f"An error occurred while searching Google: {e}"
if __name__ == "__main__":
mcp.run()
~
اتصال همه چیز با multiservermcpclient
اکنون که سرورهای انفرادی را تنظیم کرده ایم ، اجازه دهید آنها را با استفاده از چند سرپرستبشر این مشتری به ما امکان می دهد چندین سرور MCP را در یک گردش کار منسجم ادغام کنیم.
import asyncio
import sys
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, AIMessage
from dotenv import load_dotenv
load_dotenv(override=True)
model = ChatOpenAI(model="gpt-4o")
python_path = sys.executable
async def main():
async with MultiServerMCPClient() as client:
await client.connect_to_server(
"storywriter",
command=python_path,
args=["write_blog.py"],
encoding_error_handler="ignore",
)
await client.connect_to_server(
"imagegenerator",
command=python_path,
args=["image.py"],
encoding_error_handler="ignore",
)
await client.connect_to_server(
"googlesearch",
command=python_path,
args=["google_search.py"],
encoding_error_handler="ignore",
)
agent = create_react_agent(model, client.get_tools(), debug=True)
review_requested = await agent.ainvoke(debug=True, input={"messages": "Write story about lord krishna and arjuna and generate images for it and also search in google for it"})
parsed_data = parse_ai_messages(review_requested)
for ai_message in parsed_data:
print(ai_message)
print("Story written successfully")
def parse_ai_messages(data):
messages = dict(data).get('messages', [])
formatted_ai_responses = []
for message in messages:
if isinstance(message, AIMessage):
formatted_message = f"### AI Response:\n\n{message.content}\n\n"
formatted_ai_responses.append(formatted_message)
return formatted_ai_responses
if __name__ == "__main__":
asyncio.run(main())
خروجی عامل
فراتر از اصول اولیه: بیشتر نماینده هوش مصنوعی ما
این فقط آغاز است! ما قبلاً یک عامل قدرتمند هوش مصنوعی ساخته ایم که قادر به نوشتن داستان ، تولید تصاویر و حتی جستجوی وب است. اما کارهای بیشتری وجود دارد که می توانیم برای تقویت توانایی های آن انجام دهیم. در این بخش ، بیایید برخی از راه های هیجان انگیز را برای انتقال عامل هوش مصنوعی خود به سطح بعدی کشف کنیم:
اضافه کردن یک سرور متن به گفتار برای روایت داستان های ما
تصور کنید که عامل هوش مصنوعی ما می تواند داستانهایی را که با صدای بلند ایجاد می کند ، بخواند. با ادغام یک سرور متن به گفتار (TTS) ، می توانیم داستان هایی را با صدای انسانی مانند زندگی کنیم. این افزودنی می تواند یک لایه اضافی از تعامل اضافه کند و داستان ها را غوطه ور تر و جذاب تر می کند.
انواع مختلفی از ابزارهای TTS برای انتخاب وجود دارد ، مانند Google Cloud Text to-Speech ، Amazon Polly یا حتی گزینه های منبع باز مانند Pyttsx3. اینها را می توان به راحتی در گردش کار موجود ما ادغام کرد تا داستانهای ما را یکپارچه روایت کنیم.
اجرای یک ویرایشگر داستان برای اصلاح داستان های تولید شده
در حالی که عامل هوش مصنوعی ما می تواند داستانهای قانع کننده ای ایجاد کند ، گاهی اوقات کمی صیقل دهنده لازم است. با اجرای یک ویرایشگر داستان ، می توانیم به کاربران این امکان را بدهیم که متن تولید شده را اصلاح کنند. این می تواند شامل ویژگی هایی مانند استفاده مجدد از جمله ، تصحیح دستور زبان و پیشنهادات برای بهبود سبک نوشتن باشد.
اضافه کردن یک لایه ویرایش به کاربران این امکان را می دهد تا داستان ها را به ترجیحات شخصی خود تنظیم کنند و آنها را حتی قابل تنظیم تر و با سبک خود هماهنگ تر کنند.
ایجاد یک سرور ترجمه برای تبدیل داستان به چندین زبان
چه می شود اگر عامل هوش مصنوعی ما بتواند داستانهایی را به زبان های مختلف ایجاد کند؟ اضافه کردن سرور ترجمه باعث می شود داستان ها به زبان های مختلف ترجمه شوند. این پتانسیل برای مخاطبان جهانی را باز می کند. ابزارهایی مانند Google Translate API ، DEEPL و متن مترجم Microsoft می توانند به دستیابی به این هدف کمک کنند.
این ویژگی می تواند عامل هوش مصنوعی ما را فراگیرتر و در دسترس تر کند و داستانهایی را به زبانهای مختلف ارائه دهد و دسترسی ما را در سراسر جهان گسترش دهد.
ایجاد رابط وب برای تعامل کاربر
برای دسترسی بیشتر عامل هوش مصنوعی ما ، ایجاد یک رابط وب را در نظر بگیرید که کاربران بتوانند مستقیماً با آن ارتباط برقرار کنند. این می تواند به کاربران امکان ارائه موضوعات ، خواندن داستان های تولید شده ، مشاهده تصاویر و حتی گوش دادن به داستانهایی را که روایت می شود ، اجازه دهد.
چارچوب هایی مانند FastAPI ، Framework Streamlit به ما کمک می کند تا به سرعت یک برنامه وب ایجاد کنیم و رابط کاربر پسند به افراد امکان می دهد تا به راحتی با نماینده هوش مصنوعی ما ارتباط برقرار کنند و تجربه کلی را تقویت کنند.
پایان
در این پست وبلاگ ، ما یک عامل جامع هوش مصنوعی را با استفاده از پروتکل زمینه مدل Anthropic (MCP) و Langchain ایجاد کرده ایم. با ترکیب چندین سرور تخصصی MCP – نوشتن سنگی ، تولید تصویر و جستجوی گوگل – ما یک عامل همه کاره ایجاد کرده ایم که می تواند داستان بنویسد ، تصاویر مربوطه را تولید کند و تحقیقات وب را جمع آوری کند ، همه یکپارچه در یک گردش کار واحد ادغام شده اند.
این رویکرد به شما امکان می دهد تا با استفاده از MCP برای اتصال ابزارهای مختلف و Langchain برای ارکستراسیون قدرتمند ، برنامه های پیچیده AI را با سهولت بسازید. امکانات بی پایان است – خواه شما در حال ساختن یک سیستم تولید محتوا ، یک دستیار تحقیق یا چیز کاملاً جدید باشید ، MCP و Langchain انعطاف پذیری و قدرتی را برای زنده ماندن دیدگاه ما فراهم می کنند.
MCP میلیون ها خلاقیت امکان پذیر است
با تشکر
صمیمی