Chuyển đến nội dung chính
Hướng dẫn AI

Xây dựng tác tử LLM gọi công cụ và tự tiến hóa với miniEvoAgent

Hướng dẫn này giới thiệu miniEvoAgent, một framework dễ đọc để xây dựng các tác tử LLM thực hiện một hành động, chạy công cụ Python, đánh giá dự đoán hỏi đáp và tiến hóa prompt dựa trên phản hồi. Bạn sẽ cài đặt gói evo_repro, cấu hình mô hình tương thích với OpenAI, chạy các tác tử cơ bản và có hỗ trợ công cụ, kiểm tra dấu vết tiến hóa, cũng như thử nghiệm framework mà không cần gọi mô hình từ xa.

Xây dựng tác tử LLM gọi công cụ và tự tiến hóa với miniEvoAgent

miniEvoAgent là gì?

miniEvoAgent là một framework Python nhỏ gọn để tìm hiểu cách các agent dựa trên LLM được xây dựng và cải tiến. Lấy cảm hứng từ EvoAgentX, framework này giữ lại các khái niệm cốt lõi về thực thi agent, gọi công cụ, đánh giá, viết lại prompt và tự tiến hóa, đồng thời loại bỏ sự phức tạp của một framework agent lớn.

Hiện tại, package này có tên là evo_repro. Thiết kế nhỏ gọn có chủ đích giúp từng cơ chế dễ đọc, kiểm thử và mở rộng hơn. Thay vì cung cấp đồ thị workflow, bộ nhớ, trình chỉnh sửa trực quan, bộ chuyển đổi benchmark hoặc một hệ sinh thái công cụ lớn, framework tập trung vào một agent thực hiện một hành động minh bạch và vòng lặp tiến hóa prompt.

Framework hoạt động như thế nào

Một ứng dụng miniEvoAgent được ghép từ một vài thành phần tập trung:

  • PromptTemplate: Chèn các đầu vào của tác vụ vào mẫu prompt.
  • Action: Gọi LLM, tùy chọn thực hiện việc chạy công cụ qua nhiều vòng và phân tích phản hồi cuối cùng.
  • Agent: Bao bọc một action và trả về một message có cấu trúc.
  • Các hàm Evaluator: Chấm điểm dự đoán QA bằng exact match, F1 cấp token và accuracy.
  • PromptRewriter: Sử dụng LLM tối ưu để đề xuất prompt đã chỉnh sửa từ các ví dụ phản hồi cụ thể.
  • PromptSelector: So sánh prompt cha với ứng viên trên cùng một tập phát triển và giữ lại phiên bản có hiệu suất tốt hơn.
  • evolve: Lặp lại quá trình thực thi huấn luyện, tạo phản hồi, viết lại, đánh giá và lựa chọn.

Tính năng chính

  • Một abstraction agent thực hiện một hành động tối giản và dễ kiểm tra.
  • Adapter LLM tương thích với OpenAI, được cấu hình thông qua biến môi trường hoặc tệp .env cục bộ.
  • Các function tool theo kiểu OpenAI với khả năng thực thi công cụ qua nhiều vòng.
  • Viết lại prompt dựa trên phản hồi thông qua LLM tối ưu.
  • Lựa chọn trên tập phát triển, chỉ chấp nhận ứng viên khi điểm số được cải thiện.
  • Các trace tiến hóa chứa những lần thực thi huấn luyện, đầu vào viết lại, điểm số trên tập phát triển và quyết định lựa chọn.
  • Các LLM giả lập xác định để kiểm thử hành vi của framework mà không cần gọi API từ xa.

Cài đặt miniEvoAgent

Yêu cầu

Sử dụng Python 3.10 trở lên. Các lệnh PowerShell sau đây chuyển vào repository, tạo môi trường ảo, kích hoạt môi trường, cập nhật pip và cài đặt package ở chế độ editable:

cd D:\Projects\RSIProject\student-project\Evo-repro
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -U pip
python -m pip install -e .

Cài đặt ở chế độ editable hữu ích khi nghiên cứu hoặc chỉnh sửa mã nguồn, vì các thay đổi trong package cục bộ sẽ ngay lập tức khả dụng trong môi trường Python của bạn.

Cấu hình LLM tương thích với OpenAI

Adapter OpenAILLM mặc định đọc các cài đặt từ biến môi trường hoặc tệp .env cục bộ. Trong PowerShell, hãy đặt API key và model như sau:

$env:OPENAI_API_KEY="your_api_key"
$env:OPENAI_MODEL="gpt-4o-mini"

Nếu sử dụng một dịch vụ khác tương thích với OpenAI, hãy đặt endpoint của dịch vụ đó:

