llama-index

Форк
0
136 строк · 4.5 Кб
1
"""ReAct agent.
2

3
Simple wrapper around AgentRunner + ReActAgentWorker.
4

5
For the legacy implementation see:
6
```python
7
from llama_index.legacy.agent.legacy.react.base import ReActAgent
8
```
9

10
"""
11

12
from typing import (
13
    Any,
14
    List,
15
    Optional,
16
    Sequence,
17
    Type,
18
)
19

20
from llama_index.legacy.agent.react.formatter import ReActChatFormatter
21
from llama_index.legacy.agent.react.output_parser import ReActOutputParser
22
from llama_index.legacy.agent.react.step import ReActAgentWorker
23
from llama_index.legacy.agent.runner.base import AgentRunner
24
from llama_index.legacy.callbacks import (
25
    CallbackManager,
26
)
27
from llama_index.legacy.core.llms.types import ChatMessage
28
from llama_index.legacy.llms.llm import LLM
29
from llama_index.legacy.llms.openai import OpenAI
30
from llama_index.legacy.memory.chat_memory_buffer import ChatMemoryBuffer
31
from llama_index.legacy.memory.types import BaseMemory
32
from llama_index.legacy.objects.base import ObjectRetriever
33
from llama_index.legacy.prompts.mixin import PromptMixinType
34
from llama_index.legacy.tools import BaseTool
35

36
DEFAULT_MODEL_NAME = "gpt-3.5-turbo-0613"
37

38

39
class ReActAgent(AgentRunner):
40
    """ReAct agent.
41

42
    Subclasses AgentRunner with a ReActAgentWorker.
43

44
    For the legacy implementation see:
45
    ```python
46
    from llama_index.legacy.agent.legacy.react.base import ReActAgent
47
    ```
48

49
    """
50

51
    def __init__(
52
        self,
53
        tools: Sequence[BaseTool],
54
        llm: LLM,
55
        memory: BaseMemory,
56
        max_iterations: int = 10,
57
        react_chat_formatter: Optional[ReActChatFormatter] = None,
58
        output_parser: Optional[ReActOutputParser] = None,
59
        callback_manager: Optional[CallbackManager] = None,
60
        verbose: bool = False,
61
        tool_retriever: Optional[ObjectRetriever[BaseTool]] = None,
62
        context: Optional[str] = None,
63
    ) -> None:
64
        """Init params."""
65
        callback_manager = callback_manager or llm.callback_manager
66
        if context and react_chat_formatter:
67
            raise ValueError("Cannot provide both context and react_chat_formatter")
68
        if context:
69
            react_chat_formatter = ReActChatFormatter.from_context(context)
70

71
        step_engine = ReActAgentWorker.from_tools(
72
            tools=tools,
73
            tool_retriever=tool_retriever,
74
            llm=llm,
75
            max_iterations=max_iterations,
76
            react_chat_formatter=react_chat_formatter,
77
            output_parser=output_parser,
78
            callback_manager=callback_manager,
79
            verbose=verbose,
80
        )
81
        super().__init__(
82
            step_engine,
83
            memory=memory,
84
            llm=llm,
85
            callback_manager=callback_manager,
86
        )
87

88
    @classmethod
89
    def from_tools(
90
        cls,
91
        tools: Optional[List[BaseTool]] = None,
92
        tool_retriever: Optional[ObjectRetriever[BaseTool]] = None,
93
        llm: Optional[LLM] = None,
94
        chat_history: Optional[List[ChatMessage]] = None,
95
        memory: Optional[BaseMemory] = None,
96
        memory_cls: Type[BaseMemory] = ChatMemoryBuffer,
97
        max_iterations: int = 10,
98
        react_chat_formatter: Optional[ReActChatFormatter] = None,
99
        output_parser: Optional[ReActOutputParser] = None,
100
        callback_manager: Optional[CallbackManager] = None,
101
        verbose: bool = False,
102
        context: Optional[str] = None,
103
        **kwargs: Any,
104
    ) -> "ReActAgent":
105
        """Convenience constructor method from set of of BaseTools (Optional).
106

107
        NOTE: kwargs should have been exhausted by this point. In other words
108
        the various upstream components such as BaseSynthesizer (response synthesizer)
109
        or BaseRetriever should have picked up off their respective kwargs in their
110
        constructions.
111

112
        Returns:
113
            ReActAgent
114
        """
115
        llm = llm or OpenAI(model=DEFAULT_MODEL_NAME)
116
        if callback_manager is not None:
117
            llm.callback_manager = callback_manager
118
        memory = memory or memory_cls.from_defaults(
119
            chat_history=chat_history or [], llm=llm
120
        )
121
        return cls(
122
            tools=tools or [],
123
            tool_retriever=tool_retriever,
124
            llm=llm,
125
            memory=memory,
126
            max_iterations=max_iterations,
127
            react_chat_formatter=react_chat_formatter,
128
            output_parser=output_parser,
129
            callback_manager=callback_manager,
130
            verbose=verbose,
131
            context=context,
132
        )
133

134
    def _get_prompt_modules(self) -> PromptMixinType:
135
        """Get prompt modules."""
136
        return {"agent_worker": self.agent_worker}
137

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.