- vừa được xem lúc

[Practical Series] Planning - Key pattern in Agents

0 0 2

Người đăng: Hoàng Minh An

Theo Viblo Asia

Mở đầu

Với sự phát triển vượt bậc của các mô hình ngôn ngữ lớn (LLMs), từ độ chính xác đến mức độ lý luận càng ngày càng cao thì hệ thống đa tác nhân (LLM agents) càng ngày càng được chú trọng và mang lại những lợi ích vượt trội hơn so với các mô hình ngôn ngữ lớn (LLM) thông thường. Một trong những bài viết khá tổng quan về LLM agents mọi người có thể đọc ở đây

Tóm tắt một chút thì một agent sẽ bao gồm 4 thành phần như sau:

  • Agent / Brain : Đây là thành phần chính của agent, chịu trách nhiệm xử lý thông tin, đưa ra quyết định và hành động dựa trên dữ liệu và mục tiêu. Agent/brain sử dụng các mô hình trí tuệ nhân tạo (AI) để mô phỏng khả năng suy luận, học hỏi và thích ứng.
  • Tools: Đây là các công cụ hoặc API mà agent có thể sử dụng để thực hiện các hành động cụ thể. Ví dụ, các công cụ này có thể bao gồm API để tra cứu thông tin, tương tác với hệ thống khác, hoặc thực hiện các tác vụ phức tạp như phân tích dữ liệu.
  • Memory: Memory giúp agent lưu trữ thông tin từ các tương tác trước đó để sử dụng trong tương lai. Nó có thể bao gồm thông tin về môi trường, trạng thái của các tác vụ, hoặc dữ liệu về các lựa chọn trước đây của agent.
  • Planning: Đây là quá trình mà agent sử dụng để lập kế hoạch hành động nhằm đạt được mục tiêu. Planning liên quan đến việc dự đoán kết quả của các hành động tiềm năng và lựa chọn hành động tốt nhất dựa trên các tiêu chí đã định trước.

Cả 4 thành phần trên cùng nhau hoạt động để tạo nên một hệ thống agent hoàn chỉnh, có khả năng thực hiện các nhiệm vụ phức tạp một cách tự động và hiệu quả.

Planning

  • Như đã trình bày ở trên, một trong những ưu điểm khiến cho Agent có thể giải quyết các vấn đề phức tạp là khả năng suy luận và và quá trình lập kế hoạch. Ví dụ như trong ReAct Agent sử dụng phương pháp tiếp cận có cấu trúc để phân tích đầu vào thành một tập hợp các lệnh gọi hàm và suy nghĩ nhằm để lý giải đưa ra câu trả lời cuối cùng. Cấu trúc như sau :

    • "Thought" - Suy nghĩ diễn giải dựa trên thông tin đầu vào và ngữ cảnh,
    • "Action" - Hành động dựa trên Thought trước đó (thường sẽ sử dụng tool ở đây),
    • "Observation" - Quan sát hay kết quả của hành động trước đó (thường là kết quả của việc sử dụng tools).
  • Nhiệm vụ chính của Planning là "break down" - chia nhỏ đầu vào thành một tập hợp các nhiệm vụ con. Mỗi nhiệm vụ con được biểu diễn bởi thông tin đầu vào, kết quả mong muốn và tất cả các nhiệm vụ phụ thuộc nào cần được hoàn thành trước. (mọi người có thể đọc bài này ở trên viblo trình bày khá dễ hiểu về ReAct Agent. )

Một chút về Structured Planning Agent trong LlamaIndex.

  • Ở đây mình sử dụng chọn StructuredPlanningAgent trong LLamaIndex vì framework này nó update liên tục và có nhiều cái hay ho có thể mày mò xem từ luồng đến prompt truyền sang LLms.

  • Flow của nó sẽ như sau Query (đầu vào) sẽ được planner chia thành nhiều task nhỏ (sub-task) hơn, từng task này sẽ được thực hiện và cập nhật lại cho planner, thực hiện cho đến khi có thể hoàn thành yêu cầu đầu vào.
  • Để thực hiện được điều đó thì StructuredPlanningAgent sẽ có 2 prompt chính : Initial PromptRefine Prompt
    • Initial prompt : dùng để khởi tạo nhiệm vụ con (end-to-end plan) để giải quyết input đầu vào.
    • Refine prompt: dùng để cập nhật lại những kế nhiệm vụ con còn lại cho đến nhiệm vụ cuối cùng để giải quyết được yêu cầu đầu vào.
DEFAULT_INITIAL_PLAN_PROMPT = """\
Think step-by-step. Given a task and a set of tools, create a comprehesive, end-to-end plan to accomplish the task.
Keep in mind not every task needs to be decomposed into multiple sub-tasks if it is simple enough.
The plan should end with a sub-task that satisfies the overall task. The tools available are:
{tools_str} Overall Task: {task}
""" DEFAULT_PLAN_REFINE_PROMPT = """\
Think step-by-step. Given an overall task, a set of tools, and completed sub-tasks, update (if needed) the remaining sub-tasks so that the overall task can still be completed.
The plan should end with a sub-task that satisfies the overall task.
If the remaining sub-tasks are sufficient, you can skip this step. The tools available are:
{tools_str} Overall Task:
{task} Completed Sub-Tasks + Outputs:
{completed_outputs} Remaining Sub-Tasks:
{remaining_sub_tasks}
"""

