Галоўная / Артыкулы

Агентскі ІІ з LangChain — Частка 5: Агентскі RAG з ReAct і

5-я частка агентнага AI з LangChain: агентны RAG, дзе агент ReAct адначы выбірае, калі запрашваць інфармацыю, а крок адракціі пераканальвае адпаведны адказ пры ўраджэнні.

Выдавец: REACTAPP.TOP9 хв чытання2059 слоў

Крыніцы: Agentic AI with LangChain — Part 5: Agentic RAG with ReAct and Reflection

Існавайце гэта як перапрацоўаны варыянт ідэй з матэрыалу «Agentic AI with LangChain — Part 5: Agentic RAG with ReAct and Reflection», адпрацаваны для аператараў: чыстыя этапы, аранжаваныя блакі коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы задання. Адгледжэнне працюе найкрашча, калі яго розглядаць як мерыябельную паверхню. Запісаце адна ідэальная транскрыпцыя, адзін прыклад неудачы і прыметкі з вярнення да пачатковага стану прычаму, перш чым расшырваць масштабы. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісьць крок не выходзіце, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг заданняў.

Тэхнічныя концэпты

Для тэхнічных канцэпцый, перад змянайом код, неабходна ясная дэфініцыя вхідных даных, адміністратара кроку і крэтэрыяў завершэння. Аперацыёныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цэму этапу як кантракту межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаць крэтэрыі успеху і адмовіцеся ад беззвучнага частковага завершэння. Указывайце тыя часткі тэксту, якія фактычна лежалі в основе адпаведнай адказу. Без цых цітатаў аперацыёныя працавнікі не зможуць адразніць галюцынацыю ад прасоў у індэксаванні.

1. Канфігурацыі сістэмы

Для 1. Канфігурацыяў сістэмы: перад зменай коду неабходна задаць параметры вхідных дадзеных, адпаведальнага за выкананне кроку і крэтарыяў завершэння. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць трэба час выканання, а таксу токеноў чы запытак па боку ад функцыйнальных рэзультатаў. Візуабельнасць костоў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмавай версіі ў спяльныя сераўы. Неабходна цітаваць тыя часткі тэксту, якія фактычна лежалі в основе адпаведнай адпаведзі. Без цітатаў аператары не можуць розразліці галюцынацію ад прычын, зв’язаных з недастаткам індэксацыі.

OPENAI_API_KEY="<Your OpenAI API Key>"
VECTOR_DB=pinecone
PINECONE_API_KEY=<your Pinecone API Key>
PINECONE_ENVIRONMENT=gcp-starter
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT="https://api.smith.langchain.com"
LANGSMITH_API_KEY="<Your LangSmith API Key"
LANGSMITH_PROJECT="agent-ai"
TAVILY_API_KEY=<Your TAVILY API Key>
class BaseConfig(BaseSettings):
    OPENAI_API_KEY: Optional[str]
    PINECONE_API_KEY: Optional[str]
    TAVILY_API_KEY: Optional[str]

model_config = SettingsConfigDict(env_file=".env", extra="ignore")

2. Структура праекту

Для 2. Структуры праекта неабяжна прадзецьваваць інпуты, адпавядаюшчага за практыку чалавека і крэтарыя выходу пры змены коду. Аператары должны магчымаць перзапуск практыкі з вядомага пункта контролю, не спрабоўваючы з’ясаваць захаваны стан. Канфігурацыю трэба залічыць праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцыяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь граф. Наводзіць трэба тыя часткі, якія фактычна ляглі в основу адпаведзення. Без ціх цытатаў аператары не можаць разлічыць галюцынацію ад працяпуску індэксавання.

project/
├── rag_process/       # Pinecone RAG operations
│   ├── __init__.py
│   ├── extractor.py
|   └── service.py
│
├── graphs             # implement ReAct and Reflection StateGraph
│   ├── nodes.py       # graph nodes. Defined as Python functions
│   ├── graph.py       # graph workflow
│   ├── consts.py      # define node names as constants
│   └── state.py       # typed dictionary to store graph states
|
|
├── tools              # defines Pinecone retriever and get_weather tools
│   ├── retriever_tools.py    # Python function tool to retrieve Pinecone RAG
|   └── weather.py        # typed dictionary to store graph states
|
|── schemas.py          # pydantic data models
|── upload.py           # python functions to upload files asynchronously
├── main.py             # fastAPI app
├── config.py           # pydantic BaseConfig
│── dependencies.py     # dependency inject to fastAPI endpoint function
├── .env                # environment variable definition
├── client.py           # streamlit client
├── .gitignore
└── requirements.txt     # package requirements

