| name | langchain-core |
| description | Use this skill when working with LangChain chains, prompts, LCEL, output parsers, message history, or model integrations. Triggers when code imports from langchain_core, langchain_aws, langchain_anthropic, langchain_community, or uses the pipe operator to compose chains. Also triggers on mentions of "LCEL", "runnable", "prompt template", "output parser", or "message history". |
| metadata | {"author":"Gauravpadam"} |
LangChain Core — v1.2 Reference
Target versions: langchain>=1.2, langchain-core>=1.2, langchain-aws>=1.4, langchain-community>=0.4
Legacy note: If working in an environment with langchain-aws<1.0, use ChatBedrock (see deprecated section). Prefer ChatBedrockConverse in all new environments.
Model Initialization
AWS Bedrock (primary — langchain-aws >= 1.0)
from langchain_aws import ChatBedrockConverse, BedrockEmbeddings
llm = ChatBedrockConverse(
model="anthropic.claude-3-5-sonnet-20241022-v2:0",
region_name="us-east-1",
temperature=0,
max_tokens=4096,
)
llm = ChatBedrockConverse(
model="us.anthropic.claude-3-7-sonnet-20250219-v1:0",
region_name="us-east-1",
)
embeddings = BedrockEmbeddings(
model_id="amazon.titan-embed-text-v2:0",
region_name="us-east-1",
)
Deprecated (langchain-aws 0.2.x):
from langchain_aws import ChatBedrock
llm = ChatBedrock(model_id="...", model_kwargs={"temperature": 0})
Anthropic Direct
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-sonnet-4-6", temperature=0)
Prompt Templates
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
prompt = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant. Context: {context}"),
MessagesPlaceholder("history"),
("human", "{input}"),
])
Deprecated:
from langchain.prompts import PromptTemplate
from langchain.prompts import HumanMessagePromptTemplate
LCEL Chains (LangChain Expression Language)
Always compose with the | pipe operator. Never use LLMChain.
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
from langchain_core.runnables import RunnablePassthrough, RunnableLambda
chain = prompt | llm | StrOutputParser()
from langchain_core.runnables import RunnableParallel
chain = RunnableParallel(context=retriever, question=RunnablePassthrough()) | prompt | llm | StrOutputParser()
chain = prompt | llm | RunnableLambda(lambda x: x.content.upper())
for chunk in chain.stream({"input": "Hello"}):
print(chunk, end="", flush=True)
results = chain.batch([{"input": "Q1"}, {"input": "Q2"}])
result = await chain.ainvoke({"input": "Hello"})
Deprecated:
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
from langchain.chains import SequentialChain, SimpleSequentialChain
Output Parsers
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
from langchain_core.output_parsers import PydanticOutputParser
from pydantic import BaseModel
class Answer(BaseModel):
answer: str
confidence: float
structured_llm = llm.with_structured_output(Answer)
result: Answer = structured_llm.invoke("What is 2+2?")
parser = JsonOutputParser(pydantic_object=Answer)
chain = prompt | llm | parser
Conversation Memory / Message History
Use RunnableWithMessageHistory for stateful chains. Use LangGraph checkpointers for agents (see langgraph-agents skill).
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory
store = {}
def get_session_history(session_id: str) -> ChatMessageHistory:
if session_id not in store:
store[session_id] = ChatMessageHistory()
return store[session_id]
chain_with_history = RunnableWithMessageHistory(
chain,
get_session_history,
input_messages_key="input",
history_messages_key="history",
)
result = chain_with_history.invoke(
{"input": "Hello"},
config={"configurable": {"session_id": "user-123"}},
)
Deprecated:
from langchain.memory import ConversationBufferMemory
from langchain.memory import ConversationSummaryMemory
Runnable Configuration & Callbacks
from langchain_core.callbacks import BaseCallbackHandler
class MyHandler(BaseCallbackHandler):
def on_llm_start(self, serialized, prompts, **kwargs): ...
def on_llm_end(self, response, **kwargs): ...
result = chain.invoke(
{"input": "Hello"},
config={"callbacks": [MyHandler()], "tags": ["prod"], "metadata": {"user": "abc"}},
)
Import Path Reference (1.x)
| Component | Correct import |
|---|
ChatPromptTemplate | langchain_core.prompts |
MessagesPlaceholder | langchain_core.prompts |
StrOutputParser | langchain_core.output_parsers |
RunnablePassthrough | langchain_core.runnables |
RunnableParallel | langchain_core.runnables |
RunnableLambda | langchain_core.runnables |
RunnableWithMessageHistory | langchain_core.runnables.history |
BaseCallbackHandler | langchain_core.callbacks |
ChatBedrockConverse | langchain_aws |
BedrockEmbeddings | langchain_aws |
ChatAnthropic | langchain_anthropic |
ChatMessageHistory | langchain_community.chat_message_histories |
Broken imports removed in 1.x (do not use):
from langchain.chat_models import ... → use provider packages directly
from langchain.llms import ... → use provider packages directly
from langchain.embeddings import ... → use provider packages directly
Source: Gauravpadam/Langvibes — distributed by TomeVault.