Code khởi tạo agent


from llama_index.core.agent import ( StructuredPlannerAgent, FunctionCallingAgentWorker, ReActAgentWorker,
) # create the function calling worker for reasoning
worker = FunctionCallingAgentWorker.from_tools( [lyft_tool, uber_tool], verbose=True
) # wrap the worker in the top-level planner
agent = StructuredPlannerAgent( worker, tools=[lyft_tool, uber_tool], verbose=True
) response = agent.chat( "Summarize the key risk factors for Lyft and Uber in their 2021 10-K filings."
)

init task and refine task

plan_id = agent.create_plan( "Summarize the key risk factors for Lyft and Uber in their 2021 10-K filings."
) # response """
===== Sub Task Extract Lyft Risk Factors =====
Expected output: A detailed list of key risk factors for Lyft from its 2021 10-K filing.
Dependencies: []
===== Sub Task Extract Uber Risk Factors =====
Expected output: A detailed list of key risk factors for Uber from its 2021 10-K filing.
Dependencies: []
===== Sub Task Summarize Risk Factors =====
Expected output: A comprehensive summary of the key risk factors for Lyft and Uber from their 2021 10-K filings.
Dependencies: ['Extract Lyft Risk Factors', 'Extract Uber Risk Factors']
"""
# refine the plan
agent.refine_plan( "Summarize the key risk factors for Lyft and Uber in their 2021 10-K filings.", plan_id,
) # response """
=== Refined plan ===
Summarize Risk Factors:
Summarize the key risk factors for both Lyft and Uber based on the extracted information from their 2021 10-K filings. -> A comprehensive summary of the key risk factors for Lyft and Uber from their 2021 10-K filings.
deps: ['Extract Lyft Risk Factors', 'Extract Uber Risk Factors']
"""
  • Từ đây chúng ta thấy con Agent đã tạo ra được plan đồng thời cũng có khả năng refine lại plan để hoàn thành yêu cầu đầu vào.

Kết luận

Qua đây thì chúng ta cũng đã thấy được khả năng và sự phát triển mạnh mẽ của LLm trong các nhiệm vụ phức tạp. Hẹn gặp mọi người trong bài viết tiếp theo của Practical Series.

References

Bình luận

Bài viết tương tự

- vừa được xem lúc

Các thuật toán cơ bản trong AI - Phân biệt Best First Search và Uniform Cost Search (UCS)

Nếu bạn từng đọc các thuật toán trong AI (Artificial Intelligence - Trí tuệ nhân tạo), rất có thể bạn từng nghe qua về các thuật toán tìm kiếm cơ bản: UCS (thuộc chiến lược tìm kiếm mù) và Best First Search (thuộc chiến lược tìm kiếm kinh nghiệm). Khác nhau rõ từ khâu phân loại rồi, thế nhưng hai th

0 0 164

- vừa được xem lúc

Con đường AI của tôi

Gần đây, khá nhiều bạn nhắn tin hỏi mình những câu hỏi đại loại như: có nên học AI, bắt đầu học AI như nào, làm sao tự học cho đúng, cho nhanh, học không bị nản, lộ trình học AI như nào... Sau nhiều lần trả lời, mình nghĩ rằng nên viết hẳn một bài để trả lời chi tiết hơn, cũng như để các bạn sau này

0 0 150

- vừa được xem lúc

[ChatterBot] Thư viện chatbot hay ho dành cho Python| phần 3

Trong bài trước mình đã trình bày về Training data cho chatbot và tiền xử lý dữ liệu. Trong phần này sẽ trình bày với các bạn về logic adapter.

0 0 57

- vừa được xem lúc

[Deep Learning] Kỹ thuật Dropout (Bỏ học) trong Deep Learning

. Trong bài viết này, mình xin phép giới thiệu về Dropout (Bỏ học) trong mạng Neural, sau đó là mình sẽ có 1 số đoạn code để xem Dropout ảnh hưởng thế nào đến hiệu suất của mạng Neural. 1.1. Dropout trong mạng Neural là gì.

0 0 57

- vừa được xem lúc

Kỹ thuật Dropout (Bỏ học) trong Deep Learning

Trong bài viết này, mình xin phép giới thiệu về Dropout (Bỏ học) trong mạng Neural, sau đó là mình sẽ có 1 số đoạn code để xem Dropout ảnh hưởng thế nào đến hiệu suất của mạng Neural. 1.

0 1 75

- vừa được xem lúc

Blockchain dưới con mắt làng Vũ Đại 4.0

Mở bài. Hey nhô các bạn, lại là mình đây .

0 0 47