# agent-toolkit

## tool

<https://python.langchain.com/v0.2/docs/integrations/tools/>

## toolkit

<https://python.langchain.com/v0.2/docs/integrations/toolkits/>

agent executor를 사용하여 agent를 구축하는데 다음 문서를 보자.

<https://python.langchain.com/v0.2/docs/how\\_to/agent\\_executor/#jupyter-notebook>

이 섹션에서는 레거시 LangChain AgentExecutor를 사용한 구축을 다룹니다. 시작하는 데는 괜찮지만 특정 지점이 지나면 이 기능이 제공하지 않는 유연성과 제어 기능이 필요할 것입니다. 고급 에이전트를 사용하려면 LangGraph 에이전트 또는 마이그레이션 가이드를 확인하는 것이 좋습니다.

레거시로 처리되고 잇다. langgraph agent를 사용하는게 맞는거같은데 그래서 그런지 이건 대충 봐두고 바로 langgraph로 가자.

## Python REPL

```python
%pip install langchain_experimental
```

```python
from langchain_core.tools import Tool
from langchain_experimental.utilities import PythonREPL
```

```python
python_repl = PythonREPL()
```

```python
python_repl.run("print(1+1)")
```

```python
# You can create the tool to pass to an agent
repl_tool = Tool(
    name="python_repl",
    description="파이썬 셸입니다. 파이썬 명령을 실행할 때 사용합니다. 입력은 유효한 파이썬 명령이어야 합니다. 값의 출력을 확인하려면 `print(...)`를 사용하여 출력해야 합니다.",
    func=python_repl.run,
)


```

```python
repl_tool.invoke("print(5+5)")
```

## 주식 티커 찾기 agent

```python
from dotenv import load_dotenv
load_dotenv()
```

```python
from typing import Any, Type
from langchain_openai import ChatOpenAI
from langchain.tools import BaseTool
from pydantic import BaseModel, Field
from langchain.agents import initialize_agent, AgentType
```

```python

llm = ChatOpenAI(temperature=0.1)

```

```python

from langchain.utilities import DuckDuckGoSearchAPIWrapper

# schema
class StockMarketSymbolSearchToolArgsSchema(BaseModel):
    query: str = Field(description="검색할 쿼리입니다. 쿼리 예시: Apple 회사의 주식 시장 심볼")

from langchain.utilities import DuckDuckGoSearchAPIWrapper
class StockMarketSymbolSearchTool(BaseTool):
    name = "StockMarketSymbolSearchTool"
    description = """
    이 도구를 사용하여 회사의 주식 시장 심볼을 찾을 수 있습니다.
    쿼리를 인수로 입력합니다.
    """
    args_schema: Type[
        StockMarketSymbolSearchToolArgsSchema
    ] = StockMarketSymbolSearchToolArgsSchema

    def _run(self, query):
        ddg = DuckDuckGoSearchAPIWrapper()
        return ddg.run(query)
```

```python
agent = initialize_agent(
    llm=llm,
    verbose=True,
    agent=AgentType.OPENAI_FUNCTIONS,
    handle_parsing_errors=True,
    tools=[
        StockMarketSymbolSearchTool(),
    ],
)

prompt = "Cloudflare의 티커가 무엇인지 알려주세요. 한국어로 답변해줘"

agent.invoke(prompt)
```

## sql agent

<https://github.com/lerocha/chinook-database/blob/master/ChinookDatabase/DataSources/Chinook\\_Sqlite.sqlite>

chinook\_sqlite를 사용함

!wget '<https://github.com/lerocha/chinook-database/releases/download/v1.4.2/Chinook\\_Sqlite.sql>'

```python
from langchain_openai import ChatOpenAI
```

```python
llm = ChatOpenAI(
    temperature=0.1,
)
```

```python
from langchain_community.utilities.sql_database import SQLDatabase

db = SQLDatabase.from_uri("sqlite:///db/Chinook.sqlite")
print(db.dialect) #sqlite

print(db.get_usable_table_names())
```

```python
result = db.run("select * from artist limit 5;")
# db.run("select * from artists limit 5;")
print(type(result))
result
```

```python
from langchain_community.agent_toolkits import SQLDatabaseToolkit
toolkit = SQLDatabaseToolkit(db=db, llm=llm)
```

```python
from langchain.agents import create_sql_agent, AgentType

agent_executor = create_sql_agent(
    llm=llm,
    toolkit=toolkit,
    agent_type="openai-tools",
    verbose=False,
)

```

```python

agent_executor.invoke(
    "employees는 몇명이야?"
)
```

```python
agent_executor.invoke(
    "artist 몇명이야?"
)
```

```python
agent_executor.invoke(
    "Alanis Morissette 노래만 뽑아줘?"
)
```

```python
agent_executor.invoke({"input": "Describe the schema of the playlist table"})
```

```python
agent_executor.invoke(
    {
        "input": "국가별 총 매출을 나열합니다. 가장 많이 지출한 국가?"
    }
)
```

## langgraph

요즘은 langchain agent보다 langgraph를 사용하는 것이 좋은거같은 개인적 느낌이라. agent쪽은 많이 보지는 않고 langgraph로 바로 넘어가버릴까 합니다.

## Agent

인공지능 Agent는 사용자의 요청을 받은 후 어떤 기능을 어떤 순서로 실행할지 결정하는 역할을 합니다. Agent의 주요 특징들은 다음과 같습니다.

* 목표(정책) 기반 행동: 주어진 목표를 달성하기 위해 행동합니다.
* 자율성: 목표가 주어지면 자동으로 작동합니다.
* 감지: 주변 환경에서 정보를 수집합니다.

Tools는 Agent가 할 수 있는 일

![alt text](/files/2AJyEJzkCzp5S2hYVOGr)

1. Input: 사용자가 Agent에게 작업을 할당합니다.
2. Thought: Agent가 작업을 완수하기 위해 무엇을 할지 생각합니다.
3. Action/Action Input: 사용할 도구를 결정하고, 도구의 입력(함수의 입력값)을 결정합니다.
4. Observation: 도구의 출력 결과를 관찰합니다.
5. 관찰 결과 작업을 완료(Finish)했다는 판단에 도달할 때까지 2\~4번 과정을 반복합니다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://teamsmiley.gitbook.io/devops/ai/langchain/agent-toolkit.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
