안내 및 로컬 LLM이 있는 간단한 에이전트 (2023)

안내 및 로컬 LLM이 있는 간단한 에이전트 (1)

(Video) LLM 가고 싶은 분 주목!! 꿀팁 듣고 가세요~ (feat. 지원시기에 따라 합격여부가 달라진다?)

에 게시됨

더 나은 프로그래밍

·

(Video) 미국 로스쿨 과정 LLM, JD, SJD 중 뭘 선택해야할까? (미국 로스쿨 유학)

8분 읽기

·

5월 18일

--

(Video) 25명 NPC에 생성AI 탑재하고 어떻게 사는지 봤더니

빌드하려고 할 때Langchain을 사용한 ReAct 에이전트, 항상 올바르게 실행하는 것이 어렵다는 것을 알았습니다. 모델은 종종 주의를 산만하게 하고 지침을 엄격하게 따르지 않습니다. 이것은 Alpaca/Vicuna 3B-7B와 같은 소형 모델에서 더 많이 발생합니다. 정규식 구문 오류로 인해 실행이 중지됩니다. 우리의 지침을 강력하게 따르도록 만드는 것은 정말 어렵고 프롬프트를 최적화하는 데 많은 시간이 걸릴 수 있습니다. 따라서 LLM의 출력을 제어하기 위한 도구가 필요합니다. 그리고 그것이 바로안내하다!

안내"큰 언어 모델을 제어하기 위한 지침 언어"로 설명되는 Microsoft의 도구입니다. 지침 프롬프트를 쉽게 따를 수 있도록 LLM의 출력을 제어할 수 있습니다. GPT3.5–4의 경우 대부분의 지침에서 잘 작동하는 것을 볼 수 있습니다. 그러나 LLaMa 및 그 변형(Alpca, WizardML 등)과 같은 소규모 로컬 LLM을 사용하는 경우 항상 올바른 응답을 제공하지 않을 수 있습니다. 그것은 큰 문제입니다. ReAct와 같은 일부 프레임워크에는 응답을 위한 특정 지침 형식이 필요합니다. 또한 LLM이 때때로 구문 오류가 있는 JSON 형식 데이터를 제공하는 경우 처리하기 어려울 것입니다.

예를 들어 보겠습니다.

valid_dish = ["피자", "국수", "포"]

# 프롬프트 정의
order_maker = guidance("""다음은 JSON 형식의 주문입니다.
```json
{
"이름": "{{이름}}",
"나이": {{세대 '나이' 패턴='[0-9]+' 정지=','}},
"배송": "{{#select '배송'}}예{{또는}}아니요{{/select}}",
"주문": "{{'주문' 옵션 선택=valid_dish}}",
"amount": {{gen 'amount' 패턴='[0-9]+' stop=','}}
}```""")

# 캐릭터 생성
주문자(
이름="알렉스",
valid_dish=valid_dish
)

**산출**
다음은 JSON 형식의 주문입니다.
```json
{
"이름": "알렉스",
"나이": 25,
"배송": "예",
"주문": "국수",
"금액": 10
}```

보시다시피 우리는 쉽게 프롬프트를 만들고 여러 가지를 미리 정의하고 LLM이 이를 엄격하게 따르도록 강제할 수 있습니다. 에 대해 수정된 정규식을 설정합니다.나이필드{{세대 '연령' 패턴='[0–9]+' 정지=','}}, 숫자만 받고 다음으로 끝남을 의미합니다.,. 음식 유형도 다음과 같이 제한됩니다.valid_dish~에 의해“{{'주문' 옵션 선택=valid_dish}}”. 자세한 내용은 보시는 것을 추천합니다공식 Github 링크.

참고: 이 Github의 이 섹션에서 코드를 찾을 수 있습니다.https://github.com/QuangBK/localLLM_guidance

실행하기 전에 로컬 PC에 LLM이 있어야 합니다. 나는마법사 메가-13B-GPTQ이 경우. 다른 모델을 사용해보십시오. 먼저 모델을 로드하고 Guidance에서 사용하도록 합니다.

model_para = 'YOUR_MODEL_DIR'
checkpoint_para = 'YOUR_MODEL_FILE'
모델 = load_quant(model_para, checkpoint_para, 4, 128)
모델.to(DEV)
토크나이저 = AutoTokenizer.from_pretrained(model_para)

라마 = guidance.llms.Transformers(모델=모델, 토크나이저=토큰나이저, 장치=0)
guide.llm = 라마

간단한 프롬프트로 테스트해 보겠습니다. ReAct 형식을 사용하여 제대로 작동하는지 확인합니다.

