Environment Setup
pip install langchain langchain-openai "langserve[all]" uvicorn[standard]
Export your OpenAI key or pass it explicitly:
import os
os.environ["OPENAI_API_KEY"] = "sk-..."
Step 1: Bare-bones Model Call
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage
llm = ChatOpenAI(model="gpt-4")
messages = [
SystemMessage(content="You are a concise translator."),
HumanMessage(content="Hello, how are you?")
]
raw = llm.invoke(messages)
print(raw.content) # Bonjour, comment ça va ?
Step 2: Parsing the Output
from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()
translation = parser.invoke(raw)
print(translation) # Bonjour, comment ça va ?
Chain model and parser in one line:
chain = llm | parser
chain.invoke(messages)
Step 3: Prompt Templates
Create a reusable prompt that accepts dynamic language and text:
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "Translate the following text into {target_lang}."),
("user", "{source_text}")
])
prompt.format_messages(target_lang="French", source_text="Good morning")
# -> [SystemMessage(...), HumanMessage(...)]
Step 4: LCEL Pipeline
Combine prompt, model, and parser into a single runnable:
translate_chain = prompt | llm | parser
result = translate_chain.invoke({
"target_lang": "Spanish",
"source_text": "Where is the library?"
})
print(result) # ¿Dónde está la biblioteca?
Streaming is automatic:
for chunk in translate_chain.stream({"target_lang": "German", "source_text": "Thank you"}):
print(chunk, end="", flush=True)
Step 5: REST API with LangServe
Save the follownig as app.py:
from fastapi import FastAPI
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langserve import add_routes
prompt = ChatPromptTemplate.from_messages([
("system", "Translate the following text into {target_lang}."),
("user", "{source_text}")
])
model = ChatOpenAI()
parser = StrOutputParser()
chain = prompt | model | parser
app = FastAPI(
title="Mini Translator API",
version="1.0",
description="A minimal LangServe deployment"
)
add_routes(app, chain, path="/translate")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
Start the server:
python app.py
Step 6: Client Usage
Interactive playground: open http://localhost:8000/translate/playground
Programmatic client:
from langserve import RemoteRunnable
client = RemoteRunnable("http://localhost:8000/translate")
print(client.invoke({
"target_lang": "Japanese",
"source_text": "See you tomorrow"
}))
# また明日
Async and streaming are supported out of the box:
import asyncio
async def main():
async for tok in client.astream({"target_lang": "Italian", "source_text": "Good night"}):
print(tok, end="")
asyncio.run(main())
```,