$env:OPENAI_BASE_URL="https://your-compatible-endpoint/v1"

Ngoài ra, bạn có thể sao chép .env.example thành .env và thêm các giá trị cấu hình tương tự vào đó.

Xây dựng agent hỏi đáp cơ bản

Một agent cơ bản cần LLM, prompt template, bộ phân tích đầu ra và action. Sau đó, agent cung cấp các thành phần này thông qua một interface thực thi đơn giản.

from evo_repro import Action, Agent, OpenAILLM, PromptTemplate, TextOutputParser

llm = OpenAILLM()

action = Action(
    name="answer_question",
    prompt_template=PromptTemplate(
        template="Answer the following question:\n\n{question}"
    ),
    llm=llm,
    output_parser=TextOutputParser(),
)

agent = Agent(
    name="qa_agent",
    description="Answers a single user question.",
    action=action,
)

message = agent.execute({
    "question": "What is Retrieval-Augmented Generation?"
})
print(message.content)

Khóa question được cung cấp cho agent.execute tương ứng với placeholder {question} trong template. Action dựng prompt, gửi prompt đến LLM đã cấu hình, phân tích văn bản được trả về và đóng gói kết quả vào một message có cấu trúc.

Bạn cũng có thể chạy ví dụ đi kèm:

python examples\simple_agent.py

Thêm công cụ Python có thể gọi

Các tool của miniEvoAgent là những wrapper mỏng quanh các hàm Python. Mỗi tool cung cấp một JSON schema mà model có thể sử dụng để gọi hàm và trả về một ToolResult có cấu trúc.

Package có sẵn get_word_length_tool, có thể được gắn vào một action thông qua đối số tools:

from evo_repro import Action, Agent, OpenAILLM, PromptTemplate, TextOutputParser
from evo_repro import get_word_length_tool

agent = Agent(
    name="tool_agent",
    description="Answers a question and can use tools.",
    action=Action(
        name="answer_with_tools",
        prompt_template=PromptTemplate(
            template=(
                "Answer the following question. "
                "Use tools when useful:\n\n{question}"
            )
        ),
        llm=OpenAILLM(),
        output_parser=TextOutputParser(),
        tools=[get_word_length_tool],
    ),
)

message = agent.execute({
    "question": 'How many characters are in "retrieval"?'
})

print(message.content)
print(message.metadata["tool_results"])

Khi LLM yêu cầu một hàm được hỗ trợ, hành động sẽ thực thi hàm đó và trả kết quả công cụ về cuộc trò chuyện. Hành động hỗ trợ nhiều vòng xử lý như vậy trước khi phân tích đầu ra cuối cùng của mô hình. Các bản ghi thực thi công cụ có thể được truy cập qua message.metadata["tool_results"].

Chạy ví dụ công cụ đi kèm bằng lệnh:

python examples\tool_agent.py

Tìm hiểu về quá trình tự tiến hóa của prompt

Hệ thống tự tiến hóa cải thiện một prompt thông qua chu kỳ phản hồi và đánh giá có kiểm soát:

  1. Chạy prompt hiện tại trên các ví dụ huấn luyện.
  2. Chuyển các dự đoán, nhãn mong đợi và chỉ số đánh giá thành các ví dụ phản hồi.
  3. Yêu cầu một PromptRewriter được hỗ trợ bởi LLM tối ưu hóa tạo ra một prompt ứng viên.
  4. Đánh giá cả prompt gốc và prompt ứng viên trên cùng một tập phát triển.
  5. Sử dụng PromptSelector để giữ lại prompt tốt hơn.
  6. Lặp lại quy trình với số thế hệ đã cấu hình.

Sử dụng evolve_once(...) khi bạn muốn chạy một thế hệ. Hàm này trả về một EvolutionRoundTrace. Sử dụng evolve(...) để chạy nhiều thế hệ và nhận cả prompt cuối cùng lẫn toàn bộ lịch sử.

Kiểm tra quá trình tiến hóa mà không cần mô hình từ xa

Kho mã nguồn bao gồm một ví dụ kiểm tra xác định sử dụng hành vi LLM giả:

python examples\evolution_audit.py

Đầu ra hiển thị prompt gốc của từng thế hệ, các bản ghi huấn luyện, đầu vào viết lại, prompt ứng viên, so sánh trên tập phát triển và quyết định chấp nhận hoặc từ chối. Nhờ đó, bạn có thể kiểm tra quy trình tối ưu hóa thay vì coi việc cải thiện prompt là một thao tác ẩn.

Đánh giá dự đoán QA