valid_answers = ['조치', '최종 답변']
valid_tools = ['Google 검색']

prompt_template = """아래는 추가 컨텍스트를 제공하는 입력과 함께 작업을 설명하는 지침입니다. 요청을 적절하게 완료하는 응답을 작성하십시오.

### 지침:
최선을 다해 다음 질문에 답하십시오. 다음 도구에 액세스할 수 있습니다.

Google 검색: Google 검색을 둘러싼 래퍼입니다. 현재 이벤트에 대한 질문에 답해야 할 때 유용합니다. 입력은 관련 정보를 검색하기 위한 질문입니다.

다음 형식을 엄격하게 사용하십시오.

질문: 대답해야 하는 입력 질문
생각: 무엇을 해야할지 항상 생각해야 합니다.
조치: 취할 조치는 [Google 검색] 중 하나여야 합니다.
작업 입력: 작업에 대한 입력은 질문이어야 합니다.
관찰: 행동의 결과
... (이 생각/행동/행동 입력/관찰은 N회 반복 가능)
생각: 나는 이제 최종 답을 안다
최종 답변: 원래 입력된 질문에 대한 최종 답변

예를 들어:
질문: Microsoft CEO의 아내는 몇 살입니까?
생각: 먼저 Microsoft의 CEO가 누구인지 찾아야 합니다.
작업: Google 검색
작업 입력: Microsoft의 CEO는 누구입니까?
관찰: Satya Nadella는 Microsoft의 CEO입니다.
생각: 이제 Satya Nadella의 아내를 찾아야 합니다.
작업: Google 검색
작업 입력: Satya Nadella의 아내는 누구입니까?
관찰: Satya Nadella의 아내 이름은 Anupama Nadella입니다.
생각: 그럼 아누파마 나델라의 나이를 확인해야겠다.
작업: Google 검색
작업 입력: Anupama Nadella는 몇 살입니까?
관찰: 아누파마 나델라의 나이는 50세입니다.
생각: 이제 최종 답변을 알고 있습니다.
최종 답변: Anupama Nadella는 50세입니다.

### 입력:
{{질문}}

(Video) LangChain 실전 프로그래밍: ChatGPT 이용한 개발할때 필수 라이브러리

### 응답:
질문: {{질문}}
생각: {{gen '생각' stop='\\n'}}
조치: {{select 'tool_name' options=valid_tools}}
작업 입력: {{gen 'actInput' stop='\\n'}}
관찰:{{search actInput}}
생각: {{gen 'thought2' stop='\\n'}}
최종 답변: {{gen 'final' stop='\\n'}}"""

def searchGoogle(t):
return search.run(t)

프롬프트 = 안내(prompt_template)
result = prompt(question='Eminem은 축구 선수인가요?', search=searchGoogle, valid_answers=valid_answers, valid_tools=valid_tools)

안내 및 로컬 LLM이 있는 간단한 에이전트 (3)

와우, 그것은 매력처럼 작동합니다! 이제 이를 사용하여 ReAct 에이전트를 구축할 수 있기를 바랍니다.

도구 목록을 정의합니다. 이 경우 하나가 있습니다.searchGoogle. 계산기, SQL 검색기 등과 같은 더 많은 도구를 추가할 수 있습니다.

def searchGoogle(key_word):
return search.run(key_word)

dict_tools = {
'구글 검색': searchGoogle
}

좋아, 이제 만들어CustomAgentGuidance처럼:

클래스 CustomAgentGuidance:
def __init__(self, guidance, tools, num_iter=3):
자기 안내 = 안내
self.tools = 도구
self.num_path = num_path

def do_tool(self, tool_name, actInput):
return self.tools[tool_name](actInput)

def __call__(self, query):
prompt_start = self.guidance(prompt_start_template)
result_start = prompt_start(question=query, valid_answers=valid_answers)

result_mid = 결과_시작

for _ in range(self.num_iter - 1):
if result_mid['answer'] == '최종 답변':
부서지다
히스토리 = result_mid.__str__()
prompt_mid = self.guidance(prompt_mid_template)
result_mid = prompt_mid(history=history, do_tool=self.do_tool, valid_answers=valid_answers, valid_tools=valid_tools)

if result_mid['answer'] != '최종 답변':
히스토리 = result_mid.__str__()
prompt_mid = self.guidance(prompt_final_template)
result_final = prompt_mid(history=history, do_tool=self.do_tool, valid_answers=['최종 답변'], valid_tools=valid_tools)
또 다른:
히스토리 = result_mid.__str__()
prompt_mid = self.guidance(히스토리 + "{{gen 'fn' stop='\\n'}}")
result_final = 프롬프트_미드()
return result_final['fn']

