🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Integrasi

Sistem Multi-agen dengan Mistral AI, Milvus, dan Llama-agen

Tujuan dari Buku Catatan ini

Dalam buku catatan ini, kita akan mengeksplorasi berbagai ide:

  • 1️⃣ Menyimpan Data ke dalam Milvus: Belajar menyimpan data ke dalam Milvus, sebuah basis data vektor yang efisien yang didesain untuk pencarian kemiripan berkecepatan tinggi dan aplikasi AI.

  • 2️⃣ Menggunakan llama-index dengan Model Mistral untuk Kueri Data: Temukan cara menggunakan llama-index yang dikombinasikan dengan model Mistral untuk melakukan kueri data yang tersimpan di Milvus.

  • 3️⃣ Membuat Agen Pencarian dan Pembacaan Data Otomatis: Buat agen yang dapat secara otomatis mencari dan membaca data berdasarkan permintaan pengguna. Agen otomatis ini akan meningkatkan pengalaman pengguna dengan memberikan respons yang cepat dan akurat, sehingga mengurangi upaya pencarian manual.

  • 4️⃣ Mengembangkan Agen untuk Pemfilteran Metadata Berdasarkan Kueri Pengguna: Menerapkan agen yang dapat secara otomatis menghasilkan filter metadata dari kueri pengguna, menyempurnakan dan mengontekstualisasikan hasil pencarian, menghindari kebingungan, serta meningkatkan keakuratan informasi yang diambil, bahkan untuk kueri yang rumit.

  • Rangkuman Pada akhir buku catatan ini, Anda akan memiliki pemahaman yang komprehensif dalam menggunakan Milvus, llama-index dengan llama-agents, dan model Mistral untuk membangun sistem pencarian data yang tangguh dan efisien.

Milvus

Milvus adalah basis data vektor sumber terbuka yang mendukung aplikasi AI dengan penyematan vektor dan pencarian kemiripan.

Dalam buku catatan ini, kami menggunakan Milvus Lite, yaitu versi ringan dari Milvus.

Dengan Milvus Lite, Anda dapat mulai membangun aplikasi AI dengan pencarian kemiripan vektor dalam hitungan menit! Milvus Lite bagus untuk dijalankan di lingkungan berikut ini:

  • Notebook Jupyter / Google Colab
  • Laptop
  • Perangkat Tepi

image.png image.png

llama-agents

llama-agents memungkinkan untuk menjalankan agen sebagai layanan mikro. Hal ini memungkinkan untuk meningkatkan dan menurunkan skala layanan.

llama-index

LlamaIndex adalah kerangka kerja data untuk aplikasi LLM Anda. Ini menyediakan alat seperti:

  • Konektor data menelan data yang ada dari sumber dan format aslinya.
  • Indeks data menyusun data Anda dalam representasi perantara yang mudah dan berkinerja baik untuk dikonsumsi oleh LLM.
  • Mesin menyediakan akses bahasa alami ke data Anda.
  • Agen adalah pekerja pengetahuan yang didukung LLM yang dilengkapi dengan alat bantu, mulai dari fungsi pembantu sederhana hingga integrasi API dan banyak lagi.

image.png image.png

Mistral AI

Mistral AI adalah laboratorium penelitian yang membangun LLM dan Model Embeddings, mereka baru-baru ini merilis versi baru dari model mereka, Mistral Nemo dan Mistral Large yang telah terbukti sangat baik dalam pemanggilan RAG dan fungsi. Oleh karena itu, kami akan menggunakannya di notebook ini

Menginstal Ketergantungan

$ pip install llama-agents pymilvus openai python-dotenv
$ pip install llama-index-vector-stores-milvus llama-index-readers-file llama-index-llms-ollama llama-index-llms-mistralai llama-index-embeddings-mistralai
# NOTE: This is ONLY necessary in jupyter notebook.
# Details: Jupyter runs an event-loop behind the scenes.
#          This results in nested event-loops when we start an event-loop to make async queries.
#          This is normally not allowed, we use nest_asyncio to allow it for convenience.
import nest_asyncio

nest_asyncio.apply()

Dapatkan Kunci API Anda untuk Mistral

Anda bisa mendapatkan kunci API Mistral dari Mistral Cloud Console.

