Rag Coding Asisten Output Kode Kerja dalam Langchain Expression Language (LCEL) untuk dengan cepat mengembangkan prototipe AI generatif baru.
GPT-4 saat ini tidak memiliki pengetahuan tentang LCEL dalam data pelatihannya, sehingga alat ini menggunakan teknik generasi pengambilan-pengambilan (RAG) khusus untuk mengidentifikasi contoh pengkodean lengkap yang relevan dan menambahkannya ke jendela konteks sebagai contoh beberapa shot.
/data diisi dengan contoh kode kerja dan beberapa konten meta untuk membantu pengambilan/data tertanam dalam database vektor weaviateAnda dapat membaca tentang proses secara lebih rinci di Substack.
Atau tonton walkthrough video.
Ini adalah prototipe kerja yang dirancang untuk pengembangan lokal.
Tingkatkan proses embedding dan pengambilan: Untuk mendapatkan kecocokan berkualitas tinggi, saya hanya menanamkan deskripsi steno untuk setiap contoh kode yang mengekstraksi spesifikasi utama dari pendekatan tersebut. Lihat contoh di bawah ini di mana deskripsi yang digunakan dalam embedding adalah versi singkat dari komentar kode lengkap dalam kode contoh:
"""
tags: [langchain, rag]
description: |
- Accept string
- Retrieve matching documents using DocArrayInMemorySearch vectorstore
- Format single prompt
- Parse response as string
"""
# Create a chain that does the following:
# - Accept a string as input
# - Retrieve matching documents from a DocArrayInMemorySearch vectorstore, and pass through the results and the original question to a prompt
# - Format the prompt using variables from the object
# - Pass the prompt to OpenAI
# - Parse the OpenAI response as a string
from langchain.chat_models import ChatOpenAI
from langchain.embeddings import OpenAIEmbeddings
from langchain.prompts import ChatPromptTemplate
from langchain.schema.output_parser import StrOutputParser
from langchain.schema.runnable import RunnableParallel, RunnablePassthrough
from langchain.vectorstores import DocArrayInMemorySearch
vectorstore = DocArrayInMemorySearch.from_texts(
["Lisa likes cooking", "Bears like honey"],
embedding=OpenAIEmbeddings(),
)
retriever = vectorstore.as_retriever()
template = """Answer the question:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
model = ChatOpenAI()
output_parser = StrOutputParser()
setup_and_retrieval = RunnableParallel(
{"context": retriever, "question": RunnablePassthrough()}
)
chain = setup_and_retrieval | prompt | model | output_parser
chain.invoke("What does Lisa like?")
Setelah ada cukup contoh, saya dapat mengeksplorasi membuat model yang disetel untuk mengubah komentar kode terperinci menjadi deskripsi steno untuk menyematkan contoh kode serta permintaan pengguna.
Perluas ini di luar LCEL - Saya menyertakan opsi dalam contoh tag meta kode untuk menentukan teknologi atau kata kunci. Ini dapat digunakan sebagai filter keras dalam kueri Weaviate, tetapi saat ini saya tidak menggunakannya karena hasilnya saat ini cukup akurat. Tapi itu bisa menjadi perlu ketika contoh direktori tumbuh.