Dynamiq: AI 애플리케이션 개발을 간소화하는 RAG 및 LLM 에이전트 지원 지능형 바디 오케스트레이션 프레임워크
일반 소개
Dynamiq은 에이전트 AI 및 LLM(대규모 언어 모델링) 애플리케이션을 위해 설계된 오픈 소스 AI 오케스트레이션 프레임워크입니다. 특히 검색 증강 생성(RAG) 및 LLM 에이전트의 오케스트레이션 분야에서 AI 기반 애플리케이션의 개발을 간소화하는 것을 목표로 하며, 개발자가 빠르게 시작하고 복잡한 AI 애플리케이션을 효율적으로 구축할 수 있도록 풍부한 기능 모듈과 자세한 설명서를 제공합니다.
특수성
다이나믹은 LLM(두뇌)의 추론 능력과 특정 작업 수행 능력(손)을 결합하여 AI가 실제 문제를 해결할 수 있도록 지원하는 혁신적인 AI 프레임워크로, AI가 인간과 마찬가지로 작업을 이해하고 추론하며 실제 문제를 해결하기 위한 실질적인 조치를 취할 수 있게 해줍니다.
// ReAct의 정의:
- ReAct 는 LLM의 추론 기능과 작업 수행 기능을 결합한 프레임워크입니다.
- AI가 현실 세계를 이해하고, 계획하고, 상호 작용할 수 있도록 지원합니다.
// ReAct 에이전트의 작동 방식:
두 가지 핵심 구성 요소가 통합되어 있습니다:
- 두뇌(LLM에서 제공하는 사고력)
- 손(작업 수행 능력)
// 프레임워크 구성 요소:
- 작업
- 에이전트(인텔리전스, LLM 및 도구 포함)
- 환경
- 응답
// 실제 적용 예시:
저자는 우산이 필요한지 여부를 결정하는 시나리오를 통해 ReAct 에이전트의 워크플로우를 설명합니다:
- 사용자로부터 우산을 가져와야 하는지 묻는 작업 받기
- 도구를 사용하여 일기 예보 확인
- 추론 분석 수행
- 추천 답변 제공
// Akshay가 공유한 Dynamiq 프레임워크:
Dynamiq은 AI 애플리케이션의 개발 프로세스를 간소화하는 데 중점을 둔 차세대 AI 개발을 위한 포괄적인 프레임워크로, 다음과 같은 주요 기능을 기반으로 AI 애플리케이션을 오케스트레이션 및 관리하는 기능을 제공합니다. RAG 및 LLM의 에이전트 시스템.
// 주요 기능:
올인원: AI 애플리케이션을 개발하는 데 필요한 모든 도구와 기능을 통합하는 원스톱('올인원') 프레임워크입니다.
전문 분야:
- RAG 시스템 구성
- LLM 에이전트 관리
- AI 애플리케이션을 위한 개발 프로세스 최적화
포지셔닝:
- 개별 AI 구성 요소의 조정 및 관리에 중점을 둔 오케스트레이션 프레임워크 역할을 합니다.
- 에이전트 AI 애플리케이션 개발
- AI 앱 개발 시 개발자를 위한 복잡성 간소화
기능 목록
- 설치 및 구성파이썬 환경을 지원하기 위한 자세한 설치 가이드를 제공합니다.
- 문서 및 예제풍부한 문서와 샘플 코드를 통해 사용자가 빠르게 시작할 수 있도록 도와줍니다.
- 간단한 LLM 프로세스쉽게 이해하고 사용할 수 있도록 간단한 LLM 워크플로 예제를 제공합니다.
- 리액트 에이전트통합 E2B 코드 인터프리터로 복잡한 코딩 작업을 지원하는 에이전트입니다.
- 멀티 에이전트 스케줄링복잡한 작업을 위한 멀티 에이전트 협업 및 솔루션 지원.
- RAG 문서 색인 및 검색PDF 문서의 전처리, 벡터 임베딩 및 저장, 관련 문서 검색 및 질문 답변을 지원합니다.
- 메모리가 있는 챗봇대화 기록 저장 및 검색을 지원하는 간단한 챗봇입니다.
도움말 사용
설치 및 구성
- Python 설치컴퓨터에 파이썬이 설치되어 있는지 확인합니다.
- Dynamiq 설치::
pip install dynamiq
또는 소스 코드에서 빌드할 수도 있습니다:
git clone https://github.com/dynamiq-ai/dynamiq.git cd dynamiq poetry install
사용 예
간단한 LLM 프로세스
다음은 간단한 LLM 워크플로 예시입니다:
from dynamiq.nodes.llms.openai import OpenAI
from dynamiq.connections import OpenAI as OpenAIConnection
from dynamiq import Workflow
from dynamiq.prompts import Prompt, Message
# 定义翻译提示模板
prompt_template = """
Translate the following text into English: {{ text }}
"""
prompt = Prompt(messages=[Message(content=prompt_template, role="user")])
# 设置LLM节点
llm = OpenAI(
id="openai",
connection=OpenAIConnection(api_key="$OPENAI_API_KEY"),
model="gpt-4o",
temperature=0.3,
max_tokens=1000,
prompt=prompt
)
# 创建工作流对象
workflow = Workflow()
workflow.flow.add_nodes(llm)
# 运行工作流
result = workflow.run(input_data={"text": "Hola Mundo!"})
print(result.output)
리액트 에이전트
다음은 복잡한 코딩 작업을 지원하는 ReAct 에이전트의 예입니다:
from dynamiq.nodes.llms.openai import OpenAI
from dynamiq.connections import OpenAI as OpenAIConnection, E2B as E2BConnection
from dynamiq.nodes.agents.react import ReActAgent
from dynamiq.nodes.tools.e2b_sandbox import E2BInterpreterTool
# 初始化E2B工具
e2b_tool = E2BInterpreterTool(connection=E2BConnection(api_key="$API_KEY"))
# 设置LLM
llm = OpenAI(
id="openai",
connection=OpenAIConnection(api_key="$API_KEY"),
model="gpt-4o",
temperature=0.3,
max_tokens=1000,
)
# 创建ReAct代理
agent = ReActAgent(
name="react-agent",
llm=llm,
tools=[e2b_tool],
role="Senior Data Scientist",
max_loops=10,
)
# 运行代理
result = agent.run(input_data={"input": "Add the first 10 numbers and tell if the result is prime."})
print(result.output.get("content"))
멀티 에이전트 스케줄링
다음은 여러 상담원이 함께 작업하는 예입니다:
from dynamiq.connections import OpenAI as OpenAIConnection, ScaleSerp as ScaleSerpConnection, E2B as E2BConnection
from dynamiq.nodes.llms import OpenAI
from dynamiq.nodes.agents.orchestrators.adaptive import AdaptiveOrchestrator
from dynamiq.nodes.agents.orchestrators.adaptive_manager import AdaptiveAgentManager
from dynamiq.nodes.agents.react import ReActAgent
from dynamiq.nodes.agents.reflection import ReflectionAgent
from dynamiq.nodes.tools.e2b_sandbox import E2BInterpreterTool
from dynamiq.nodes.tools.scale_serp import ScaleSerpTool
# 初始化工具
python_tool = E2BInterpreterTool(connection=E2BConnection(api_key="$E2B_API_KEY"))
search_tool = ScaleSerpTool(connection=ScaleSerpConnection(api_key="$SCALESERP_API_KEY"))
# 初始化LLM
llm = OpenAI(connection=OpenAIConnection(api_key="$OPENAI_API_KEY"), model="gpt-4o", temperature=0.1)
# 定义代理
coding_agent = ReActAgent(
name="coding-agent",
llm=llm,
tools=[python_tool],
role="Expert agent with coding skills. Goal is to provide the solution to the input task using Python software engineering skills.",
max_loops=15,
)
planner_agent = ReflectionAgent(
name="planner-agent",
llm=llm,
role="Expert agent with planning skills. Goal is to analyze complex requests and provide a detailed action plan.",
)
search_agent = ReActAgent(
name="search-agent",
llm=llm,
tools=[search_tool],
role="Expert agent with web search skills. Goal is to provide the solution to the input task using web search and summarization skills.",
max_loops=10,
)
# 初始化自适应代理管理器
agent_manager = AdaptiveAgentManager(llm=llm)
# 创建编排器
orchestrator = AdaptiveOrchestrator(
name="adaptive-orchestrator",
agents=[coding_agent, planner_agent, search_agent],
manager=agent_manager,
)
# 定义输入任务
input_task = (
"Use coding skills to gather data about Nvidia and Intel stock prices for the last 10 years, "
"calculate the average per year for each company, and create a table. Then craft a report "
"and add a conclusion: what would have been better if I had invested $100 ten years ago?"
)
# 运行编排器
result = orchestrator.run(input_data={"input": input_task})
print(result.output.get("content"))
RAG 문서 색인 및 검색
다이나믹은 검색 증강 생성(RAG)을 지원하며, 아래 단계에 따라 이를 수행할 수 있습니다:
- 문서 전처리입력 PDF 파일을 벡터 임베딩으로 변환하여 벡터 데이터베이스에 저장합니다.
- 문서 검색관련 문서를 검색하고 사용자 쿼리를 기반으로 답변을 생성합니다.
아래는 RAG 워크플로우의 간단한 예시입니다:
from io import BytesIO
from dynamiq import Workflow
from dynamiq.connections import OpenAI as OpenAIConnection, Pinecone as PineconeConnection
from dynamiq.nodes.converters import PyPDFConverter
from dynamiq.nodes.splitters.document import DocumentSplitter
from dynamiq.nodes.embedders import OpenAIDocumentEmbedder
from dynamiq.nodes.writers import PineconeDocumentWriter
# 初始化工作流
rag_wf = Workflow()
# PDF文档转换器
converter = PyPDFConverter(document_creation_mode="one-doc-per-page")
rag_wf.flow.add_nodes(converter)
# 文档拆分器
document_splitter = (
DocumentSplitter(split_by="sentence", split_length=10, split_overlap=1)
.inputs(documents=converter.outputs.documents)
.depends_on(converter)
)
rag_wf.flow.add_nodes(document_splitter)
# OpenAI向量嵌入
embedder = (
OpenAIDocumentEmbedder(connection=OpenAIConnection(api_key="$OPENAI_API_KEY"), model="text-embedding-3-small")
.inputs(documents=document_splitter.outputs.documents)
.depends_on(document_splitter)
)
rag_wf.flow.add_nodes(embedder)
# Pinecone向量存储
vector_store = (
PineconeDocumentWriter(connection=PineconeConnection(api_key="$PINECONE_API_KEY"), index_name="default", dimension=1536)
.inputs(documents=embedder.outputs.documents)
.depends_on(embedder)
)
rag_wf.flow.add_nodes(vector_store)
# 准备输入PDF文件
file_paths = ["example.pdf"]
input_data = {
"files": [BytesIO(open(path, "rb").read()) for path in file_paths],
"metadata": [{"filename": path} for path in file_paths],
}
# 运行RAG索引流程
rag_wf.run(input_data=input_data)
메모리가 있는 챗봇
다음은 메모리가 있는 간단한 챗봇의 예입니다:
from dynamiq.connections import OpenAI as OpenAIConnection from dynamiq.memory import Memory from dynamiq.memory.backend.in_memory import InMemory from dynamiq.nodes.agents.simple import SimpleAgent from dynamiq.nodes.llms import OpenAI AGENT_ROLE = "helpful assistant, goal is to provide useful information and answer questions" llm = OpenAI( connection=OpenAIConnection(api_key="$OPENAI_API_KEY"), model="gpt-4o", temperature=0.1, ) memory = Memory(backend=InMemory()) agent = SimpleAgent( name="Agent", llm=llm, role=AGENT_ROLE, id="agent", memory=memory, ) def main(): print("Welcome to the AI Chat! (Type 'exit' to end)") while True: user_input = input("You: ") if user_input.lower() == "exit": break response = agent.run({"input": user_input}) response_content = response.output.get("content") print(f"AI: {response_content}") if __name__ == "__main__": main()
© 저작권 정책
이 글은 저작권이 있으며 무단으로 복제해서는 안 됩니다.
관련 문서
댓글 없음...