코드는 매우 명확합니다. 당신은 프롬프트를 시작프롬프트_시작_템플릿지시와 함께. 그런 다음 모델이 "최종 답변"을 제공할 수 있는지 항상 확인하십시오. 더 많은 정보가 필요하면 관련 정보를 검색하고 제공하십시오.프롬프트_미드_템플릿. 최대 3회 반복 후 에이전트가 찾기를 중지하고 "최종 답변"을 제공합니다. 몇 가지 질문으로 테스트해 보겠습니다.

custom_agent = CustomAgentGuidance(지침, dict_tools)

list_queries = [
"맨체스터 유나이티드의 8번 연봉은 얼마입니까?",
"콩고의 인구는 얼마입니까?",
"대한민국 초대 대통령은 어디에서 태어났습니까?",
"2022년 월드컵 우승국의 인구는?"
]

final_answer = custom_agent(list_queries[0])

**산출**
### 입력:
맨체스터 유나이티드의 8번 연봉은 얼마입니까?

### 응답:
질문: 맨체스터 유나이티드의 8번 연봉은 얼마입니까?
생각: 맨체스터 유나이티드의 8번을 찾아야 합니다.
작업: Google 검색
행동 입력: Manchester United의 8번은 누구입니까?
관찰: 브루노 페르난데스는 현재 맨체스터 유나이티드의 유명한 8번 셔츠의 현직 선수입니다. 하지만 그의 전임자들 사이에서 그는 어떤 순위에 있습니까?
생각: 브루노 페르난데스의 연봉을 알아봐야겠다.
작업: Google 검색
작업 입력: Bruno Fernandes의 급여는 얼마입니까?
관찰: 브루노 페르난데스는 2020년 1월 스포르팅 CP에서 맨체스터 유나이티드에 합류하여 즉시 주급이 $59,717에서 $289,418로 인상되었습니다. 2023년 4월 3일
생각: 이제 최종 답변을 알고 있습니다.
작업: Google 검색
작업 입력: Bruno Fernandes의 급여는 얼마입니까?
관찰: 브루노 페르난데스는 2020년 1월 스포르팅 CP에서 맨체스터 유나이티드에 합류하여 즉시 주급이 $59,717에서 $289,418로 인상되었습니다. 2023년 4월 3일
생각: 이제 최종 답변을 알고 있습니다.
최종 답변: 브루노 페르난데스의 주급은 $289,418입니다.

(Video) 무엇이 다를까? GPT-4의 자동화된 AI 에이전트들의 실체! Auto-GPT부터 AgentGPT, BabyGPT, Web LLM, JARVIS까지 오후다섯씨

final_answer = custom_agent(list_queries[1])
**산출**
### 입력:
콩고 인구는?

