Rag Coding Assistant Sorties Code de travail dans Langchain Expression Language (LCEL) Afin de développer rapidement de nouveaux prototypes d'IA génératifs.
Le GPT-4 n'a actuellement aucune connaissance de LCEL dans ses données de formation, donc cet outil utilise une technique de génération (RAG) de récupération personnalisée pour identifier des exemples de codage pertinents et les ajouter à la fenêtre de contexte comme quelques exemples de coups.
/data est rempli d'exemples de code de travail et de contenu Meta pour aider à la récupération/data sont intégrés dans une base de données vectorielle WeAviateVous pouvez lire le processus plus en détail sur Sublack.
Ou regardez une procédure vidéo.
Il s'agit d'un prototype de travail conçu pour le développement local.
Améliorer le processus d'incorporation et de récupération: pour obtenir des correspondances de haute qualité, je n'incorpore qu'une description du raccourci pour chaque exemple de code qui extrait les spécificités clés de l'approche. Voir un exemple ci-dessous où la description utilisée dans l'incorporation est une version raccourcie des commentaires du code complet dans l'exemple de code:
"""
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?")
Une fois qu'il y a suffisamment d'exemples, je pourrais explorer la création d'un modèle affiné pour convertir les commentaires de code détaillés en cette description du strons pour intégrer à la fois les exemples de code ainsi que la demande de l'utilisateur.
Développez-le au-delà de LCEL - J'ai inclus une option dans l'exemple de balises de méta de code pour spécifier des technologies ou des mots clés. Ceux-ci pourraient être utilisés comme filtres durs dans la requête WeAviate, mais je ne les utilise pas actuellement car les résultats sont actuellement assez précis. Mais cela pourrait devenir nécessaire à mesure que l'exemple de répertoire se développe.