3. Інтэграцыя шаблона ReAct

Для пункта 3. Інтэграцыя шаблону ReAct неабходна прадзефінавацыя вхідных дадзеных, адпраўніка крока і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабходна аддзеўнаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця і обработка некорэктных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Наводзіце тыя часткі тэксту, якія фактычна служылі падставай для адпаведнай адказу. Без ціх цытатаў аперацыйныя працавнікі не зможуць адразніць галюцынацыю ад прасоў у індэксаванні.

3.1. Артыкул RAG

Для інструмента RAG Retrieval Tool версіі 3.1 неабяжна практыка: перш чым зменшваць код, неабяжна адзначыць вхідныя даны, адпаведнага адпаведальнага за крок і крытэрыі завершэння. Аперацыяныя працавнікі должны магчымасць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшаў, прычына неабяжна стосавацца адзінай адпаведальнасці, а не заплутанага ланцоўка задач. Неабяжна цітаваць тые часткі тэксту, якія фактычна сталі падставай для адпаведзення. Без цітатаў аперацыяныя працавнікі не зможуць адразніць галюцынацыю ад працягу індэксавання.

@tool
async def search_agentic_docs(query: str) -> str:
    """
    Good for questions about generative agents, prompt engineering, and adversarial attacks.
    Pass a natural language search query to retrieve context from the agentic ai database.
    """
    # Simply invoke your existing vector service retriever
    docs = await vector_service.retriever.ainvoke(query)

    # Flatten the document content into a single string for the LLM
    return "\n\n".join([d.page_content for d in docs])

3.2. GraphState

Для 3.2. GraphState неабяжна прадзеўліваць вхідныя даны, абавесць крока і крэтынія выходу пры перадзмене коду. Аператары должны магчымаць паўтарнае адкрыцце крока з вядомага пункту контролю, не спрабоўваючы з’ясаваць захаваны стан. Спрацоўваць гэты этап як кантракт межа вхіднымі данымі і падтвердзенымі выходамі. Даць назвы артыфактам, прадзеўліваць перакананні пра успех і адмовіцца ад бяспечнага частковага завершэння. Цітаваць тыя часткі, якія фактычна лежалі в основе адпаведнай адказы. Без цітатаў аператары не можуць разлічыць галюцынацію ад прасоў у індэксаванні.

class GraphState(TypedDict):
    """
    Represents the state of our graphs.

    Attributes:
        question: question
        generation: LLM generation
        acceptable: whether the answer is qualified to be acceptable
        messages: list of messages
    """

    question: str
    generation: str
    acceptable: bool
    messages: Annotated[list[AnyMessage], add_messages]
    loop_count: int

3.3. ReAct Node’ы

Для 3.3. ReAct-вузлаў неабходна прадзефінавацыя вхідных дадзенняў, адпаведальнага за выкананне крока і крэтарыяў завершэння працы перад зменым коду. Аператары должны магчымае перзапускіць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выканання і кост токенаў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі траекторыя пераходзіць з дэмавай версіі ў спяльныя сераўы. Указваць тые часткі тэксту, якія фактычна ляглі в основу адпаведнай адказаў. Без ціх цытатаў аператары не можуць разлічыць галюцынацію ад прасоўкі ў індэксаванні.

4. Інтэграцыя шаблона адражэння

Для пункту 4. Інтэграцыя шаблона адкласавання, перад змінайом код неабяжна вызначыць вхідныя даны, адпаведальнага за крок і крытэрыі завершэння. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Конфігурацыю трэба залічыць праз аплявацыйны код. Файлы сераўіса, храненні секрэтных даных і флагі функцый належаць у аднам месца, якое аператары можаць пераглядаць, не чытаяўшы весь граф. Прыкладзіце часткі тэксту, якія фактычна ляглі в основу адпаведнай адказы. Без цых цітатаў аператары не можаць разлічыць галюцынацію ад працягу індэксавання. Для пункту 4. Інтэграцыя шаблона адкласавання, перад змінайом код неабяжна вызначыць вхідныя даны, адпаведальнага за крок і крытэрыі завершэння. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Валічыце маленькія, тэставальныя елементы працоўных процэсаў над вялікімі скрыптамі. Калі крок не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаныя структуры.

eline.

4.1. Як функцыонуе рэфлексія