### 응답:
질문: 콩고의 인구는 얼마입니까?
생각: 먼저 콩고의 인구를 찾아야 합니다.
작업: Google 검색
실행 입력: 콩고의 인구는 얼마입니까?
관측치: 9,589만 명(2021년)
생각: 이제 이 정보의 출처를 확인해야 합니다.
작업: Google 검색
행동 입력: 9,589만 명이 콩고의 정확한 인구입니까?
관찰: 1960년부터 2021년까지 콩고민주공화국의 인구는 1,525만 명에서 9,589만 명으로 증가했습니다. 이것은 528.9의 성장입니다 ... 콩고민주공화국: 인구 규모, 수백만 명: 해당 지표의 경우 ... 1960년에 최소 1,528만 명, 2021년에 최대 9,589만 명입니다. DR 콩고 2020 인구는 추정됩니다. UN 데이터에 따르면 중반기에는 89,561,403명입니다. DR 콩고 인구는 총 인구의 1.15%에 해당합니다... 누락: 95.89 | 포함해야 함: 95.89. 인구, 총계. 9,589만. (2021년 기준) ; GNI, 아틀라스 방법. 525억 4천만. (2021년 현재 US$ 기준) ; 1인당 GNI, 아틀라스 방법. 550. (현재 미국에서... 중앙 아프리카에 위치한 콩고 공화국(Congo-Brazzaville)은 342,000km2에 달합니다. 인구 570만 명은 대체로 젊습니다... 누락: 95.89 | 포함해야 합니다: 95.89. 현재 인구가 약 8,956만 명인 DR 콩고는 2024년에 1억 명을 초과하고 2047년까지 인구가 두 배가 될 것으로 예상됩니다. 9,589만 (2021년 기준) ; GNI, Atlas Method. 525.4억 (현재 US$ 2021년 기준) ; 1인당 GNI, Atlas ... 콩고 민주 공화국(DRC)은 아프리카에는 6,780만 명의 총 인구가 있으며 그 중 ... 누락: 95.89 | 포함해야 합니다: 95.89.토지 면적으로 볼 때 DRC는 아프리카에서 알제리에 이어 두 번째로 큰 국가이며 아프리카에서는 11번째로 큰 국가입니다. 전 세계. 약 1억 1200만 명의 인구를 가진 ... 누락: 95.89 | 포함해야 합니다: 95.89.
생각: 이제 최종 답변을 알고 있습니다.
작업: Google 검색
실행 입력: 콩고 인구에 대한 최종 답은 무엇입니까?
관찰: 중앙 아프리카에 위치한 콩고 공화국(Congo-Brazzaville)은 342,000km2에 달합니다. 인구 570만 명은 대체로 젊습니다. DRC는 세계에서 가장 가난한 5개국 중 하나입니다. 2022년 콩고 인구의 거의 62%인 약 6천만 명이 하루 2.15달러 미만으로 생활했습니다. 콩고민주공화국(DRC)은 아프리카에서 두 번째로 큰 국가로 총 인구는 6,780만 명입니다. IDP 인구 617만 명(2022년 3월 31일) ... 퓨 리서치 센터는 인구의 95.8%가 기독교인, 1.5%가 이슬람교인, 1.8%가 무종교인 것으로 추정하고 있습니다. 인구는 거의 8,500만 명이며 12 수도인 킨샤사에 100만명이 살고 있다. DRC는 대규모 광물 자원을 보유하고 있으며 ... DRC는 아프리카에서 가장 많은 국내 실향민(IDP) 인구(2023년 2월 현재 약 620만 명)와 가장 많은 수의 ... 현재 인구 DR 콩고는 2023년 5월 17일 수요일 기준으로 97,372,326명입니다(Worldometer 정교화 최신 UN 데이터 기준). DR ... 누락: 답변 | 다음을 포함해야 합니다: 답변. 콩고민주공화국(DRC) 동부의 많은 인구가 갈등 속에 살아가고 있습니다... WFP의 긴급 위기 대응은 현재 가장 인구가 많은 7개 지역을 다루고 있습니다... 콩고민주공화국(DRC)은 중앙아프리카에 위치한 국가로 인구가 약 6960만명. DRC는 ...
생각: 이제 최종 답변을 알고 있습니다.
최종 답변: 콩고 인구에 대한 최종 답변은 2023년 5월 17일 수요일 현재 97,372,326명입니다.

이제 프롬프트 최적화에 대해 걱정할 필요가 없습니다. 지침에 맡기면 지침을 따릅니다.

Videos

1. AI가 도입되면 직원 채용은 어떻게 달라질까? (이창수 올거나이즈 대표)
(티타임즈TV)
2. Transformers Agent - LLM을 이용하여 이미지/오디오 AI 모델들을 쉽게 활용
(믹스의 인공지능)
3. 미국 로스쿨 선행학습, 1L 입학 준비, LLM 준비, 영어공부, 영어타자, 추천도서, 미국변호사
(안현주 변호사 Hyunjoo Ahn)
4. 긴급 세미나. 2부 (실전) ChatGPT-replica 만들기 코드실습 (전자통신부설연구소 고우영 선임연구원)
(AI프렌즈)
5. 찐캐남 - 미국로스쿨 조언드립니다 / 어디지원해야할까? / 무엇을 봐야할까? /고민해야 할것들
(미국 변호사 케빈강)
6. 저만 알기 아까워서 알려드립니다
(성공지식백과)
Top Articles
Latest Posts
Article information

Author: Melvina Ondricka

Last Updated: 09/09/2023

Views: 5481

Rating: 4.8 / 5 (48 voted)

Reviews: 95% of readers found this page helpful

Author information

Name: Melvina Ondricka

Birthday: 2000-12-23

Address: Suite 382 139 Shaniqua Locks, Paulaborough, UT 90498

Phone: +636383657021

Job: Dynamic Government Specialist

Hobby: Kite flying, Watching movies, Knitting, Model building, Reading, Wood carving, Paintball

Introduction: My name is Melvina Ondricka, I am a helpful, fancy, friendly, innocent, outstanding, courageous, thoughtful person who loves writing and wants to share my knowledge and understanding with you.