Trí tuệ nhân tạo (AI) đang nhanh chóng vượt ra ngoài việc chỉ đơn thuần tạo văn bản hoặc nhận diện hình ảnh. Ranh giới tiếp theo là về AI có thể hành động, giải quyết vấn đề và tương tác với thế giới theo những cách có ý nghĩa. Mistral AI, một cái tên nổi bật trong lĩnh vực này, đã có một bước tiến đáng kể theo hướng này với **API Mistral Agents** của mình. Bộ công cụ mạnh mẽ này cho phép các nhà phát triển xây dựng các tác nhân AI tinh vi có thể làm được nhiều hơn các mô hình ngôn ngữ truyền thống. Về cốt lõi, API Agents được thiết kế để khắc phục những hạn chế của các mô hình AI tiêu chuẩn, vốn thường rất giỏi trong việc hiểu và tạo ngôn ngữ nhưng gặp khó khăn trong việc thực hiện hành động, ghi nhớ các tương tác trước đó một cách nhất quán hoặc sử dụng các công cụ bên ngoài một cách hiệu quả. API Mistral Agents giải quyết những thách thức này bằng cách trang bị cho các mô hình ngôn ngữ mạnh mẽ của mình các tính năng như các trình kết nối tích hợp sẵn đến nhiều công cụ khác nhau, bộ nhớ liên tục qua các cuộc hội thoại và khả năng điều phối các tác vụ phức tạp. Hãy hình dung nó giống như việc nâng cấp từ một người thủ thư rất hiểu biết chỉ có thể nói về sách, thành một đội ngũ các nhà nghiên cứu chuyên nghiệp không chỉ truy cập thông tin mà còn có thể thực hiện thí nghiệm, viết báo cáo và cộng tác với nhau. API mới này đóng vai trò là nền tảng để tạo ra các ứng dụng AI cấp doanh nghiệp có thể tự động hóa quy trình làm việc, hỗ trợ ra quyết định phức tạp và cung cấp trải nghiệm tương tác thực sự. 💡 Muốn một công cụ Kiểm thử API tuyệt vời tạo ra Tài liệu API đẹp mắt? Muốn một nền tảng Tích hợp, Tất cả trong một để Đội ngũ phát triển của bạn làm việc cùng nhau với năng suất tối đa? Apidog đáp ứng mọi yêu cầu của bạn và thay thế Postman với mức giá phải chăng hơn nhiều! [Video YouTube - Apidog là gì?] [Nút Tải ứng dụng] **Điều Gì Khiến Các Tác Nhân Mistral Trở Nên Mạnh Mẽ Đến Vậy?** [Hình ảnh liên quan đến Mistral Agents] Các mô hình ngôn ngữ truyền thống, dù giỏi trong việc tạo văn bản, thường thiếu sót khi thực hiện hành động hoặc ghi nhớ thông tin qua các tương tác kéo dài. API Mistral Agents trực tiếp giải quyết những hạn chế này bằng cách kết hợp các mô hình ngôn ngữ tiên tiến nhất của Mistral với bộ tính năng mạnh mẽ được thiết kế cho các quy trình làm việc dựa trên tác nhân. **Các Khả Năng Cốt Lõi:** Về cốt lõi, API Agents cung cấp: - **Trình kết nối tích hợp sẵn:** Đây là các công cụ được triển khai sẵn mà các tác nhân có thể gọi theo yêu cầu. Chúng bao gồm: - **Thực thi mã:** Cho phép các tác nhân chạy mã Python trong môi trường sandbox an toàn, hữu ích cho các phép tính, phân tích dữ liệu và tính toán khoa học. - **Tìm kiếm Web:** Trao quyền cho các tác nhân truy cập thông tin cập nhật từ internet, cải thiện đáng kể độ chính xác và mức độ liên quan của phản hồi. Ví dụ, trong benchmark SimpleQA, Mistral Large với tìm kiếm web đạt điểm 75%, cải thiện đáng kể so với 23% khi không có. - **Tạo ảnh:** Tận dụng các mô hình như Black Forest Lab FLUX1.1 [pro] Ultra, các tác nhân có thể tạo ra nhiều loại ảnh khác nhau cho các ứng dụng từ công cụ hỗ trợ giáo dục đến đồ họa marketing. - **Thư viện Tài liệu:** Cho phép các tác nhân truy cập và sử dụng tài liệu từ Mistral Cloud, hỗ trợ Tăng cường Sinh (Generation) được Tăng cường Truy xuất (Retrieval Augmented Generation - RAG) tích hợp để nâng cao cơ sở kiến thức của chúng. - **Công cụ MCP:** Tạo điều kiện tích hợp liền mạch với các hệ thống bên ngoài thông qua Giao Thức Ngữ Cảnh Mô Hình (Model Context Protocol), mà chúng ta sẽ khám phá chi tiết trong Phần 3. - **Bộ nhớ Liên tục:** Các tác nhân có thể duy trì ngữ cảnh qua các cuộc hội thoại, dẫn đến các tương tác dài hạn mạch lạc và có ý nghĩa hơn. - **Điều phối Tác nhân:** API cho phép điều phối nhiều tác nhân, mỗi tác nhân có thể chuyên về các tác vụ khác nhau, để cùng nhau giải quyết các vấn đề phức tạp. API này không chỉ đơn thuần là một phần mở rộng của API Hoàn thành Cuộc trò chuyện của họ; đó là một khung làm việc chuyên dụng được thiết kế đặc biệt để đơn giản hóa việc triển khai các trường hợp sử dụng dựa trên tác nhân. Nó được thiết kế để trở thành xương sống của các nền tảng tác nhân cấp doanh nghiệp, cho phép các doanh nghiệp triển khai AI theo những cách thực tế, hiệu quả và hướng hành động hơn. **Mistral Agents trong Thực tế: Các Ứng Dụng Đời Thực** Tính linh hoạt của API Agents được thể hiện qua nhiều ứng dụng sáng tạo khác nhau: - **Trợ lý Mã hóa với GitHub:** Một quy trình làm việc dựa trên tác nhân, trong đó một tác nhân giám sát một tác nhân phát triển (được cung cấp bởi DevStral) tương tác với GitHub, tự động hóa các tác vụ phát triển phần mềm với quyền truy cập đầy đủ kho lưu trữ. - **Trợ lý Vé Linear:** Một trợ lý thông minh sử dụng kiến trúc MCP đa máy chủ để chuyển đổi bản ghi cuộc gọi thành Tài liệu Yêu cầu Sản phẩm (PRD), sau đó thành các vấn đề Linear có thể hành động, và sau đó theo dõi các kết quả dự án. - **Chuyên viên Phân tích Tài chính:** Một tác nhân tư vấn điều phối nhiều máy chủ MCP để lấy các chỉ số tài chính, biên soạn thông tin chi tiết và lưu trữ kết quả một cách an toàn, thể hiện khả năng tổng hợp và phân tích dữ liệu phức tạp. - **Trợ lý Du lịch:** Một công cụ AI toàn diện giúp người dùng lên kế hoạch chuyến đi, đặt chỗ ở và quản lý các nhu cầu liên quan đến du lịch khác nhau. - **Trợ lý Dinh dưỡng:** Một người bạn đồng hành ăn kiêng được hỗ trợ bởi AI giúp người dùng đặt mục tiêu, ghi nhật ký bữa ăn, nhận gợi ý thực phẩm cá nhân hóa, theo dõi tiến trình hàng ngày và tìm nhà hàng phù hợp với mục tiêu dinh dưỡng của họ. **Bộ Nhớ, Ngữ Cảnh và Các Cuộc Hội Thoại Có Trạng Thái** Một nền tảng của API Agents là hệ thống quản lý cuộc hội thoại mạnh mẽ của nó. Nó đảm bảo rằng các tương tác có trạng thái, nghĩa là ngữ cảnh được giữ lại theo thời gian. Các nhà phát triển có thể bắt đầu cuộc hội thoại theo hai cách chính: 1. **Với một Tác nhân:** Bằng cách chỉ định một `agent_id`, bạn tận dụng các khả năng, công cụ và hướng dẫn đã được cấu hình sẵn của một tác nhân cụ thể. 2. **Truy cập Trực tiếp:** Bạn có thể bắt đầu một cuộc hội thoại bằng cách trực tiếp chỉ định mô hình và các tham số hoàn thành, cung cấp quyền truy cập nhanh vào các trình kết nối tích hợp sẵn mà không cần một tác nhân được xác định trước. Mỗi cuộc hội thoại duy trì lịch sử có cấu trúc thông qua "các mục nhập cuộc hội thoại" (conversation entries), đảm bảo ngữ cảnh được bảo toàn tỉ mỉ. Trạng thái này cho phép các nhà phát triển xem các cuộc hội thoại trước đó, tiếp tục bất kỳ tương tác nào một cách liền mạch, hoặc rẽ nhánh để bắt đầu các đường dẫn hội thoại mới từ bất kỳ điểm nào trong lịch sử. Hơn nữa, API hỗ trợ đầu ra truyền trực tuyến (streaming), cho phép cập nhật theo thời gian thực và tương tác động. **Điều Phối Tác Nhân: Sức Mạnh của Sự Cộng Tác** Sức mạnh khác biệt thực sự của API Agents xuất hiện ở khả năng điều phối nhiều tác nhân. Đây không phải là về một AI nguyên khối duy nhất; mà là về một bản giao hưởng của các tác nhân chuyên biệt làm việc cùng nhau. Thông qua điều phối động, các tác nhân có thể được thêm hoặc xóa khỏi một cuộc hội thoại khi cần, mỗi tác nhân đóng góp kỹ năng độc đáo của mình để giải quyết các khía cạnh khác nhau của một vấn đề phức tạp. Để xây dựng quy trình làm việc dựa trên tác nhân với các chuyển giao (handoffs): 1. **Tạo Tác nhân:** Xác định và tạo tất cả các tác nhân cần thiết, mỗi tác nhân được trang bị các công cụ, mô hình và hướng dẫn cụ thể phù hợp với vai trò của mình. 2. **Xác định Chuyển giao:** Chỉ định tác nhân nào có thể ủy quyền tác vụ cho tác nhân khác. Ví dụ, một tác nhân dịch vụ khách hàng chính có thể chuyển giao một truy vấn kỹ thuật cho một tác nhân xử lý sự cố chuyên biệt hoặc một yêu cầu thanh toán cho một tác nhân tài chính. Các chuyển giao này cho phép một chuỗi hành động liền mạch. Một yêu cầu đơn lẻ của người dùng có thể kích hoạt một loạt các tác vụ trên nhiều tác nhân, mỗi tác nhân tự động xử lý phần được chỉ định của mình. Cách tiếp cận cộng tác này mở khóa hiệu quả và năng suất chưa từng có trong việc giải quyết vấn đề cho các ứng dụng đời thực phức tạp. **Cách Sử Dụng Cơ Bản API Mistral Agents** Sau khi hiểu về các khả năng của API Mistral Agents, hãy cùng khám phá cách tương tác với nó. API giới thiệu ba đối tượng chính mới: - **Agents:** Đây là các cấu hình tăng cường khả năng của mô hình. Định nghĩa một tác nhân bao gồm các giá trị được chọn trước như mô hình sử dụng, các công cụ có thể truy cập, hướng dẫn hệ thống (prompts) và các tham số hoàn thành mặc định. - **Conversation:** Đối tượng này đại diện cho lịch sử tương tác và các sự kiện trước đó với một trợ lý. Nó bao gồm tin nhắn người dùng, phản hồi của trợ lý và bản ghi thực thi công cụ. - **Entry:** Một mục nhập là một hành động hoặc sự kiện riêng lẻ trong một cuộc hội thoại, được tạo bởi người dùng hoặc trợ lý. Nó cung cấp một cách linh hoạt và biểu cảm để biểu diễn các tương tác, cho phép kiểm soát chi tiết hơn trong việc mô tả các sự kiện. Đáng chú ý là bạn có thể tận dụng nhiều tính năng, như các cuộc hội thoại có trạng thái và trình kết nối tích hợp sẵn, mà không cần tạo và tham chiếu rõ ràng một đối tượng "Tác nhân" chính thức trước. Điều này mang lại sự linh hoạt cho các trường hợp sử dụng đơn giản hơn. **Tạo một Tác nhân** Để xác định một tác nhân chuyên biệt, bạn thực hiện một yêu cầu đến API chỉ định một số tham số: - `model`: Mô hình Mistral cơ bản (ví dụ: `mistral-medium-latest`). - `name`: Tên mô tả cho tác nhân của bạn. - `description`: Mô tả ngắn gọn về mục đích của tác nhân hoặc tác vụ nó được thiết kế để hoàn thành. - `instructions` (tùy chọn): Prompt hệ thống hướng dẫn hành vi và phản hồi của tác nhân. - `tools` (tùy chọn): Danh sách các công cụ tác nhân có thể sử dụng. Các loại công cụ bao gồm: - `function`: Các công cụ do người dùng định nghĩa, tương tự như gọi hàm tiêu chuẩn trong hoàn thành cuộc trò chuyện. - `web_search` / `web_search_premium`: Các công cụ tìm kiếm web tích hợp sẵn. - `code_interpreter`: Công cụ tích hợp sẵn để thực thi mã. - `image_generation`: Công cụ tích hợp sẵn để tạo ảnh. - `completion_args` (tùy chọn): Các đối số sampler hoàn thành cuộc trò chuyện tiêu chuẩn như temperature, top_p, v.v. Đây là một ví dụ yêu cầu cURL để tạo một tác nhân đơn giản: ```bash curl --location "https://api.mistral.ai/v1/agents" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $MISTRAL_API_KEY" \ --data '{ "model": "mistral-medium-latest", "name": "Simple Agent", "description": "A simple Agent with persistent state." }' ``` **Cập nhật một Tác nhân** Các tác nhân có thể được cập nhật sau khi tạo. Các đối số giống như khi tạo. Thao tác này tạo ra một đối tượng tác nhân mới với các cài đặt đã cập nhật, cho phép quản lý phiên bản các tác nhân của bạn một cách hiệu quả. ```bash curl --location "https://api.mistral.ai/v1/agents/" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $MISTRAL_API_KEY" \ --data '{ "completion_args": { "temperature": 0.3, "top_p": 0.95 }, "description": "An edited simple agent." }' ``` **Quản lý Cuộc Hội thoại** Sau khi một tác nhân được tạo (hoặc nếu bạn đang sử dụng truy cập trực tiếp), bạn có thể bắt đầu các cuộc hội thoại. **Bắt đầu một Cuộc Hội thoại:** Bạn cần cung cấp: - `agent_id`: ID của tác nhân (nếu sử dụng tác nhân được xác định trước). - `inputs`: Tin nhắn ban đầu, có thể là một chuỗi đơn giản hoặc một danh sách các đối tượng tin nhắn. Yêu cầu này trả về một `conversation_id`. Ví dụ (đầu vào chuỗi đơn giản): ```bash curl --location "https://api.mistral.ai/v1/conversations" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $MISTRAL_API_KEY" \ --data '{ "inputs": "Who is Albert Einstein?", "stream": false, "agent_id": "" }' ``` **Tiếp tục một Cuộc Hội thoại:** Để thêm vào một cuộc hội thoại hiện có: - `conversation_id`: ID của cuộc hội thoại cần tiếp tục. - `inputs`: Tin nhắn hoặc phản hồi tiếp theo (chuỗi hoặc danh sách tin nhắn). Mỗi lần tiếp tục cung cấp một `conversation_id` mới nếu trạng thái được lưu trữ. Bạn có thể chọn không lưu trữ trên đám mây bằng cách đặt `store=False`. Tham số `handoff_execution` kiểm soát cách các chuyển giao tác nhân được quản lý: `server` (mặc định, được xử lý bởi đám mây của Mistral) hoặc `client` (phản hồi được trả về cho người dùng để quản lý chuyển giao). Ví dụ: ```bash curl --location "https://api.mistral.ai/v1/conversations/" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $MISTRAL_API_KEY" \ --data '{ "inputs": "Translate to French.", "stream": false, "store": true, "handoff_execution": "server" }' ``` **Truyền Trực tuyến Đầu ra** Đối với các tương tác theo thời gian thực, cả việc bắt đầu và tiếp tục cuộc hội thoại đều có thể được truyền trực tuyến bằng cách đặt `stream: true` và đảm bảo header `Accept` là `text/event-stream`. ```bash curl --location "https://api.mistral.ai/v1/conversations" \ --header 'Content-Type: application/json' \ --header 'Accept: text/event-stream' \ --header "Authorization: Bearer $MISTRAL_API_KEY" \ --data '{ "inputs": "Who is Albert Einstein?", "stream": true, "agent_id": "ag_06811008e6e07cb48000fd3f133e1771" }' ``` Khi truyền trực tuyến, bạn sẽ nhận được nhiều loại sự kiện khác nhau cho biết tiến trình và nội dung của phản hồi, chẳng hạn như: - `conversation.response.started`: Đánh dấu sự bắt đầu của phản hồi cuộc hội thoại. - `message.output.delta`: Một phần nội dung (token) cho phản hồi của mô hình. - `tool.execution.started` / `tool.execution.done`: Chỉ ra vòng đời của một lần thực thi công cụ. - `agent.handoff.started` / `agent.handoff.done`: Báo hiệu sự bắt đầu và kết thúc của một lần chuyển giao tác nhân. Những thao tác cơ bản này tạo thành nền tảng để xây dựng các ứng dụng động và tương tác với các tác nhân Mistral. **Tích hợp API Mistral Agents với Giao Thức Ngữ Cảnh Mô Hình (MCP)** Trong khi các trình kết nối tích hợp sẵn mang lại sức mạnh đáng kể, khả năng mở rộng thực sự của Mistral Agents tỏa sáng khi kết hợp với Giao Thức Ngữ Cảnh Mô Hình (MCP). **MCP là gì?** Giao Thức Ngữ Cảnh Mô Hình (MCP) là một tiêu chuẩn mở được thiết kế để hợp lý hóa việc tích hợp các mô hình AI với các nguồn dữ liệu, công cụ và API bên ngoài đa dạng. Nó cung cấp một giao diện chuẩn hóa, an toàn cho phép các hệ thống AI truy cập và sử dụng thông tin ngữ cảnh thực tế một cách hiệu quả. Thay vì xây dựng và duy trì nhiều tích hợp tùy chỉnh riêng biệt, MCP cung cấp một cách thống nhất để các mô hình AI kết nối với dữ liệu và hệ thống trực tiếp, dẫn đến các phản hồi phù hợp, chính xác và mạnh mẽ hơn. Để biết thông tin chi tiết, tham khảo tài liệu chính thức của Model Context Protocol. SDK Python của Mistral cung cấp các cơ chế tích hợp liền mạch để kết nối các tác nhân với Máy khách MCP. Điều này cho phép các tác nhân của bạn tương tác với bất kỳ dịch vụ hoặc nguồn dữ liệu nào hiển thị giao diện MCP, cho dù đó là một công cụ cục bộ, một API bên thứ ba hay một hệ thống doanh nghiệp độc quyền. [Hình ảnh liên quan đến tích hợp MCP] Chúng ta sẽ khám phá ba kịch bản phổ biến để sử dụng MCP với Mistral Agents: máy chủ MCP cục bộ, máy chủ MCP từ xa không xác thực và máy chủ MCP từ xa có xác thực. Tất cả các ví dụ sẽ sử dụng mã Python bất đồng bộ. **Kịch bản 1: Sử Dụng Máy Chủ MCP Cục Bộ** Hãy tưởng tượng bạn có một script hoặc dịch vụ cục bộ (ví dụ: một nhà cung cấp thông tin thời tiết tùy chỉnh) mà bạn muốn tác nhân Mistral của mình tương tác. **Bước 1: Khởi Tạo Máy Khách Mistral và Thiết Lập** Nhập các module cần thiết từ `mistralai` và `mcp`. Điều này bao gồm `Mistral`, `RunContext`, `StdioServerParameters` (cho các máy chủ MCP dựa trên tiến trình cục bộ) và `MCPClientSTDIO`. ```python import asyncio import os from pathlib import Path from mistralai import Mistral from mistralai.extra.run.context import RunContext from mcp import StdioServerParameters from mistralai.extra.mcp.stdio import MCPClientSTDIO from mistralai.types import BaseModel cwd = Path(__file__).parent MODEL = "mistral-medium-latest" # Or your preferred model async def main_local_mcp(): api_key = os.environ["MISTRAL_API_KEY"] client = Mistral(api_key=api_key) # Define parameters for the local MCP server (e.g., running a Python script) server_params = StdioServerParameters( command="python", args=[str((cwd / "mcp_servers/stdio_server.py").resolve())], # Path to your MCP server script env=None, ) # Create an agent weather_agent = client.beta.agents.create( model=MODEL, name="Local Weather Teller", instructions="You can tell the weather using a local MCP tool.", description="Fetches weather from a local source.", ) # Define expected output format (optional, but good for structured data) class WeatherResult(BaseModel): user: str location: str temperature: float # Create a Run Context async with RunContext( agent_id=weather_agent.id, output_format=WeatherResult, # Optional: For structured output continue_on_fn_error=True, ) as run_ctx: # Create and register MCP client mcp_client = MCPClientSTDIO(stdio_params=server_params) await run_ctx.register_mcp_client(mcp_client=mcp_client) # Example of registering a local Python function as a tool import random @run_ctx.register_func def get_location(name: str) -> str: """Function to get a random location for a user.""" return random.choice(["New York", "London", "Paris"]) # Run the agent run_result = await client.beta.conversations.run_async( run_ctx=run_ctx, inputs="Tell me the weather in John's location currently.", ) print("Local MCP - All run entries:") for entry in run_result.output_entries: print(f"{entry}\n") if run_result.output_as_model: print(f"Local MCP - Final model output: {run_result.output_as_model}") else: print(f"Local MCP - Final text output: {run_result.output_as_text}") # if __name__ == "__main__": # asyncio.run(main_local_mcp()) ``` Trong thiết lập này, `stdio_server.py` sẽ là script của bạn triển khai logic máy chủ MCP, giao tiếp qua stdin/stdout. `RunContext` quản lý tương tác, và `register_mcp_client` làm cho máy chủ MCP cục bộ khả dụng như một công cụ cho tác nhân. Bạn cũng có thể đăng ký các hàm Python cục bộ trực tiếp bằng cách sử dụng `@run_ctx.register_func`. **Truyền Trực tuyến với Máy Chủ MCP Cục Bộ:** Để truyền trực tuyến, sử dụng `client.beta.conversations.run_stream_async` và xử lý các sự kiện khi chúng đến: ```python # Inside RunContext, after MCP client registration # events = await client.beta.conversations.run_stream_async( # run_ctx=run_ctx, # inputs="Tell me the weather in John's location currently, stream style.", # ) # streamed_run_result = None # async for event in events: # if isinstance(event, RunResult): # Assuming RunResult is defined or imported # streamed_run_result = event # else: # print(f"Stream event: {event}") # if streamed_run_result: # # Process streamed_run_result # pass ``` **Kịch bản 2: Sử Dụng Máy Chủ MCP Từ Xa Không Xác Thực** Nhiều dịch vụ công cộng hoặc nội bộ có thể hiển thị giao diện MCP qua HTTP/SSE mà không yêu cầu xác thực. ```python from mistralai.extra.mcp.sse import MCPClientSSE, SSEServerParams async def main_remote_no_auth_mcp(): api_key = os.environ["MISTRAL_API_KEY"] client = Mistral(api_key=api_key) # Define the URL for the remote MCP server (e.g., Semgrep's public MCP) server_url = "https://mcp.semgrep.ai/sse" mcp_client = MCPClientSSE(sse_params=SSEServerParams(url=server_url, timeout=100)) async with RunContext( model=MODEL, # Can use agent_id too if an agent is pre-created ) as run_ctx: await run_ctx.register_mcp_client(mcp_client=mcp_client) run_result = await client.beta.conversations.run_async( run_ctx=run_ctx, inputs="Can you write a hello_world.py file and then check it for security vulnerabilities using available tools?", ) print("Remote No-Auth MCP - All run entries:") for entry in run_result.output_entries: print(f"{entry}\n") print(f"Remote No-Auth MCP - Final Response: {run_result.output_as_text}") # if __name__ == "__main__": # asyncio.run(main_remote_no_auth_mcp()) ``` Ở đây, `MCPClientSSE` được sử dụng với `SSEServerParams` trỏ đến URL từ xa. Tác nhân sau đó có thể tận dụng các công cụ được cung cấp bởi máy chủ MCP từ xa này. Truyền trực tuyến tuân theo cùng một mẫu như ví dụ MCP cục bộ, sử dụng `run_stream_async`. **Kịch bản 3: Sử Dụng Máy Chủ MCP Từ Xa Có Xác Thực (OAuth)** Đối với các dịch vụ yêu cầu xác thực OAuth2 (như Linear, Jira, v.v.), quá trình này bao gồm thêm một vài bước để xử lý luồng ủy quyền. ```python from http.server import BaseHTTPRequestHandler, HTTPServer import threading import webbrowser from mistralai.extra.mcp.auth import build_oauth_params CALLBACK_PORT = 16010 # Ensure this port is free # Callback server setup (simplified from source) def run_callback_server_util(callback_func, auth_response_dict): class OAuthCallbackHandler(BaseHTTPRequestHandler): def do_GET(self): if "/callback" in self.path or "/oauth/callback" in self.path: # More robust check auth_response_dict["url"] = self.path self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write(b"Authentication successful. You may close this window.") callback_func() # Signal completion threading.Thread(target=self.server.shutdown).start() else: self.send_response(404) self.end_headers() server_address = ("localhost", CALLBACK_PORT) httpd = HTTPServer(server_address, OAuthCallbackHandler) threading.Thread(target=httpd.serve_forever, daemon=True).start() # Use daemon thread redirect_url = f"http://localhost:{CALLBACK_PORT}/oauth/callback" return httpd, redirect_url async def main_remote_auth_mcp(): api_key = os.environ["MISTRAL_API_KEY"] client = Mistral(api_key=api_key) server_url = "https://mcp.linear.app/sse" # Example: Linear MCP mcp_client_auth = MCPClientSSE(sse_params=SSEServerParams(url=server_url)) callback_event = asyncio.Event() event_loop = asyncio.get_event_loop() auth_response_holder = {"url": ""} if await mcp_client_auth.requires_auth(): httpd, redirect_url = run_callback_server_util( lambda: event_loop.call_soon_threadsafe(callback_event.set), auth_response_holder ) try: oauth_params = await build_oauth_params(mcp_client_auth.base_url, redirect_url=redirect_url) mcp_client_auth.set_oauth_params(oauth_params=oauth_params) login_url, state = await mcp_client_auth.get_auth_url_and_state(redirect_url) print(f"Please go to this URL and authorize: {login_url}") webbrowser.open(login_url, new=2) await callback_event.wait() # Wait for OAuth callback token = await mcp_client_auth.get_token_from_auth_response( auth_response_holder["url"], redirect_url=redirect_url, state=state ) mcp_client_auth.set_auth_token(token) print("Authentication successful.") except Exception as e: print(f"Error during authentication: {e}") return # Exit if auth fails finally: if 'httpd' in locals() and httpd: httpd.shutdown() httpd.server_close() async with RunContext(model=MODEL) as run_ctx: # Or agent_id await run_ctx.register_mcp_client(mcp_client=mcp_client_auth) run_result = await client.beta.conversations.run_async( run_ctx=run_ctx, inputs="Tell me which projects do I have in my Linear workspace?", ) print(f"Remote Auth MCP - Final Response: {run_result.output_as_text}") # if __name__ == "__main__": # asyncio.run(main_remote_auth_mcp()) ``` Điều này bao gồm việc thiết lập một máy chủ HTTP cục bộ để bắt lấy chuyển hướng OAuth, hướng dẫn người dùng qua trang ủy quyền của nhà cung cấp, trao đổi mã nhận được để lấy mã truy cập, và sau đó cấu hình `MCPClientSSE` với mã này. Sau khi được xác thực, tác nhân có thể tương tác với dịch vụ MCP được bảo vệ. Truyền trực tuyến một lần nữa tuân theo mẫu đã thiết lập. **Kết Luận: Tương Lai Dựa Trên Tác Nhân và Kết Nối Liên Thông** API Mistral Agents, đặc biệt khi được tăng cường bởi Giao Thức Ngữ Cảnh Mô Hình, cung cấp một nền tảng mạnh mẽ và linh hoạt để xây dựng các ứng dụng AI thế hệ tiếp theo. Bằng cách cho phép các tác nhân không chỉ suy luận và giao tiếp mà còn tương tác với một hệ sinh thái rộng lớn gồm các công cụ, nguồn dữ liệu và dịch vụ, các nhà phát triển có thể tạo ra các hệ thống thực sự thông minh có khả năng giải quyết các vấn đề phức tạp trong thế giới thực. Cho dù bạn đang tự động hóa các quy trình làm việc phức tạp, cung cấp hỗ trợ theo ngữ cảnh sâu sắc, hay tiên phong các hình thức cộng tác mới giữa con người và AI, sự kết hợp giữa Mistral Agents và MCP cung cấp bộ công cụ nền tảng cho tương lai thú vị này. Khi tiêu chuẩn MCP được áp dụng rộng rãi hơn, tiềm năng tạo ra các tác nhân AI kết nối liên thông và có khả năng cao sẽ chỉ tiếp tục tăng trưởng. 💡 Muốn một công cụ Kiểm thử API tuyệt vời tạo ra Tài liệu API đẹp mắt? Muốn một nền tảng Tích hợp, Tất cả trong một để Đội ngũ phát triển của bạn làm việc cùng nhau với năng suất tối đa? Apidog đáp ứng mọi yêu cầu của bạn và thay thế Postman với mức giá phải chăng hơn nhiều! [Video YouTube - Cách Tạo Tài liệu API Công Khai với APIDog?] [Nút Tải ứng dụng]