"""
load_dotenv reads key-value pairs from a .env file and can set them as environment variables.
This is useful to avoid leaking your API key for example :D
"""

from dotenv import load_dotenv
import os

load_dotenv()
True

Unduh data

$ mkdir -p 'data/10k/'
$ wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/uber_2021.pdf' -O 'data/10k/uber_2021.pdf'
$ wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/lyft_2021.pdf' -O 'data/10k/lyft_2021.pdf'

Menyiapkan Model Penyematan

Kami mendefinisikan Model Embedding yang akan digunakan dalam buku catatan ini. Kami menggunakan mistral-embed, ini adalah model Embedding yang dikembangkan oleh Mistral, telah dilatih dengan mempertimbangkan Retrieval, yang membuatnya sangat bagus untuk sistem Agentic RAG kami. Untuk detailnya, silakan lihat halaman Embedding di Dokumentasi Mistral.

from llama_index.core import Settings
from llama_index.embeddings.mistralai import MistralAIEmbedding

# Define the default Embedding model used in this Notebook.
# We are using Mistral Models, so we are also using Mistral Embeddings

Settings.embed_model = MistralAIEmbedding(model_name="mistral-embed")

Menentukan Model LLM

Llama Index menggunakan LLM untuk merespons permintaan dan pertanyaan, dan bertanggung jawab untuk menulis respons bahasa alami. Kami mendefinisikan Mistral Nemo sebagai model default. Nemo menawarkan jendela konteks yang besar hingga 128 ribu token. Penalaran, pengetahuan dunia, dan akurasi pengkodeannya adalah yang tercanggih dalam kategori ukurannya.

from llama_index.llms.ollama import Ollama

Settings.llm = Ollama("mistral-nemo")

Menginstal Milvus dan Memuat Data

Milvus adalah basis data vektor sumber terbuka yang populer yang mendukung aplikasi AI dengan pencarian kemiripan vektor yang berkinerja tinggi dan dapat diskalakan.

  • Mengatur uri sebagai file lokal, misalnya./milvus.db, adalah metode yang paling mudah, karena secara otomatis menggunakan Milvus Lite untuk menyimpan semua data dalam file ini.
  • Jika Anda memiliki data berskala besar, misalnya lebih dari satu juta vektor, Anda dapat menyiapkan server Milvus yang lebih berkinerja tinggi di Docker atau Kubernetes. Dalam pengaturan ini, silakan gunakan uri server, misalnyahttp://localhost:19530, sebagai uri Anda.
  • Jika Anda ingin menggunakan Zilliz Cloud, layanan cloud yang dikelola sepenuhnya untuk Milvus, sesuaikan uri dan token, yang sesuai dengan Public Endpoint dan API key di Zilliz Cloud.
from llama_index.vector_stores.milvus import MilvusVectorStore
from llama_index.core import (
    SimpleDirectoryReader,
    VectorStoreIndex,
    StorageContext,
    load_index_from_storage,
)
from llama_index.core.tools import QueryEngineTool, ToolMetadata

input_files = ["./data/10k/lyft_2021.pdf", "./data/10k/uber_2021.pdf"]

# Create a single Milvus vector store
vector_store = MilvusVectorStore(
    uri="./milvus_demo.db", dim=1024, overwrite=False, collection_name="companies_docs"
)

# Create a storage context with the Milvus vector store
storage_context = StorageContext.from_defaults(vector_store=vector_store)

# Load data
docs = SimpleDirectoryReader(input_files=input_files).load_data()

# Build index
index = VectorStoreIndex.from_documents(docs, storage_context=storage_context)

# Define the query engine
company_engine = index.as_query_engine(similarity_top_k=3)

Tentukan Alat

Salah satu langkah penting dalam membangun agen yang efektif adalah menentukan alat yang dapat digunakan untuk menjalankan tugasnya. Alat-alat ini pada dasarnya adalah fungsi atau layanan yang dapat dipanggil oleh agen untuk mengambil informasi atau melakukan tindakan.

Di bawah ini, kami akan mendefinisikan dua alat yang dapat digunakan agen kami untuk menanyakan informasi keuangan tentang Lyft dan Uber mulai tahun 2021. Alat-alat ini akan diintegrasikan ke dalam agen kami, sehingga memungkinkannya untuk merespons pertanyaan bahasa alami dengan informasi yang tepat dan relevan.

