> ## Documentation Index
> Fetch the complete documentation index at: https://docs.neosantara.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# DSPy

> Program dan optimalkan prompt model bahasa secara algoritmik menggunakan Neosantara dan DSPy.

[DSPy](https://dspy.ai/?utm_source=neosantara-docs\&utm_medium=referral) (Declarative Self-improving Python) adalah framework pemrograman model bahasa yang menggantikan rekayasa prompt manual dengan modul deklaratif dan optimizer algoritmik. Anda mendefinisikan *Signature* input/output terstruktur dan merangkai alur kerja menggunakan modul seperti `Predict`, `ChainOfThought`, atau `ReAct`. DSPy mengoptimalkan demonstrasi few-shot dan instruksi prompt secara otomatis berdasarkan metrik evaluasi.

## Pengaturan

Instal library DSPy:

```bash theme={"theme":{"light":"ayu-dark","dark":"catppuccin-latte"}}
pip install -U dspy
```

<CodeGroup>
  ```bash Bash / zsh icon="terminal" theme={"theme":{"light":"ayu-dark","dark":"catppuccin-latte"}}
  export NEOSANTARA_API_KEY="nsk_your_api_key_here"
  ```

  ```env .env icon="file-code" theme={"theme":{"light":"ayu-dark","dark":"catppuccin-latte"}}
  NEOSANTARA_API_KEY=nsk_your_api_key_here
  ```

  ```powershell PowerShell icon="terminal" theme={"theme":{"light":"ayu-dark","dark":"catppuccin-latte"}}
  $env:NEOSANTARA_API_KEY="nsk_your_api_key_here"
  ```
</CodeGroup>

## Konfigurasi Client

Inisialisasi model bahasa menggunakan kelas `dspy.LM` dengan prefix `neosantara/<model>`.

```python theme={"theme":{"light":"ayu-dark","dark":"catppuccin-latte"}}
import os
import dspy

lm = dspy.LM(
    "neosantara/deepseek-v4.1-flash",
    api_key=os.environ["NEOSANTARA_API_KEY"]
)

dspy.configure(lm=lm)
```

## Modul Dasar: Predict dan ChainOfThought

<CodeGroup>
  ```python Simple QA (Predict) icon="python" theme={"theme":{"light":"ayu-dark","dark":"catppuccin-latte"}}
  import os
  import dspy

  lm = dspy.LM(
      "neosantara/gemini-3.8-flash",
      api_key=os.environ["NEOSANTARA_API_KEY"]
  )
  dspy.configure(lm=lm)

  class BasicQA(dspy.Signature):
      """Jawab pertanyaan teknis secara ringkas."""
      question = dspy.InputField(desc="Pertanyaan pengguna")
      answer = dspy.OutputField(desc="Jawaban ringkas dalam 1-2 kalimat")

  qa = dspy.Predict(BasicQA)
  response = qa(question="Apa perbedaan utama antara token input dan token output pada LLM gateway?")

  print(response.answer)
  ```

  ```python Penalaran (ChainOfThought) icon="python" theme={"theme":{"light":"ayu-dark","dark":"catppuccin-latte"}}
  import os
  import dspy

  lm = dspy.LM(
      "neosantara/deepseek-v4.1-flash",
      api_key=os.environ["NEOSANTARA_API_KEY"]
  )
  dspy.configure(lm=lm)

  class MathProblem(dspy.Signature):
      """Pecahkan soal matematika dengan langkah terstruktur."""
      problem = dspy.InputField()
      solution = dspy.OutputField()

  cot = dspy.ChainOfThought(MathProblem)
  result = cot(problem="Sebuah server memproses 120 request per detik. Tiap request membutuhkan 400 token input. Berapa token input per menit yang diterima server?")

  print(result.solution)
  ```
</CodeGroup>

## ReAct Agent dengan Tools

Gunakan `dspy.ReAct` untuk membuat agent yang dapat memanggil tool Python eksternal sebelum memberikan jawaban akhir.

```python theme={"theme":{"light":"ayu-dark","dark":"catppuccin-latte"}}
import os
import dspy

lm = dspy.LM(
    "openai/deepseek-v4.1-flash",
    api_key=os.environ["NEOSANTARA_API_KEY"],
    api_base="https://api.neosantara.xyz/v1"
)
dspy.configure(lm=lm)

def kalkulator_pajak(penghasilan_tahunan: float) -> str:
    """Hitung perkiraan PPh 21 sederhana untuk penghasilan tahunan."""
    if penghasilan_tahunan <= 60_000_000:
        pajak = penghasilan_tahunan * 0.05
    else:
        pajak = 3_000_000 + (penghasilan_tahunan - 60_000_000) * 0.15
    return f"Rp {pajak:,.0f}"

react = dspy.ReAct(
    "pertanyaan: str -> jawaban: str",
    tools=[kalkulator_pajak]
)

pred = react(pertanyaan="Berapa perkiraan pajak tahunan untuk penghasilan Rp 100.000.000?")
print(pred.jawaban)
```

## Langkah Berikutnya

* [Panduan Chat Completions](/id/gateway/chat-completions)
* [Katalog Model dan Harga](/id/gateway/models)
* [Integrasi Framework Any-LLM](/id/integrations/any-llm)


## Related topics

- [Chat Completions](/id/gateway/chat-completions.md)
- [Katalog Model](/id/gateway/models.md)
- [CrewAI](/id/integrations/crewai.md)
- [Ringkasan Integrasi](/id/integrations/overview.md)