Працюючы над раздзелам 4.1. Як функцыонуе рэфлексія, спачатку запісайце умовы: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць на падзею частковага невыпання. Такі спіс дапамагае заліцварыць пазнейшыя змены ў кодзе. Спрэцьвачайце гэты этап як угоду межаў між вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы элементам, задаць тэсты на успех і не прымайце часткова завершаныя рэзультаты без паведамлення. Змяркуйце ступень запам’ятовання на фіксаванай сэтцы пытанняў прычым перэнастроюванні запрошэнняў. Частае змены запрошэнняў рэдка калі вылечваюць слабую эфектыўнасць адзысквання інформацыі.

4.2. Запрошэння

Калі працюеце над раздзелам 4.2. Prompts, спачатку запісайце умовы кантракту: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс контроля дапамагае заліцьварыцца пад пазнейшыя змены коду. Запісвайце час выканання і вартась токенаў або запытак праза функцыйнальныя рэзултаты. Відразлівасць вартасей з самага пачатку запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмавайнага рэжыма ў спяльныя сераўеры. Зберагайце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перадзесланне ідэнтычных даных ўсё часта стоіць много рэсурсаў.

GENERATE_SYSTEM_PROMPT = f"""You are an assistant for question-answering tasks with access to multiple tools.
    use these tools to retrieve context to answer the question. If you don't know the answer,
    just say that you don't know. Use three sentences maximum and keep the answer concise.

    Tool Use Instructions:

    - Use tools as much as possible.
    - Chain tools when needed (e.g., search for info, then use that to search
      for relevant hotels)
    - Be conversational and helpful
    - If you choose to answer a question using your internal knowledge instead of a tool,
      you must be completely certain of the facts. If there is any ambiguity,
      or if the question requires up-to-date or highly specific details, you MUST use a tool to verify.

    """
GRADER_SYSTEM_PROMPT = """""You are a grader assessing whether an LLM generation addresses/resolves a
      question using the context. Generate critique and recommendations for LLM that generated the answer.
      always provide detailed recommendations, including requests for search more relevant context, generate
      answer based on context to reduce hallucination, and generate answer relevant to the question.

      The LLM generating this answer has the access to the following tools to obtain context:
      **get_weather**: search for weather information given a city name
      **search_agentic_docs**:  Good for questions about generative agents, prompt engineering, and adversarial attacks
      **TavilySearch**: General search tool from the internet.

      INSTRUCTIONS:
      (a) Evaluate if the context is relevant to the question
      Provide recommendation if context is not relevant to the question. You can suggest the LLM to use an
      appropriate tool. If there is no context, you must be completely certain of the facts. If the question is
      covered by provided tools, or there is any ambiguity,
      or if the question requires up-to-date or highly specific details, you MUST suggest to use a tool to verify answer.

      (b) Evaluate if the answer is based on the context
      if the answer is not based on the context, it is a hallucination. You should suggest to regenerate the answer
      based on the context.
      (c) Evaluate if the answer resolves the question
      if the answer does not resolves the question, suggest to regenerate the answer

      The LLM generated this answer is strictly instructed to keep its answer CONCISE (maximum of 3 sentences).
      Do NOT penalize the answer for omitting minor details if the core question is answered accurately.
      If all the evaluations are passed, no suggestions should be provided.

      CRITERIA FOR ACCEPTABLE (True):
      - If the answer is accurate, addresses the user's question using the context, and does not hallucinate,
        you MUST set acceptable to True, even if it missed some details from the context.
      - Only set acceptable to False if there is a fundamental flaw (hallucination, wrong information,
        or completely missing the point).

      OUTPUT REQUIREMENTS:

        You must return a structured output with the following fields:

        - acceptable (boolean): True if the answer passed all evaluation,
          False if any of the evaluation fails and recommendations are provided
        - recommendations (string): recommendations you provide

        INPUTS:

        question: {question}
        answer: {answer}
        context: {context}
    """

4.3. Узлы рэфлексіі

Калі працуеце над раздзелам 4.3. «Узлы адражэння», спачатку запісайце умовы вярбунка: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць пад частковыя аберанціі. Такі спіс дапамагае залічыць пазнейшыя змены ў кодзе.

5. Полны рабочы працэс

  1. Полны ўсіх этапаў працэс работае наякша, калі яго спрыяваць як мерыемую структуру. Зберагучы адна ідэальная версія рэзультата, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расшырваць масштабы. Спрыяйце гэты ўражок як кантракт межа вхіднымі дадзеннямі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаць крытэрыя успеху і адмовіцеся ад тыхняй частковай працы без паведамлення. Раздзеліце правілы частковай апрацоўкі дадзенняў ад правіл яхо выявлення. Змена ў одных не павінна прымусваць перапісванне іншых, калі змянююцыся паказчыкі якосці.

6. Компраміс межа агентства і надзеямоўнасці

7. Заключны падсумак

Чэк-ліст для эксплуатацыі