Jika Anda melihat grafik yang kami miliki di bagian atas, inilah yang dimaksud dengan "Layanan Agen".

# Define the different tools that can be used by our Agent.
query_engine_tools = [
    QueryEngineTool(
        query_engine=company_engine,
        metadata=ToolMetadata(
            name="lyft_10k",
            description=(
                "Provides information about Lyft financials for year 2021. "
                "Use a detailed plain text question as input to the tool."
                "Do not attempt to interpret or summarize the data."
            ),
        ),
    ),
    QueryEngineTool(
        query_engine=company_engine,
        metadata=ToolMetadata(
            name="uber_10k",
            description=(
                "Provides information about Uber financials for year 2021. "
                "Use a detailed plain text question as input to the tool."
                "Do not attempt to interpret or summarize the data."
            ),
        ),
    ),
]
from llama_index.llms.ollama import Ollama
from llama_index.llms.mistralai import MistralAI

# Set up the agent
llm = Ollama(model="mistral-nemo")

response = llm.predict_and_call(
    query_engine_tools,
    user_msg="Could you please provide a comparison between Lyft and Uber's total revenues in 2021?",
    allow_parallel_tool_calls=True,
)

# Example usage without metadata filtering
print("Response without metadata filtering:")
print(response)
Response without metadata filtering:
The revenue for Lyft in 2021 was $3.84 billion.

Uber's total revenue for the year ended December 31, 2021 was $17,455 million.

Pemfilteran Metadata

Milvus mendukung pemfilteran Metadata, sebuah teknik yang memungkinkan Anda untuk mempersempit dan mempersempit hasil pencarian berdasarkan atribut atau tag tertentu yang terkait dengan data Anda. Hal ini sangat berguna dalam skenario di mana Anda memiliki banyak data dan hanya perlu mengambil subset data yang relevan yang sesuai dengan kriteria tertentu.

Kasus Penggunaan untuk Pemfilteran Metadata

  • Ketepatan dalam Hasil Pencarian: Dengan menerapkan filter metadata, Anda dapat memastikan bahwa hasil pencarian sangat relevan dengan kueri pengguna. Misalnya, jika Anda memiliki koleksi dokumen keuangan, Anda dapat memfilternya berdasarkan nama perusahaan, tahun, atau metadata lain yang relevan.

  • Efisiensi: Pemfilteran metadata membantu mengurangi jumlah data yang perlu diproses, sehingga operasi pencarian menjadi lebih efisien. Hal ini sangat bermanfaat ketika berurusan dengan kumpulan data yang besar.

  • Kustomisasi: Pengguna atau aplikasi yang berbeda mungkin memiliki persyaratan yang berbeda. Pemfilteran metadata memungkinkan Anda untuk menyesuaikan hasil pencarian untuk memenuhi kebutuhan tertentu, seperti mengambil dokumen dari tahun atau perusahaan tertentu.

Contoh penggunaan

Pada blok kode di bawah ini, pemfilteran metadata digunakan untuk membuat mesin kueri terfilter yang mengambil dokumen berdasarkan pasangan kunci-nilai metadata tertentu: file_name: lyft_2021.pdf

QueryEngineTool yang didefinisikan di bawah ini lebih umum daripada yang didefinisikan di atas, pada yang di atas, kami memiliki alat per perusahaan (Uber dan Lyft), yang ini lebih umum. Kita hanya tahu bahwa kita memiliki dokumen keuangan tentang perusahaan, tapi hanya itu saja. Dengan menambahkan Pemfilteran Metadata, kita dapat memfilter untuk hanya mendapatkan data dari dokumen tertentu.

from llama_index.core.vector_stores import ExactMatchFilter, MetadataFilters

# Example usage with metadata filtering
filters = MetadataFilters(
    filters=[ExactMatchFilter(key="file_name", value="lyft_2021.pdf")]
)

print(f"filters: {filters}")
filtered_query_engine = index.as_query_engine(filters=filters)

