# LangChain (/vi/docs/guides/langchain)

Dùng mô hình của cheapaimodel trong LangChain qua API tương thích OpenAI.



LangChain kết nối với các dịch vụ tương thích OpenAI qua gói tích hợp OpenAI: `ChatOpenAI` từ `langchain-openai` trong Python và từ `@langchain/openai` trong TypeScript. Trỏ `ChatOpenAI` tới Base URL của chúng tôi và truyền key cheapaimodel của bạn.

|            | Thiết lập LangChain | Giá trị                                                                                    |
| ---------- | ------------------- | ------------------------------------------------------------------------------------------ |
| Base URL   | `base_url`          | `https://api.cheapaimodel.ai/v1`                                                           |
| API key    | `api_key`           | Key của bạn từ trang [API key](https://console.cheapaimodel.ai/keys) trong bảng điều khiển |
| ID mô hình | `model`             | `deepseek-v4-1-flash`, hoặc bất kỳ ID nào trong [danh mục](/vi/models)                     |

## Thiết lập [#set-it-up]

Bảng trên dùng tên trong Python. Trong TypeScript, các tên này là `configuration.baseURL`, `apiKey` và `model`: Base URL nằm bên trong `configuration`.

<Tabs items="[&#x22;Python&#x22;, &#x22;TypeScript&#x22;]">
  <Tab value="Python">
    Phiên bản `langchain-openai` hiện tại cần Python 3.10 trở lên.

    ```bash title="Terminal"
    pip install -U langchain-openai
    ```

    ```python title="main.py"
    import os
    from langchain_openai import ChatOpenAI

    llm = ChatOpenAI(
        model="deepseek-v4-1-flash",
        base_url="https://api.cheapaimodel.ai/v1",
        api_key=os.environ["CHEAPAIMODEL_API_KEY"],
    )

    response = llm.invoke("Explain recursion in one sentence.")
    print(response.text)

    # Streaming
    for chunk in llm.stream("Write a haiku about the sea."):
        print(chunk.text, end="", flush=True)
    ```
  </Tab>

  <Tab value="TypeScript">
    ```bash title="Terminal"
    npm install @langchain/openai @langchain/core
    ```

    ```ts title="main.ts"
    import { ChatOpenAI } from "@langchain/openai";

    const llm = new ChatOpenAI({
      model: "deepseek-v4-1-flash",
      apiKey: process.env.CHEAPAIMODEL_API_KEY,
      configuration: {
        baseURL: "https://api.cheapaimodel.ai/v1",
      },
    });

    const response = await llm.invoke("Explain recursion in one sentence.");
    console.log(response.text);

    // Streaming
    const stream = await llm.stream("Write a haiku about the sea.");
    for await (const chunk of stream) {
      process.stdout.write(chunk.text);
    }
    ```
  </Tab>
</Tabs>

`ChatOpenAI` gửi yêu cầu tới `/v1/chat/completions`. Mọi mô hình trong [danh mục](/vi/models) có liệt kê endpoint đó đều dùng được thay cho `deepseek-v4-1-flash`.

## Với init\_chat\_model [#with-init_chat_model]

Trong Python, `init_chat_model` từ gói `langchain` nhận cùng các thiết lập này. Truyền `model_provider="openai"`: nếu thiếu, LangChain sẽ đoán nhà cung cấp từ ID mô hình rồi chọn sai tích hợp, hoặc không chọn được tích hợp nào.

```python title="main.py"
import os
from langchain.chat_models import init_chat_model

llm = init_chat_model(
    "deepseek-v4-1-flash",
    model_provider="openai",
    base_url="https://api.cheapaimodel.ai/v1",
    api_key=os.environ["CHEAPAIMODEL_API_KEY"],
)
```

## Embeddings [#embeddings]

cheapaimodel chưa có mô hình embeddings. Hãy để `OpenAIEmbeddings` (hoặc class embeddings mà retriever của bạn đang dùng) tiếp tục gọi nhà cung cấp hiện tại, đừng trỏ sang Base URL của chúng tôi.

## Lỗi thường gặp [#common-mistakes]

* **`'baseURL' does not exist in type 'ChatOpenAIFields'`** (TypeScript). `baseURL` phải nằm bên trong `configuration`. JavaScript thuần bỏ qua trường ở cấp ngoài cùng mà không báo lỗi, và yêu cầu sẽ được gửi tới OpenAI kèm key cheapaimodel của bạn.
* **`requires the langchain-deepseek package` hoặc `Unable to infer model provider`** từ `init_chat_model`. Thêm `model_provider="openai"`.
* **`503` kèm `model_not_found` ở `/v1/embeddings`.** `OPENAI_BASE_URL` hoặc `OPENAI_API_BASE` đang được export với Base URL của chúng tôi. Không chỉ `ChatOpenAI` mà `OpenAIEmbeddings` cũng đọc biến này, nên yêu cầu embeddings cũng bị gửi sang chúng tôi. Hãy truyền `base_url` trong code thay vì export biến môi trường.
* **In ra `<bound method BaseMessage.text ...>`.** Python của bạn cũ hơn 3.10, nên pip đã cài bản 0.3.x, trong đó `text` là method. Hãy nâng cấp Python rồi cài lại.
* **`503` kèm `model_not_found` ở `/v1/chat/completions`.** Có thể thiếu `model`, nên LangChain gửi giá trị mặc định của OpenAI là `gpt-3.5-turbo`, hoặc ID không có trong danh mục. Đặt `model` thành một ID trong [danh mục](/vi/models).

Với các lỗi Base URL như thiếu `/v1`, xem [Base URL](/vi/docs/api/base-url#common-mistakes).
