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

Pakai model cheapaimodel di LangChain lewat API yang kompatibel dengan OpenAI.



LangChain terhubung ke layanan yang kompatibel dengan OpenAI lewat integrasi OpenAI-nya: `ChatOpenAI` dari `langchain-openai` di Python dan dari `@langchain/openai` di TypeScript. Arahkan ke Base URL kami dan masukkan key cheapaimodel kamu.

|          | Pengaturan LangChain | Nilai                                                                           |
| -------- | -------------------- | ------------------------------------------------------------------------------- |
| Base URL | `base_url`           | `https://api.cheapaimodel.ai/v1`                                                |
| API key  | `api_key`            | Key kamu dari halaman [API key](https://console.cheapaimodel.ai/keys) di Konsol |
| ID model | `model`              | `deepseek-v4-1-flash`, atau ID apa pun dari [katalog](/id/models)               |

## Penyiapan [#set-it-up]

Tabel di atas memakai nama di Python. Di TypeScript, namanya `configuration.baseURL`, `apiKey`, dan `model`: Base URL ditaruh di dalam `configuration`.

<Tabs items="[&#x22;Python&#x22;, &#x22;TypeScript&#x22;]">
  <Tab value="Python">
    Versi `langchain-openai` saat ini butuh Python 3.10 atau yang lebih baru.

    ```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` mengirim permintaan ke `/v1/chat/completions`. Model apa pun di [katalog](/id/models) yang mencantumkan endpoint itu bisa dipakai sebagai pengganti `deepseek-v4-1-flash`.

## Dengan init\_chat\_model [#with-init_chat_model]

Di Python, `init_chat_model` dari paket `langchain` menerima pengaturan yang sama. Tambahkan `model_provider="openai"`: tanpa itu, LangChain menebak penyedia dari ID model lalu memilih integrasi yang salah, atau tidak memilih sama sekali.

```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 belum punya model embedding. Biarkan `OpenAIEmbeddings`, atau kelas embedding apa pun yang dipakai retriever kamu, tetap memakai penyedianya sendiri, dan jangan arahkan ke Base URL kami.

## Kesalahan umum [#common-mistakes]

* **`'baseURL' does not exist in type 'ChatOpenAIFields'`** (TypeScript). `baseURL` harus ada di dalam `configuration`. Di JavaScript biasa, field di tingkat atas diabaikan tanpa error, dan permintaan terkirim ke OpenAI dengan key cheapaimodel kamu.
* **`requires the langchain-deepseek package` atau `Unable to infer model provider`** dari `init_chat_model`. Tambahkan `model_provider="openai"`.
* **`503` dengan `model_not_found` di `/v1/embeddings`.** `OPENAI_BASE_URL` atau `OPENAI_API_BASE` di-export dengan Base URL kami. `ChatOpenAI` membacanya, tapi `OpenAIEmbeddings` juga, lalu meminta model embedding ke kami. Masukkan `base_url` langsung di kode, jangan di-export.
* **Yang tercetak `<bound method BaseMessage.text ...>`.** Python kamu masih di bawah 3.10, jadi pip menginstal seri 0.3, yang `text`-nya berupa method. Perbarui Python lalu instal ulang.
* **`503` dengan `model_not_found` di `/v1/chat/completions`.** Bisa karena `model` tidak diisi, sehingga LangChain mengirim default OpenAI-nya, `gpt-3.5-turbo`, atau karena ID-nya tidak ada di katalog. Isi `model` dengan ID dari [katalog](/id/models).

Untuk kesalahan Base URL seperti lupa `/v1`, lihat [Base URL](/id/docs/api/base-url#common-mistakes).
