# پروژه چت این پروژه چت نشان می‌دهد که چگونه می‌توان یک دستیار چت با استفاده از مدل‌های GitHub ساخت. این چیزی است که پروژه نهایی به نظر می‌رسد: ![برنامه چت](../../../translated_images/screenshot.0a1ee0d123df681b4501eb53ffb267519fcc20aa653eabecef1e7561ddfb1cab.fa.png) کمی زمینه: ساخت دستیارهای چت با استفاده از هوش مصنوعی مولد یک روش عالی برای شروع یادگیری درباره هوش مصنوعی است. در این درس یاد خواهید گرفت که چگونه هوش مصنوعی مولد را در یک برنامه وب ادغام کنید. بیایید شروع کنیم. ## اتصال به هوش مصنوعی مولد برای بخش بک‌اند، ما از مدل‌های GitHub استفاده می‌کنیم. این یک سرویس عالی است که به شما امکان می‌دهد به صورت رایگان از هوش مصنوعی استفاده کنید. به محیط آزمایشی آن بروید و کدی که با زبان بک‌اند انتخابی شما مطابقت دارد را دریافت کنید. این چیزی است که در [GitHub Models Playground](https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground) به نظر می‌رسد. ![محیط آزمایشی هوش مصنوعی GitHub Models](../../../translated_images/playground.d2b927122224ff8ff4028fc842176e353c339147d8925455f36c92fb1655c477.fa.png) همانطور که گفتیم، برگه "Code" و زمان اجرای انتخابی خود را انتخاب کنید. ![انتخاب محیط آزمایشی](../../../translated_images/playground-choice.1d23ba7d407f47584c9f446c77f0bcf70cae794cc9c8d7849a3cca4a3693e6c4.fa.png) ### استفاده از Python در این مورد، ما Python را انتخاب می‌کنیم، که به این معناست که این کد را انتخاب می‌کنیم: ```python """Run this model in Python > pip install openai """ import os from openai import OpenAI # To authenticate with the model you will need to generate a personal access token (PAT) in your GitHub settings. # Create your PAT token by following instructions here: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens client = OpenAI( base_url="https://models.github.ai/inference", api_key=os.environ["GITHUB_TOKEN"], ) response = client.chat.completions.create( messages=[ { "role": "system", "content": "", }, { "role": "user", "content": "What is the capital of France?", } ], model="openai/gpt-4o-mini", temperature=1, max_tokens=4096, top_p=1 ) print(response.choices[0].message.content) ``` بیایید این کد را کمی تمیز کنیم تا قابل استفاده مجدد باشد: ```python def call_llm(prompt: str, system_message: str): response = client.chat.completions.create( messages=[ { "role": "system", "content": system_message, }, { "role": "user", "content": prompt, } ], model="openai/gpt-4o-mini", temperature=1, max_tokens=4096, top_p=1 ) return response.choices[0].message.content ``` با این تابع `call_llm` اکنون می‌توانیم یک پیام و یک پیام سیستمی را بگیریم و تابع نتیجه را برمی‌گرداند. ### شخصی‌سازی دستیار هوش مصنوعی اگر می‌خواهید دستیار هوش مصنوعی را شخصی‌سازی کنید، می‌توانید مشخص کنید که چگونه می‌خواهید رفتار کند، با پر کردن پیام سیستمی به این صورت: ```python call_llm("Tell me about you", "You're Albert Einstein, you only know of things in the time you were alive") ``` ## ارائه از طریق یک API وب عالی، بخش هوش مصنوعی را انجام دادیم، حالا ببینیم چگونه می‌توانیم آن را در یک API وب ادغام کنیم. برای API وب، ما Flask را انتخاب می‌کنیم، اما هر فریمورک وب دیگری نیز مناسب است. بیایید کد آن را ببینیم: ### استفاده از Python ```python # api.py from flask import Flask, request, jsonify from llm import call_llm from flask_cors import CORS app = Flask(__name__) CORS(app) # * example.com @app.route("/", methods=["GET"]) def index(): return "Welcome to this API. Call POST /hello with 'message': 'my message' as JSON payload" @app.route("/hello", methods=["POST"]) def hello(): # get message from request body { "message": "do this taks for me" } data = request.get_json() message = data.get("message", "") response = call_llm(message, "You are a helpful assistant.") return jsonify({ "response": response }) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) ``` اینجا، ما یک API Flask ایجاد می‌کنیم و یک مسیر پیش‌فرض "/" و "/chat" تعریف می‌کنیم. مسیر دوم برای استفاده توسط فرانت‌اند ما برای ارسال سوالات به آن طراحی شده است. برای ادغام *llm.py* این کاری است که باید انجام دهیم: - تابع `call_llm` را وارد کنید: ```python from llm import call_llm from flask import Flask, request ``` - آن را از مسیر "/chat" فراخوانی کنید: ```python @app.route("/hello", methods=["POST"]) def hello(): # get message from request body { "message": "do this taks for me" } data = request.get_json() message = data.get("message", "") response = call_llm(message, "You are a helpful assistant.") return jsonify({ "response": response }) ``` در اینجا درخواست ورودی را تجزیه می‌کنیم تا ویژگی `message` را از بدنه JSON دریافت کنیم. سپس با این فراخوانی LLM را فراخوانی می‌کنیم: ```python response = call_llm(message, "You are a helpful assistant") # return the response as JSON return jsonify({ "response": response }) ``` عالی، حالا کاری که لازم بود انجام دادیم. ## تنظیم Cors باید اشاره کنیم که چیزی مانند CORS، اشتراک منابع بین مبدا، تنظیم کردیم. این به این معناست که چون بک‌اند و فرانت‌اند ما روی پورت‌های مختلف اجرا می‌شوند، باید اجازه دهیم فرانت‌اند به بک‌اند دسترسی پیدا کند. ### استفاده از Python یک قطعه کد در *api.py* وجود دارد که این را تنظیم می‌کند: ```python from flask_cors import CORS app = Flask(__name__) CORS(app) # * example.com ``` در حال حاضر تنظیم شده است تا "*" را که همه مبدا‌ها هستند، اجازه دهد و این کمی ناامن است. باید آن را زمانی که به تولید می‌رویم محدود کنیم. ## اجرای پروژه برای اجرای پروژه، ابتدا باید بک‌اند و سپس فرانت‌اند خود را راه‌اندازی کنید. ### استفاده از Python خب، ما *llm.py* و *api.py* داریم، چگونه می‌توانیم این را با یک بک‌اند کار کنیم؟ خب، دو کار باید انجام دهیم: - نصب وابستگی‌ها: ```sh cd backend python -m venv venv source ./venv/bin/activate pip install openai flask flask-cors openai ``` - راه‌اندازی API ```sh python api.py ``` اگر در Codespaces هستید، باید به بخش Ports در پایین ویرایشگر بروید، روی آن کلیک راست کنید و گزینه "Port Visibility" را انتخاب کنید و "Public" را انتخاب کنید. ### کار روی فرانت‌اند حالا که یک API در حال اجرا داریم، بیایید یک فرانت‌اند برای آن ایجاد کنیم. یک فرانت‌اند حداقلی که به تدریج آن را بهبود خواهیم داد. در یک پوشه *frontend* موارد زیر را ایجاد کنید: ```text backend/ frontend/ index.html app.js styles.css ``` بیایید با **index.html** شروع کنیم: ```html