برنامه نویسی

ساخت کد ، یک عامل برای پایگاه کد خود را بسازید

مقدمه

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

تصویر

تنها کاری که باید انجام شود این بود که چیزی را بسازم که بتواند قدرت مصرف کد را در یک پایگاه داده بردار نشان دهد ، و بلافاصله در ذهن من کلیک کرد: “چرا من کل پایگاه کد خود را از تمرینات حل شده از تمرینی مصرف نمی کنم؟”
اینگونه است که من Code-Ragent ، دستیار برنامه نویسی دوستانه شما را بر اساس کد های شخصی شما ایجاد کردم و در جستجوی وب پایه گذاری شده ام. این ساختمان در بالای GPT-4.1 ساخته شده است که توسط OpenAi ، Linkup ، Llamaindex ، Qdrant ، FastAPI و Streamlit ساخته شده است.
ساختمان این پروژه با هدف تهیه یک عامل قابل تکرار و سازگار انجام شده است که بنابراین مردم می توانند بر اساس نیازهای خود سفارشی سازی کنند و از سه مرحله تشکیل شده است:

  • تنظیم محیط
  • تهیه و مصرف داده ها
  • طراحی گردش کار عامل

تنظیم محیط

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

conda create -y -n code-ragent python=3.11 # you don't necessarily need to specify 3.11, it's for reproducibility purposes
conda activate code-ragent
حالت تمام صفحه را وارد کنید

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

حال بیایید تمام بسته های مورد نیاز را در محیط خود نصب کنیم:

python3 -m pip install ingest-anything streamlit
حالت تمام صفحه را وارد کنید

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

ingest-anything در حال حاضر تمام بسته های مورد نیاز ما را برای گرفتن کد و کار خود در حال اجرا می کند ، فقط باید اضافه کنیم streamlit، که ما برای ایجاد جلوی آن استفاده خواهیم کرد.

بیایید یک نمونه Qdrant ، به عنوان یک پایگاه داده بردار ، به صورت محلی با استفاده از Docker دریافت کنیم:

docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant:latest
حالت تمام صفحه را وارد کنید

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

مصرف داده ها

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

git clone https://github.com/AstraBert/learning-go
حالت تمام صفحه را وارد کنید

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

و اکنون می توانیم تمام پرونده های GO موجود در آن ، در اسکریپت های پایتون خود را به شرح زیر بدست آوریم:

import os

files = []
for root, _, fls in os.walk("./learning-go"):
    for f in fls:
        if f.endswith(".go"):
            files.append(os.path.join(root, f))
حالت تمام صفحه را وارد کنید

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

حال بیایید همه پرونده ها را با ingest-anything:

from ingest_anything.ingestion import IngestCode
from qdrant_client import QdrantClient, AsyncQdrantClient

client = QdrantClient("http://localhost:6333")
aclient = AsyncQdrantClient("http://localhost:6333")
ingestor = IngestCode(qdrant_client=client, async_qdrant_client=aclient, collection_name="go-code",hybrid_search=True)
vector_index = ingestor.ingest(files=files, embedding_model="Shuu12121/CodeSearch-ModernBERT-Owl", language="go")
حالت تمام صفحه را وارد کنید

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

و این همان است: مجموعه go-code اکنون در QDRANT تنظیم و در دسترس است ، بنابراین می توانیم دست خود را در واقع در طراحی گردش کار قرار دهیم.

طراحی گردش کار عامل

این یک تجسم از گردش کار کد کننده کد است:

گردش کار
ما جزئیات کد را در اینجا ، فقط مفاهیم سطح بالا مشاهده نخواهیم کرد ، اما می توانید همه چیز را در repo github پیدا کنید.

1. ابزارها

ما به سه ابزار اصلی نیاز داریم:

  • vector_search_tool این پایگاه داده وکتور را با استفاده از یک موتور پرس و جو Llamaindex جستجو می کند ، که ابتدا یک سند فرضی را تعبیه می کند (HYDE) و سپس آن را با پایگاه داده با استفاده از بازیابی ترکیبی مطابقت می دهد و یک پاسخ خلاصه نهایی ایجاد می کند.
  • web_search_tool این می تواند راه حل ها را در جستجوی وب ایجاد کند: ما از Linkup بهره برداری می کنیم ، و نتایج جستجو را به گونه ای قالب می کنیم که ابزار همیشه توضیح کد و در صورت لزوم یک قطعه کد را تولید می کند.
  • evaluate_response این می تواند درست ، وفاداری و نمره مرتبط را به پاسخ نهایی عامل بر اساس پرس و جو کاربر اصلی و در زمینه بازیابی شده (یا از وب و یا از جستجوی بردار) ارائه دهد. برای این منظور ، ما از ارزیاب های Llamaindex استفاده می کنیم

2. طراحی و خدمت به نماینده

ما از یک عامل ساده و ساده استفاده می کنیم که در ماژول گردش کار عامل در Llamaindex قرار دارد و به عامل دسترسی به تمام ابزارهای طراحی شده در نقطه (1) می دهیم.

اکنون ، این فقط مسئله استقرار نماینده در یک نقطه انتهایی API است و آن را در دسترس قسمت جلوی برنامه ما قرار می دهد: ما این کار را از طریق FastAPI انجام می دهیم و به نماینده در زیر خدمت می کنیم /chat پست پایانی

3. رابط کاربری

UI ، که با Streamlit نوشته شده است ، می تواند مانند این تنظیم شود:

import streamlit as st
import requests as rq
from pydantic import BaseModel

class ApiInput(BaseModel):
    prompt: str

def get_chat(prompt: str):
    response = rq.post("http://backend:8000/chat/", json=ApiInput(prompt=prompt).model_dump())
    actual_res = response.json()["response"]
    actual_proc = response.json()["proces"]
    return actual_res, actual_proc



st.title("Code RAGent💻")

if "messages" not in st.session_state:
    st.session_state.messages = []

for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

if prompt := st.chat_input("What is up?"):
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)
    with st.chat_message("assistant"):
        stream, proc = get_chat(
            prompt=st.session_state.messages[-1]["content"],
        )
        response = st.write(stream)
        st.session_state.messages.append({"role": "assistant", "content": stream})
        with st.expander("See Agentic Process"):
            st.write(proc)
حالت تمام صفحه را وارد کنید

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

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

رابط

تمیز و ساده!

پایان

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

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

گفته می شود ، این فقط یک سیستم عامل آماده آموزش ، به دور از کامل بودن است ، بنابراین اگر بازخورد یا پیشنهادی دارید فقط به من اطلاع دهید! ✨

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

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

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

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