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

# LangChain

> Standart OpenAI uyumlu chat ve embeddings kullanarak TokenLab'yı LangChain ile entegre edin

## Genel Bakış

TokenLab, standart OpenAI uyumlu chat ve embeddings yüzeyinde kaldığınızda LangChain'in `ChatOpenAI` ve `OpenAIEmbeddings` entegrasyonlarıyla iyi çalışır.

<Note>
  Güncel LangChain dokümantasyonu, `ChatOpenAI`'ın resmi OpenAI uyumlu request/response biçimlerini hedeflediğini belirtir. Sağlayıcıya özgü, standart dışı response alanlarına ihtiyacınız varsa, `ChatOpenAI`'a güvenmek yerine sağlayıcıya özgü bir LangChain entegrasyonu kullanın.
</Note>

<Note>
  **Tür**: Framework veya platform

  **Birincil yol**: OpenAI uyumlu standart surface

  **Destek seviyesi**: Standart surface desteklenir
</Note>

Bu sayfa bilinçli olarak yalnızca standart OpenAI uyumlu LangChain surface’ini kapsar; bunun ötesindeki sağlayıcıya özgü LangChain özelliklerini kapsamaz.

## Kurulum

```bash theme={null}
pip install langchain langchain-openai langchain-community faiss-cpu
```

## Temel Yapılandırma

```python theme={null}
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="gpt-5.4",
    api_key="sk-your-tokenlab-key",
    base_url="https://api.tokenlab.sh/v1",
)

response = llm.invoke("Explain TokenLab in one sentence.")
print(response.content)
```

## Farklı Modelleri Kullanma

```python theme={null}
from langchain_openai import ChatOpenAI

gpt = ChatOpenAI(
    model="gpt-5.4",
    api_key="sk-your-key",
    base_url="https://api.tokenlab.sh/v1",
)

claude = ChatOpenAI(
    model="claude-sonnet-4-6",
    api_key="sk-your-key",
    base_url="https://api.tokenlab.sh/v1",
)

gemini = ChatOpenAI(
    model="gemini-3.5-flash",
    api_key="sk-your-key",
    base_url="https://api.tokenlab.sh/v1",
)

deepseek = ChatOpenAI(
    model="deepseek-r1",
    api_key="sk-your-key",
    base_url="https://api.tokenlab.sh/v1",
)
```

## Mesaj Geçmişi

```python theme={null}
from langchain_core.messages import HumanMessage, SystemMessage

messages = [
    SystemMessage(content="You are a helpful assistant."),
    HumanMessage(content="What is the capital of France?")
]

response = llm.invoke(messages)
print(response.content)
```

## Streaming

```python theme={null}
for chunk in llm.stream("Write a short poem about coding."):
    if chunk.content:
        print(chunk.content, end="", flush=True)
```

## Embeddings

```python theme={null}
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small",
    api_key="sk-your-key",
    base_url="https://api.tokenlab.sh/v1",
)

vector = embeddings.embed_query("Hello world")
print(vector[:5])
```

## Basit RAG Örneği

```python theme={null}
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough

embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small",
    api_key="sk-your-key",
    base_url="https://api.tokenlab.sh/v1",
)

texts = [
    "TokenLab provides one API for many AI models.",
    "TokenLab supports OpenAI-compatible integrations."
]

vectorstore = FAISS.from_texts(texts, embeddings)
retriever = vectorstore.as_retriever()

prompt = ChatPromptTemplate.from_template(
    "Answer using the context below.\\n\\nContext:\\n{context}\\n\\nQuestion:\\n{question}"
)

rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
)

response = rag_chain.invoke("What does TokenLab provide?")
print(response.content)
```

## Agent'lar

<Note>
  Yeni agentic projelerde LangChain, uzun süre çalışan ve tool kullanan workflow'lar üzerinde daha açık kontrol için LangGraph'ı değerlendirmenizi önerir.
</Note>

```python theme={null}
from langchain.agents import create_openai_tools_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool

@tool
def search(query: str) -> str:
    """Search for information."""
    return f"Search results for: {query}"

tools = [search]

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful assistant with access to tools."),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}")
])

agent = create_openai_tools_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools)

result = executor.invoke({"input": "Search for TokenLab pricing"})
print(result["output"])
```

## En İyi Uygulamalar

<AccordionGroup>
  <Accordion title="`base_url` değerini açıkça iletin">
    En güvenilir TokenLab kurulumu, eski environment variable alias'larına bağlı kalmak yerine `base_url="https://api.tokenlab.sh/v1"` değerini doğrudan `ChatOpenAI` ve `OpenAIEmbeddings`'e iletmektir.
  </Accordion>

  <Accordion title="Burada standart özellikleri kullanın">
    `ChatOpenAI` üzerinde standart chat, tool calling, streaming ve embeddings özelliklerine bağlı kalın. Sağlayıcıya özgü ek özelliklere ihtiyacınız varsa, sağlayıcının kendi LangChain entegrasyonuna geçin.
  </Accordion>

  <Accordion title="Retrieval için daha ucuz modeller kullanın">
    Retrieval için `text-embedding-3-small` gibi embedding modelleri kullanın ve daha güçlü chat modellerini son yanıt adımı için saklayın.
  </Accordion>
</AccordionGroup>