# Define query engine tools with the filtered query engine
query_engine_tools = [
    QueryEngineTool(
        query_engine=filtered_query_engine,
        metadata=ToolMetadata(
            name="company_docs",
            description=(
                "Provides information about various companies' financials for year 2021. "
                "Use a detailed plain text question as input to the tool."
                "Use this tool to retrieve specific data points about a company. "
                "Do not attempt to interpret or summarize the data."
            ),
        ),
    ),
]
filters: filters=[MetadataFilter(key='file_name', value='lyft_2021.pdf', operator=<FilterOperator.EQ: '=='>)] condition=<FilterCondition.AND: 'and'>

Pemanggilan Fungsi

Mistral Nemo dan Large mendukung pemanggilan fungsi asli. Terdapat integrasi yang mulus dengan alat LlamaIndex, melalui fungsi predict_and_call pada LLM. Hal ini memungkinkan pengguna untuk melampirkan alat apa pun dan membiarkan LLM memutuskan alat mana yang akan dipanggil (jika ada).

Anda dapat mempelajari lebih lanjut tentang Agen di situs web llama-index.

# Set up the LLM we will use for Function Calling

llm = Ollama(model="mistral-nemo")

Berinteraksi dengan Agen

Sekarang kita dapat menggunakan Pemfilteran Metadata:

  1. Pada yang pertama, Agen seharusnya tidak dapat menemukan apa pun dari kueri pengguna karena kueri ini tentang Uber dan kita memfilter pada Dokumen hanya tentang Lyft.
  2. Pada contoh kedua, Agen seharusnya dapat menemukan informasi tentang Lyft karena kita hanya akan mencari melalui dokumen tentang Lyft.
response = llm.predict_and_call(
    query_engine_tools,
    user_msg="How many employees does Uber have?",
    allow_parallel_tool_calls=True,
)
print(response)
I'm unable to provide information about Uber's employee count as it's outside the given Lyft context.
response = llm.predict_and_call(
    query_engine_tools,
    user_msg="What are the risk factors for Lyft?",
    allow_parallel_tool_calls=True,
)

print(response)
Investing in Lyft carries significant risks. These include general economic factors like impacts from pandemics or crises, operational factors such as competition, pricing changes, and driver/ride growth unpredictability, insurance coverage issues, autonomous vehicle technology uncertainties, reputational concerns, potential security breaches, reliance on third-party services, and challenges in expanding platform offerings. Lyft's business operations are subject to numerous other risks not explicitly mentioned here, which could also harm its financial condition and prospects.

Contoh Kebingungan Tanpa Pemfilteran Metadata

> Question: What are the risk factors for Uber?

> Response without metadata filtering:
Based on the provided context, which pertains to Lyft's Risk Factors section in their Annual Report, some of the potential risk factors applicable to a company like Uber might include:

- General economic factors such as the impact of global pandemics or other crises on ride-sharing demand.
- Operational factors like competition in ride-hailing services, unpredictability in results of operations, and uncertainty about market growth for ridesharing and related services.
- Risks related to attracting and retaining qualified drivers and riders.

Pada contoh ini, sistem salah memberikan informasi tentang Lyft dan bukannya Uber, yang menyebabkan respon yang menyesatkan. Dimulai dengan mengatakan bahwa ia tidak memiliki informasi tersebut, tetapi kemudian terus berlanjut.

Menggunakan Agen untuk Mengekstrak Filter Metadata

Untuk mengatasi masalah ini, kita dapat menggunakan agen untuk mengekstrak filter metadata secara otomatis dari pertanyaan pengguna dan menerapkannya selama proses menjawab pertanyaan. Hal ini memastikan bahwa sistem mengambil informasi yang benar dan relevan.

Contoh Kode

Di bawah ini adalah contoh kode yang menunjukkan cara membuat mesin kueri terfilter menggunakan agen untuk mengekstrak filter metadata dari pertanyaan pengguna:

Penjelasan

  • Prompt Template: Kelas PromptTemplate digunakan untuk mendefinisikan templat untuk mengekstrak filter metadata dari pertanyaan pengguna. Templat ini menginstruksikan model bahasa untuk mempertimbangkan nama perusahaan, tahun, dan atribut lain yang relevan.

  • LLM: Mistral Nemo digunakan untuk menghasilkan filter metadata berdasarkan pertanyaan pengguna. Model ini diminta dengan pertanyaan dan templat untuk mengekstrak filter yang relevan.

  • Filter Metadata: Tanggapan dari LLM diuraikan untuk membuat objek MetadataFilters. Jika tidak ada filter spesifik yang disebutkan, objek MetadataFilters kosong akan dikembalikan.

  • Mesin Kueri Terfilter: Metode index.as_query_engine(filters=metadata_filters) membuat mesin kueri yang menerapkan filter metadata yang diekstrak ke indeks. Hal ini memastikan bahwa hanya dokumen yang cocok dengan kriteria filter yang diambil.

