Langroid
CMU 및 UW-Madison 연구원들로부터 LLM 구동 응용 프로그램을 쉽게 구축하기 위해 직관적이고 가볍고 확장 가능하며 원칙적인 Python 프레임 워크입니다. 에이전트를 설정하고 선택적 구성 요소 (LLM, 벡터-스토어 및 도구/기능)를 장비하고 작업을 할당하며 메시지를 교환하여 문제를 공동으로 해결하도록합니다. 이 다중 에이전트 패러다임은 배우 프레임 워크에서 영감을 얻었습니다 (그러나 이것에 대해 아무것도 알 필요는 없습니다!).
Langroid
는 LLM 앱 개발에 대한 새로운 테이크로, 개발자 경험을 단순화하는 데 상당한 생각이 발생했습니다. Langchain
또는 기타 LLM 프레임 워크를 사용하지 않습니다.
Langroid 아키텍처의 (WIP) 개요를 읽으십시오
? 회사는 생산 에 Langroid를 사용하고 있습니다. 다음은 인용문입니다.
Nullify는 안전한 소프트웨어 개발을 위해 AI 에이전트를 사용합니다. 취약점을 찾고 우선 순위를 정하고 수정합니다. 우리는 Crewai, Autogen, Langchain, Langflow 등을 평가 한 후 Langroid의 Multi Agent Orchestration 프레임 워크를 내부적으로 조정했습니다. 우리는 Langroid가 설정 및 유연성의 용이성 측면에서 해당 프레임 워크보다 훨씬 우수하다는 것을 발견했습니다. Langroid의 에이전트 및 작업 추상화는 직관적이며 잘 생각하며 훌륭한 개발자 경험을 제공합니다. 우리는 생산에서 무언가를 얻는 가장 빠른 방법을 원했습니다. 다른 프레임 워크를 사용하면 몇 주가 걸렸지 만 Langroid를 사용하면 몇 분 안에 좋은 결과를 얻었습니다. 적극 권장됩니다!
-Nullify의 AI 책임자 인 Jacky Wong.
LancedB 팀 에서이 소개에서 Langroid 블로그 게시물을 참조하십시오.
ML For Healthcare (2024)에 방금 게시 : 약물 검기를위한 Langroid 기반의 다중 에이전트 걸레 시스템, 블로그 게시물 참조
우리는 기부금을 환영합니다. 기여할 내용에 대한 아이디어는 기여 문서를 참조하십시오.
LLM 애플리케이션을 구축하거나 회사를위한 Langroid에 대한 도움을 원하거나 회사 사용 사례에 대한 Langroid 기능의 우선 순위를 정하고 싶습니까? Prasad Chalasani는 컨설팅 (Advisory/Development) : Gmail Dot Com의 Pchalasani를 사용할 수 있습니다.
후원은 Github 스폰서를 통해도 승인됩니다
질문, 피드백, 아이디어? Discord에 우리와 함께하십시오!
이것은 단지 티저 일뿐입니다. 기능 부호/도구, 다중 에이전트 협업, 구조화 된 정보 추출, Docchatagent (RAG), SQLCHATAGENT, 비 오페나이 지역/원격 LLM 등과 같은 훨씬 더 많은 것이 있습니다. 아래로 스크롤하거나 문서를보십시오. OpenAI ChatCompletion API를 사용하여 2 에이전트 정보 추출 예제를 구축하는 Langroid Quick-Start Colab을 참조하십시오. OpenAI Assistants API를 대신 사용하는이 버전도 참조하십시오.
방금 출시되었습니다! Langroid Multi-Agents 및 도구를 사용하여 로컬 LLM (Mistral-7B-Instruct-V0.2) 만 사용하여 문서에서 구조화 된 정보를 추출하는 방법을 보여주는 스크립트 예제.
import langroid as lr
import langroid . language_models as lm
# set up LLM
llm_cfg = lm . OpenAIGPTConfig ( # or OpenAIAssistant to use Assistant API
# any model served via an OpenAI-compatible API
chat_model = lm . OpenAIChatModel . GPT4o , # or, e.g., "ollama/mistral"
)
# use LLM directly
mdl = lm . OpenAIGPT ( llm_cfg )
response = mdl . chat ( "What is the capital of Ontario?" , max_tokens = 10 )
# use LLM in an Agent
agent_cfg = lr . ChatAgentConfig ( llm = llm_cfg )
agent = lr . ChatAgent ( agent_cfg )
agent . llm_response ( "What is the capital of China?" )
response = agent . llm_response ( "And India?" ) # maintains conversation state
# wrap Agent in a Task to run interactive loop with user (or other agents)
task = lr . Task ( agent , name = "Bot" , system_message = "You are a helpful assistant" )
task . run ( "Hello" ) # kick off with user saying "Hello"
# 2-Agent chat loop: Teacher Agent asks questions to Student Agent
teacher_agent = lr . ChatAgent ( agent_cfg )
teacher_task = lr . Task (
teacher_agent , name = "Teacher" ,
system_message = """
Ask your student concise numbers questions, and give feedback.
Start with a question.
"""
)
student_agent = lr . ChatAgent ( agent_cfg )
student_task = lr . Task (
student_agent , name = "Student" ,
system_message = "Concisely answer the teacher's questions." ,
single_round = True ,
)
teacher_task . add_sub_task ( student_task )
teacher_task . run ()
2024 년 11 월 :
Agent
Qwen2.5-Coder-32b-Instruct
) 지원2024 년 10 월 :
2024 년 9 월 :
o1-mini
및 o1-preview
모델 지원.DocChatAgent
상호 순위 융합 (RRF)을 사용하여 다른 방법으로 검색된 청크를 순위에 올랐습니다.run_batch_task
stop_on_first_result
2024 년 8 월 :
Task.run(), Task.run_async
.2024 년 7 월 :
2024 년 6 월 :
RewindTool
은 에이전트 "Rewind and Redo"를 과거 메시지를 "및 모든 종속 메시지가 계보 추적 덕분에 지워집니다). 여기에서 메모를 읽으십시오.2024 년 5 월 :
doc-chat
, db
(데이터베이스 관련 종속성)가 제공됩니다. 아래 및 문서에서 업데이트 된 설치 지침을 참조하십시오.examples
포함시킬 수 있었으며이 목록의 임의 예제는 LLM에 대한 1- 샷 예를 생성하는 데 사용됩니다. 이는 개선되었으므로 이제 각 예제가 도구 인스턴스이거나 (설명, 도구 인스턴스)의 튜플 인 예제 목록을 제공 할 수 있습니다. 여기서 설명은 LLM이 도구를 사용하도록 리드하는 "생각"입니다 (문서의 예 참조). 일부 시나리오에서는 LLM 도구 생성 정확도를 향상시킬 수 있습니다. 또한 이제 임의의 예제 대신 모든 예제가 몇 가지 예를 생성하는 데 사용됩니다.TaskConfig
에서 구성 가능. 엔터티가 본질적으로 유사하게 말하는 근사 루프보다는 본질적으로 유사하지만 정확히 동일하지 않은 것보다 반복적으로 정확한 루프 만 감지 할 수있는 무한 루프 감지.RecipientTool
메커니즘에 대한 간단한 대안이며, 도구가 아니기 때문에 LLM이 주소를 명시 적으로 지정하도록 (이것이 중요한 시나리오에서)를 강요/상기시킬 수있는 방법이 없다는 트레이드 오프입니다.DocChatAgent
사용할 때 많은 개선 된 인용 생성 및 디스플레이.gpt-4o
는 이제 기본 LLM입니다. 이 LLM과 함께 작업하기위한 테스트 및 예제 업데이트; LLM에 해당하는 Tokenizer를 사용하십시오.litellm
통한 gemini 1.5 pro
지원QdrantDB:
배운 스파 스 삽입을 지원하기위한 업데이트.2024 년 4 월 :
chat_model="groq/llama3-8b-8192"
. 튜토리얼을 참조하십시오.Task.run(), Task.run_async(), run_batch_tasks
max_cost
및 max_tokens가 한계를 초과 할 때 종료 할 max_cost 및 max_tokens
매개 변수가 있습니다. 결과 ChatDocument.metadata
이제 작업 완료 이유 코드를 나타내는 코드 인 status
필드를 포함합니다. 또한 Redis 캐시에서 다양한 설정을 찾기위한 키로 사용되는 명시 적 session_id
필드를 사용하여 task.run()
등을 호출 할 수 있습니다. 현재 "킬 상태"를 찾는 데만 사용됩니다.이를 통해 task.kill()
또는 ClassMethod Task.kill_session(session_id)
에 의해 실행 작업을 죽일 수 있습니다. 예를 들어, 사용법은 tests/main/test_task.py의 test_task_kill
참조하십시오2024 년 3 월 :
DocChatAgent
의 동시 실행을 허용하기위한 개선 사항, 특히 test_doc_chat_agent.py
test_doc_chat_batch()
; 새로운 작업 실행 유틸리티 : run_batch_task_gen
작업 생성기를 지정할 수있는 경우 입력 당 하나의 작업을 생성합니다.DocChatAgent
이제 이미지 pdfs와 함께 작동한다는 것을 의미합니다).DocChatAgent
Context-Window 수정URLLoader
: URL이 .pdf
, .docx
등과 같은 인식 가능한 접미사로 끝나지 않을 때 헤더에서 파일 시간을 감지하십시오.sentence_transformer
모듈을 사용할 수 있는지 여부를 기반으로 자동 선택 포함 구성.unstructured
, haystack
더미, chromadb
, mkdocs
, huggingface-hub
, sentence-transformers
.import langroid as lr
가져옵니다2024 년 2 월 :
chat_model="ollama/mistral"
지정하십시오. 릴리스 노트를 참조하십시오.2024 년 1 월 :
SQLChatAgent
작동 방식과 유사). Python PKG 종속성에 대한 질문에 답변하려면이 에이전트를 사용한 스크립트 예제를 참조하십시오..doc
파일 구문 분석 지원 ( .docx
외에)OpenAIGPTConfig
에서 옵션 formatter
param을 지정하여 로컬 LLM에 대한 정확한 채팅 형식을 보장합니다.DocChatAgentConfig
에는 새로운 매개 변수가 있습니다. add_fields_to_content
기본 content
필드에 삽입 할 추가 문서 필드를 지정하여 검색을 개선합니다.2023 년 12 월 :
DocChatAgent
: 팬더 데이터 프레임 및 필터링 섭취.LanceDocChatAgent
효율적인 벡터 검색 및 전체 텍스트 검색 및 필터링을 위해 LanceDB
벡터 -DB를 활용합니다.LanceRAGTaskCreator
랜스 필터로 구성된 2- 에이전트 시스템을 생성하여 래그 에이전트로 보내기 위해 필터 및 리프레즈 쿼리를 결정하는 LanceFilterAgent
로 구성됩니다.ChatAgent
사용한 더 간단한 Task
초기화.2023 년 11 월 :
0.1.126 : Openaiassistant agent : 캐싱 지원.
0.1.117 : OpenAI Assistant API 도구 지원 : 기능을 용도로, 코드 인석 및 리트리버 (RAG), 파일 업로드. 이들은 Langroid의 작업 구조와 완벽하게 작동합니다. 문서가 준비 될 때까지 이러한 사용법을 보는 것이 가장 좋습니다.
테스트 :
예제 스크립트 :
0.1.112 : OpenAIAssistant
새로운 OpenAI Assistant API를 활용하는 ChatAgent
의 서브 클래스입니다. ChatAgent
의 드롭 인 교체로 사용될 수 있으며 대화 상태를 유지하기 위해 Asistant API에 의존하며 필요한 경우 지속적인 스레드와 비서를 활용합니다. 예 : test_openai_assistant.py
, test_openai_assistant_async.py
0.1.111 : 최신 OpenAI 모델 지원 : GPT4_TURBO
(예 : 사용법 참조)
0.1.110 : OpenAI V0.X에서 V1.1.1로 업그레이드 (조수 API 등을위한 준비); (OpenAI 버전 충돌로 인해 litellm
으로 비활성화).
2023 년 10 월 :
DocChatAgent
Re-Rankers : rank_with_diversity
, rank_to_periphery
(중간에서 손실).DocChatAgentConfig.n_neighbor_chunks > 0
경기 주위에 컨텍스트 청크를 반환 할 수 있습니다.DocChatAgent
RelevanceExtractorAgent
LLM을 추출한 문장을 사용하여 덩어리의 관련 부분을 추출하고, LangChain
이 LLMChainExtractor
에서 사용하는 순진한 "문장 구성"접근법에 비해 큰 속도를 높이고 비용 절감을 초래합니다.import langroid as lr
액세스 할 수 있습니다. 사용법 문서를 참조하십시오.2023 년 9 월 :
docx
파일로드에 대한 지원 (예비).SQLChatAgent
.2023 년 8 월 :
GoogleSearchTool
에이전트 (LLM)가 기능을 부르는/도구를 통해 Google 검색을 수행 할 수 있도록합니다. 이 도구를 에이전트에 추가하는 것이 얼마나 쉬운 지이 채팅 예제를 참조하십시오.SQLChatAgent
추가 - 최신 기고자 Rithwik Babu 덕분에!2023 년 7 월 :
TableChatAgent
추가되어 표식 데이터 세트 (데이터 프레임, 파일, URL)와 채팅하기 위해 추가되었습니다.DocChatAgent
이제 PDF 파일 또는 URL을 허용합니다.상업용 임대 문서의 주요 용어에 대한 구조화 된 정보를 추출한다고 가정 해 봅시다. Langroid-re repo에서 보여 주듯이 2 에이전트 시스템을 사용하여 Langroid로 쉽게이 작업을 수행 할 수 있습니다. (로컬 Mistral-7B 모델을 사용하여 동일한 기능을 가진 버전 의이 스크립트를 참조하십시오.) 데모는 Langroid의 여러 기능 중 몇 가지를 보여줍니다.
LeaseExtractor
작업을 담당하고 있으며 LLM (GPT4)은 DocAgent
가 답변 할 질문을 생성합니다.DocAgent
LLM (GPT4)은 벡터 스토어에서 검색하여 LeaseExtractor
의 질문에 답변하고 답변을 뒷받침하는 특정 발췌를 인용합니다.LeaseExtractor
LLM은 기능을 사용하여 구조화 된 형식으로 정보를 제공합니다.다음은 작동하는 모습입니다 (일시 정지 MP4 비디오는 여기에 있습니다).
(보다 최신 목록은 위의 업데이트/릴리스 섹션을 참조하십시오)
Task.run()
메소드는 에이전트의 응답자의 방법과 동일한 유형의 서명을 가지고 있으며, 이는 에이전트의 작업이 다른 하위 작업을 위임 할 수있는 방법의 핵심입니다. 작업의 관점에서 하위 작업은 단순히 추가 응답자이며, 에이전트의 대응자가 라운드 로빈 방식으로 사용됩니다.Agent
및 Task
추상화를 통해 사용자는 특정 기술로 에이전트를 설계하고 작업에 래핑하며 작업을 유연한 방식으로 결합 할 수 있습니다.ToolMessage
메커니즘을 지원합니다. 기능 호출 및 도구는 Pydantic을 사용하여 구현 된 동일한 개발자를 향한 인터페이스를 가지므로 도구/기능을 정의하고 에이전트를 사용할 수 있습니다. Pydantic을 사용하는 이점은 기능 호출을 위해 복잡한 JSON 사양을 작성할 필요가 없으며 LLM이 기형 JSON을 환각 할 때 Pydantic 오류 메시지가 LLM으로 다시 전송되어 고칠 수 있다는 것입니다.langroid
설치하십시오 Langroid에는 Python 3.11+가 필요합니다. 가상 환경을 사용하는 것이 좋습니다. pip
사용하여 Bare-Bones Slim 버전의 langroid
(PYPI에서)를 가상 환경에 설치하십시오.
pip install langroid
Core Langroid 패키지를 사용하면 API를 통해 OpenAI 임베드 모델을 사용할 수 있습니다. sentence-transformers
Huggingf
pip install " langroid[hf-embeddings] "
많은 실제 시나리오의 경우 추가 선택적 종속성이 필요할 수 있습니다.
doc-chat
추가로 Langroid를 설치하십시오. pip install " langroid[doc-chat] "
db
추가를 사용하십시오. pip install " langroid[db] "
` `
pip install " langroid[doc-chat,db] "
all
추가를 사용하십시오 (그러나로드/시작 시간이 길고 설치 크기가 커집니다). pip install " langroid[all] "
SQLChatAgent
(예 : 스크립트 examples/data-qa/sql-chat/sql_chat.py
)를 사용하는 경우 Postgres DB가있는 경우 다음을 수행해야합니다.
sudo apt-get install libpq-dev
,brew install postgresql
.pip install langroid[postgres]
또는 poetry add langroid[postgres]
또는 poetry install -E postgres
와 함께 Langroid를 설치하십시오. 이것이 오류가 발생하면 virtualenv에 pip install psycopg2-binary
하십시오. mysqlclient
와 관련된 이상한 오류가 발생하면 pip uninstall mysqlclient
다음 pip install mysqlclient
사용해보십시오.
시작하려면 OpenAI API 키 만 있으면됩니다. 하나가없는 경우이 OpenAI 페이지를 참조하십시오. (이것은 시작하는 가장 간단한 방법이지만 Langroid는 OpenAI의 것뿐만 아니라 실질적으로 모든 LLM과 함께 작동합니다. Open/Local LLM 및 기타 비 원주민 독점 LLM 사용에 대한 가이드를 참조하십시오.)
Repo의 루트에서 .env-template
파일을 새 파일 .env
로 복사하십시오.
cp .env-template .env
그런 다음 OpenAI API 키를 삽입하십시오. .env
파일은 이것처럼 보일 것입니다 (조직은 선택 사항이지만 일부 시나리오에서는 필요할 수 있습니다).
OPENAI_API_KEY=your-key-here-without-quotes
OPENAI_ORGANIZATION=optionally-your-organization-id
또는이를 쉘의 환경 변수로 설정할 수 있습니다 (새 쉘을 열 때마다이를 수행해야합니다).
export OPENAI_API_KEY=your-key-here-without-quotes
다음 환경 변수 설정은 선택 사항이며 일부는 특정 기능 만 사용하면 필요합니다 (아래 언급).
MOMENTO_AUTH_TOKEN
의 값으로 .env
파일에 Momento 토큰을 입력하십시오 (아래 예제 파일 참조),.env
파일에서 CACHE_TYPE=momento
에서 ( CACHE_TYPE=redis
대신 기본값 인).GoogleSearchTool
사용할 수 있도록하기 만하면됩니다. Google 검색을 LLM 도구/플러그인/기능 전화로 사용하려면 Google API 키를 설정 한 다음 Google 사용자 정의 검색 엔진 (CSE)을 설정하고 CSE ID를 가져와야합니다. (이에 대한 문서화는 어려울 수 있습니다. GPT4에 단계별 가이드를 요청하는 것이 좋습니다.) 이러한 자격 증명을 얻은 후 GOOGLE_API_KEY
및 GOOGLE_CSE_ID
의 값으로 저장 한 후 .env
파일에 저장하십시오. 이 사용 (및 다른 "무국적"도구 사용에 대한 전체 문서는 곧 출시 될 예정이지만 그 동안이 채팅 예제 GoogleSearchtool
살펴보십시오. 이러한 옵션 변수를 모두 추가하면 .env
파일이 다음과 같습니다.
OPENAI_API_KEY=your-key-here-without-quotes
GITHUB_ACCESS_TOKEN=your-personal-access-token-no-quotes
CACHE_TYPE=redis # or momento
REDIS_PASSWORD=your-redis-password-no-quotes
REDIS_HOST=your-redis-hostname-no-quotes
REDIS_PORT=your-redis-port-no-quotes
MOMENTO_AUTH_TOKEN=your-momento-token-no-quotes # instead of REDIS* variables
QDRANT_API_KEY=your-key
QDRANT_API_URL=https://your.url.here:6333 # note port number must be included
GOOGLE_API_KEY=your-key
GOOGLE_CSE_ID=your-cse-id
Azure OpenAi를 사용하는 경우 .env
파일에 추가 환경 변수가 필요합니다. 이 페이지 Microsoft Azure OpenAi는 추가 정보를 제공하며 각 환경 변수를 다음과 같이 설정할 수 있습니다.
API_KEY
의 값에서 AZURE_OPENAI_API_KEY
AZURE_OPENAI_API_BASE
ENDPOINT
값에서 보통 https://your.domain.azure.com
처럼 보입니다.AZURE_OPENAI_API_VERSION
의 경우 .env-template
에서 기본값을 사용할 수 있으며 최신 버전은 여기에서 찾을 수 있습니다.AZURE_OPENAI_DEPLOYMENT_NAME
은 배포 된 모델의 이름이며 모델 설정 중에 사용자가 정의합니다.AZURE_OPENAI_MODEL_NAME
Azure Openai는 배포 모델을 선택할 때 특정 모델 이름을 허용합니다. 선택한 정확한 모델 이름을 정확하게 넣어야합니다. 예를 들어, GPT-4 ( gpt-4-32k
또는 gpt-4
여야합니다).AZURE_OPENAI_MODEL_VERSION
이 필요합니다 AZURE_OPENAI_MODEL_NAME = gpt=4
우리는이 docker 이미지를 통해 langroid-examples
저장소의 컨테이너화 된 버전을 제공합니다. .env
파일에서 환경 변수를 설정하기 만하면됩니다. 다음 단계를 따라 컨테이너를 설정하십시오.
# get the .env file template from `langroid` repo
wget -O .env https://raw.githubusercontent.com/langroid/langroid/main/.env-template
# Edit the .env file with your favorite editor (here nano), and remove any un-used settings. E.g. there are "dummy" values like "your-redis-port" etc -- if you are not using them, you MUST remove them.
nano .env
# launch the container
docker run -it --rm -v ./.env:/langroid/.env langroid/langroid
# Use this command to run any of the scripts in the `examples` directory
python examples/ < Path/To/Example.py >
이들은 Langroid로 할 수있는 일과 코드가 어떻게 보이는지 엿볼 수있는 빠른 티저입니다.
langroid-examples
리포지토리와 상담하는 것이 좋습니다.
Langroid의 다양한 LLM 프롬프트 및 지침은 GPT-4 (및 어느 정도 GPT-4O)와 잘 어울리는 테스트되었습니다. 다른 LLM (로컬/오픈 및 독점)으로 전환하는 것은 쉽고 (위에서 언급 한 가이드 참조) 일부 응용 프로그램에는 충분할 수 있지만 일반적으로 프롬프트 및/또는 다중 에이전트 설정을 조정하지 않으면 열등한 결과가 표시 될 수 있습니다.
또한 자세한 튜토리얼은 Getting Started Guide
참조하십시오.
아래 코드 예제를 확장하려면 클릭하십시오. 이 모든 것은 Colab 노트에서 실행할 수 있습니다.
import langroid . language_models as lm
mdl = lm . OpenAIGPT ()
messages = [
lm . LLMMessage ( content = "You are a helpful assistant" , role = lm . Role . SYSTEM ),
lm . LLMMessage ( content = "What is the capital of Ontario?" , role = lm . Role . USER ),
]
response = mdl . chat ( messages , max_tokens = 200 )
print ( response . message )
cfg = lm . OpenAIGPTConfig (
chat_model = "local/localhost:8000" ,
chat_context_length = 4096
)
mdl = lm . OpenAIGPT ( cfg )
# now interact with it as above, or create an Agent + Task as shown below.
모델이 liteLLM
에서 지원되는 경우 프록시 서버를 시작할 필요가 없습니다. 위의 chat_model
param을 litellm/[provider]/[model]
, 예를 들어 litellm/anthropic/claude-instant-1
로 설정하고 위와 같이 구성 객체를 사용하십시오. litellm
사용하려면 litellm
추가로 Langroid를 설치해야합니다 : poetry install -E litellm
또는 pip install langroid[litellm]
. 원격 모델의 경우 일반적으로 API 키 등을 환경 변수로 설정해야합니다. Litellm 문서를 기반으로 설정할 수 있습니다. 필요한 환경 변수가 누락 된 경우 Langroid는 필요한 오류 메시지를 제공합니다. litellm
과 함께 langroid
사용하려면 litellm
추가를 설치해야합니다. 즉, 가상 Env에 pip install langroid[litellm]
langroid
Repo, poetry install -E litellm
.
pip install langroid[litellm]
import langroid as lr
agent = lr . ChatAgent ()
# get response from agent's LLM, and put this in an interactive loop...
# answer = agent.llm_response("What is the capital of Ontario?")
# ... OR instead, set up a task (which has a built-in loop) and run it
task = lr . Task ( agent , name = "Bot" )
task . run () # ... a loop seeking response from LLM or User at each turn
장난감 번호 게임 n
repeater_task
의 LLM은 단순히 n
반환합니다.even_task
의 llm은 n
이라면 n/2
반환합니다. 그렇지 않으면 "do not-know"odd_task
의 llm은 n
홀수이면 3*n+1
반환합니다. 그렇지 않으면 "do not-know"라고 말합니다. 이러한 각 Task
은 기본 ChatAgent
자동으로 구성합니다.
import langroid as lr
from langroid . utils . constants import NO_ANSWER
repeater_task = lr . Task (
name = "Repeater" ,
system_message = """
Your job is to repeat whatever number you receive.
""" ,
llm_delegate = True , # LLM takes charge of task
single_round = False ,
)
even_task = lr . Task (
name = "EvenHandler" ,
system_message = f"""
You will be given a number.
If it is even, divide by 2 and say the result, nothing else.
If it is odd, say { NO_ANSWER }
""" ,
single_round = True , # task done after 1 step() with valid response
)
odd_task = lr . Task (
name = "OddHandler" ,
system_message = f"""
You will be given a number n.
If it is odd, return (n*3+1), say nothing else.
If it is even, say { NO_ANSWER }
""" ,
single_round = True , # task done after 1 step() with valid response
)
그런 다음 even_task
와 odd_task
repeater_task
의 하위 작업으로 추가하고 repeater_task
실행하여 입력으로 숫자로 쫓아냅니다.
repeater_task . add_sub_task ([ even_task , odd_task ])
repeater_task . run ( "3" )
Langroid는 Pydantic을 활용하여 OpenAI의 기능을 전달하는 API 및 자체 기본 도구를 지원합니다. 이점은 스키마를 지정하기 위해 JSON을 작성할 필요가 없으며 LLM이 기형 도구 구문을 환영하면 Langroid가 Pydantic 유효성 검사 오류를 LLM으로 보냅니다.
간단한 예 : 에이전트에 비밀 번호 목록이 있고 LLM이 목록에서 가장 작은 숫자를 찾기를 원합니다. 우리는 LLM에 단일 숫자 n
인수로 가져 오는 probe
도구/함수를 제공하고 싶습니다. 에이전트의 도구 핸들러 방법은 목록에있는 숫자 수를 최대 몇 n
리턴합니다.
먼저 Langroid의 ToolMessage
클래스를 사용하여 도구를 정의하십시오.
import langroid as lr
class ProbeTool ( lr . agent . ToolMessage ):
request : str = "probe" # specifies which agent method handles this tool
purpose : str = """
To find how many numbers in my list are less than or equal to
the <number> you specify.
""" # description used to instruct the LLM on when/how to use the tool
number : int # required argument to the tool
그런 다음이 도구를 처리하는 메소드 probe
사용하여 SpyGameAgent
ChatAgent
의 서브 클래스로 정의하십시오.
class SpyGameAgent ( lr . ChatAgent ):
def __init__ ( self , config : lr . ChatAgentConfig ):
super (). __init__ ( config )
self . numbers = [ 3 , 4 , 8 , 11 , 15 , 25 , 40 , 80 , 90 ]
def probe ( self , msg : ProbeTool ) -> str :
# return how many numbers in self.numbers are less or equal to msg.number
return str ( len ([ n for n in self . numbers if n <= msg . number ]))
그런 다음 에이전트를 인스턴스화하고 도구를 사용하고 응답 할 수 있습니다.
spy_game_agent = SpyGameAgent (
lr . ChatAgentConfig (
name = "Spy" ,
vecdb = None ,
use_tools = False , # don't use Langroid native tool
use_functions_api = True , # use OpenAI function-call API
)
)
spy_game_agent . enable_message ( ProbeTool )
전체 작업 예제는 Langroid-Agent-Tool.py 스크립트를 langroid-examples
Repo의 스크립트를 참조하십시오.
에이전트가 임대 문서에서 중첩 된 JSON 구조로 임대의 주요 조건을 추출하기를 원한다고 가정 해 봅시다. 먼저 Pydantic 모델을 통해 원하는 구조를 정의하십시오.
from pydantic import BaseModel
class LeasePeriod ( BaseModel ):
start_date : str
end_date : str
class LeaseFinancials ( BaseModel ):
monthly_rent : str
deposit : str
class Lease ( BaseModel ):
period : LeasePeriod
financials : LeaseFinancials
address : str
그런 다음 LeaseMessage
도구를 Langroid의 ToolMessage
의 서브 클래스로 정의하십시오. 참고 도구에는 유형 Lease
의 필수 인수 terms
있습니다.
import langroid as lr
class LeaseMessage ( lr . agent . ToolMessage ):
request : str = "lease_info"
purpose : str = """
Collect information about a Commercial Lease.
"""
terms : Lease
그런 다음이 도구를 처리하고 에이전트를 인스턴스화 한 다음이 도구를 사용하고 응답 할 수있는 메소드 lease_info
로 LeaseExtractorAgent
정의하십시오.
class LeaseExtractorAgent ( lr . ChatAgent ):
def lease_info ( self , message : LeaseMessage ) -> str :
print (
f"""
DONE! Successfully extracted Lease Info:
{ message . terms }
"""
)
return json . dumps ( message . terms . dict ())
lease_extractor_agent = LeaseExtractorAgent ()
lease_extractor_agent . enable_message ( LeaseMessage )
전체 작업 예제는 langroid-examples
Repo의 chat_multi_extract.py
스크립트를 참조하십시오.
Langroid는이 목적을 위해 특수 에이전트 클래스 DocChatAgent
제공합니다. 여기에는 벡터 -DB의 문서 샤드, 임베딩, 스토리지 및 검색 쿼리 응답 생성이 포함됩니다. 이 수업을 사용하여 문서 모음과 채팅하는 것은 쉽습니다. 먼저 채팅 할 문서를 지정하는 doc_paths
필드를 사용하여 DocChatAgentConfig
인스턴스를 만듭니다.
import langroid as lr
from langroid . agent . special import DocChatAgentConfig , DocChatAgent
config = DocChatAgentConfig (
doc_paths = [
"https://en.wikipedia.org/wiki/Language_model" ,
"https://en.wikipedia.org/wiki/N-gram_language_model" ,
"/path/to/my/notes-on-language-models.txt" ,
],
vecdb = lr . vector_store . QdrantDBConfig (),
)
그런 다음 DocChatAgent
인스턴스화합니다 (이것은 문서를 벡터 스토어에 섭취합니다) :
agent = DocChatAgent ( config )
그런 다음 에이전트 일회성 질문을 할 수 있습니다.
agent . llm_response ( "What is a language model?" )
또는 Task
으로 래핑하고 사용자와 대화식 루프를 실행하십시오.
task = lr . Task ( agent )
task . run ()
langroid-examples
Repo의 docqa
폴더에서 전체 작업 스크립트를 참조하십시오.
Langroid를 사용하면 데이터 세트 (파일 경로, URL 또는 Dataframe)가있는 TableChatAgent
설정하여 쿼리 할 수 있습니다. 에이전트의 LLM은 함수를 통해 (또는 도구/플러그인)를 통해 쿼리에 응답하기 위해 팬더 코드를 생성하고 에이전트의 기능 처리 방법이 코드를 실행하고 답을 반환합니다.
다음은 다음과 같습니다.
import langroid as lr
from langroid . agent . special import TableChatAgent , TableChatAgentConfig
데이터 파일, URL 또는 DataFrame 용 TableChatAgent
설정합니다 (데이터 테이블에 헤더 행이 있는지 확인하십시오. 구분 기/분리기가 자동 감지).
dataset = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
# or dataset = "/path/to/my/data.csv"
# or dataset = pd.read_csv("/path/to/my/data.csv")
agent = TableChatAgent (
config = TableChatAgentConfig (
data = dataset ,
)
)
작업을 설정하고 다음과 같은 일회성 질문을하십시오.
task = lr . Task (
agent ,
name = "DataAssistant" ,
default_human_response = "" , # to avoid waiting for user input
)
result = task . run (
"What is the average alcohol content of wines with a quality rating above 7?" ,
turns = 2 # return after user question, LLM fun-call/tool response, Agent code-exec result
)
print ( result . content )
또는 또는 작업을 설정하고 사용자와 대화식 루프로 실행하십시오.
task = lr . Task ( agent , name = "DataAssistant" )
task . run ()
완전한 작업 예는 langroid-examples
Repo의 table_chat.py
스크립트를 참조하십시오.
이 프로젝트가 마음에 들면 별을 줘요? 네트워크 또는 소셜 미디어에 단어를 전파하십시오.
귀하의 지원은 Langroid의 모멘텀과 커뮤니티를 구축하는 데 도움이 될 것입니다.