Các bộ đánh giá tích hợp cung cấp ba chỉ số QA đơn giản có chủ đích:

  • Khớp chính xác: Kiểm tra xem dự đoán có khớp chính xác với câu trả lời mong đợi theo cách so sánh của bộ đánh giá hay không.
  • F1 cấp độ token: Đo mức độ trùng lặp token giữa dự đoán và câu trả lời mong đợi.
  • Độ chính xác: Báo cáo tỷ lệ dự đoán đúng.

Các chỉ số này được thiết kế để xác minh và minh họa vòng lặp tiến hóa. Tài liệu dự án lưu ý rằng sau này chúng có thể được thay thế bằng các bộ đánh giá phù hợp với một benchmark hoặc tác vụ cụ thể.

Chạy bộ kiểm thử

Thực thi toàn bộ kiểm thử từ thư mục gốc của kho mã nguồn:

python -m pytest

Bộ kiểm thử tập trung bao quát tác tử, công cụ và hành vi tiến hóa. Khi có thể, các cài đặt LLM giả được sử dụng, vì vậy phần lớn logic của framework có thể được xác minh mà không cần khóa API hoặc gọi mô hình từ xa.

Mẹo nâng cao

Sử dụng kiểm thử xác định trước các thử nghiệm trực tiếp

Bắt đầu với các ví dụ và bài kiểm thử LLM giả khi thay đổi logic chọn prompt, xử lý công cụ hoặc tiến hóa. Đầu ra xác định giúp tái hiện lỗi và phân biệt lỗi framework với biến động trong phản hồi của mô hình trực tiếp.

Kiểm tra trace ở mỗi thế hệ

Không nên chỉ đánh giá một lần chạy tiến hóa dựa trên prompt cuối cùng. Hãy xem lại các lần thực thi huấn luyện đã ghi lại, phản hồi cung cấp cho trình viết lại, prompt ứng viên, điểm số trên tập phát triển và quyết định lựa chọn. Những bản ghi này cho biết lý do một ứng viên được chấp nhận hoặc từ chối.

Phân biệt rõ vai trò của tập huấn luyện và tập phát triển

Quy trình tiến hóa tạo phản hồi viết lại từ các ví dụ huấn luyện, nhưng so sánh prompt gốc và prompt ứng viên trên cùng một tập phát triển. Hãy duy trì sự phân chia này khi chuẩn bị thử nghiệm để việc lựa chọn tuân theo quy trình dự kiến của framework.

Kiểm tra kết quả công cụ có cấu trúc

Đối với các tác tử hỗ trợ công cụ, hãy kiểm tra message.metadata["tool_results"] cùng với văn bản cuối cùng. Điều này giúp xác minh mô hình có chọn công cụ hay không, việc thực thi có thành công không và kết quả có cấu trúc nào đã được trả về.

Sử dụng endpoint tùy chỉnh tương thích khi cần

Thiết lập OPENAI_BASE_URL cho phép OpenAILLM nhắm đến một endpoint tương thích với OpenAI. Hãy đảm bảo khóa API và mô hình đã chọn phù hợp với các yêu cầu của endpoint.

Hiểu phạm vi hiện tại của dự án

miniEvoAgent có phạm vi hẹp hơn EvoAgentX một cách có chủ đích. Hiện tại, dự án không tuyên bố hỗ trợ đồ thị workflow, điều phối đa tác tử, bộ nhớ, tính năng con người trong vòng lặp, tích hợp benchmark, chỉnh sửa trực quan hoặc các bộ công cụ đa dạng. Lộ trình bao gồm khả năng kết hợp workflow phong phú hơn, nhiều bộ chuyển đổi nhà cung cấp hơn, trình tải benchmark, bộ công cụ có thể tái sử dụng, khả năng lưu trữ JSON và tài liệu bổ sung, nhưng đây là các tính năng dự kiến chứ chưa có trong phiên bản hiện tại.

Kiểm tra giấy phép trước khi phân phối lại

Hiện dự án chưa bao gồm tệp giấy phép. Hãy thêm giấy phép phù hợp trước khi phát hành hoặc phân phối lại mã nguồn.

Kết luận

miniEvoAgent cung cấp một lộ trình nhỏ gọn và có thể kiểm thử để tiếp cận kỹ thuật tác tử LLM. Với gói evo_repro, bạn có thể xây dựng một tác tử điều khiển bằng prompt, thêm các công cụ hàm kiểu OpenAI, đo hiệu suất QA, viết lại prompt dựa trên các lỗi và giữ lại các cải tiến thông qua đánh giá trên tập phát triển. Kiến trúc nhỏ gọn cùng các ví dụ xác định khiến dự án đặc biệt hữu ích cho việc nghiên cứu cách thức thực thi tác tử và tiến hóa prompt hoạt động bên trong.