from llama_index.core.prompts.base import PromptTemplate


# Function to create a filtered query engine
def create_query_engine(question):
    # Extract metadata filters from question using a language model
    prompt_template = PromptTemplate(
        "Given the following question, extract relevant metadata filters.\n"
        "Consider company names, years, and any other relevant attributes.\n"
        "Don't write any other text, just the MetadataFilters object"
        "Format it by creating a MetadataFilters like shown in the following\n"
        "MetadataFilters(filters=[ExactMatchFilter(key='file_name', value='lyft_2021.pdf')])\n"
        "If no specific filters are mentioned, returns an empty MetadataFilters()\n"
        "Question: {question}\n"
        "Metadata Filters:\n"
    )

    prompt = prompt_template.format(question=question)
    llm = Ollama(model="mistral-nemo")
    response = llm.complete(prompt)

    metadata_filters_str = response.text.strip()
    if metadata_filters_str:
        metadata_filters = eval(metadata_filters_str)
        print(f"eval: {metadata_filters}")
        return index.as_query_engine(filters=metadata_filters)
    return index.as_query_engine()
response = create_query_engine(
    "What is Uber revenue? This should be in the file_name: uber_2021.pdf"
)
eval: filters=[MetadataFilter(key='file_name', value='uber_2021.pdf', operator=<FilterOperator.EQ: '=='>)] condition=<FilterCondition.AND: 'and'>
## Example usage with metadata filtering
question = "What is Uber revenue? This should be in the file_name: uber_2021.pdf"
filtered_query_engine = create_query_engine(question)

# Define query engine tools with the filtered query engine
query_engine_tools = [
    QueryEngineTool(
        query_engine=filtered_query_engine,
        metadata=ToolMetadata(
            name="company_docs_filtering",
            description=(
                "Provides information about various companies' financials for year 2021. "
                "Use a detailed plain text question as input to the tool."
            ),
        ),
    ),
]
# Set up the agent with the updated query engine tools
response = llm.predict_and_call(
    query_engine_tools,
    user_msg=question,
    allow_parallel_tool_calls=True,
)

print("Response with metadata filtering:")
print(response)
eval: filters=[MetadataFilter(key='file_name', value='uber_2021.pdf', operator=<FilterOperator.EQ: '=='>)] condition=<FilterCondition.AND: 'and'>
Response with metadata filtering:
Uber's total revenue for the year ended December 31, 2021, is $17.455 billion.

Mengatur berbagai layanan dengan Mistral Large

Mistral Large adalah model andalan Mistral dengan kemampuan penalaran, pengetahuan, dan pengkodean yang sangat baik. Sangat ideal untuk tugas-tugas kompleks yang membutuhkan kemampuan penalaran yang besar atau sangat terspesialisasi. Model ini memiliki kemampuan pemanggilan fungsi tingkat lanjut, yang persis seperti yang kita butuhkan untuk mengatur berbagai agen kita.

Mengapa kita membutuhkan Model yang lebih cerdas?

Pertanyaan yang dijawab di bawah ini sangat menantang karena membutuhkan orkestrasi berbagai layanan dan agen untuk memberikan respons yang koheren dan akurat. Hal ini melibatkan koordinasi berbagai alat dan agen untuk mengambil dan memproses informasi dari sumber yang berbeda, seperti data keuangan dari berbagai perusahaan.

Apa yang sulit dari hal itu?

  • Kompleksitas: Pertanyaan ini melibatkan banyak agen dan layanan, masing-masing dengan fungsi dan sumber datanya sendiri. Mengkoordinasikan agen-agen ini untuk bekerja sama dengan lancar adalah tugas yang kompleks.
  • Integrasi Data: Pertanyaan ini membutuhkan pengintegrasian data dari berbagai sumber, yang dapat menjadi tantangan karena adanya variasi format, struktur, dan metadata data.

  • Pemahaman Kontekstual: Pertanyaan mungkin memerlukan pemahaman konteks dan hubungan antara berbagai informasi, yang merupakan tugas yang menuntut kognitif.

