0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Triển Khai Agent ReAct Có Thể Theo Dõi Với Temporal và LangChain

Đăng vào 7 tháng trước

• 6 phút đọc

Triển Khai Agent ReAct Có Thể Theo Dõi Với Temporal và LangChain

Giới Thiệu

Trong thời đại công nghệ hiện nay, việc tích hợp trí tuệ nhân tạo (AI) vào các quy trình công việc đang trở thành xu hướng tất yếu. Bài viết này sẽ hướng dẫn bạn cách xây dựng một hệ thống Agent AI có thể theo dõi, sử dụng Temporal và LangChain. Chúng ta sẽ sử dụng một ReAct Agent để thực hiện lý luận tự động và gọi các công cụ, với mỗi bước đều có thể được theo dõi trong quy trình của Temporal. Hãy cùng khám phá!

Mục Tiêu Bài Viết

  • Hiểu rõ cách xây dựng một ReAct Agent có thể theo dõi.
  • Tìm hiểu cách tích hợp Temporal với LangChain.
  • Thực hiện qua ví dụ thực tiễn và mã nguồn.

Mục Lục

  1. Cài Đặt Môi Trường
  2. Thiết Kế Quy Trình của Agent
  3. Triển Khai Các Công Cụ và Gọi LLM
  4. Khởi Động Worker
  5. Khởi Động Quy Trình (Gửi Nhiệm Vụ)
  6. Khả Năng Quan Sát & Gỡ Rối
  7. Mở Rộng & Sử Dụng Nâng Cao
  8. Tài Liệu Tham Khảo & Cộng Đồng

1. Cài Đặt Môi Trường

Để bắt đầu, bạn cần cài đặt môi trường như sau:

  1. Khởi động Server Temporal (sử dụng docker-compose là thuận tiện nhất, chỉ mất vài phút).
  2. Cài đặt các thư viện phụ thuộc (quản lý bằng poetry, chỉ cần chạy poetry install).
  3. Thiết lập API KEY của bạn (nếu muốn sử dụng các LLM bên ngoài như Gemini).

2. Thiết Kế Quy Trình của Agent

Logic cốt lõi nằm trong workflows.py, nơi chúng ta sử dụng quy trình Temporal để tổ chức lý luận của LLM và gọi các công cụ:

python Copy
@workflow.defn
class AiAgentWorkflow:
    @workflow.run
    async def run(self, query: str) -> str:
        messages = [HumanMessage(query)]
        MAX_STEPS = 8
        for _ in range(MAX_STEPS):
            ai_msg = await workflow.execute_activity(
                "llm_chat",
                messages,
                schedule_to_close_timeout=timedelta(seconds=60),
            )
            messages.append(AIMessage(**ai_msg))
            if ai_msg["tool_calls"]:
                for tool_call in ai_msg["tool_calls"]:
                    tool_call_result = await workflow.execute_activity(
                        tool_call["name"],
                        tool_call["args"]["params"],
                        schedule_to_close_timeout=timedelta(seconds=10),
                    )
                    messages.append(
                        ToolMessage(
                            content=str(tool_call_result),
                            tool_call_id=tool_call["id"],
                        )
                    )
            else:
                return messages[-1].content

3. Triển Khai Các Công Cụ và Gọi LLM

Định nghĩa logic LLM và các công cụ trong activities.py:

python Copy
@activity.defn
async def llm_chat(messages: list) -> str:
    llm = init_chat_model("gemini-2.0-flash", model_provider="google_genai")
    llm_with_tools = llm.bind_tools([add, division])
    response = llm_with_tools.invoke(messages)
    return response

@activity.defn
async def add(params: list[int]) -> int:
    return sum(params)

class divisionParams(BaseModel):
    a: int = Field(..., description="Tử số")
    b: int = Field(..., description="Mẫu số, không được bằng không", gt=0)

@activity.defn
async def division(params: divisionParams) -> int:
    return params.a // params.b