Mengapa Mistral Large dapat membantu dalam kasus ini?

Mistral Large sangat cocok untuk tugas ini karena kemampuan penalaran dan pemanggilan fungsinya yang canggih. Berikut ini adalah bagaimana hal tersebut membantu:

  • Penalaran Tingkat Lanjut: Mistral Large dapat menangani tugas-tugas penalaran yang kompleks, sehingga ideal untuk mengatur banyak agen dan layanan. Mistral Large dapat memahami hubungan antara berbagai informasi dan membuat keputusan yang tepat.

  • Kemampuan Pemanggilan Fungsi: Mistral Large memiliki kemampuan pemanggilan fungsi tingkat lanjut, yang sangat penting untuk mengoordinasikan tindakan berbagai agen. Hal ini memungkinkan integrasi dan orkestrasi yang mulus dari berbagai layanan.

  • Pengetahuan Khusus: Mistral Large dirancang untuk tugas-tugas yang sangat terspesialisasi, sehingga sangat cocok untuk menangani kueri kompleks yang membutuhkan pengetahuan domain yang mendalam.

Untuk semua alasan itu, saya memutuskan bahwa menggunakan Mistral Large daripada Mistral Nemo lebih cocok di sini.

from llama_agents import (
    AgentService,
    ToolService,
    LocalLauncher,
    MetaServiceTool,
    ControlPlaneServer,
    SimpleMessageQueue,
    AgentOrchestrator,
)

from llama_index.core.agent import FunctionCallingAgentWorker
from llama_index.llms.mistralai import MistralAI

# create our multi-agent framework components
message_queue = SimpleMessageQueue()
control_plane = ControlPlaneServer(
    message_queue=message_queue,
    orchestrator=AgentOrchestrator(llm=MistralAI("mistral-large-latest")),
)

# define Tool Service
tool_service = ToolService(
    message_queue=message_queue,
    tools=query_engine_tools,
    running=True,
    step_interval=0.5,
)

# define meta-tools here
meta_tools = [
    await MetaServiceTool.from_tool_service(
        t.metadata.name,
        message_queue=message_queue,
        tool_service=tool_service,
    )
    for t in query_engine_tools
]

# define Agent and agent service
worker1 = FunctionCallingAgentWorker.from_tools(
    meta_tools, llm=MistralAI("mistral-large-latest")
)

agent1 = worker1.as_agent()
agent_server_1 = AgentService(
    agent=agent1,
    message_queue=message_queue,
    description="Used to answer questions over differnet companies for their Financial results",
    service_name="Companies_analyst_agent",
)
import logging

# change logging level to enable or disable more verbose logging
logging.getLogger("llama_agents").setLevel(logging.INFO)
## Define Launcher
launcher = LocalLauncher(
    [agent_server_1, tool_service],
    control_plane,
    message_queue,
)
query_str = "What are the risk factors for Uber?"
result = launcher.launch_single(query_str)
INFO:llama_agents.message_queues.simple - Consumer AgentService-27cde4ed-5163-4005-90fc-13c158eda7e3: Companies_analyst_agent has been registered.
INFO:llama_agents.message_queues.simple - Consumer ToolService-b73c500a-5fbe-4f57-95c7-db74e173bd1b: default_tool_service has been registered.
INFO:llama_agents.message_queues.simple - Consumer 62465ab8-32ff-436e-95fa-74e828745150: human has been registered.
INFO:llama_agents.message_queues.simple - Consumer ControlPlaneServer-f4c27d43-5474-43ca-93ca-a9aeed4534d7: control_plane has been registered.
INFO:llama_agents.services.agent - Companies_analyst_agent launch_local
INFO:llama_agents.message_queues.base - Publishing message to 'control_plane' with action 'ActionTypes.NEW_TASK'
INFO:llama_agents.message_queues.simple - Launching message queue locally
INFO:llama_agents.services.agent - Processing initiated.
INFO:llama_agents.services.tool - Processing initiated.
INFO:llama_agents.message_queues.base - Publishing message to 'Companies_analyst_agent' with action 'ActionTypes.NEW_TASK'
INFO:llama_agents.message_queues.simple - Successfully published message 'control_plane' to consumer.
INFO:llama_agents.services.agent - Created new task: 0720da2f-1751-4766-a814-ba720bc8a467
INFO:llama_agents.message_queues.simple - Successfully published message 'Companies_analyst_agent' to consumer.
INFO:llama_agents.message_queues.simple - Consumer MetaServiceTool-5671c175-7b03-4bc8-b60d-bd7101d0fc41: MetaServiceTool-5671c175-7b03-4bc8-b60d-bd7101d0fc41 has been registered.
INFO:llama_agents.message_queues.base - Publishing message to 'default_tool_service' with action 'ActionTypes.NEW_TOOL_CALL'
INFO:llama_agents.message_queues.simple - Successfully published message 'default_tool_service' to consumer.
INFO:llama_agents.services.tool - Processing tool call id f4c270a4-bc47-4bbf-92fe-e2cc80757943 with company_docs
INFO:llama_agents.message_queues.base - Publishing message to 'control_plane' with action 'ActionTypes.COMPLETED_TASK'
INFO:llama_agents.message_queues.base - Publishing message to 'MetaServiceTool-5671c175-7b03-4bc8-b60d-bd7101d0fc41' with action 'ActionTypes.COMPLETED_TOOL_CALL'
INFO:llama_agents.message_queues.base - Publishing message to 'Companies_analyst_agent' with action 'ActionTypes.NEW_TASK'
INFO:llama_agents.message_queues.simple - Successfully published message 'control_plane' to consumer.
INFO:llama_agents.message_queues.simple - Successfully published message 'MetaServiceTool-5671c175-7b03-4bc8-b60d-bd7101d0fc41' to consumer.
INFO:llama_agents.services.agent - Created new task: 0720da2f-1751-4766-a814-ba720bc8a467
INFO:llama_agents.message_queues.simple - Successfully published message 'Companies_analyst_agent' to consumer.
INFO:llama_agents.message_queues.base - Publishing message to 'default_tool_service' with action 'ActionTypes.NEW_TOOL_CALL'
INFO:llama_agents.message_queues.simple - Successfully published message 'default_tool_service' to consumer.
INFO:llama_agents.services.tool - Processing tool call id f888f9a8-e716-4505-bfe2-577452e9b6e6 with company_docs
INFO:llama_agents.message_queues.base - Publishing message to 'MetaServiceTool-5671c175-7b03-4bc8-b60d-bd7101d0fc41' with action 'ActionTypes.COMPLETED_TOOL_CALL'
INFO:llama_agents.message_queues.simple - Successfully published message 'MetaServiceTool-5671c175-7b03-4bc8-b60d-bd7101d0fc41' to consumer.
INFO:llama_agents.message_queues.base - Publishing message to 'control_plane' with action 'ActionTypes.COMPLETED_TASK'
INFO:llama_agents.message_queues.base - Publishing message to 'human' with action 'ActionTypes.COMPLETED_TASK'
INFO:llama_agents.message_queues.simple - Successfully published message 'control_plane' to consumer.
INFO:llama_agents.message_queues.simple - Successfully published message 'human' to consumer.
print(result)
[{"name": "finalize", "arguments": {"input": "Uber faces several risk factors, including general economic impacts such as pandemics or downturns, operational challenges like competition, market growth uncertainty, attracting and retaining drivers and riders, insurance adequacy, autonomous vehicle technology development, maintaining its reputation and brand, and managing growth. Additionally, reliance on third-party providers for various services can introduce further risks to its operations."}}]

Kesimpulan

Dalam buku catatan ini, Anda telah melihat bagaimana Anda dapat menggunakan llama-agents untuk melakukan berbagai tindakan dengan memanggil alat yang sesuai. Dengan menggunakan Mistral Large yang dikombinasikan dengan Mistral Nemo, kami mendemonstrasikan cara mengatur sistem yang cerdas dan hemat sumber daya secara efektif dengan memanfaatkan kekuatan LLM yang berbeda. Kami melihat bahwa Agen dapat memilih koleksi yang berisi data yang diminta oleh pengguna.