Bạn có thể thêm nhiều công cụ hơn tùy ý—chỉ cần triển khai một hoạt động và đăng ký nó với worker.

4. Khởi Động Worker

File worker.py đăng ký và chạy tất cả các quy trình và hoạt động. Thông thường bạn không cần thay đổi nhiều ở đây:

python Copy
async def main():
    client = await Client.connect("localhost:7233")
    worker = Worker(
        client,
        task_queue="my-task-queue",
        workflows=[AiAgentWorkflow],
        activities=[llm_chat, add, division],
    )
    print("Worker đã khởi động.")
    await worker.run()

5. Khởi Động Quy Trình (Gửi Nhiệm Vụ)

Sử dụng starter.py để gửi một nhiệm vụ lý luận của Agent và xem toàn bộ quy trình hoạt động:

python Copy
async def main():
    client = await Client.connect("localhost:7233")
    result = await client.execute_workflow(
        "AiAgentWorkflow",
        "1 chia cho 2 rồi cộng 1 là gì?",
        id=f"AI-Agent-workflow-{{uuid.uuid4()}}",
        task_queue="my-task-queue",
    )
    print("Kết quả quy trình:", result)

6. Khả Năng Quan Sát & Gỡ Rối

Với giao diện người dùng Temporal (mặc định tại http://localhost:8233), bạn có thể xem mọi đầu vào, đầu ra, thời gian và trạng thái của lý luận LLM và các cuộc gọi công cụ trong thời gian thực. Việc gỡ rối và theo dõi trở nên cực kỳ tiện lợi.

7. Mở Rộng & Sử Dụng Nâng Cao

  • Thêm bất kỳ công cụ nào bạn muốn—chỉ cần triển khai một hoạt động mới và đăng ký nó với worker.
  • Tích hợp nhiều LLM hoặc API bên ngoài hơn.
  • Sử dụng dự án này làm mẫu để nhanh chóng xây dựng hệ thống Agent AI có thể theo dõi của riêng bạn.

8. Tài Liệu Tham Khảo & Cộng Đồng

Mã nguồn đầy đủ và thêm chi tiết: GitHub Repository

Nếu bạn có bất kỳ câu hỏi nào, ý tưởng hoặc chỉ muốn trò chuyện, hãy thoải mái liên hệ! Bạn cũng có thể mở một vấn đề trên GitHub hoặc tham gia cộng đồng Temporal.

Các Thực Hành Tốt Nhất

  • Đảm bảo bạn kiểm tra các công cụ và phương pháp gọi LLM thường xuyên để phát hiện lỗi sớm.
  • Sử dụng thời gian chờ hợp lý khi gọi các hoạt động để tránh tình trạng treo.

Các Cạm Bẫy Thông Thường

  • Không kiểm tra kỹ các tham số đầu vào có thể dẫn đến lỗi khi thực hiện phép chia.
  • Quá tải worker với quá nhiều nhiệm vụ đồng thời.

Mẹo Tối Ưu Hiệu Suất

  • Sử dụng các công cụ cache để giảm thiểu thời gian gọi LLM.
  • Đảm bảo các hoạt động được tối ưu hóa để xử lý nhanh chóng.

Câu Hỏi Thường Gặp (FAQ)

Q: Tôi cần kiến thức gì để bắt đầu?
A: Bạn cần có kiến thức cơ bản về Python, Temporal và LangChain.

Q: Có thể tích hợp các LLM khác không?
A: Có, bạn có thể thêm bất kỳ LLM nào mà bạn muốn sử dụng.

Q: Làm sao để theo dõi lỗi trong quy trình?
A: Sử dụng giao diện người dùng Temporal để xem chi tiết về lỗi và thời gian thực hiện.

Hy vọng bài viết này sẽ giúp ích cho bạn trong việc phát triển hệ thống Agent AI hiệu quả và có thể theo dõi. Hãy bắt đầu ngay hôm nay!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào